1 // Copyright (c) 2014 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "xwalk/runtime/browser/xwalk_app_extension_bridge.h"
9 #include "content/public/browser/browser_thread.h"
10 #include "content/public/browser/notification_service.h"
11 #include "xwalk/application/browser/application.h"
12 #include "xwalk/application/browser/application_service.h"
13 #include "xwalk/application/browser/application_system.h"
16 #include "xwalk/application/browser/application_system_linux.h"
17 #include "xwalk/application/browser/application_service_provider_linux.h"
18 #include "xwalk/application/browser/linux/running_application_object.h"
23 using application::Application;
24 using application::ApplicationService;
25 using application::ApplicationSystem;
27 XWalkAppExtensionBridge::XWalkAppExtensionBridge()
28 : app_system_(nullptr) {
31 XWalkAppExtensionBridge::~XWalkAppExtensionBridge() {}
33 void XWalkAppExtensionBridge::CheckAPIAccessControl(
34 int render_process_id,
35 const std::string& extension_name,
36 const std::string& api_name,
37 const extensions::PermissionCallback& callback) {
39 application::ApplicationService *service =
40 app_system_->application_service();
42 application::Application *app =
43 service->GetApplicationByRenderHostID(render_process_id);
45 callback.Run(extensions::UNDEFINED_RUNTIME_PERM);
49 service->CheckAPIAccessControl(app->id(), extension_name, api_name,
50 *(reinterpret_cast<const xwalk::application::PermissionCallback*>
54 bool XWalkAppExtensionBridge::RegisterPermissions(
55 int render_process_id,
56 const std::string& extension_name,
57 const std::string& perm_table) {
59 application::ApplicationService *service =
60 app_system_->application_service();
61 application::Application *app =
62 service->GetApplicationByRenderHostID(render_process_id);
66 return service->RegisterPermissions(app->id(), extension_name, perm_table);
69 void XWalkAppExtensionBridge::ExtensionProcessCreated(
70 int render_process_id,
71 const IPC::ChannelHandle& channel_handle) {
73 Application* app = GetApplication(render_process_id);
76 application::ApplicationSystemLinux* app_system =
77 static_cast<application::ApplicationSystemLinux*>(app_system_);
78 application::RunningApplicationObject* running_app_object =
79 app_system->service_provider()->GetRunningApplicationObject(app);
80 CHECK(running_app_object);
81 running_app_object->ExtensionProcessCreated(channel_handle);
85 void XWalkAppExtensionBridge::RenderChannelCreated(
86 int render_process_id) {
87 Application* app = GetApplication(render_process_id);
90 content::BrowserThread::PostTask(content::BrowserThread::UI, FROM_HERE,
91 base::Bind(&Application::RenderChannelCreated, app->GetWeakPtr()));
94 Application* XWalkAppExtensionBridge::GetApplication(int render_process_id) {
96 ApplicationService* service =
97 app_system_->application_service();
98 return service->GetApplicationByRenderHostID(render_process_id);