Commit 7ee1de79 authored by Noel Gordon's avatar Noel Gordon Committed by Chromium LUCI CQ

[filesapp] Add PopulateLoadTimeData CreateTrustedAppDataSource helpers

Add PopulateLoadTimeData helper to setup files app load time data. Add
CreateTrustedAppDataSource to add trusted resources and load time data
and initialise security policy for the metadata Shared Worker.

Bug: 1113981
Change-Id: Ic507af120de1a8c8ff19429bcfe864291a0f2a9a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2586637
Commit-Queue: Noel Gordon <noel@chromium.org>
Reviewed-by: default avatarLuciano Pacheco <lucmult@chromium.org>
Cr-Commit-Position: refs/heads/master@{#836029}
parent 23267ae4
...@@ -4,14 +4,25 @@ ...@@ -4,14 +4,25 @@
#include "chrome/browser/chromeos/web_applications/chrome_file_manager_ui_delegate.h" #include "chrome/browser/chromeos/web_applications/chrome_file_manager_ui_delegate.h"
#include <memory.h>
#include "base/values.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/chromeos/file_manager/file_manager_string_util.h" #include "chrome/browser/chromeos/file_manager/file_manager_string_util.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/web_ui_data_source.h"
ChromeFileManagerUIDelegate::ChromeFileManagerUIDelegate(content::WebUI* web_ui) ChromeFileManagerUIDelegate::ChromeFileManagerUIDelegate(content::WebUI* web_ui)
: web_ui_(web_ui) { : web_ui_(web_ui) {
DCHECK(web_ui_); DCHECK(web_ui_);
} }
std::unique_ptr<base::DictionaryValue> void ChromeFileManagerUIDelegate::PopulateLoadTimeData(
ChromeFileManagerUIDelegate::GetFileManagerAppStrings() const { content::WebUIDataSource* source) const {
return GetFileManagerStrings(); std::unique_ptr<base::DictionaryValue> dict = GetFileManagerStrings();
const std::string locale = g_browser_process->GetApplicationLocale();
AddFileManagerFeatureStrings(locale, Profile::FromWebUI(web_ui_), dict.get());
source->AddLocalizedStrings(*dict.get());
} }
...@@ -7,10 +7,6 @@ ...@@ -7,10 +7,6 @@
#include "chromeos/components/file_manager/file_manager_ui_delegate.h" #include "chromeos/components/file_manager/file_manager_ui_delegate.h"
#include <memory>
#include "base/values.h"
namespace content { namespace content {
class WebUI; class WebUI;
} // namespace content } // namespace content
...@@ -24,9 +20,8 @@ class ChromeFileManagerUIDelegate : public FileManagerUIDelegate { ...@@ -24,9 +20,8 @@ class ChromeFileManagerUIDelegate : public FileManagerUIDelegate {
ChromeFileManagerUIDelegate& operator=(const ChromeFileManagerUIDelegate&) = ChromeFileManagerUIDelegate& operator=(const ChromeFileManagerUIDelegate&) =
delete; delete;
// Returns a map from message labels to actual messages used by Files app. // FileManagerUIDelegate:
std::unique_ptr<base::DictionaryValue> GetFileManagerAppStrings() void PopulateLoadTimeData(content::WebUIDataSource*) const override;
const override;
private: private:
content::WebUI* web_ui_; // Owns |this|. content::WebUI* web_ui_; // Owns |this|.
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/browser/web_ui.h" #include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h" #include "content/public/browser/web_ui_data_source.h"
#include "services/network/public/mojom/content_security_policy.mojom.h"
#include "ui/file_manager/grit/file_manager_gen_resources_map.h" #include "ui/file_manager/grit/file_manager_gen_resources_map.h"
#include "ui/file_manager/grit/file_manager_resources.h" #include "ui/file_manager/grit/file_manager_resources.h"
#include "ui/file_manager/grit/file_manager_resources_map.h" #include "ui/file_manager/grit/file_manager_resources_map.h"
...@@ -37,15 +38,25 @@ void AddFilesAppResources(content::WebUIDataSource* source, ...@@ -37,15 +38,25 @@ void AddFilesAppResources(content::WebUIDataSource* source,
FileManagerUI::FileManagerUI(content::WebUI* web_ui, FileManagerUI::FileManagerUI(content::WebUI* web_ui,
std::unique_ptr<FileManagerUIDelegate> delegate) std::unique_ptr<FileManagerUIDelegate> delegate)
: MojoWebUIController(web_ui), delegate_(std::move(delegate)) { : MojoWebUIController(web_ui), delegate_(std::move(delegate)) {
auto source = base::WrapUnique(content::WebUIDataSource::Create( auto* browser_context = web_ui->GetWebContents()->GetBrowserContext();
chromeos::file_manager::kChromeUIFileManagerHost)); auto* trusted_source = CreateTrustedAppDataSource();
source->AddLocalizedStrings(*this->delegate()->GetFileManagerAppStrings()); content::WebUIDataSource::Add(browser_context, trusted_source);
// The HTML content loaded on chrome://file-manager. }
content::WebUIDataSource* FileManagerUI::CreateTrustedAppDataSource() {
content::WebUIDataSource* source = content::WebUIDataSource::Create(
chromeos::file_manager::kChromeUIFileManagerHost);
// Setup chrome://file-manager main and default page.
source->AddResourcePath("", IDR_FILE_MANAGER_SWA_MAIN_HTML); source->AddResourcePath("", IDR_FILE_MANAGER_SWA_MAIN_HTML);
source->SetDefaultResource(IDR_FILE_MANAGER_SWA_MAIN_HTML);
// The resources requested by chrome://file-manager HTML. // Add chrome://file-manager content.
// TOD(majewski): Rename main.* to main_swa.*
source->AddResourcePath("main.js", IDR_FILE_MANAGER_SWA_MAIN_JS); source->AddResourcePath("main.js", IDR_FILE_MANAGER_SWA_MAIN_JS);
source->AddResourcePath("file_manager_private_fakes.js",
IDR_FILE_MANAGER_SWA_FILE_MANAGER_PRIVATE_FAKES_JS);
source->AddResourcePath("file_manager_fakes.js",
IDR_FILE_MANAGER_SWA_FILE_MANAGER_FAKES_JS);
source->AddResourcePath("file_manager.mojom-lite.js", source->AddResourcePath("file_manager.mojom-lite.js",
IDR_FILE_MANAGER_SWA_MOJO_LITE_JS); IDR_FILE_MANAGER_SWA_MOJO_LITE_JS);
source->AddResourcePath("browser_proxy.js", source->AddResourcePath("browser_proxy.js",
...@@ -53,28 +64,23 @@ FileManagerUI::FileManagerUI(content::WebUI* web_ui, ...@@ -53,28 +64,23 @@ FileManagerUI::FileManagerUI(content::WebUI* web_ui,
source->AddResourcePath("script_loader.js", source->AddResourcePath("script_loader.js",
IDR_FILE_MANAGER_SWA_SCRIPT_LOADER_JS); IDR_FILE_MANAGER_SWA_SCRIPT_LOADER_JS);
// Sets up legacy_main_script.js to be the same as Files App AddFilesAppResources(source, kFileManagerResources,
// ui/file_manager/file_manager/foreground/js/main_scripts.js
source->AddResourcePath("legacy_main_scripts.js", IDR_FILE_MANAGER_MAIN_JS);
#if !DCHECK_IS_ON()
// If a user goes to an invalid url and non-DCHECK mode (DHECK = debug mode)
// is set, serve a default page so the user sees your default page instead
// of an unexpected error. But if DCHECK is set, the user will be a
// developer and be able to identify an error occurred.
source->SetDefaultResource(IDR_FILE_MANAGER_SWA_MAIN_HTML);
#endif // !DCHECK_IS_ON()
AddFilesAppResources(source.get(), kFileManagerResources,
kFileManagerResourcesSize); kFileManagerResourcesSize);
AddFilesAppResources(source.get(), kFileManagerGenResources, AddFilesAppResources(source, kFileManagerGenResources,
kFileManagerGenResourcesSize); kFileManagerGenResourcesSize);
// Load time data: add files app strings and feature flags.
delegate_->PopulateLoadTimeData(source);
source->UseStringsJs();
// Shared worker security policy.
source->OverrideContentSecurityPolicy(
network::mojom::CSPDirectiveName::WorkerSrc, "worker-src 'self' ;");
// TODO(crbug.com/1098685): Trusted Type remaining WebUI. // TODO(crbug.com/1098685): Trusted Type remaining WebUI.
source->DisableTrustedTypesCSP(); source->DisableTrustedTypesCSP();
auto* browser_context = web_ui->GetWebContents()->GetBrowserContext(); return source;
content::WebUIDataSource::Add(browser_context, source.release());
} }
FileManagerUI::~FileManagerUI() = default; FileManagerUI::~FileManagerUI() = default;
......
...@@ -9,6 +9,8 @@ ...@@ -9,6 +9,8 @@
#include "chromeos/components/file_manager/file_manager_ui_delegate.h" #include "chromeos/components/file_manager/file_manager_ui_delegate.h"
#include "chromeos/components/file_manager/mojom/file_manager.mojom.h" #include "chromeos/components/file_manager/mojom/file_manager.mojom.h"
#include "content/public/browser/web_ui.h"
#include "content/public/browser/web_ui_data_source.h"
#include "mojo/public/cpp/bindings/pending_receiver.h" #include "mojo/public/cpp/bindings/pending_receiver.h"
#include "mojo/public/cpp/bindings/pending_remote.h" #include "mojo/public/cpp/bindings/pending_remote.h"
#include "mojo/public/cpp/bindings/receiver.h" #include "mojo/public/cpp/bindings/receiver.h"
...@@ -19,7 +21,7 @@ namespace file_manager { ...@@ -19,7 +21,7 @@ namespace file_manager {
class FileManagerPageHandler; class FileManagerPageHandler;
// The WebUI controller for chrome://file-manager. // WebUI controller for chrome://file-manager.
class FileManagerUI : public ui::MojoWebUIController, class FileManagerUI : public ui::MojoWebUIController,
public mojom::PageHandlerFactory { public mojom::PageHandlerFactory {
public: public:
...@@ -27,7 +29,6 @@ class FileManagerUI : public ui::MojoWebUIController, ...@@ -27,7 +29,6 @@ class FileManagerUI : public ui::MojoWebUIController,
std::unique_ptr<FileManagerUIDelegate> delegate); std::unique_ptr<FileManagerUIDelegate> delegate);
~FileManagerUI() override; ~FileManagerUI() override;
// Disallow copy and assign.
FileManagerUI(const FileManagerUI&) = delete; FileManagerUI(const FileManagerUI&) = delete;
FileManagerUI& operator=(const FileManagerUI&) = delete; FileManagerUI& operator=(const FileManagerUI&) = delete;
...@@ -37,6 +38,8 @@ class FileManagerUI : public ui::MojoWebUIController, ...@@ -37,6 +38,8 @@ class FileManagerUI : public ui::MojoWebUIController,
const FileManagerUIDelegate* delegate() { return delegate_.get(); } const FileManagerUIDelegate* delegate() { return delegate_.get(); }
private: private:
content::WebUIDataSource* CreateTrustedAppDataSource();
// mojom::PageHandlerFactory: // mojom::PageHandlerFactory:
void CreatePageHandler( void CreatePageHandler(
mojo::PendingRemote<mojom::Page> pending_page, mojo::PendingRemote<mojom::Page> pending_page,
......
...@@ -5,18 +5,17 @@ ...@@ -5,18 +5,17 @@
#ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_ #ifndef CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_
#define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_ #define CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_
#include <memory> namespace content {
class WebUIDataSource;
#include "base/values.h" } // namespace content
// Delegate to expose //chrome services to //components FileManagerUI. // Delegate to expose //chrome services to //components FileManagerUI.
class FileManagerUIDelegate { class FileManagerUIDelegate {
public: public:
virtual ~FileManagerUIDelegate() = default; virtual ~FileManagerUIDelegate() = default;
// Returns a map from message labels to actual messages used by the Files App. // Populates (writes) load time data to the source.
virtual std::unique_ptr<base::DictionaryValue> GetFileManagerAppStrings() virtual void PopulateLoadTimeData(content::WebUIDataSource*) const = 0;
const = 0;
}; };
#endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_ #endif // CHROMEOS_COMPONENTS_FILE_MANAGER_FILE_MANAGER_UI_DELEGATE_H_
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