Chromium Code Reviews| Index: chromecast/shell/app/cast_main_delegate.cc |
| diff --git a/chromecast/shell/app/cast_main_delegate.cc b/chromecast/shell/app/cast_main_delegate.cc |
| index 1fb2ad773a4aa763e804c46b4fa40983bd7070a7..f713f5bffe5853798fcceb45c0ae13ffd1bbe453 100644 |
| --- a/chromecast/shell/app/cast_main_delegate.cc |
| +++ b/chromecast/shell/app/cast_main_delegate.cc |
| @@ -4,12 +4,16 @@ |
| #include "chromecast/shell/app/cast_main_delegate.h" |
| +#include "base/cpu.h" |
| #include "base/logging.h" |
| #include "base/path_service.h" |
| +#include "base/posix/global_descriptors.h" |
| #include "chromecast/common/cast_paths.h" |
| #include "chromecast/common/cast_resource_delegate.h" |
| +#include "chromecast/common/global_descriptors.h" |
| #include "chromecast/shell/browser/cast_content_browser_client.h" |
| #include "chromecast/shell/renderer/cast_content_renderer_client.h" |
| +#include "content/public/browser/browser_main_runner.h" |
| #include "content/public/common/content_switches.h" |
| #include "ui/base/resource/resource_bundle.h" |
| @@ -23,26 +27,74 @@ CastMainDelegate::~CastMainDelegate() { |
| } |
| bool CastMainDelegate::BasicStartupComplete(int* exit_code) { |
| + RegisterPathProvider(); |
| + |
| logging::LoggingSettings settings; |
| +#if defined(OS_ANDROID) |
| + base::FilePath log_file; |
| + PathService::Get(FILE_CAST_ANDROID_LOG, &log_file); |
| + settings.logging_dest = logging::LOG_TO_ALL; |
| + settings.log_file = log_file.value().c_str(); |
| + settings.delete_old = logging::DELETE_OLD_LOG_FILE; |
| +#else |
| settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
| +#endif // defined(OS_ANDROID) |
| logging::InitLogging(settings); |
| // Time, process, and thread ID are available through logcat. |
| logging::SetLogItems(true, true, false, false); |
| - RegisterPathProvider(); |
| - |
| content::SetContentClient(&content_client_); |
| return false; |
| } |
| void CastMainDelegate::PreSandboxStartup() { |
| +#if defined(ARCH_CPU_ARM_FAMILY) && (defined(OS_ANDROID) || defined(OS_LINUX)) |
| + // Create an instance of the CPU class to parse /proc/cpuinfo and cache the |
|
Yaron
2014/09/06 01:10:14
why is LINUX included here?
gunsch
2014/09/08 19:42:23
Not sure, but ShellMainDelegate and ChromeMainDele
|
| + // results. This data needs to be cached when file-reading is still allowed, |
| + // since base::CPU expects to be callable later, when file-reading is no |
| + // longer allowed. |
| + base::CPU cpu_info; |
| +#endif |
| + |
| InitializeResourceBundle(); |
| } |
| +int CastMainDelegate::RunProcess( |
| + const std::string& process_type, |
| + const content::MainFunctionParams& main_function_params) { |
| +#if defined(OS_ANDROID) |
| + if (!process_type.empty()) |
| + return -1; |
| + |
| + // Note: Android must handle running its own browser process. |
| + // See ChromeMainDelegateAndroid::RunProcess. |
| + browser_runner_.reset(content::BrowserMainRunner::Create()); |
| + return browser_runner_->Initialize(main_function_params); |
| +#else |
| + return -1; |
| +#endif // defined(OS_ANDROID) |
| +} |
| + |
| +#if !defined(OS_ANDROID) |
| void CastMainDelegate::ZygoteForked() { |
| } |
| +#endif // !defined(OS_ANDROID) |
| void CastMainDelegate::InitializeResourceBundle() { |
| +#if defined(OS_ANDROID) |
| + // On Android, the renderer runs with a different UID and can never access |
| + // the file system. Use the file descriptor passed in at launch time. |
| + int pak_fd = |
| + base::GlobalDescriptors::GetInstance()->MaybeGet(kAndroidPakDescriptor); |
| + if (pak_fd >= 0) { |
| + ui::ResourceBundle::InitSharedInstanceWithPakFileRegion( |
| + base::File(pak_fd), base::MemoryMappedFile::Region::kWholeFile); |
| + ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile( |
| + base::File(pak_fd), ui::SCALE_FACTOR_100P); |
| + return; |
| + } |
| +#endif |
| + |
| resource_delegate_.reset(new CastResourceDelegate()); |
| // TODO(gunsch): Use LOAD_COMMON_RESOURCES once ResourceBundle no longer |
| // hardcodes resource file names. |