123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "fuchsia_web/webengine/web_engine_main_delegate.h"
- #include <utility>
- #include "base/base_paths.h"
- #include "base/command_line.h"
- #include "base/files/file_util.h"
- #include "base/fuchsia/intl_profile_watcher.h"
- #include "base/i18n/rtl.h"
- #include "base/path_service.h"
- #include "base/strings/string_split.h"
- #include "content/public/common/content_switches.h"
- #include "content/public/common/main_function_params.h"
- #include "fuchsia_web/common/init_logging.h"
- #include "fuchsia_web/webengine/browser/web_engine_browser_main.h"
- #include "fuchsia_web/webengine/browser/web_engine_content_browser_client.h"
- #include "fuchsia_web/webengine/common/cors_exempt_headers.h"
- #include "fuchsia_web/webengine/common/web_engine_content_client.h"
- #include "fuchsia_web/webengine/renderer/web_engine_content_renderer_client.h"
- #include "fuchsia_web/webengine/switches.h"
- #include "google_apis/google_api_keys.h"
- #include "ui/base/resource/resource_bundle.h"
- #include "ui/base/ui_base_paths.h"
- namespace {
- WebEngineMainDelegate* g_current_web_engine_main_delegate = nullptr;
- void InitializeResources() {
- constexpr char kCommonResourcesPakPath[] = "web_engine_common_resources.pak";
- constexpr char kWebUiGeneratedResourcesPakPath[] =
- "ui/resources/webui_generated_resources.pak";
- base::FilePath asset_root;
- bool result = base::PathService::Get(base::DIR_ASSETS, &asset_root);
- DCHECK(result);
- // Initialize the process-global ResourceBundle, and manually load the
- // WebEngine locale-agnostic resources.
- const std::string locale = ui::ResourceBundle::InitSharedInstanceWithLocale(
- base::i18n::GetConfiguredLocale(), nullptr,
- ui::ResourceBundle::DO_NOT_LOAD_COMMON_RESOURCES);
- ui::SetSupportedResourceScaleFactors({ui::k100Percent});
- ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath(
- asset_root.Append(kCommonResourcesPakPath), ui::kScaleFactorNone);
- VLOG(1) << "Loaded resources including locale: " << locale;
- // Conditionally load WebUI resource PAK if visible from namespace.
- const base::FilePath webui_generated_resources_path =
- asset_root.Append(kWebUiGeneratedResourcesPakPath);
- if (base::PathExists(webui_generated_resources_path)) {
- ui::ResourceBundle::GetSharedInstance().AddDataPackFromPath(
- webui_generated_resources_path, ui::kScaleFactorNone);
- }
- }
- } // namespace
- // static
- WebEngineMainDelegate* WebEngineMainDelegate::GetInstanceForTest() {
- return g_current_web_engine_main_delegate;
- }
- WebEngineMainDelegate::WebEngineMainDelegate() {
- g_current_web_engine_main_delegate = this;
- }
- WebEngineMainDelegate::~WebEngineMainDelegate() = default;
- absl::optional<int> WebEngineMainDelegate::BasicStartupComplete() {
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
- if (!InitLoggingFromCommandLine(*command_line)) {
- return 1;
- }
- if (command_line->HasSwitch(switches::kGoogleApiKey)) {
- google_apis::SetAPIKey(
- command_line->GetSwitchValueASCII(switches::kGoogleApiKey));
- }
- SetCorsExemptHeaders(base::SplitString(
- base::CommandLine::ForCurrentProcess()->GetSwitchValueNative(
- switches::kCorsExemptHeaders),
- ",", base::TRIM_WHITESPACE, base::SPLIT_WANT_NONEMPTY));
- return absl::nullopt;
- }
- void WebEngineMainDelegate::PreSandboxStartup() {
- // Early during startup, configure the process with the primary locale and
- // load resources. If locale-specific resources are loaded then they must be
- // explicitly reloaded after each change to the primary locale.
- // In the browser process the locale determines the accept-language header
- // contents, and is supplied to renderers for Blink to report to web content.
- std::string initial_locale =
- base::FuchsiaIntlProfileWatcher::GetPrimaryLocaleIdForInitialization();
- base::i18n::SetICUDefaultLocale(initial_locale);
- InitializeResources();
- }
- absl::variant<int, content::MainFunctionParams>
- WebEngineMainDelegate::RunProcess(
- const std::string& process_type,
- content::MainFunctionParams main_function_params) {
- if (!process_type.empty())
- return std::move(main_function_params);
- return WebEngineBrowserMain(std::move(main_function_params));
- }
- content::ContentClient* WebEngineMainDelegate::CreateContentClient() {
- content_client_ = std::make_unique<WebEngineContentClient>();
- return content_client_.get();
- }
- content::ContentBrowserClient*
- WebEngineMainDelegate::CreateContentBrowserClient() {
- DCHECK(!browser_client_);
- browser_client_ = std::make_unique<WebEngineContentBrowserClient>();
- return browser_client_.get();
- }
- content::ContentRendererClient*
- WebEngineMainDelegate::CreateContentRendererClient() {
- renderer_client_ = std::make_unique<WebEngineContentRendererClient>();
- return renderer_client_.get();
- }
|