15f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_browser_main_parts.h" 65f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/command_line.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "base/run_loop.h" 9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/omaha_query_params/omaha_query_params.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/child_process_security_policy.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/context_factory.h" 135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/common/result_codes.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/shell/browser/shell_devtools_delegate.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/shell/browser/shell_net_log.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/app_window/app_window_client.h" 1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "extensions/browser/browser_context_keyed_service_factories.h" 185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "extensions/browser/extension_system.h" 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/common/constants.cc" 205f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_browser_context.h" 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_browser_main_delegate.h" 225f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_desktop_controller.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/shell/browser/shell_device_client.h" 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_extension_system.h" 255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_extension_system_factory.h" 265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_extensions_browser_client.h" 275f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_omaha_query_params_delegate.h" 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/common/shell_extensions_client.h" 295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/common/switches.h" 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/aura/env.h" 31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "ui/aura/window_tree_host.h" 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/base/ime/input_method_initializer.h" 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "ui/base/resource/resource_bundle.h" 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(OS_ANDROID) && !defined(OS_IOS) 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/storage_monitor/storage_monitor.h" 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS) 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/audio/cras_audio_handler.h" 410529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "chromeos/dbus/dbus_thread_manager.h" 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chromeos/network/network_handler.h" 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/shell/browser/shell_audio_controller_chromeos.h" 445f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/shell/browser/shell_network_controller_chromeos.h" 450529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 460529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 4703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if !defined(DISABLE_NACL) 4803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/nacl/browser/nacl_browser.h" 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "components/nacl/browser/nacl_process_host.h" 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "content/public/browser/browser_thread.h" 5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "extensions/shell/browser/shell_nacl_browser_delegate.h" 5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 5303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)using content::BrowserContext; 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 565f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)namespace extensions { 5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ShellBrowserMainParts::ShellBrowserMainParts( 59cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) const content::MainFunctionParams& parameters, 60cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) ShellBrowserMainDelegate* browser_main_delegate) 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : extension_system_(NULL), 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch parameters_(parameters), 63cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) run_message_loop_(true), 64cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser_main_delegate_(browser_main_delegate) { 65cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)ShellBrowserMainParts::~ShellBrowserMainParts() { 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::PreMainMessageLoopStart() { 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jamescook): Initialize touch here? 725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::PostMainMessageLoopStart() { 750529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS) 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Perform initialization of D-Bus objects here rather than in the below 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // helper classes so those classes' tests can initialize stub versions of the 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // D-Bus objects. 790529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::DBusThreadManager::Initialize(); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::NetworkHandler::Initialize(); 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch network_controller_.reset(new ShellNetworkController( 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::CommandLine::ForCurrentProcess()->GetSwitchValueNative( 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch switches::kAppShellPreferredNetwork))); 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::CrasAudioHandler::Initialize( 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ShellAudioController::PrefHandler()); 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci audio_controller_.reset(new ShellAudioController()); 89f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#else 90f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) // Non-Chrome OS platforms are for developer convenience, so use a test IME. 91f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) ui::InitializeInputMethodForTesting(); 920529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::PreEarlyInitialization() { 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int ShellBrowserMainParts::PreCreateThreads() { 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(jamescook): Initialize chromeos::CrosSettings here? 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::ChildProcessSecurityPolicy::GetInstance()->RegisterWebSafeScheme( 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExtensionScheme); 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::ChildProcessSecurityPolicy::GetInstance()->RegisterWebSafeScheme( 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExtensionResourceScheme); 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Return no error. 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return 0; 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::PreMainMessageLoopRun() { 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Initialize our "profile" equivalent. 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch browser_context_.reset(new ShellBrowserContext); 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci aura::Env::GetInstance()->set_context_factory(content::GetContextFactory()); 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(OS_ANDROID) && !defined(OS_IOS) 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci storage_monitor::StorageMonitor::Create(); 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 12046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) desktop_controller_.reset(browser_main_delegate_->CreateDesktopController()); 1215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 122effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch // NOTE: Much of this is culled from chrome/test/base/chrome_test_suite.cc 1236e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) // TODO(jamescook): Initialize user_manager::UserManager. 1245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) net_log_.reset(new content::ShellNetLog("app_shell")); 1255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci device_client_.reset(new ShellDeviceClient); 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions_client_.reset(new ShellExtensionsClient()); 1295f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionsClient::Set(extensions_client_.get()); 1305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions_browser_client_.reset( 1325f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) new ShellExtensionsBrowserClient(browser_context_.get())); 1335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionsBrowserClient::Set(extensions_browser_client_.get()); 1345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) omaha_query_params_delegate_.reset(new ShellOmahaQueryParamsDelegate); 136116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch omaha_query_params::OmahaQueryParams::SetDelegate( 137116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch omaha_query_params_delegate_.get()); 138116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // Create our custom ExtensionSystem first because other 140a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) // KeyedServices depend on it. 1415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(yoz): Move this after EnsureBrowserContextKeyedServiceFactoriesBuilt. 1425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) CreateExtensionSystem(); 1435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Register additional KeyedService factories here. See 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ChromeBrowserMainExtraPartsProfiles for details. 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EnsureBrowserContextKeyedServiceFactoriesBuilt(); 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ShellExtensionSystemFactory::GetInstance(); 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserContextDependencyManager::GetInstance()->CreateBrowserContextServices( 1505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser_context_.get()); 1515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 15203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#if !defined(DISABLE_NACL) 15303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) // Takes ownership. 15403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) nacl::NaClBrowser::SetDelegate( 15503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) new ShellNaClBrowserDelegate(browser_context_.get())); 15603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::BrowserThread::PostTask( 15703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) content::BrowserThread::IO, 15803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) FROM_HERE, 15903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) base::Bind(nacl::NaClProcessHost::EarlyStartup)); 16003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#endif 16103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) 1625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) devtools_delegate_.reset( 1635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) new content::ShellDevToolsDelegate(browser_context_.get())); 164cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) if (parameters_.ui_task) { 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // For running browser tests. 166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch parameters_.ui_task->Run(); 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delete parameters_.ui_task; 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch run_message_loop_ = false; 1695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } else { 170cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser_main_delegate_->Start(browser_context_.get()); 1715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) } 1725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1745f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)bool ShellBrowserMainParts::MainMessageLoopRun(int* result_code) { 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!run_message_loop_) 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // TODO(yoz): just return false here? 1785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) base::RunLoop run_loop; 1795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) run_loop.Run(); 1805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *result_code = content::RESULT_CODE_NORMAL_EXIT; 1815d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return true; 1825d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1835d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::PostMainMessageLoopRun() { 185cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) browser_main_delegate_->Shutdown(); 186cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 1875d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices( 1885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser_context_.get()); 1895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system_ = NULL; 1905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) ExtensionsBrowserClient::Set(NULL); 1915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extensions_browser_client_.reset(); 1925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) browser_context_.reset(); 193effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch 194effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch desktop_controller_.reset(); 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(OS_ANDROID) && !defined(OS_IOS) 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci storage_monitor::StorageMonitor::Destroy(); 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 1995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2010529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochvoid ShellBrowserMainParts::PostDestroyThreads() { 2020529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#if defined(OS_CHROMEOS) 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci audio_controller_.reset(); 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::CrasAudioHandler::Shutdown(); 205010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) network_controller_.reset(); 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci chromeos::NetworkHandler::Shutdown(); 2070529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch chromeos::DBusThreadManager::Shutdown(); 2080529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#endif 2090529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch} 2100529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 2115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void ShellBrowserMainParts::CreateExtensionSystem() { 2125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) DCHECK(browser_context_); 2135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system_ = static_cast<ShellExtensionSystem*>( 2145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) ExtensionSystem::Get(browser_context_.get())); 2155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extension_system_->InitForRegularProfile(true); 2165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 2175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 2185f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} // namespace extensions 219