Commit 93a81e47 authored by Kyle Horimoto's avatar Kyle Horimoto Committed by Kyle Horimoto

[CrOS MultiDevice] Serve relevant Mojo JS files from chrome://resources.

The MultiDevice setup flow utilizes four Mojo JS files: time.mojom.js,
device_sync.mojom.js, multidevice_setup.mojom.js, and
multidevice_setup_constants.mojom.js.

Previously, these files were added directly to the data source for
chrome://multidevice-setup. Now that this UI is being shared between
both chrome://multidevice-setup and chrome://oobe, the resources are
moved to a shared location; namely, chrome://resources/js/*.

Bug: 884048
Change-Id: Iea5806dc526482bf7c8904ad71512267055d48c7
Reviewed-on: https://chromium-review.googlesource.com/1231920Reviewed-by: default avatarDemetrios Papadopoulos <dpapad@chromium.org>
Reviewed-by: default avatarKen Rockot <rockot@chromium.org>
Reviewed-by: default avatarSteven Bennetts <stevenjb@chromium.org>
Cr-Commit-Position: refs/heads/master@{#593376}
parent 76751481
<link rel="import" href="chrome://resources/html/cr.html">
<script src="chrome://resources/js/mojo_bindings.js"></script>
</script>
<script src="mojo/public/mojom/base/time.mojom.js"></script>
<script src="chromeos/services/device_sync/public/mojom/device_sync.mojom.js">
<script src="chrome://resources/js/time.mojom.js"></script>
<script src="chrome://resources/js/chromeos/device_sync.mojom.js">
</script>
<script src="chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.js">
<script src="chrome://resources/js/chromeos/multidevice_setup.mojom.js">
</script>
<script src="chromeos/services/multidevice_setup/public/mojom/multidevice_setup_constants.mojom.js">
<script src="chrome://resources/js/chromeos/multidevice_setup_constants.mojom.js">
</script>
<script src="mojo_api_behavior.js"></script>
......@@ -76,19 +76,6 @@ MultiDeviceSetupDialogUI::MultiDeviceSetupDialogUI(content::WebUI* web_ui)
source->SetJsonPath("strings.js");
source->SetDefaultResource(
IDR_MULTIDEVICE_SETUP_MULTIDEVICE_SETUP_DIALOG_HTML);
source->AddResourcePath("mojo/public/mojom/base/time.mojom.js",
IDR_TIME_MOJOM_JS);
source->AddResourcePath(
"chromeos/services/device_sync/public/mojom/device_sync.mojom.js",
IDR_DEVICE_SYNC_MOJOM_JS);
source->AddResourcePath(
"chromeos/services/multidevice_setup/public/mojom/"
"multidevice_setup.mojom.js",
IDR_MULTIDEVICE_SETUP_MOJOM_JS);
source->AddResourcePath(
"chromeos/services/multidevice_setup/public/mojom/"
"multidevice_setup_constants.mojom.js",
IDR_MULTIDEVICE_SETUP_CONSTANTS_MOJOM_JS);
// Note: The |kMultiDeviceSetupResourcesSize| and |kMultideviceSetupResources|
// fields are defined in the generated file
......
......@@ -42,19 +42,6 @@ ProximityAuthUI::ProximityAuthUI(
source->AddResourcePath("pollux.html", IDR_PROXIMITY_AUTH_POLLUX_HTML);
source->AddResourcePath("pollux.css", IDR_PROXIMITY_AUTH_POLLUX_CSS);
source->AddResourcePath("pollux.js", IDR_PROXIMITY_AUTH_POLLUX_JS);
source->AddResourcePath(
"chromeos/services/multidevice_setup/public/mojom/"
"multidevice_setup.mojom.js",
IDR_MULTIDEVICE_SETUP_MOJOM_JS);
source->AddResourcePath(
"chromeos/services/multidevice_setup/public/mojom/"
"multidevice_setup_constants.mojom.js",
IDR_MULTIDEVICE_SETUP_CONSTANTS_MOJOM_JS);
source->AddResourcePath(
"chromeos/services/device_sync/public/mojom/device_sync.mojom.js",
IDR_DEVICE_SYNC_MOJOM_JS);
source->AddResourcePath("mojo/public/mojom/base/time.mojom.js",
IDR_TIME_MOJOM_JS);
content::BrowserContext* browser_context =
web_ui->GetWebContents()->GetBrowserContext();
......
......@@ -12,9 +12,9 @@
<script src="logs.js"></script>
<script src="proximity_auth.js"></script>
<script src="chrome://resources/js/mojo_bindings.js"></script>
<script src="chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.js">
<script src="chrome://resources/js/chromeos/multidevice_setup.mojom.js">
</script>
<script src="chromeos/services/multidevice_setup/public/mojom/multidevice_setup_constants.mojom.js">
<script src="chrome://resources/js/chromeos/multidevice_setup_constants.mojom.js">
</script>
</head>
......
......@@ -14,6 +14,8 @@ grit("resources") {
outputs = [
"grit/chromeos_resources.h",
"grit/chromeos_resources_map.cc",
"grit/chromeos_resources_map.h",
"chromeos_resources.pak",
]
output_dir = "$root_gen_dir/chromeos"
......@@ -28,6 +30,5 @@ grit("resources") {
deps = [
"//chromeos/services/device_sync/public/mojom:mojom_js",
"//chromeos/services/multidevice_setup/public/mojom:mojom_js",
"//mojo/public/mojom/base:base_js",
]
}
......@@ -4,26 +4,15 @@
<output filename="grit/chromeos_resources.h" type="rc_header">
<emit emit_type='prepend'></emit>
</output>
<output filename="grit/chromeos_resources_map.cc"
type="gzipped_resource_file_map_source" />
<output filename="grit/chromeos_resources_map.h"
type="gzipped_resource_map_header" />
<output filename="chromeos_resources.pak" type="data_package" />
</outputs>
<release seq="1">
<includes>
<include name="IDR_DEVICE_SYNC_MOJOM_JS"
file="${mojom_root}/chromeos/services/device_sync/public/mojom/device_sync.mojom.js"
use_base_dir="false"
type="BINDATA" />
<include name="IDR_TIME_MOJOM_JS"
file="${mojom_root}/mojo/public/mojom/base/time.mojom.js"
use_base_dir="false"
type="BINDATA" />
<include name="IDR_MULTIDEVICE_SETUP_MOJOM_JS"
file="${mojom_root}/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.js"
use_base_dir="false"
type="BINDATA" />
<include name="IDR_MULTIDEVICE_SETUP_CONSTANTS_MOJOM_JS"
file="${mojom_root}/chromeos/services/multidevice_setup/public/mojom/constants.mojom.js"
use_base_dir="false"
type="BINDATA" />
<part file="multidevice_resources.grdp" />
<part file="proximity_auth_resources.grdp" />
<if expr="enable_cros_libassistant">
<part file="assistant_resources.grdp" />
......
<?xml version="1.0" encoding="utf-8"?>
<grit-part>
<include name="IDR_MULTIDEVICE_DEVICE_SYNC_MOJOM_JS"
file="${mojom_root}/chromeos/services/device_sync/public/mojom/device_sync.mojom.js"
use_base_dir="false"
type="BINDATA"
compress="gzip" />
<include name="IDR_MULTIDEVICE_MULTIDEVICE_SETUP_MOJOM_JS"
file="${mojom_root}/chromeos/services/multidevice_setup/public/mojom/multidevice_setup.mojom.js"
use_base_dir="false"
type="BINDATA"
compress="gzip" />
<include name="IDR_MULTIDEVICE_MULTIDEVICE_SETUP_CONSTANTS_MOJOM_JS"
file="${mojom_root}/chromeos/services/multidevice_setup/public/mojom/constants.mojom.js"
use_base_dir="false"
type="BINDATA"
compress="gzip" />
</grit-part>
......@@ -1868,6 +1868,7 @@ jumbo_source_set("browser") {
"tracing/cros_tracing_agent.cc",
"tracing/cros_tracing_agent.h",
]
deps += [ "//chromeos/resources" ]
} else {
sources += [
"memory/memory_monitor_linux.cc",
......
......@@ -27,6 +27,11 @@
#include "ui/resources/grit/webui_resources.h"
#include "ui/resources/grit/webui_resources_map.h"
#if defined(OS_CHROMEOS)
#include "chromeos/grit/chromeos_resources.h"
#include "chromeos/grit/chromeos_resources_map.h"
#endif
#if defined(OS_WIN)
#include "base/strings/utf_string_conversions.h"
#endif
......@@ -41,7 +46,7 @@ struct IdrGzipped {
};
using ResourcesMap = base::hash_map<std::string, IdrGzipped>;
const std::map<std::string, std::string> CreateAliasesMap() {
const std::map<std::string, std::string> CreatePathPrefixAliasesMap() {
// TODO(rkc): Once we have a separate source for apps, remove '*/apps/'
// aliases.
std::map<std::string, std::string> aliases = {
......@@ -64,6 +69,28 @@ const std::map<std::string, std::string> CreateAliasesMap() {
return aliases;
}
const std::map<int, std::string> CreateMojoResourceIdToAliasMap() {
return std::map<int, std::string> {
{IDR_MOJO_MOJO_BINDINGS_JS, "js/mojo_bindings.js"},
#if defined(OS_CHROMEOS)
{IDR_MOJO_TIME_MOJOM_JS, "js/time.mojom.js"},
#endif // !defined(OS_CHROMEOS)
};
}
#if defined(OS_CHROMEOS)
const std::map<int, std::string> CreateChromeosMojoResourceIdToAliasMap() {
return std::map<int, std::string>{
{IDR_MULTIDEVICE_DEVICE_SYNC_MOJOM_JS,
"js/chromeos/device_sync.mojom.js"},
{IDR_MULTIDEVICE_MULTIDEVICE_SETUP_MOJOM_JS,
"js/chromeos/multidevice_setup.mojom.js"},
{IDR_MULTIDEVICE_MULTIDEVICE_SETUP_CONSTANTS_MOJOM_JS,
"js/chromeos/multidevice_setup_constants.mojom.js"},
};
}
#endif // !defined(OS_CHROMEOS)
#if !defined(OS_ANDROID)
bool ShouldIgnore(std::string resource) {
if (base::FeatureList::IsEnabled(features::kWebUIPolymer2) &&
......@@ -95,10 +122,10 @@ void AddResource(const std::string& path,
NOTREACHED() << "Redefinition of '" << path << "'";
}
const ResourcesMap* CreateResourcesMap() {
std::map<std::string, std::string> aliases = CreateAliasesMap();
void AddResourcesToMap(ResourcesMap* resources_map) {
const std::map<std::string, std::string> aliases =
CreatePathPrefixAliasesMap();
ResourcesMap* result = new ResourcesMap();
for (size_t i = 0; i < kWebuiResourcesSize; ++i) {
const auto& resource = kWebuiResources[i];
......@@ -107,25 +134,48 @@ const ResourcesMap* CreateResourcesMap() {
continue;
#endif // !defined(OS_ANDROID)
AddResource(resource.name, resource.value, resource.gzipped, result);
AddResource(resource.name, resource.value, resource.gzipped, resources_map);
for (auto it = aliases.begin(); it != aliases.end(); ++it) {
if (base::StartsWith(resource.name, it->first,
base::CompareCase::SENSITIVE)) {
std::string resource_name(resource.name);
AddResource(it->second + resource_name.substr(it->first.length()),
resource.value, resource.gzipped, result);
resource.value, resource.gzipped, resources_map);
}
}
}
for (size_t i = 0; i < kMojoBindingsResourcesSize; ++i) {
const auto& resource = kMojoBindingsResources[i];
if (resource.value == IDR_MOJO_BINDINGS_JS) {
AddResource("js/mojo_bindings.js", resource.value, resource.gzipped,
result);
break;
}
}
// Adds |resources| to |resources_map|, but renames each resource according to
// the scheme in |resource_aliases|, which maps from resource ID to resource
// alias. Note that resources which do not have an alias will not be added.
void AddAliasedResourcesToMap(
const std::map<int, std::string>& resource_aliases,
const GzippedGritResourceMap resources[],
size_t resources_size,
ResourcesMap* resources_map) {
for (size_t i = 0; i < resources_size; ++i) {
const auto& resource = resources[i];
const auto it = resource_aliases.find(resource.value);
if (it == resource_aliases.end())
continue;
AddResource(it->second, resource.value, resource.gzipped, resources_map);
}
}
const ResourcesMap* CreateResourcesMap() {
ResourcesMap* result = new ResourcesMap();
AddResourcesToMap(result);
AddAliasedResourcesToMap(CreateMojoResourceIdToAliasMap(),
kMojoBindingsResources, kMojoBindingsResourcesSize,
result);
#if defined(OS_CHROMEOS)
AddAliasedResourcesToMap(CreateChromeosMojoResourceIdToAliasMap(),
kChromeosResources, kChromeosResourcesSize, result);
#endif // !defined(OS_CHROMEOS)
return result;
}
......
......@@ -669,7 +669,7 @@ std::vector<Dispatcher::JsResourceInfo> Dispatcher::GetJsResources() {
{"webViewInternal", IDR_WEB_VIEW_INTERNAL_CUSTOM_BINDINGS_JS},
{"keep_alive", IDR_KEEP_ALIVE_JS},
{"mojo_bindings", IDR_MOJO_BINDINGS_JS, true},
{"mojo_bindings", IDR_MOJO_MOJO_BINDINGS_JS, true},
{"extensions/common/mojo/keep_alive.mojom", IDR_KEEP_ALIVE_MOJOM_JS},
// Custom bindings.
......
......@@ -62,11 +62,14 @@ grit("resources") {
"grit/mojo_bindings_resources_map.h",
"mojo_bindings_resources.pak",
]
grit_flags = [
"-E",
"root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
]
deps = [
":bindings",
"//mojo/public/mojom/base:base_js",
]
}
......@@ -13,9 +13,18 @@
<translations />
<release seq="1">
<includes>
<include name="IDR_MOJO_BINDINGS_JS"
file="${root_gen_dir}\mojo\public\js\mojo_bindings.js"
type="BINDATA" use_base_dir="false" compress="gzip" />
<include name="IDR_MOJO_MOJO_BINDINGS_JS"
file="${root_gen_dir}/mojo/public/js/mojo_bindings.js"
use_base_dir="false"
type="BINDATA"
compress="gzip" />
<if expr="chromeos">
<include name="IDR_MOJO_TIME_MOJOM_JS"
file="${root_gen_dir}/mojo/public/mojom/base/time.mojom.js"
use_base_dir="false"
type="BINDATA"
compress="gzip" />
</if>
</includes>
</release>
</grit>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment