Commit b9d0dbf7 authored by dpapad's avatar dpapad Committed by Commit Bot

Allow chrome-extension:// URL to serve generated component extension files.

This is necessary to allow migrating the PDF viewer from Polymer2 to Polymer3,
since the latter uses generated files.

Added automated test. Can also verify manually as follows
1) Visit chrome-extension://mhjfbmdgcfjbbpaeojofohoefgiehjai/elements/shared-vars.m.js
2) Should see the contents of the generated file.

Bug: 1005029
Change-Id: I762672a0078f00b62500391f2d880d5e6432befe
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1814840
Commit-Queue: Demetrios Papadopoulos <dpapad@chromium.org>
Reviewed-by: default avatarRebekah Potter <rbpotter@chromium.org>
Reviewed-by: default avatarDevlin <rdevlin.cronin@chromium.org>
Auto-Submit: Demetrios Papadopoulos <dpapad@chromium.org>
Cr-Commit-Position: refs/heads/master@{#700383}
parent 1d8d106a
......@@ -121,13 +121,28 @@ ChromeComponentExtensionResourceManager::GetTemplateReplacementsForExtension(
void ChromeComponentExtensionResourceManager::AddComponentResourceEntries(
const GritResourceMap* entries,
size_t size) {
base::FilePath gen_folder_path = base::FilePath().AppendASCII(
"@out_folder@/gen/chrome/browser/resources/");
gen_folder_path = gen_folder_path.NormalizePathSeparators();
for (size_t i = 0; i < size; ++i) {
base::FilePath resource_path = base::FilePath().AppendASCII(
entries[i].name);
resource_path = resource_path.NormalizePathSeparators();
DCHECK(!base::Contains(path_to_resource_id_, resource_path));
path_to_resource_id_[resource_path] = entries[i].value;
if (!gen_folder_path.IsParent(resource_path)) {
DCHECK(!base::Contains(path_to_resource_id_, resource_path));
path_to_resource_id_[resource_path] = entries[i].value;
} else {
// If the resource is a generated file, strip the generated folder's path,
// so that it can be served from a normal URL (as if it were not
// generated).
base::FilePath effective_path =
base::FilePath().AppendASCII(resource_path.AsUTF8Unsafe().substr(
gen_folder_path.value().length()));
DCHECK(!base::Contains(path_to_resource_id_, effective_path));
path_to_resource_id_[effective_path] = entries[i].value;
}
}
}
......
......@@ -4,8 +4,11 @@
#include "base/files/file_path.h"
#include "base/path_service.h"
#include "base/strings/string_util.h"
#include "build/build_config.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/grit/component_extension_resources.h"
#include "chrome/grit/component_extension_resources_map.h"
#include "extensions/browser/component_extension_resource_manager.h"
#include "extensions/browser/extensions_browser_client.h"
#include "extensions/common/constants.h"
......@@ -72,4 +75,38 @@ TEST_F(ChromeComponentExtensionResourceManagerTest,
#endif
}
TEST_F(ChromeComponentExtensionResourceManagerTest,
IsComponentExtensionResource_Generated) {
// Check that the file being used for testing is indeed a generated resource.
int generated_resource_id = IDR_PDF_SHARED_VARS_M_JS;
bool found_resource = false;
for (size_t i = 0; i < kComponentExtensionResourcesSize; ++i) {
if (kComponentExtensionResources[i].value == generated_resource_id) {
ASSERT_TRUE(base::StartsWith(kComponentExtensionResources[i].name,
"@out_folder@",
base::CompareCase::SENSITIVE));
found_resource = true;
break;
}
}
ASSERT_TRUE(found_resource);
const ComponentExtensionResourceManager* resource_manager =
ExtensionsBrowserClient::Get()->GetComponentExtensionResourceManager();
ASSERT_TRUE(resource_manager);
base::FilePath resources_dir;
base::PathService::Get(chrome::DIR_RESOURCES, &resources_dir);
base::FilePath extension_path = resources_dir.AppendASCII("pdf");
base::FilePath resource_path =
base::FilePath().AppendASCII("elements/shared-vars.m.js");
// Check that the resource is classified as a component resource.
int resource_id = 0;
ASSERT_TRUE(resource_manager->IsComponentExtensionResource(
extension_path, resource_path, &resource_id));
ASSERT_EQ(generated_resource_id, resource_id);
}
} // namespace extensions
......@@ -106,6 +106,18 @@ grit("webapks_ui_resources") {
if (!is_android) {
grit("component_extension_resources") {
source = "component_extension_resources.grd"
# The .grd contains references to generated files.
source_is_generated = true
grit_flags = [
"-E",
"root_gen_dir=" + rebase_path(root_gen_dir, root_build_dir),
]
deps = [
"//chrome/browser/resources/pdf/elements:polymer3_elements",
]
defines = chrome_grit_defines
if (enable_hangout_services_extension) {
defines += [ "enable_hangout_services_extension" ]
......
......@@ -114,6 +114,9 @@
<include name="IDR_PDF_METRICS_JS" file="pdf/metrics.js" type="BINDATA" />
<include name="IDR_PDF_SHARED_VARS_HTML" file="pdf/elements/shared-vars.html" type="BINDATA" />
<!-- TODO(crbug.com/1005029): Dummy generated file used for ChromeComponentExtensionResourceManager tests.
Replace with a file actually used by the PDF Viewer once migration to Polymer3 is completed. -->
<include name="IDR_PDF_SHARED_VARS_M_JS" file="${root_gen_dir}/chrome/browser/resources/pdf/elements/shared-vars.m.js" use_base_dir="false" type="BINDATA" />
<include name="IDR_PDF_ICONS_HTML" file="pdf/elements/icons.html" type="BINDATA" />
<include name="IDR_PDF_VIEWER_BOOKMARK_HTML" file="pdf/elements/viewer-bookmark.html" type="BINDATA" />
<include name="IDR_PDF_VIEWER_BOOKMARK_JS" file="pdf/elements/viewer-bookmark.js" type="BINDATA" />
......
......@@ -3,6 +3,7 @@
# found in the LICENSE file.
import("//third_party/closure_compiler/compile_js.gni")
import("//tools/polymer/polymer.gni")
js_type_check("closure_compile") {
deps = [
......@@ -103,3 +104,15 @@ js_library("viewer-zoom-toolbar") {
js_library("viewer-zoom-button") {
deps = []
}
polymer_modulizer("shared-vars") {
js_file = "shared-vars.m.js"
html_file = "shared-vars.html"
html_type = "custom-style"
}
group("polymer3_elements") {
deps = [
":shared-vars_module",
]
}
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