Chromium Code Reviews| Index: apps/shell/shell_main_delegate.cc |
| diff --git a/apps/shell/shell_main_delegate.cc b/apps/shell/shell_main_delegate.cc |
| index 2406ca97786017b432098b2cb42f68a66e930a3f..88705292f5ec6cddbf227f8df8f3baacd17cbee3 100644 |
| --- a/apps/shell/shell_main_delegate.cc |
| +++ b/apps/shell/shell_main_delegate.cc |
| @@ -6,13 +6,21 @@ |
| #include "apps/shell/shell_content_browser_client.h" |
| #include "apps/shell/shell_content_client.h" |
| +#include "apps/shell/shell_content_renderer_client.h" |
| #include "base/command_line.h" |
| #include "base/files/file_path.h" |
| #include "base/logging.h" |
| #include "base/path_service.h" |
| +#include "chrome/common/chrome_paths.h" |
| #include "content/public/browser/browser_main_runner.h" |
| +#include "content/public/common/content_switches.h" |
| +#include "extensions/common/extension_paths.h" |
| #include "ui/base/resource/resource_bundle.h" |
| +#if defined(OS_CHROMEOS) |
| +#include "chromeos/chromeos_paths.h" |
| +#endif |
| + |
| namespace { |
| void InitLogging() { |
| @@ -41,11 +49,21 @@ bool ShellMainDelegate::BasicStartupComplete(int* exit_code) { |
| InitLogging(); |
| content_client_.reset(new ShellContentClient); |
| SetContentClient(content_client_.get()); |
| + |
| + chrome::RegisterPathProvider(); |
| +#if defined(OS_CHROMEOS) |
| + chromeos::RegisterPathProvider(); |
| +#endif |
| + extensions::RegisterPathProvider(); |
| return false; |
| } |
| void ShellMainDelegate::PreSandboxStartup() { |
| - InitializeResourceBundle(); |
| + std::string process_type = |
| + CommandLine::ForCurrentProcess()->GetSwitchValueASCII( |
| + switches::kProcessType); |
| + if (ProcessNeedsResourceBundle(process_type)) |
| + InitializeResourceBundle(); |
| } |
| content::ContentBrowserClient* ShellMainDelegate::CreateContentBrowserClient() { |
| @@ -55,13 +73,32 @@ content::ContentBrowserClient* ShellMainDelegate::CreateContentBrowserClient() { |
| content::ContentRendererClient* |
| ShellMainDelegate::CreateContentRendererClient() { |
| - // TODO(jamescook): Create a ShellContentRendererClient with the extensions |
| - // initialization pieces of ChromeContentRendererClient. |
| - return content::ContentMainDelegate::CreateContentRendererClient(); |
| + renderer_client_.reset(new ShellContentRendererClient); |
| + return renderer_client_.get(); |
| +} |
| + |
| +// static |
| +bool ShellMainDelegate::ProcessNeedsResourceBundle( |
| + const std::string& process_type) { |
| + // Browser process has no process type. |
| + if (process_type.empty()) |
|
Yoyo Zhou
2014/01/30 00:49:54
nit: combine this with the below?
James Cook
2014/01/30 01:10:13
Done.
|
| + return true; |
| + |
| + // On Linux the zygote process opens the resources for the renderers. |
| + return process_type == switches::kZygoteProcess || |
| + process_type == switches::kRendererProcess || |
| + process_type == switches::kUtilityProcess; |
| } |
| void ShellMainDelegate::InitializeResourceBundle() { |
| ui::ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL); |
| + |
| + // The extensions system needs manifest data from the Chrome PAK file. |
| + // TODO(jamescook): app_shell needs its own manifest data file. |
| + base::FilePath resources_pack_path; |
| + PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path); |
| + ResourceBundle::GetSharedInstance().AddDataPackFromPath( |
| + resources_pack_path, ui::SCALE_FACTOR_NONE); |
| } |
| } // namespace apps |