Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / extensions / shell / browser / shell_browser_main_parts.cc
index 78feacd..29da404 100644 (file)
@@ -8,22 +8,28 @@
 #include "base/run_loop.h"
 #include "components/keyed_service/content/browser_context_dependency_manager.h"
 #include "components/omaha_query_params/omaha_query_params.h"
+#include "components/storage_monitor/storage_monitor.h"
 #include "content/public/browser/child_process_security_policy.h"
 #include "content/public/browser/context_factory.h"
+#include "content/public/browser/devtools_http_handler.h"
 #include "content/public/common/result_codes.h"
-#include "content/shell/browser/shell_devtools_delegate.h"
+#include "content/shell/browser/shell_devtools_manager_delegate.h"
 #include "content/shell/browser/shell_net_log.h"
 #include "extensions/browser/app_window/app_window_client.h"
 #include "extensions/browser/browser_context_keyed_service_factories.h"
 #include "extensions/browser/extension_system.h"
-#include "extensions/common/constants.cc"
+#include "extensions/browser/updater/update_service.h"
+#include "extensions/common/constants.h"
+#include "extensions/common/switches.h"
 #include "extensions/shell/browser/shell_browser_context.h"
+#include "extensions/shell/browser/shell_browser_context_keyed_service_factories.h"
 #include "extensions/shell/browser/shell_browser_main_delegate.h"
 #include "extensions/shell/browser/shell_desktop_controller.h"
 #include "extensions/shell/browser/shell_device_client.h"
 #include "extensions/shell/browser/shell_extension_system.h"
 #include "extensions/shell/browser/shell_extension_system_factory.h"
 #include "extensions/shell/browser/shell_extensions_browser_client.h"
+#include "extensions/shell/browser/shell_oauth2_token_service.h"
 #include "extensions/shell/browser/shell_omaha_query_params_delegate.h"
 #include "extensions/shell/common/shell_extensions_client.h"
 #include "extensions/shell/common/switches.h"
 #include "ui/base/ime/input_method_initializer.h"
 #include "ui/base/resource/resource_bundle.h"
 
-#if !defined(OS_ANDROID) && !defined(OS_IOS)
-#include "components/storage_monitor/storage_monitor.h"
-#endif
-
 #if defined(OS_CHROMEOS)
 #include "chromeos/audio/cras_audio_handler.h"
 #include "chromeos/dbus/dbus_thread_manager.h"
 #include "extensions/shell/browser/shell_nacl_browser_delegate.h"
 #endif
 
+using base::CommandLine;
 using content::BrowserContext;
 
+#if !defined(DISABLE_NACL)
+using content::BrowserThread;
+#endif
+
 namespace extensions {
 
+namespace {
+
+void CrxInstallComplete(bool success) {
+  VLOG(1) << "CRX download complete. Success: " << success;
+}
+}
+
 ShellBrowserMainParts::ShellBrowserMainParts(
     const content::MainFunctionParams& parameters,
     ShellBrowserMainDelegate* browser_main_delegate)
-    : extension_system_(NULL),
+    : devtools_http_handler_(nullptr),
+      extension_system_(nullptr),
       parameters_(parameters),
       run_message_loop_(true),
       browser_main_delegate_(browser_main_delegate) {
 }
 
 ShellBrowserMainParts::~ShellBrowserMainParts() {
+  if (devtools_http_handler_) {
+    // Note that Stop destroys devtools_http_handler_.
+    devtools_http_handler_->Stop();
+  }
 }
 
 void ShellBrowserMainParts::PreMainMessageLoopStart() {
@@ -80,7 +99,7 @@ void ShellBrowserMainParts::PostMainMessageLoopStart() {
 
   chromeos::NetworkHandler::Initialize();
   network_controller_.reset(new ShellNetworkController(
-      base::CommandLine::ForCurrentProcess()->GetSwitchValueNative(
+      CommandLine::ForCurrentProcess()->GetSwitchValueNative(
           switches::kAppShellPreferredNetwork)));
 
   chromeos::CrasAudioHandler::Initialize(
@@ -109,13 +128,11 @@ int ShellBrowserMainParts::PreCreateThreads() {
 
 void ShellBrowserMainParts::PreMainMessageLoopRun() {
   // Initialize our "profile" equivalent.
-  browser_context_.reset(new ShellBrowserContext);
+  browser_context_.reset(new ShellBrowserContext(net_log_.get()));
 
   aura::Env::GetInstance()->set_context_factory(content::GetContextFactory());
 
-#if !defined(OS_ANDROID) && !defined(OS_IOS)
   storage_monitor::StorageMonitor::Create();
-#endif
 
   desktop_controller_.reset(browser_main_delegate_->CreateDesktopController());
 
@@ -149,18 +166,40 @@ void ShellBrowserMainParts::PreMainMessageLoopRun() {
   BrowserContextDependencyManager::GetInstance()->CreateBrowserContextServices(
       browser_context_.get());
 
+  // Initialize OAuth2 support from command line.
+  CommandLine* cmd = CommandLine::ForCurrentProcess();
+  oauth2_token_service_.reset(new ShellOAuth2TokenService(
+      browser_context_.get(),
+      cmd->GetSwitchValueASCII(switches::kAppShellUser),
+      cmd->GetSwitchValueASCII(switches::kAppShellRefreshToken)));
+
 #if !defined(DISABLE_NACL)
   // Takes ownership.
   nacl::NaClBrowser::SetDelegate(
       new ShellNaClBrowserDelegate(browser_context_.get()));
-  content::BrowserThread::PostTask(
-      content::BrowserThread::IO,
+  // Track the task so it can be canceled if app_shell shuts down very quickly,
+  // such as in browser tests.
+  task_tracker_.PostTask(
+      BrowserThread::GetMessageLoopProxyForThread(BrowserThread::IO).get(),
       FROM_HERE,
       base::Bind(nacl::NaClProcessHost::EarlyStartup));
 #endif
 
-  devtools_delegate_.reset(
-      new content::ShellDevToolsDelegate(browser_context_.get()));
+  // TODO(rockot): Remove this temporary hack test.
+  std::string install_crx_id =
+      cmd->GetSwitchValueASCII(switches::kAppShellInstallCrx);
+  if (install_crx_id.size() != 0) {
+    CHECK(install_crx_id.size() == 32)
+        << "Extension ID must be exactly 32 characters long.";
+    UpdateService* update_service = UpdateService::Get(browser_context_.get());
+    update_service->DownloadAndInstall(install_crx_id,
+                                       base::Bind(CrxInstallComplete));
+  }
+
+  // CreateHttpHandler retains ownership over DevToolsHttpHandler.
+  devtools_http_handler_ =
+      content::ShellDevToolsManagerDelegate::CreateHttpHandler(
+          browser_context_.get());
   if (parameters_.ui_task) {
     // For running browser tests.
     parameters_.ui_task->Run();
@@ -184,6 +223,12 @@ bool ShellBrowserMainParts::MainMessageLoopRun(int* result_code) {
 void ShellBrowserMainParts::PostMainMessageLoopRun() {
   browser_main_delegate_->Shutdown();
 
+#if !defined(DISABLE_NACL)
+  task_tracker_.TryCancelAll();
+  nacl::NaClBrowser::SetDelegate(nullptr);
+#endif
+
+  oauth2_token_service_.reset();
   BrowserContextDependencyManager::GetInstance()->DestroyBrowserContextServices(
       browser_context_.get());
   extension_system_ = NULL;
@@ -193,9 +238,7 @@ void ShellBrowserMainParts::PostMainMessageLoopRun() {
 
   desktop_controller_.reset();
 
-#if !defined(OS_ANDROID) && !defined(OS_IOS)
   storage_monitor::StorageMonitor::Destroy();
-#endif
 }
 
 void ShellBrowserMainParts::PostDestroyThreads() {