diff --git a/atom/app/atom_main_delegate.cc b/atom/app/atom_main_delegate.cc index 84da7cafb1..8c7b7b67b9 100644 --- a/atom/app/atom_main_delegate.cc +++ b/atom/app/atom_main_delegate.cc @@ -20,12 +20,17 @@ #include "base/debug/stack_trace.h" #include "base/environment.h" #include "base/logging.h" +#include "base/mac/bundle_locations.h" +#include "base/path_service.h" #include "chrome/common/chrome_paths.h" #include "content/public/common/content_switches.h" +#include "electron/buildflags/buildflags.h" #include "ipc/ipc_buildflags.h" +#include "services/service_manager/embedder/switches.h" #include "services/service_manager/sandbox/switches.h" #include "ui/base/l10n/l10n_util.h" #include "ui/base/resource/resource_bundle.h" +#include "ui/base/ui_base_switches.h" #if BUILDFLAG(IPC_MESSAGE_LOG_ENABLED) #define IPC_MESSAGE_MACROS_LOG_ENABLED @@ -50,6 +55,25 @@ bool IsBrowserProcess(base::CommandLine* cmd) { return process_type.empty(); } +// 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; +} + #if defined(OS_WIN) void InvalidParameterHandler(const wchar_t*, const wchar_t*, @@ -62,6 +86,37 @@ void InvalidParameterHandler(const wchar_t*, } // 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) +} + AtomMainDelegate::AtomMainDelegate() {} AtomMainDelegate::~AtomMainDelegate() {} @@ -118,6 +173,8 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { chrome::RegisterPathProvider(); #if defined(OS_MACOSX) + OverrideChildProcessPath(); + OverrideFrameworkBundlePath(); SetUpBundleOverrides(); #endif @@ -132,14 +189,23 @@ bool AtomMainDelegate::BasicStartupComplete(int* exit_code) { content_client_ = std::make_unique(); SetContentClient(content_client_.get()); - return brightray::MainDelegate::BasicStartupComplete(exit_code); + return false; } void AtomMainDelegate::PreSandboxStartup() { - brightray::MainDelegate::PreSandboxStartup(); - auto* command_line = base::CommandLine::ForCurrentProcess(); + std::string process_type = + command_line->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 = command_line->GetSwitchValueASCII(::switches::kLang); + LoadResourceBundle(locale); + } + // Only append arguments for browser process. if (!IsBrowserProcess(command_line)) return; diff --git a/atom/app/atom_main_delegate.h b/atom/app/atom_main_delegate.h index 2194031b46..7e21a0b837 100644 --- a/atom/app/atom_main_delegate.h +++ b/atom/app/atom_main_delegate.h @@ -8,12 +8,14 @@ #include #include -#include "brightray/common/main_delegate.h" +#include "content/public/app/content_main_delegate.h" #include "content/public/common/content_client.h" namespace atom { -class AtomMainDelegate : public brightray::MainDelegate { +void LoadResourceBundle(const std::string& locale); + +class AtomMainDelegate : public content::ContentMainDelegate { public: AtomMainDelegate(); ~AtomMainDelegate() override; @@ -34,14 +36,10 @@ class AtomMainDelegate : public brightray::MainDelegate { bool DelaySandboxInitialization(const std::string& process_type) override; #endif - // brightray::MainDelegate: -#if defined(OS_MACOSX) - void OverrideChildProcessPath() override; - void OverrideFrameworkBundlePath() override; -#endif - private: #if defined(OS_MACOSX) + void OverrideChildProcessPath(); + void OverrideFrameworkBundlePath(); void SetUpBundleOverrides(); #endif diff --git a/brightray/BUILD.gn b/brightray/BUILD.gn index 492c935d86..57778f3e85 100644 --- a/brightray/BUILD.gn +++ b/brightray/BUILD.gn @@ -30,8 +30,5 @@ static_library("brightray") { "common/application_info_win.cc", "common/mac/main_application_bundle.h", "common/mac/main_application_bundle.mm", - "common/main_delegate.cc", - "common/main_delegate.h", - "common/main_delegate_mac.mm", ] } diff --git a/brightray/browser/browser_main_parts.cc b/brightray/browser/browser_main_parts.cc index 9c9875c923..dcc84b9420 100644 --- a/brightray/browser/browser_main_parts.cc +++ b/brightray/browser/browser_main_parts.cc @@ -16,6 +16,7 @@ #include // for g_setenv() #endif +#include "atom/app/atom_main_delegate.h" #include "base/base_switches.h" #include "base/command_line.h" #include "base/feature_list.h" @@ -23,7 +24,6 @@ #include "base/strings/string_number_conversions.h" #include "base/strings/utf_string_conversions.h" #include "brightray/common/application_info.h" -#include "brightray/common/main_delegate.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_features.h" #include "content/public/common/content_switches.h" @@ -264,7 +264,7 @@ void BrowserMainParts::PreMainMessageLoopStart() { if (custom_locale_.empty()) l10n_util::OverrideLocaleWithCocoaLocale(); #endif - LoadResourceBundle(custom_locale_); + atom::LoadResourceBundle(custom_locale_); #if defined(OS_MACOSX) InitializeMainNib(); #endif diff --git a/brightray/common/main_delegate.cc b/brightray/common/main_delegate.cc deleted file mode 100644 index fa687ee193..0000000000 --- a/brightray/common/main_delegate.cc +++ /dev/null @@ -1,99 +0,0 @@ -// 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 - -#include "base/command_line.h" -#include "base/mac/bundle_locations.h" -#include "base/path_service.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() {} - -bool MainDelegate::BasicStartupComplete(int* exit_code) { -#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); - } -} - -} // namespace brightray diff --git a/brightray/common/main_delegate.h b/brightray/common/main_delegate.h deleted file mode 100644 index 9b281ac40f..0000000000 --- a/brightray/common/main_delegate.h +++ /dev/null @@ -1,49 +0,0 @@ -// 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. - -#ifndef BRIGHTRAY_COMMON_MAIN_DELEGATE_H_ -#define BRIGHTRAY_COMMON_MAIN_DELEGATE_H_ - -#include -#include - -#include "base/macros.h" -#include "content/public/app/content_main_delegate.h" - -namespace base { -class FilePath; -} - -namespace ui { -class ResourceBundle; -} - -namespace brightray { - -void LoadResourceBundle(const std::string& locale); -void LoadCommonResources(); - -class MainDelegate : public content::ContentMainDelegate { - public: - MainDelegate(); - ~MainDelegate() override; - - protected: -#if defined(OS_MACOSX) - // Subclasses can override this to custom the paths of child process and - // framework bundle. - virtual void OverrideChildProcessPath(); - virtual void OverrideFrameworkBundlePath(); -#endif - - bool BasicStartupComplete(int* exit_code) override; - void PreSandboxStartup() override; - - private: - DISALLOW_COPY_AND_ASSIGN(MainDelegate); -}; - -} // namespace brightray - -#endif // BRIGHTRAY_COMMON_MAIN_DELEGATE_H_ diff --git a/brightray/common/main_delegate_mac.mm b/brightray/common/main_delegate_mac.mm deleted file mode 100644 index e91a65ba4c..0000000000 --- a/brightray/common/main_delegate_mac.mm +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright (c) 2012 The Chromium Authors. All rights reserved. -// Copyright (c) 2013 Adam Roben . All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE-CHROMIUM file. - -#import "brightray/common/main_delegate.h" - -#include "base/command_line.h" -#include "base/mac/bundle_locations.h" -#include "base/mac/foundation_util.h" -#include "base/path_service.h" -#include "base/strings/stringprintf.h" -#include "base/strings/sys_string_conversions.h" -#include "brightray/common/application_info.h" -#include "brightray/common/mac/main_application_bundle.h" -#include "content/public/common/content_paths.h" -#include "content/public/common/content_switches.h" -#include "ui/base/resource/resource_bundle.h" - -namespace brightray { - -namespace { - -base::FilePath GetFrameworksPath() { - return MainApplicationBundlePath().Append("Contents").Append("Frameworks"); -} - -} // namespace - -void MainDelegate::OverrideFrameworkBundlePath() { - base::FilePath helper_path = - GetFrameworksPath().Append(GetApplicationName() + " Framework.framework"); - - base::mac::SetOverrideFrameworkBundlePath(helper_path); -} - -void MainDelegate::OverrideChildProcessPath() { - base::FilePath helper_path = GetFrameworksPath() - .Append(GetApplicationName() + " Helper.app") - .Append("Contents") - .Append("MacOS") - .Append(GetApplicationName() + " Helper"); - - base::PathService::Override(content::CHILD_PROCESS_EXE, helper_path); -} - -} // namespace brightray