1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/shell/browser/cast_browser_main_parts.h" 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 96e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "base/prefs/pref_registry_simple.h" 106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromecast/common/chromecast_config.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromecast/metrics/cast_metrics_service_client.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/net/network_change_notifier_cast.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/net/network_change_notifier_factory_cast.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/service/cast_service.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/shell/browser/cast_browser_context.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromecast/shell/browser/cast_browser_process.h" 176e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromecast/shell/browser/devtools/remote_debugging_server.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "chromecast/shell/browser/url_request_context_factory.h" 196e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "chromecast/shell/browser/webui/webui_cast.h" 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h" 216e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "content/public/common/content_switches.h" 22116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "net/android/network_change_notifier_factory_android.h" 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // defined(OS_ANDROID) 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace chromecast { 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace shell { 29116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace { 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochstruct DefaultCommandLineSwitch { 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* const switch_name; 34116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const char* const switch_value; 35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 37116680a4aac90f2aa7413d9095a592090648e557Ben MurdochDefaultCommandLineSwitch g_default_switches[] = { 386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { switches::kDisableApplicationCache, "" }, 396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) { switches::kDisablePlugins, "" }, 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Always enable HTMLMediaElement logs. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci { switches::kBlinkPlatformLogChannels, "Media"}, 42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch { NULL, NULL }, // Termination 43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 45116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid AddDefaultCommandLineSwitches(CommandLine* command_line) { 46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch int i = 0; 47116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch while (g_default_switches[i].switch_name != NULL) { 48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch command_line->AppendSwitchASCII( 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string(g_default_switches[i].switch_name), 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch std::string(g_default_switches[i].switch_value)); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ++i; 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 57116680a4aac90f2aa7413d9095a592090648e557Ben MurdochCastBrowserMainParts::CastBrowserMainParts( 58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const content::MainFunctionParams& parameters, 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch URLRequestContextFactory* url_request_context_factory) 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : BrowserMainParts(), 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_(new CastBrowserProcess()), 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parameters_(parameters), 63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url_request_context_factory_(url_request_context_factory) { 64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch CommandLine* command_line = CommandLine::ForCurrentProcess(); 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch AddDefaultCommandLineSwitches(command_line); 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 68116680a4aac90f2aa7413d9095a592090648e557Ben MurdochCastBrowserMainParts::~CastBrowserMainParts() { 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CastBrowserMainParts::PreMainMessageLoopStart() { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci net::NetworkChangeNotifier::SetFactory( 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new net::NetworkChangeNotifierFactoryAndroid()); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#else 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch net::NetworkChangeNotifier::SetFactory( 77116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch new NetworkChangeNotifierFactoryCast()); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // defined(OS_ANDROID) 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CastBrowserMainParts::PostMainMessageLoopStart() { 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if defined(OS_ANDROID) 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopForUI::current()->Start(); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // defined(OS_ANDROID) 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdochint CastBrowserMainParts::PreCreateThreads() { 886e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) ChromecastConfig::Create(new PrefRegistrySimple()); 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return 0; 90116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 92116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CastBrowserMainParts::PreMainMessageLoopRun() { 93116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch url_request_context_factory_->InitializeOnUIThread(); 94116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->SetBrowserContext( 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new CastBrowserContext(url_request_context_factory_)); 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->SetMetricsServiceClient( 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci metrics::CastMetricsServiceClient::Create( 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserThread::GetBlockingPool(), 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ChromecastConfig::GetInstance()->pref_service(), 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->browser_context()->GetRequestContext())); 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->SetRemoteDebuggingServer(new RemoteDebuggingServer()); 1036e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 1046e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) InitializeWebUI(); 105116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->SetCastService( 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CastService::Create(cast_browser_process_->browser_context(), 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci url_request_context_factory_->GetSystemGetter())); 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->cast_service()->Start(); 110116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 111116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 112116680a4aac90f2aa7413d9095a592090648e557Ben Murdochbool CastBrowserMainParts::MainMessageLoopRun(int* result_code) { 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // If parameters_.ui_task is not NULL, we are running browser tests. In this 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // case, the browser's main message loop will not run. 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (parameters_.ui_task) { 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci parameters_.ui_task->Run(); 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } else { 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoopForUI::current()->Run(); 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 123116680a4aac90f2aa7413d9095a592090648e557Ben Murdochvoid CastBrowserMainParts::PostMainMessageLoopRun() { 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_->cast_service()->Stop(); 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci cast_browser_process_.reset(); 126116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} 127116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 128116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace shell 129116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace chromecast 130