Upstream version 11.39.256.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / browser / xwalk_runner.cc
index f9aa69f..423a64e 100644 (file)
@@ -4,23 +4,31 @@
 
 #include "xwalk/runtime/browser/xwalk_runner.h"
 
+#include <string>
 #include <vector>
 #include "base/command_line.h"
 #include "base/logging.h"
+#include "content/public/browser/render_process_host.h"
+#include "xwalk/application/browser/application.h"
+#include "xwalk/application/browser/application_service.h"
 #include "xwalk/application/browser/application_system.h"
 #include "xwalk/extensions/browser/xwalk_extension_service.h"
+#include "xwalk/extensions/common/xwalk_extension_switches.h"
 #include "xwalk/runtime/browser/application_component.h"
-#include "xwalk/runtime/browser/runtime_context.h"
+#include "xwalk/runtime/browser/devtools/remote_debugging_server.h"
+#include "xwalk/runtime/browser/storage_component.h"
 #include "xwalk/runtime/browser/sysapps_component.h"
-#include "xwalk/runtime/browser/xwalk_component.h"
+#include "xwalk/runtime/browser/xwalk_app_extension_bridge.h"
+#include "xwalk/runtime/browser/xwalk_browser_context.h"
 #include "xwalk/runtime/browser/xwalk_browser_main_parts.h"
+#include "xwalk/runtime/browser/xwalk_component.h"
 #include "xwalk/runtime/browser/xwalk_content_browser_client.h"
 #include "xwalk/runtime/common/xwalk_runtime_features.h"
 #include "xwalk/runtime/common/xwalk_switches.h"
 
 #if defined(OS_ANDROID)
 #include "xwalk/runtime/browser/xwalk_runner_android.h"
-#elif defined(OS_TIZEN_MOBILE)
+#elif defined(OS_TIZEN)
 #include "xwalk/runtime/browser/xwalk_runner_tizen.h"
 #endif
 
@@ -32,16 +40,13 @@ XWalkRunner* g_xwalk_runner = NULL;
 
 }  // namespace
 
-XWalkRunner::XWalkRunner()
-    : is_running_as_service_(false) {
+XWalkRunner::XWalkRunner() {
   VLOG(1) << "Creating XWalkRunner object.";
   DCHECK(!g_xwalk_runner);
   g_xwalk_runner = this;
 
   XWalkRuntimeFeatures::GetInstance()->Initialize(
       CommandLine::ForCurrentProcess());
-  CommandLine* cmd_line = CommandLine::ForCurrentProcess();
-  is_running_as_service_ = cmd_line->HasSwitch(switches::kXWalkRunAsService);
 
   // Initializing after the g_xwalk_runner is set to ensure
   // XWalkRunner::GetInstance() can be used in all sub objects if needed.
@@ -64,21 +69,23 @@ application::ApplicationSystem* XWalkRunner::app_system() {
 }
 
 void XWalkRunner::PreMainMessageLoopRun() {
-  runtime_context_.reset(new RuntimeContext);
+  browser_context_.reset(new XWalkBrowserContext);
+  app_extension_bridge_.reset(new XWalkAppExtensionBridge());
 
-  // FIXME(cmarcelo): Remove this check once we remove the --uninstall
-  // command line.
   CommandLine* cmd_line = CommandLine::ForCurrentProcess();
-  if (!cmd_line->HasSwitch(switches::kUninstall))
-    extension_service_.reset(new extensions::XWalkExtensionService);
+  if (!cmd_line->HasSwitch(switches::kXWalkDisableExtensions))
+    extension_service_.reset(new extensions::XWalkExtensionService(
+        app_extension_bridge_.get()));
 
   CreateComponents();
+  app_extension_bridge_->SetApplicationSystem(app_component_->app_system());
 }
 
 void XWalkRunner::PostMainMessageLoopRun() {
   DestroyComponents();
   extension_service_.reset();
-  runtime_context_.reset();
+  browser_context_.reset();
+  DisableRemoteDebugging();
 }
 
 void XWalkRunner::CreateComponents() {
@@ -90,6 +97,8 @@ void XWalkRunner::CreateComponents() {
 
   if (XWalkRuntimeFeatures::isSysAppsEnabled())
     AddComponent(CreateSysAppsComponent().PassAs<XWalkComponent>());
+  if (XWalkRuntimeFeatures::isStorageAPIEnabled())
+    AddComponent(CreateStorageComponent().PassAs<XWalkComponent>());
 }
 
 void XWalkRunner::DestroyComponents() {
@@ -106,14 +115,28 @@ void XWalkRunner::AddComponent(scoped_ptr<XWalkComponent> component) {
 }
 
 scoped_ptr<ApplicationComponent> XWalkRunner::CreateAppComponent() {
-  return make_scoped_ptr(new ApplicationComponent(runtime_context_.get()));
+  return make_scoped_ptr(new ApplicationComponent(browser_context_.get()));
 }
 
 scoped_ptr<SysAppsComponent> XWalkRunner::CreateSysAppsComponent() {
   return make_scoped_ptr(new SysAppsComponent());
 }
 
-void XWalkRunner::OnRenderProcessHostCreated(content::RenderProcessHost* host) {
+scoped_ptr<StorageComponent> XWalkRunner::CreateStorageComponent() {
+  return make_scoped_ptr(new StorageComponent());
+}
+
+void XWalkRunner::InitializeRuntimeVariablesForExtensions(
+    const content::RenderProcessHost* host,
+    base::ValueMap* variables) {
+  application::Application* app = app_system()->application_service()->
+      GetApplicationByRenderHostID(host->GetID());
+
+  if (app)
+    (*variables)["app_id"] = new base::StringValue(app->id());
+}
+
+void XWalkRunner::OnRenderProcessWillLaunch(content::RenderProcessHost* host) {
   if (!extension_service_)
     return;
 
@@ -136,8 +159,11 @@ void XWalkRunner::OnRenderProcessHostCreated(content::RenderProcessHost* host) {
   main_parts->CreateInternalExtensionsForExtensionThread(
       host, &extension_thread_extensions);
 
-  extension_service_->OnRenderProcessHostCreated(
-      host, &ui_thread_extensions, &extension_thread_extensions);
+  scoped_ptr<base::ValueMap> runtime_variables(new base::ValueMap);
+  InitializeRuntimeVariablesForExtensions(host, runtime_variables.get());
+  extension_service_->OnRenderProcessWillLaunch(
+      host, &ui_thread_extensions, &extension_thread_extensions,
+      runtime_variables.Pass());
 }
 
 void XWalkRunner::OnRenderProcessHostGone(content::RenderProcessHost* host) {
@@ -146,12 +172,25 @@ void XWalkRunner::OnRenderProcessHostGone(content::RenderProcessHost* host) {
   extension_service_->OnRenderProcessDied(host);
 }
 
+void XWalkRunner::EnableRemoteDebugging(int port) {
+  const char* local_ip = "0.0.0.0";
+  if (port > 0 && port < 65535) {
+    remote_debugging_server_.reset(
+        new RemoteDebuggingServer(browser_context(),
+            local_ip, port, std::string()));
+  }
+}
+
+void XWalkRunner::DisableRemoteDebugging() {
+  remote_debugging_server_.reset();
+}
+
 // static
 scoped_ptr<XWalkRunner> XWalkRunner::Create() {
   XWalkRunner* runner = NULL;
 #if defined(OS_ANDROID)
   runner = new XWalkRunnerAndroid;
-#elif defined(OS_TIZEN_MOBILE)
+#elif defined(OS_TIZEN)
   runner = new XWalkRunnerTizen;
 #else
   runner = new XWalkRunner;