Upstream version 8.36.169.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / browser / xwalk_runner.cc
index f9aa69f..cfb6589 100644 (file)
@@ -7,20 +7,25 @@
 #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/runtime/browser/application_component.h"
 #include "xwalk/runtime/browser/runtime_context.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_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 +37,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.
@@ -65,14 +67,11 @@ application::ApplicationSystem* XWalkRunner::app_system() {
 
 void XWalkRunner::PreMainMessageLoopRun() {
   runtime_context_.reset(new RuntimeContext);
-
-  // 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);
-
+  app_extension_bridge_.reset(new XWalkAppExtensionBridge());
+  extension_service_.reset(new extensions::XWalkExtensionService(
+      app_extension_bridge_.get()));
   CreateComponents();
+  app_extension_bridge_->SetApplicationSystem(app_component_->app_system());
 }
 
 void XWalkRunner::PostMainMessageLoopRun() {
@@ -90,6 +89,8 @@ void XWalkRunner::CreateComponents() {
 
   if (XWalkRuntimeFeatures::isSysAppsEnabled())
     AddComponent(CreateSysAppsComponent().PassAs<XWalkComponent>());
+  if (XWalkRuntimeFeatures::isStorageAPIEnabled())
+    AddComponent(CreateStorageComponent().PassAs<XWalkComponent>());
 }
 
 void XWalkRunner::DestroyComponents() {
@@ -113,7 +114,21 @@ 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"] = base::Value::CreateStringValue(app->id());
+}
+
+void XWalkRunner::OnRenderProcessWillLaunch(content::RenderProcessHost* host) {
   if (!extension_service_)
     return;
 
@@ -136,8 +151,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) {
@@ -151,7 +169,7 @@ 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;