Upstream version 11.39.256.0
[platform/framework/web/crosswalk.git] / src / xwalk / runtime / browser / xwalk_app_extension_bridge.cc
index a715b8e..49dd0a3 100644 (file)
@@ -6,14 +6,26 @@
 
 #include <string>
 
+#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/notification_service.h"
 #include "xwalk/application/browser/application.h"
 #include "xwalk/application/browser/application_service.h"
 #include "xwalk/application/browser/application_system.h"
 
+#if defined(OS_LINUX)
+#include "xwalk/application/browser/application_system_linux.h"
+#include "xwalk/application/browser/application_service_provider_linux.h"
+#include "xwalk/application/browser/linux/running_application_object.h"
+#endif
+
 namespace xwalk {
 
+using application::Application;
+using application::ApplicationService;
+using application::ApplicationSystem;
+
 XWalkAppExtensionBridge::XWalkAppExtensionBridge()
-    : app_system_(NULL) {
+    : app_system_(nullptr) {
 }
 
 XWalkAppExtensionBridge::~XWalkAppExtensionBridge() {}
@@ -54,4 +66,36 @@ bool XWalkAppExtensionBridge::RegisterPermissions(
   return service->RegisterPermissions(app->id(), extension_name, perm_table);
 }
 
+void XWalkAppExtensionBridge::ExtensionProcessCreated(
+    int render_process_id,
+    const IPC::ChannelHandle& channel_handle) {
+#if defined(OS_LINUX)
+  Application* app = GetApplication(render_process_id);
+  CHECK(app);
+
+  application::ApplicationSystemLinux* app_system =
+      static_cast<application::ApplicationSystemLinux*>(app_system_);
+  application::RunningApplicationObject* running_app_object =
+      app_system->service_provider()->GetRunningApplicationObject(app);
+  CHECK(running_app_object);
+  running_app_object->ExtensionProcessCreated(channel_handle);
+#endif
+}
+
+void XWalkAppExtensionBridge::RenderChannelCreated(
+    int render_process_id) {
+  Application* app = GetApplication(render_process_id);
+  if (!app)
+    return;
+  content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
+      base::Bind(&Application::RenderChannelCreated, app->GetWeakPtr()));
+}
+
+Application* XWalkAppExtensionBridge::GetApplication(int render_process_id) {
+  CHECK(app_system_);
+  ApplicationService* service =
+      app_system_->application_service();
+  return service->GetApplicationByRenderHostID(render_process_id);
+}
+
 }  // namespace xwalk