#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
} // 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.
}
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() {
if (XWalkRuntimeFeatures::isSysAppsEnabled())
AddComponent(CreateSysAppsComponent().PassAs<XWalkComponent>());
+ if (XWalkRuntimeFeatures::isStorageAPIEnabled())
+ AddComponent(CreateStorageComponent().PassAs<XWalkComponent>());
}
void XWalkRunner::DestroyComponents() {
}
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;
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) {
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;