| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chromecast/browser/cast_browser_main_parts.h" | 5 #include "chromecast/browser/cast_browser_main_parts.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <string> | 10 #include <string> |
| 11 | 11 |
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 13 #include "base/files/file_util.h" | 13 #include "base/files/file_util.h" |
| 14 #include "base/macros.h" | 14 #include "base/macros.h" |
| 15 #include "base/memory/ptr_util.h" | 15 #include "base/memory/ptr_util.h" |
| 16 #include "base/message_loop/message_loop.h" | 16 #include "base/message_loop/message_loop.h" |
| 17 #include "base/path_service.h" | 17 #include "base/path_service.h" |
| 18 #include "base/run_loop.h" | 18 #include "base/run_loop.h" |
| 19 #include "base/single_thread_task_runner.h" | 19 #include "base/single_thread_task_runner.h" |
| 20 #include "base/threading/thread.h" | 20 #include "base/threading/thread.h" |
| 21 #include "base/threading/thread_task_runner_handle.h" | 21 #include "base/threading/thread_task_runner_handle.h" |
| 22 #include "build/build_config.h" | 22 #include "build/build_config.h" |
| 23 #include "cc/base/switches.h" | 23 #include "cc/base/switches.h" |
| 24 #include "chromecast/base/cast_constants.h" | 24 #include "chromecast/base/cast_constants.h" |
| 25 #include "chromecast/base/cast_features.h" | |
| 26 #include "chromecast/base/cast_paths.h" | 25 #include "chromecast/base/cast_paths.h" |
| 27 #include "chromecast/base/cast_sys_info_util.h" | 26 #include "chromecast/base/cast_sys_info_util.h" |
| 28 #include "chromecast/base/chromecast_switches.h" | 27 #include "chromecast/base/chromecast_switches.h" |
| 29 #include "chromecast/base/metrics/cast_metrics_helper.h" | 28 #include "chromecast/base/metrics/cast_metrics_helper.h" |
| 30 #include "chromecast/base/metrics/grouped_histogram.h" | 29 #include "chromecast/base/metrics/grouped_histogram.h" |
| 31 #include "chromecast/base/pref_names.h" | |
| 32 #include "chromecast/base/version.h" | 30 #include "chromecast/base/version.h" |
| 33 #include "chromecast/browser/cast_browser_context.h" | 31 #include "chromecast/browser/cast_browser_context.h" |
| 34 #include "chromecast/browser/cast_browser_process.h" | 32 #include "chromecast/browser/cast_browser_process.h" |
| 35 #include "chromecast/browser/cast_content_browser_client.h" | 33 #include "chromecast/browser/cast_content_browser_client.h" |
| 36 #include "chromecast/browser/cast_memory_pressure_monitor.h" | 34 #include "chromecast/browser/cast_memory_pressure_monitor.h" |
| 37 #include "chromecast/browser/cast_net_log.h" | 35 #include "chromecast/browser/cast_net_log.h" |
| 38 #include "chromecast/browser/devtools/remote_debugging_server.h" | 36 #include "chromecast/browser/devtools/remote_debugging_server.h" |
| 39 #include "chromecast/browser/geolocation/cast_access_token_store.h" | 37 #include "chromecast/browser/geolocation/cast_access_token_store.h" |
| 40 #include "chromecast/browser/media/media_caps_impl.h" | 38 #include "chromecast/browser/media/media_caps_impl.h" |
| 41 #include "chromecast/browser/metrics/cast_metrics_prefs.h" | 39 #include "chromecast/browser/metrics/cast_metrics_prefs.h" |
| (...skipping 230 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 272 } | 270 } |
| 273 } | 271 } |
| 274 | 272 |
| 275 } // namespace | 273 } // namespace |
| 276 | 274 |
| 277 CastBrowserMainParts::CastBrowserMainParts( | 275 CastBrowserMainParts::CastBrowserMainParts( |
| 278 const content::MainFunctionParams& parameters, | 276 const content::MainFunctionParams& parameters, |
| 279 URLRequestContextFactory* url_request_context_factory) | 277 URLRequestContextFactory* url_request_context_factory) |
| 280 : BrowserMainParts(), | 278 : BrowserMainParts(), |
| 281 cast_browser_process_(new CastBrowserProcess()), | 279 cast_browser_process_(new CastBrowserProcess()), |
| 282 field_trial_list_(nullptr), | |
| 283 parameters_(parameters), | 280 parameters_(parameters), |
| 284 url_request_context_factory_(url_request_context_factory), | 281 url_request_context_factory_(url_request_context_factory), |
| 285 net_log_(new CastNetLog()), | 282 net_log_(new CastNetLog()), |
| 286 media_caps_(new media::MediaCapsImpl()) { | 283 media_caps_(new media::MediaCapsImpl()) { |
| 287 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 284 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 288 AddDefaultCommandLineSwitches(command_line); | 285 AddDefaultCommandLineSwitches(command_line); |
| 289 | 286 |
| 290 #if BUILDFLAG(IS_CAST_USING_CMA_BACKEND) | 287 #if BUILDFLAG(IS_CAST_USING_CMA_BACKEND) |
| 291 media_resource_tracker_ = nullptr; | 288 media_resource_tracker_ = nullptr; |
| 292 #endif // BUILDFLAG(IS_CAST_USING_CMA_BACKEND) | 289 #endif // BUILDFLAG(IS_CAST_USING_CMA_BACKEND) |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 408 breakpad::CrashDumpObserver::Create(); | 405 breakpad::CrashDumpObserver::Create(); |
| 409 breakpad::CrashDumpObserver::GetInstance()->RegisterClient( | 406 breakpad::CrashDumpObserver::GetInstance()->RegisterClient( |
| 410 base::MakeUnique<breakpad::CrashDumpManager>(crash_dumps_dir, | 407 base::MakeUnique<breakpad::CrashDumpManager>(crash_dumps_dir, |
| 411 kAndroidMinidumpDescriptor)); | 408 kAndroidMinidumpDescriptor)); |
| 412 #else | 409 #else |
| 413 base::FilePath home_dir; | 410 base::FilePath home_dir; |
| 414 CHECK(PathService::Get(DIR_CAST_HOME, &home_dir)); | 411 CHECK(PathService::Get(DIR_CAST_HOME, &home_dir)); |
| 415 if (!base::CreateDirectory(home_dir)) | 412 if (!base::CreateDirectory(home_dir)) |
| 416 return 1; | 413 return 1; |
| 417 | 414 |
| 418 scoped_refptr<PrefRegistrySimple> pref_registry(new PrefRegistrySimple()); | |
| 419 metrics::RegisterPrefs(pref_registry.get()); | |
| 420 PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry.get()); | |
| 421 cast_browser_process_->SetPrefService( | |
| 422 PrefServiceHelper::CreatePrefService(pref_registry.get())); | |
| 423 | |
| 424 // As soon as the PrefService is set, initialize the base::FeatureList, so | |
| 425 // objects initialized after this point can use features from | |
| 426 // base::FeatureList. | |
| 427 const auto* features_dict = | |
| 428 cast_browser_process_->pref_service()->GetDictionary( | |
| 429 prefs::kLatestDCSFeatures); | |
| 430 const auto* experiment_ids = cast_browser_process_->pref_service()->GetList( | |
| 431 prefs::kActiveDCSExperiments); | |
| 432 auto* command_line = base::CommandLine::ForCurrentProcess(); | |
| 433 InitializeFeatureList( | |
| 434 *features_dict, *experiment_ids, | |
| 435 command_line->GetSwitchValueASCII(switches::kEnableFeatures), | |
| 436 command_line->GetSwitchValueASCII(switches::kDisableFeatures)); | |
| 437 | |
| 438 // Hook for internal code | 415 // Hook for internal code |
| 439 cast_browser_process_->browser_client()->PreCreateThreads(); | 416 cast_browser_process_->browser_client()->PreCreateThreads(); |
| 440 | 417 |
| 441 // Set GL strings so GPU config code can make correct feature blacklisting/ | 418 // Set GL strings so GPU config code can make correct feature blacklisting/ |
| 442 // whitelisting decisions. | 419 // whitelisting decisions. |
| 443 // Note: SetGLStrings can be called before GpuDataManager::Initialize. | 420 // Note: SetGLStrings can be called before GpuDataManager::Initialize. |
| 444 std::unique_ptr<CastSysInfo> sys_info = CreateSysInfo(); | 421 std::unique_ptr<CastSysInfo> sys_info = CreateSysInfo(); |
| 445 content::GpuDataManager::GetInstance()->SetGLStrings( | 422 content::GpuDataManager::GetInstance()->SetGLStrings( |
| 446 sys_info->GetGlVendor(), sys_info->GetGlRenderer(), | 423 sys_info->GetGlVendor(), sys_info->GetGlRenderer(), |
| 447 sys_info->GetGlVersion()); | 424 sys_info->GetGlVersion()); |
| 448 #endif | 425 #endif |
| 449 | 426 |
| 450 #if defined(USE_AURA) | 427 #if defined(USE_AURA) |
| 451 cast_browser_process_->SetCastScreen(base::WrapUnique(new CastScreen())); | 428 cast_browser_process_->SetCastScreen(base::WrapUnique(new CastScreen())); |
| 452 DCHECK(!display::Screen::GetScreen()); | 429 DCHECK(!display::Screen::GetScreen()); |
| 453 display::Screen::SetScreenInstance(cast_browser_process_->cast_screen()); | 430 display::Screen::SetScreenInstance(cast_browser_process_->cast_screen()); |
| 454 #endif | 431 #endif |
| 455 | 432 |
| 456 content::ChildProcessSecurityPolicy::GetInstance()->RegisterWebSafeScheme( | 433 content::ChildProcessSecurityPolicy::GetInstance()->RegisterWebSafeScheme( |
| 457 kChromeResourceScheme); | 434 kChromeResourceScheme); |
| 458 return 0; | 435 return 0; |
| 459 } | 436 } |
| 460 | 437 |
| 461 void CastBrowserMainParts::PreMainMessageLoopRun() { | 438 void CastBrowserMainParts::PreMainMessageLoopRun() { |
| 439 scoped_refptr<PrefRegistrySimple> pref_registry(new PrefRegistrySimple()); |
| 440 metrics::RegisterPrefs(pref_registry.get()); |
| 441 PrefProxyConfigTrackerImpl::RegisterPrefs(pref_registry.get()); |
| 442 cast_browser_process_->SetPrefService( |
| 443 PrefServiceHelper::CreatePrefService(pref_registry.get())); |
| 462 | 444 |
| 463 #if !defined(OS_ANDROID) | 445 #if !defined(OS_ANDROID) |
| 464 memory_pressure_monitor_.reset(new CastMemoryPressureMonitor()); | 446 memory_pressure_monitor_.reset(new CastMemoryPressureMonitor()); |
| 465 #endif // defined(OS_ANDROID) | 447 #endif // defined(OS_ANDROID) |
| 466 | 448 |
| 467 cast_browser_process_->SetNetLog(net_log_.get()); | 449 cast_browser_process_->SetNetLog(net_log_.get()); |
| 468 url_request_context_factory_->InitializeOnUIThread(net_log_.get()); | 450 url_request_context_factory_->InitializeOnUIThread(net_log_.get()); |
| 469 | 451 |
| 470 cast_browser_process_->SetConnectivityChecker(ConnectivityChecker::Create( | 452 cast_browser_process_->SetConnectivityChecker(ConnectivityChecker::Create( |
| 471 content::BrowserThread::GetTaskRunnerForThread( | 453 content::BrowserThread::GetTaskRunnerForThread( |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 582 | 564 |
| 583 void CastBrowserMainParts::PostDestroyThreads() { | 565 void CastBrowserMainParts::PostDestroyThreads() { |
| 584 #if !defined(OS_ANDROID) | 566 #if !defined(OS_ANDROID) |
| 585 media_resource_tracker_->FinalizeAndDestroy(); | 567 media_resource_tracker_->FinalizeAndDestroy(); |
| 586 media_resource_tracker_ = nullptr; | 568 media_resource_tracker_ = nullptr; |
| 587 #endif | 569 #endif |
| 588 } | 570 } |
| 589 | 571 |
| 590 } // namespace shell | 572 } // namespace shell |
| 591 } // namespace chromecast | 573 } // namespace chromecast |
| OLD | NEW |