2 * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include <EWebKit_internal.h>
27 #include "common/application_data.h"
28 #include "common/locale_manager.h"
29 #include "common/logger.h"
30 #include "common/profiler.h"
31 #include "common/resource_manager.h"
32 #include "common/string_utils.h"
33 #include "extensions/renderer/runtime_ipc_client.h"
34 #include "extensions/renderer/widget_module.h"
35 #include "extensions/renderer/xwalk_extension_renderer_controller.h"
36 #include "extensions/renderer/xwalk_module_system.h"
40 class BundleGlobalData {
42 static BundleGlobalData* GetInstance() {
43 static BundleGlobalData instance;
46 void PreInitialize() {
49 preInitialized = true;
50 locale_manager_.reset(new common::LocaleManager);
52 void Initialize(const std::string& app_id) {
55 auto appdata_manager = common::ApplicationDataManager::GetInstance();
56 common::ApplicationData* app_data =
57 appdata_manager->GetApplicationData(app_id);
59 app_data->LoadManifestData();
60 // PreInitialized locale_manager_.reset(new common::LocaleManager);
61 locale_manager_->EnableAutoUpdate(true);
62 if (app_data->widget_info() != NULL &&
63 !app_data->widget_info()->default_locale().empty()) {
64 locale_manager_->SetDefaultLocale(
65 app_data->widget_info()->default_locale());
67 resource_manager_.reset(new common::ResourceManager(app_data,
68 locale_manager_.get()));
69 resource_manager_->set_base_resource_path(
70 app_data->application_path());
72 auto widgetdb = extensions::WidgetPreferenceDB::GetInstance();
73 widgetdb->Initialize(app_data,
74 locale_manager_.get());
77 common::ResourceManager* resource_manager() {
78 return resource_manager_.get();
82 BundleGlobalData() : preInitialized(false) {}
83 ~BundleGlobalData() {}
84 std::unique_ptr<common::ResourceManager> resource_manager_;
85 std::unique_ptr<common::LocaleManager> locale_manager_;
90 } // namespace runtime
92 extern "C" unsigned int DynamicPluginVersion(void) {
96 extern "C" void DynamicSetWidgetInfo(const char* tizen_id) {
100 runtime::BundleGlobalData::GetInstance()->Initialize(tizen_id);
101 extensions::XWalkExtensionRendererController& controller =
102 extensions::XWalkExtensionRendererController::GetInstance();
103 auto appdata_manager = common::ApplicationDataManager::GetInstance();
104 common::ApplicationData* app_data =
105 appdata_manager->GetApplicationData(tizen_id);
106 controller.LoadUserExtensions(app_data->application_path());
109 extern "C" void DynamicPluginStartSession(const char* tizen_id,
110 v8::Handle<v8::Context> context,
112 const char* base_url) {
115 // Initialize context's aligned pointer in embedder data with null
116 extensions::XWalkModuleSystem::SetModuleSystemInContext(
117 std::unique_ptr<extensions::XWalkModuleSystem>(), context);
119 if (base_url == NULL || common::utils::StartsWith(base_url, "http")) {
120 LOGGER(ERROR) << "External url not allowed plugin loading.";
124 // Initialize RuntimeIPCClient
125 extensions::RuntimeIPCClient* rc =
126 extensions::RuntimeIPCClient::GetInstance();
127 rc->SetRoutingId(context, routing_handle);
129 extensions::XWalkExtensionRendererController& controller =
130 extensions::XWalkExtensionRendererController::GetInstance();
131 controller.DidCreateScriptContext(context);
134 extern "C" void DynamicPluginStopSession(
135 const char* tizen_id, v8::Handle<v8::Context> context) {
137 extensions::XWalkExtensionRendererController& controller =
138 extensions::XWalkExtensionRendererController::GetInstance();
139 controller.WillReleaseScriptContext(context);
142 extern "C" void DynamicUrlParsing(
143 std::string* old_url, std::string* new_url, const char* /*tizen_id*/) {
145 runtime::BundleGlobalData::GetInstance()->resource_manager();
146 if (res_manager == NULL) {
147 LOGGER(ERROR) << "Widget Info was not set, Resource Manager is NULL";
151 // Check Access control
152 if (!res_manager->AllowedResource(*old_url)) {
154 *new_url = "about:blank";
157 // convert to localized path
158 if (common::utils::StartsWith(*old_url, "file:/") ||
159 common::utils::StartsWith(*old_url, "app:/")) {
160 *new_url = res_manager->GetLocalizedPath(*old_url);
165 if (res_manager->IsEncrypted(*new_url)) {
166 *new_url = res_manager->DecryptResource(*new_url);
170 extern "C" void DynamicDatabaseAttach(int /*attach*/) {
171 // LOGGER(DEBUG) << "InjectedBundle::DynamicDatabaseAttach !!";
174 extern "C" void DynamicOnIPCMessage(const Ewk_IPC_Wrt_Message_Data& data) {
176 extensions::XWalkExtensionRendererController& controller =
177 extensions::XWalkExtensionRendererController::GetInstance();
178 controller.OnReceivedIPCMessage(&data);
181 extern "C" void DynamicPreloading() {
183 runtime::BundleGlobalData::GetInstance()->PreInitialize();
184 extensions::XWalkExtensionRendererController& controller =
185 extensions::XWalkExtensionRendererController::GetInstance();
186 controller.InitializeExtensionClient();