From dfb263d09a538f648e6200ea5e65c0612419fa34 Mon Sep 17 00:00:00 2001 From: "jaekuk, lee" Date: Mon, 3 Apr 2017 15:22:40 +0900 Subject: [PATCH] Bringup with updated chromium-efl(m56.0.2924) -------------------------------------------------------------------------------- This patch supports the working of WebApp and WebTCT with new updated chromium-efl(m56.0.2924). - Changed the codes related to including 'ewk_chromium.h' from 'EWebkit.h' - Changed the codes related to dependency of V8 in chromium-efl Bug: http://suprem.sec.samsung.net/jira/browse/RWASP-253 Change-Id: Iee178f03e9926b13d972c975b1e53a9fa20be576 Signed-off-by: Youngcheol Kang ------------------------------------------------------------------------------- Change-Id: I2f4ccb603b5b6e3fabebcef6eeae9f06106163bd Signed-off-by: jaekuk, lee --- extensions/renderer/xwalk_module_system.cc | 12 +++--- extensions/renderer/xwalk_module_system.h | 4 +- extensions/renderer/xwalk_v8tools_module.cc | 61 ++++++++++++++++------------- 3 files changed, 41 insertions(+), 36 deletions(-) diff --git a/extensions/renderer/xwalk_module_system.cc b/extensions/renderer/xwalk_module_system.cc index b14f12c..2218188 100755 --- a/extensions/renderer/xwalk_module_system.cc +++ b/extensions/renderer/xwalk_module_system.cc @@ -255,7 +255,7 @@ bool XWalkModuleSystem::SetTrampolineAccessorForEntryPoint( params->Set(v8::Integer::New(isolate, 1), entry); // FIXME(cmarcelo): ensure that trampoline is readonly. - value.As()->SetAccessor( + value.As()->SetAccessor(context, v8::String::NewFromUtf8(isolate, basename.c_str()), TrampolineCallback, TrampolineSetterCallback, params); return true; @@ -294,7 +294,7 @@ bool XWalkModuleSystem::InstallTrampoline(v8::Handle context, return false; } - auto it = entry->entry_points.begin(); + std::vector::const_iterator it = entry->entry_points.begin(); for (; it != entry->entry_points.end(); ++it) { ret = SetTrampolineAccessorForEntryPoint(context, *it, entry_ptr); if (!ret) { @@ -326,7 +326,7 @@ void XWalkModuleSystem::Initialize() { MarkModulesWithTrampoline(); - auto it = extension_modules_.begin(); + ExtensionModules::iterator it = extension_modules_.begin(); for (; it != extension_modules_.end(); ++it) { if (it->use_trampoline && InstallTrampoline(context, &*it)) continue; @@ -367,6 +367,7 @@ void XWalkModuleSystem::DeleteExtensionModules() { void XWalkModuleSystem::LoadExtensionForTrampoline( v8::Isolate* isolate, v8::Local data) { + v8::HandleScope handle_scope(isolate); v8::Local params = data.As(); void* ptr = params->Get( v8::Integer::New(isolate, 0)).As()->Value(); @@ -391,7 +392,6 @@ void XWalkModuleSystem::LoadExtensionForTrampoline( isolate, module_system->require_native_template_); - XWalkExtensionModule* module = entry->module; module->LoadExtensionCode(module_system->GetV8Context(), require_native_template->GetFunction()); @@ -417,7 +417,7 @@ v8::Handle XWalkModuleSystem::RefetchHolder( // static void XWalkModuleSystem::TrampolineCallback( - v8::Local property, + v8::Local property, const v8::PropertyCallbackInfo& info) { XWalkModuleSystem::LoadExtensionForTrampoline(info.GetIsolate(), info.Data()); v8::Handle holder = RefetchHolder(info.GetIsolate(), info.Data()); @@ -429,7 +429,7 @@ void XWalkModuleSystem::TrampolineCallback( // static void XWalkModuleSystem::TrampolineSetterCallback( - v8::Local property, + v8::Local property, v8::Local value, const v8::PropertyCallbackInfo& info) { XWalkModuleSystem::LoadExtensionForTrampoline(info.GetIsolate(), info.Data()); diff --git a/extensions/renderer/xwalk_module_system.h b/extensions/renderer/xwalk_module_system.h index b70603a..e8bf6bf 100755 --- a/extensions/renderer/xwalk_module_system.h +++ b/extensions/renderer/xwalk_module_system.h @@ -77,10 +77,10 @@ class XWalkModuleSystem { ExtensionModuleEntry* entry); static void TrampolineCallback( - v8::Local property, + v8::Local property, const v8::PropertyCallbackInfo& info); static void TrampolineSetterCallback( - v8::Local property, + v8::Local property, v8::Local value, const v8::PropertyCallbackInfo& info); static void LoadExtensionForTrampoline( diff --git a/extensions/renderer/xwalk_v8tools_module.cc b/extensions/renderer/xwalk_v8tools_module.cc index 72e1a4d..4fcad37 100755 --- a/extensions/renderer/xwalk_v8tools_module.cc +++ b/extensions/renderer/xwalk_v8tools_module.cc @@ -21,43 +21,48 @@ void ForceSetPropertyCallback( info[0].As()->ForceSet(info[1], info[2]); } +// ================ +// lifecycleTracker +// ================ +struct LifecycleTrackerWrapper { + v8::Global handle; + v8::Global destructor; +}; + void LifecycleTrackerCleanup( - const v8::WeakCallbackData >& data) { - v8::Isolate* isolate = data.GetIsolate(); - v8::HandleScope handle_scope(isolate); + const v8::WeakCallbackInfo& data) { + LifecycleTrackerWrapper* wrapper = data.GetParameter(); - v8::Local tracker = data.GetValue(); - v8::Handle function = - tracker->Get(v8::String::NewFromUtf8(isolate, "destructor")); + if (!wrapper->destructor.IsEmpty()) { + v8::HandleScope handle_scope(data.GetIsolate()); + v8::Local context = v8::Context::New(data.GetIsolate()); + v8::Context::Scope scope(context); - if (function.IsEmpty() || !function->IsFunction()) { - LOGGER(WARN) << "Destructor function not set for LifecycleTracker."; - data.GetParameter()->Reset(); - delete data.GetParameter(); - return; - } + v8::Local destructor = + wrapper->destructor.Get(data.GetIsolate()); - v8::Handle context = v8::Context::New(isolate); + v8::MicrotasksScope microtasks( + data.GetIsolate(), v8::MicrotasksScope::kDoNotRunMicrotasks); - v8::TryCatch try_catch; - v8::Handle::Cast(function)->Call(context->Global(), 0, NULL); - if (try_catch.HasCaught()) - LOGGER(WARN) << "Exception when running LifecycleTracker destructor"; + v8::TryCatch try_catch(data.GetIsolate()); + destructor->Call(context->Global(), 0, nullptr); - data.GetParameter()->Reset(); - delete data.GetParameter(); + if (try_catch.HasCaught()) { + LOGGER(WARN) << "Exception when running LifecycleTracker destructor"; + } + } } void LifecycleTracker(const v8::FunctionCallbackInfo& info) { - v8::Isolate* isolate = v8::Isolate::GetCurrent(); - v8::HandleScope handle_scope(isolate); - - v8::Persistent* tracker = - new v8::Persistent(isolate, v8::Object::New(isolate)); - tracker->SetWeak(tracker, &LifecycleTrackerCleanup); - - info.GetReturnValue().Set(*tracker); + v8::Isolate* isolate = info.GetIsolate(); + v8::HandleScope handle_scope(info.GetIsolate()); + + v8::Local tracker = v8::Object::New(isolate); + LifecycleTrackerWrapper* wrapper = new LifecycleTrackerWrapper; + wrapper->handle.Reset(isolate, tracker); + wrapper->handle.SetWeak(wrapper, LifecycleTrackerCleanup, + v8::WeakCallbackType::kParameter); + info.GetReturnValue().Set(wrapper->handle); } } // namespace -- 2.7.4