Skip to content

Commit

Permalink
Reland "[Files SWA]: Enable Files SWA to replace the legacy File Mana…
Browse files Browse the repository at this point in the history
…ger."

This is a reland of ba4c6e4

Original change's description:
> [Files SWA]: Enable Files SWA to replace the legacy File Manager.
>
> This CL adjusts
> * image loader code imported by Files SWA to have no dependencies
>   on hhaomji... extension.
> * changes how Files SWA loads various utilities and the background
>   code, by loading it from file-manager resources rather than
>   hhaomji... extension.
> * Uses regular File Manager Icons
> * Changes the color of the title bar to be #FFFFFF
> * Protects against initializing load time data multiple times
> * Adds a message in an extra big font informing the user that
>   they are running File System Web App
>
> Bug: b/199452030
> Change-Id: I348fc152f53442d2e4e4880740d3613e5b1aeca3
> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3216295
> Reviewed-by: Luciano Pacheco <lucmult@chromium.org>
> Commit-Queue: Bo Majewski <majewski@chromium.org>
> Cr-Commit-Position: refs/heads/main@{#931807}

Bug: b/199452030
Change-Id: If13c2f4357522332db8cd009b72b32db9ac24d31
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3224971
Reviewed-by: Bo Majewski <majewski@chromium.org>
Commit-Queue: Luciano Pacheco <lucmult@chromium.org>
Cr-Commit-Position: refs/heads/main@{#931910}
  • Loading branch information
Luciano Pacheco authored and Chromium LUCI CQ committed Oct 15, 2021
1 parent cb80be8 commit 8f1270a
Show file tree
Hide file tree
Showing 14 changed files with 78 additions and 28 deletions.
7 changes: 2 additions & 5 deletions ash/webui/file_manager/file_manager_ui.cc
Original file line number Diff line number Diff line change
Expand Up @@ -58,16 +58,13 @@ content::WebUIDataSource* FileManagerUI::CreateTrustedAppDataSource() {
// Script security policy.
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::ScriptSrc,
"script-src chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj "
"chrome-extension://pmfjbimdmchhbnneeidfognadeopoehp "
"script-src chrome-extension://pmfjbimdmchhbnneeidfognadeopoehp "
"chrome://resources "
"'self' ;");

// Metadata Shared Worker security policy.
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::WorkerSrc,
"worker-src chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj "
"'self' ;");
network::mojom::CSPDirectiveName::WorkerSrc, "worker-src 'self' ;");

// Allow using the chrome-untrusted:// scheme in the host.
source->OverrideContentSecurityPolicy(
Expand Down
5 changes: 2 additions & 3 deletions ash/webui/file_manager/resources/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ js_type_check("closure_compile") {
"js_module_root=" + rebase_path(".", root_build_dir),
"js_module_root=" +
rebase_path(mojom_webui_folder, root_build_dir),
"browser_resolver_prefix_replacements=\"chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/=../../ui/file_manager/file_manager/\"",
"browser_resolver_prefix_replacements=\"chrome://file-manager/=../../ui/file_manager/file_manager/\"",
]
}

Expand Down Expand Up @@ -124,8 +124,7 @@ optimize_webui("build") {

excludes = [ "chrome://resources/mojo/mojo/public/js/bindings.js" ]

external_paths =
[ "chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj|$files_app_path" ]
external_paths = [ "chrome://file-manager|$files_app_path" ]

deps = [
":preprocess",
Expand Down
12 changes: 7 additions & 5 deletions ash/webui/file_manager/resources/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ import './crt0.js';
*/
import {BrowserProxy} from './browser_proxy.js'
import {ScriptLoader} from './script_loader.js'
import {promisify} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/common/js/api.js';
import {VolumeManagerImpl} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/background/js/volume_manager_impl.js';
import 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/background/js/metrics_start.js';
import {background} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/background/js/background.js';
import {promisify} from 'chrome://file-manager/common/js/api.js';
import {VolumeManagerImpl} from 'chrome://file-manager/background/js/volume_manager_impl.js';
import 'chrome://file-manager/background/js/metrics_start.js';
import {background} from 'chrome://file-manager/background/js/background.js';
import './test_util_swa.js';

/**
Expand Down Expand Up @@ -61,7 +61,9 @@ class FileManagerApp {
window.cr.webUIResponse = origWebUIResponse;
window.cr.webUIListenerCallback = origWebUIListenerCallback;

console.debug('Files app UI loaded');
console.log(
'%cYou are running File System Web App',
'font-size: 2em; background-color: #ff0; color: #000;')
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
// runtime_loaded_test_util.js loads the functions on window.test namespace.
// runtime_loaded_test_util_swa.js only exists for rollup to have the secondary
// entry point (in addition to main.js) to generate the bundles.
import 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/background/js/runtime_loaded_test_util.js';
import 'chrome://file-manager/background/js/runtime_loaded_test_util.js';
2 changes: 1 addition & 1 deletion ash/webui/file_manager/resources/test_util_swa.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
// directly load the Files.app's test_util_base.js due to its dependencies on
// Chrome APIs not available in SWAs.

import {test} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/background/js/test_util.js';
import {test} from 'chrome://file-manager/background/js/test_util.js';
import {ScriptLoader} from './script_loader.js'

delete test.util.registerRemoteTestUtils;
Expand Down
15 changes: 13 additions & 2 deletions chrome/browser/ash/web_applications/file_manager_web_app_info.cc
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,10 @@
#include "chrome/browser/web_applications/web_app_constants.h"
#include "chrome/browser/web_applications/web_application_info.h"
#include "chrome/grit/generated_resources.h"
#include "extensions/common/constants.h"
#include "third_party/blink/public/mojom/manifest/display_mode.mojom.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/file_manager/grit/file_manager_resources.h"

std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager() {
auto info = std::make_unique<WebApplicationInfo>();
Expand All @@ -24,8 +26,17 @@ std::unique_ptr<WebApplicationInfo> CreateWebAppInfoForFileManager() {
info->title = l10n_util::GetStringUTF16(IDS_FILEMANAGER_APP_NAME);
web_app::CreateIconInfoForSystemWebApp(
info->start_url,
{{"icon192.png", 192, IDR_FILE_MANAGER_SWA_IMAGES_ICON192_PNG}}, *info);
info->theme_color = 0xFF4285F4;
{
{"icon16.png", 16, IDR_FILE_MANAGER_ICON_16},
{"icon32.png", 32, IDR_FILE_MANAGER_ICON_32},
{"icon48.png", 48, IDR_FILE_MANAGER_ICON_48},
{"icon64.png", 64, IDR_FILE_MANAGER_ICON_64},
{"icon128.png", 128, IDR_FILE_MANAGER_ICON_128},
{"icon192.png", 192, IDR_FILE_MANAGER_ICON_192},
{"icon256.png", 256, IDR_FILE_MANAGER_ICON_256},
},
*info);
info->theme_color = 0xFFFFFFFF;
info->background_color = 0xFFFFFFFF;
info->display_mode = blink::mojom::DisplayMode::kStandalone;
info->user_display_mode = blink::mojom::DisplayMode::kStandalone;
Expand Down
12 changes: 9 additions & 3 deletions ui/file_manager/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ group("unit_test_data") {
"file_manager/foreground/js/ui/banners:js_test_gen_html_modules",
"image_loader:js_test_gen_html_modules",
]
data_deps = [ "image_loader:copy_from_filesapp" ]
}

preprocess_folder = "$target_gen_dir/preprocessed"
Expand Down Expand Up @@ -380,6 +381,9 @@ preprocess_if_expr("preprocess_generated") {
"file_manager/foreground/js/ui/banners/trash_banner.js",
"file_manager/foreground/js/ui/banners/warning_banner.js",
"file_manager/foreground/js/ui/breadcrumb.js",

"image_loader/image_orientation.js",
"image_loader/lru_cache.js",
]

deps = [
Expand All @@ -388,6 +392,7 @@ preprocess_if_expr("preprocess_generated") {
"//ui/file_manager/file_manager/foreground/elements:web_components",
"//ui/file_manager/file_manager/foreground/js/ui:web_components",
"//ui/file_manager/file_manager/foreground/js/ui/banners:web_components",
"//ui/file_manager/image_loader:copy_from_filesapp",
]
}

Expand All @@ -410,6 +415,7 @@ generate_grd("build_grd") {
"//ui/file_manager/audio_player/js:build_background",
"//ui/file_manager/audio_player/js:build_worker",
"//ui/file_manager/file_manager:fix_broken_images",
"//ui/file_manager/image_loader:build",
]

input_files_base_dir = rebase_path(target_gen_dir, root_build_dir)
Expand All @@ -432,6 +438,7 @@ generate_grd("build_grd") {
"audio_player/js/main_background.rollup.js|audio_player/js/main_background.js",
"audio_player/js/metadata_worker.rollup.js|audio_player/js/metadata_worker.js",
"audio_player/js/runtime_loaded_test_util.rollup.js|audio_player/js/runtime_loaded_test_util.js",
"image_loader/background.m.rollup.js|image_loader/background.m.js",
]

if (optimize_webui) {
Expand All @@ -445,6 +452,8 @@ generate_grd("build_grd") {
"file_manager/foreground/js/shared.m.rollup.js",

"image_loader/background.m.rollup.js",
"image_loader/image_orientation.js",
"image_loader/lru_cache.js",
]

resource_path_rewrites += [
Expand All @@ -453,16 +462,13 @@ generate_grd("build_grd") {
"file_manager/foreground/js/deferred_elements.m.rollup.js|file_manager/foreground/js/deferred_elements.m.js",
"file_manager/foreground/js/main.rollup.js|file_manager/foreground/js/main.js",
"file_manager/foreground/js/metadata_dispatcher.rollup.js|file_manager/foreground/js/metadata/metadata_dispatcher.js",

"image_loader/background.m.rollup.js|image_loader/background.m.js",
]

deps += [
"//ui/file_manager/file_manager/background/js:build",
"//ui/file_manager/file_manager/foreground/elements:elements",
"//ui/file_manager/file_manager/foreground/js:build",
"//ui/file_manager/file_manager/foreground/js:build_worker",
"//ui/file_manager/image_loader:build",
]
} else {
manifest_files = [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,9 @@ export class BackgroundBaseImpl {
console.error(chrome.runtime.lastError.message);
return;
}
loadTimeData.data = assert(stringData);
if (!loadTimeData.isInitialized()) {
loadTimeData.data = assert(stringData);
}
fulfill(stringData);
});
});
Expand Down
35 changes: 33 additions & 2 deletions ui/file_manager/image_loader/BUILD.gn
Original file line number Diff line number Diff line change
Expand Up @@ -39,9 +39,30 @@ js_unittest("cache_unittest.m") {
]
}

# TODO(b/199451464): Remove this and dependencies.
copy("copy_from_filesapp") {
sources = [
"../file_manager/common/js/lru_cache.js",
"../file_manager/foreground/js/metadata/image_orientation.js",
]
outputs = [ "$target_gen_dir/{{source_file_part}}" ]
}

js_library("image_orientation") {
sources =
[ "$root_gen_dir/ui/file_manager/image_loader/image_orientation.js" ]
extra_deps = [ ":copy_from_filesapp" ]
}

js_library("lru_cache") {
sources = [ "$root_gen_dir/ui/file_manager/image_loader/lru_cache.js" ]
extra_deps = [ ":copy_from_filesapp" ]
}

js_library("image_loader") {
deps = [
":cache",
":image_orientation",
":image_request_task",
":load_image_request",
":scheduler",
Expand All @@ -57,6 +78,7 @@ js_unittest("image_loader_unittest.m") {
"//chrome/test/data/webui:chai_assert",
"//ui/file_manager/file_manager/foreground/js/metadata:image_orientation",
]
extra_deps = [ ":copy_from_filesapp" ]
}

js_library("image_loader_util") {
Expand All @@ -68,15 +90,15 @@ js_library("image_loader_util") {

js_library("load_image_request") {
deps = [
"//ui/file_manager/file_manager/foreground/js/metadata:image_orientation",
":image_orientation",
"//ui/webui/resources/js:assert.m",
]
}

js_library("image_loader_client") {
deps = [
":load_image_request",
"//ui/file_manager/file_manager/common/js:lru_cache",
":lru_cache",
]
externs_list = [
"$externs_path/chrome.js",
Expand All @@ -102,12 +124,19 @@ js_library("image_request_task") {
deps = [
":cache",
":image_loader_util",
":image_orientation",
":load_image_request",
":piex_loader",
"//ui/file_manager/file_manager/common/js:file_type",
"//ui/file_manager/file_manager/foreground/js/metadata:image_orientation",
"//ui/webui/resources/js:assert.m",
]
externs_list = [
"$externs_path/file_manager_private.js",
"$externs_path/file_system_provider.js",
"$externs_path/chrome_extensions.js",
"$externs_path/chrome.js",
]
}

js_library("scheduler") {
Expand Down Expand Up @@ -153,8 +182,10 @@ group("js_modules") {
":image_loader",
":image_loader_client",
":image_loader_util",
":image_orientation",
":image_request_task",
":load_image_request",
":lru_cache",
":piex_loader",
":scheduler",
]
Expand Down
2 changes: 1 addition & 1 deletion ui/file_manager/image_loader/image_loader.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {ImageOrientation} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/image_orientation.js';
import {assert} from 'chrome://resources/js/assert.m.js';

import {ImageCache} from './cache.js';
import {ImageOrientation} from './image_orientation.js';
import {ImageRequestTask} from './image_request_task.js';
import {LoadImageRequest, LoadImageResponse} from './load_image_request.js';
import {Scheduler} from './scheduler.js';
Expand Down
2 changes: 1 addition & 1 deletion ui/file_manager/image_loader/image_loader_client.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {LRUCache} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/common/js/lru_cache.js';
import {LoadImageRequest, LoadImageResponse, LoadImageResponseStatus} from './load_image_request.js';
import {LRUCache} from './lru_cache.js';

/**
* Client used to connect to the remote ImageLoader extension. Client class runs
Expand Down
2 changes: 1 addition & 1 deletion ui/file_manager/image_loader/image_request_task.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
// found in the LICENSE file.

import {FileType} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/common/js/file_type.js';
import {ImageOrientation} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/image_orientation.js';
import {assert, assertInstanceof} from 'chrome://resources/js/assert.m.js';

import {ImageCache} from './cache.js';
import {ImageLoaderUtil} from './image_loader_util.js';
import {ImageOrientation} from './image_orientation.js';
import {LoadImageRequest, LoadImageResponse, LoadImageResponseStatus} from './load_image_request.js';
import {PiexLoader} from './piex_loader.js';

Expand Down
2 changes: 1 addition & 1 deletion ui/file_manager/image_loader/load_image_request.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import {ImageOrientation, ImageTransformParam} from 'chrome-extension://hhaomjibdihmijegdhdafkllkbggdgoj/foreground/js/metadata/image_orientation.js';
import {assert} from 'chrome://resources/js/assert.m.js';
import {ImageOrientation, ImageTransformParam} from './image_orientation.js';


/**
Expand Down
4 changes: 3 additions & 1 deletion ui/file_manager/image_loader/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@
"natively_connectable": ["com.google.ash_thumbnail_loader"],
"web_accessible_resources": [
"image_loader_client.js",
"load_image_request.js"
"image_orientation.js",
"load_image_request.js",
"lru_cache.js"
]
}

0 comments on commit 8f1270a

Please sign in to comment.