From 85b0b4c202396e78f66e4c77d7fab250c854414b Mon Sep 17 00:00:00 2001 From: Zbigniew Kostrzewa Date: Thu, 13 Jun 2013 10:46:54 +0200 Subject: [PATCH] Fix values of StorageEvent properties. [Issue#] N/A [Problem] On removeItem() newValue was set to empty instead of null. On setItem() oldValue was set to empty instead of null. On clear() key, oldValue nad newValue were set to empty instead of null. [Cause] N/A [Solution] Pass proper values. [SCMRequest] N/A [Verification] 1. Build repository 2. Run W3C_WidgetInterface.wgt test widget. 3. Run tests from [RSA]/test/webapi - webapi-w3c-widgetinterface-tests/widgetinterface/w3c/au.wgt - webapi-w3c-widgetinterface-tests/widgetinterface/w3c/setItem-fires-event.wgt - webapi-w3c-widgetinterface-tests/widgetinterface/w3c/removeItem-fires-event.wgt Change-Id: Ic39340ec283a038012d38dc1918135ea2809e647 --- src/dispatch-event/dispatch_event_support.cpp | 38 ++++++++++++++++++--------- src/dispatch-event/dispatch_event_support.h | 7 ++++- src/standards/W3C/Widget/JSPreferences.cpp | 18 ++++--------- 3 files changed, 37 insertions(+), 26 deletions(-) diff --git a/src/dispatch-event/dispatch_event_support.cpp b/src/dispatch-event/dispatch_event_support.cpp index 24c9f84..d9b4d2b 100644 --- a/src/dispatch-event/dispatch_event_support.cpp +++ b/src/dispatch-event/dispatch_event_support.cpp @@ -113,24 +113,38 @@ void dispatchSoftKeyboardChangeEvent(JSContextRef context, const std::string sta } } -void dispatchStorageEvent(JSContextRef context, const std::string key, const std::string oldValue, const std::string newValue, const std::string url) +void dispatchStorageEvent(JSContextRef context, + const DPL::Optional& key, + const DPL::Optional& oldValue, + const DPL::Optional& newValue, + const std::string& url) { - LogDebug("dispatchStorageEvent(" << context << ", " << key << ", " << oldValue << ", " << newValue << ", " << url << ")"); + LogDebug("dispatchStorageEvent(" << + context << ", " << + (key.IsNull() ? "null" : *key) << ", " << + (oldValue.IsNull() ? "null" : *oldValue) << ", " << + (newValue.IsNull() ? "null" : *newValue) << ", " << + url << ")"); if (context != NULL) { std::stringstream script; - script << "var __event = document.createEvent(\"CustomEvent\");\n" - << "__event.initCustomEvent(\"storage\", true, true);\n" - << "__event.key = \"" << key << "\";\n" - << "__event.oldValue = \"" << oldValue << "\";\n" - << "__event.newValue = \"" << newValue << "\";\n" - << "__event.url = \"" << url << "\";\n" - << "__event.storageArea = widget.preferences;\n" - << "document.dispatchEvent(__event);\n" - << "\n" - << "for (var i=0; i < window.frames.length; i++)\n" + auto toJSValue = + [](const DPL::Optional& value) -> std::string + { + return (value.IsNull() ? "null" : "\"" + *value + "\""); + }; + + script << "var __event = document.createEvent(\"CustomEvent\");" + << "__event.initCustomEvent(\"storage\", true, true);" + << "__event.key = " << toJSValue(key) << ";" + << "__event.oldValue = " << toJSValue(oldValue) << ";" + << "__event.newValue = " << toJSValue(newValue) << ";" + << "__event.url = \"" << url << "\";" + << "__event.storageArea = widget.preferences;" + << "document.dispatchEvent(__event);" + << "for (var i=0; i < window.frames.length; i++)" << "{ window.frames[i].document.dispatchEvent(__event); }"; diff --git a/src/dispatch-event/dispatch_event_support.h b/src/dispatch-event/dispatch_event_support.h index df74b4b..8a42e20 100644 --- a/src/dispatch-event/dispatch_event_support.h +++ b/src/dispatch-event/dispatch_event_support.h @@ -25,6 +25,7 @@ #define _DISPATCH_EVENT_SUPPORT_H_ #include +#include #include #include #include @@ -33,7 +34,11 @@ namespace DispatchEventSupport { void dispatchAppServiceEvent(JSContextRef context, const float scale, const std::string bundle); void dispatchSoftKeyboardChangeEvent(JSContextRef context, const std::string state, const int width, const int height); -void dispatchStorageEvent(JSContextRef context, const std::string key, const std::string oldValue, const std::string newValue, const std::string url); +void dispatchStorageEvent(JSContextRef context, + const DPL::Optional& key, + const DPL::Optional& oldValue, + const DPL::Optional& newValue, + const std::string& url); void dispatchHwKeyEvent(Evas_Object* ewkView, const std::string key); } #endif //_DISPATCH_EVENT_SUPPORT_H_ diff --git a/src/standards/W3C/Widget/JSPreferences.cpp b/src/standards/W3C/Widget/JSPreferences.cpp index 6f38328..d3ba880 100644 --- a/src/standards/W3C/Widget/JSPreferences.cpp +++ b/src/standards/W3C/Widget/JSPreferences.cpp @@ -263,13 +263,8 @@ JSValueRef JSPreferences::removeItem(JSContextRef context, DPL::Optional newValue = getIStorage(thisObject)->getValue(key); JSContextRef g_context = JSContextGetGlobalContext(context); - std::string oldValueStr = ""; - std::string newValueStr = ""; - if (!!oldValue) { oldValueStr = *oldValue; } - if (!!newValue) { newValueStr = *newValue; } - - DispatchEventSupport::dispatchStorageEvent(g_context, key, oldValueStr, newValueStr, ""); + DispatchEventSupport::dispatchStorageEvent(g_context, key, oldValue, newValue, ""); LogDebug("end"); return JSValueMakeNull(context); @@ -303,13 +298,8 @@ JSValueRef JSPreferences::setItem(JSContextRef context, DPL::Optional newValue = getIStorage(thisObject)->getValue(key); JSContextRef g_context = JSContextGetGlobalContext(context); - std::string oldValueStr = ""; - std::string newValueStr = ""; - - if (!!oldValue) { oldValueStr = *oldValue; } - if (!!newValue) { newValueStr = *newValue; } - DispatchEventSupport::dispatchStorageEvent(g_context, key, oldValueStr, newValueStr, ""); + DispatchEventSupport::dispatchStorageEvent(g_context, key, oldValue, newValue, ""); LogDebug("end"); @@ -337,7 +327,9 @@ JSValueRef JSPreferences::clear(JSContextRef context, JSContextRef g_context = JSContextGetGlobalContext(context); - DispatchEventSupport::dispatchStorageEvent(g_context, "", "", "", ""); + const auto& null = DPL::Optional::Null; + + DispatchEventSupport::dispatchStorageEvent(g_context, null, null, null, ""); LogDebug("end"); -- 2.7.4