123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- // Copyright (c) 2012 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-CHROMIUM file.
- #include "brightray/common/main_delegate.h"
- #include <memory>
- #include "base/command_line.h"
- #include "base/mac/bundle_locations.h"
- #include "base/path_service.h"
- #include "brightray/browser/browser_client.h"
- #include "brightray/common/content_client.h"
- #include "content/public/common/content_switches.h"
- #include "electron/buildflags/buildflags.h"
- #include "services/service_manager/embedder/switches.h"
- #include "ui/base/resource/resource_bundle.h"
- #include "ui/base/ui_base_switches.h"
- namespace brightray {
- namespace {
- // Returns true if this subprocess type needs the ResourceBundle initialized
- // and resources loaded.
- bool SubprocessNeedsResourceBundle(const std::string& process_type) {
- return
- #if defined(OS_POSIX) && !defined(OS_MACOSX)
- // The zygote process opens the resources for the renderers.
- process_type == service_manager::switches::kZygoteProcess ||
- #endif
- #if defined(OS_MACOSX)
- // Mac needs them too for scrollbar related images and for sandbox
- // profiles.
- process_type == switches::kPpapiPluginProcess ||
- process_type == switches::kPpapiBrokerProcess ||
- process_type == switches::kGpuProcess ||
- #endif
- process_type == switches::kRendererProcess ||
- process_type == switches::kUtilityProcess;
- }
- } // namespace
- void LoadResourceBundle(const std::string& locale) {
- const bool initialized = ui::ResourceBundle::HasSharedInstance();
- if (initialized)
- ui::ResourceBundle::CleanupSharedInstance();
- // Load other resource files.
- base::FilePath pak_dir;
- #if defined(OS_MACOSX)
- pak_dir =
- base::mac::FrameworkBundlePath().Append(FILE_PATH_LITERAL("Resources"));
- #else
- base::PathService::Get(base::DIR_MODULE, &pak_dir);
- #endif
- ui::ResourceBundle::InitSharedInstanceWithLocale(
- locale, nullptr, ui::ResourceBundle::LOAD_COMMON_RESOURCES);
- ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance();
- bundle.ReloadLocaleResources(locale);
- bundle.AddDataPackFromPath(pak_dir.Append(FILE_PATH_LITERAL("resources.pak")),
- ui::SCALE_FACTOR_NONE);
- #if BUILDFLAG(ENABLE_PDF_VIEWER)
- NOTIMPLEMENTED()
- << "Hi, whoever's fixing PDF support! Thanks! The pdf "
- "viewer resources haven't been ported over to the GN build yet, so "
- "you'll probably need to change this bit of code.";
- bundle.AddDataPackFromPath(
- pak_dir.Append(FILE_PATH_LITERAL("pdf_viewer_resources.pak")),
- ui::GetSupportedScaleFactors()[0]);
- #endif // BUILDFLAG(ENABLE_PDF_VIEWER)
- }
- MainDelegate::MainDelegate() {}
- MainDelegate::~MainDelegate() {}
- std::unique_ptr<ContentClient> MainDelegate::CreateContentClient() {
- return std::unique_ptr<ContentClient>(new ContentClient);
- }
- bool MainDelegate::BasicStartupComplete(int* exit_code) {
- content_client_ = CreateContentClient();
- SetContentClient(content_client_.get());
- #if defined(OS_MACOSX)
- OverrideChildProcessPath();
- OverrideFrameworkBundlePath();
- #endif
- return false;
- }
- void MainDelegate::PreSandboxStartup() {
- auto cmd = *base::CommandLine::ForCurrentProcess();
- std::string process_type = cmd.GetSwitchValueASCII(switches::kProcessType);
- // Initialize ResourceBundle which handles files loaded from external
- // sources. The language should have been passed in to us from the
- // browser process as a command line flag.
- if (SubprocessNeedsResourceBundle(process_type)) {
- std::string locale = cmd.GetSwitchValueASCII(switches::kLang);
- LoadResourceBundle(locale);
- }
- }
- content::ContentBrowserClient* MainDelegate::CreateContentBrowserClient() {
- browser_client_ = CreateBrowserClient();
- return browser_client_.get();
- }
- std::unique_ptr<BrowserClient> MainDelegate::CreateBrowserClient() {
- return std::unique_ptr<BrowserClient>(new BrowserClient);
- }
- } // namespace brightray
|