1 // Copyright 2015 Samsung Electronics Co, Ltd. 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 "bundle/extension_renderer_controller.h"
11 #include "common/logger.h"
12 #include "bundle/extension_client.h"
13 #include "bundle/extension_module.h"
14 #include "bundle/module_system.h"
15 #include "bundle/xwalk_v8tools_module.h"
21 void CreateExtensionModules(ExtensionClient* client,
22 ModuleSystem* module_system) {
23 const ExtensionClient::ExtensionAPIMap& extensions =
24 client->extension_apis();
25 auto it = extensions.begin();
26 for (; it != extensions.end(); ++it) {
27 ExtensionClient::ExtensionCodePoints* codepoint = it->second;
28 if (codepoint->api.empty())
31 std::unique_ptr<ExtensionModule> module(
32 new ExtensionModule(client, module_system, it->first, codepoint->api));
33 module_system->RegisterExtensionModule(
34 std::move(module), codepoint->entry_points);
40 ExtensionRendererController& ExtensionRendererController::GetInstance() {
41 static ExtensionRendererController instance;
45 ExtensionRendererController::ExtensionRendererController()
46 : extensions_client_(new ExtensionClient()) {
49 ExtensionRendererController::~ExtensionRendererController() {
52 void ExtensionRendererController::DidCreateScriptContext(
53 v8::Handle<v8::Context> context) {
54 ModuleSystem* module_system = new ModuleSystem(context);
55 ModuleSystem::SetModuleSystemInContext(
56 std::unique_ptr<ModuleSystem>(module_system), context);
58 module_system->RegisterNativeModule(
59 "v8tools", std::unique_ptr<NativeModule>(new XWalkV8ToolsModule));
61 CreateExtensionModules(extensions_client_.get(), module_system);
62 module_system->Initialize();
65 void ExtensionRendererController::WillReleaseScriptContext(
66 v8::Handle<v8::Context> context) {
67 v8::Context::Scope contextScope(context);
68 ModuleSystem::ResetModuleSystemFromContext(context);
71 bool ExtensionRendererController::InitializeExtensions(
72 const std::string& uuid) {
73 return extensions_client_->Initialize(uuid);