From: Andrzej Popowski Date: Wed, 12 Oct 2016 14:55:24 +0000 (+0200) Subject: [WidgetService] - Fixing addChangeStateListener crash X-Git-Tag: submit/tizen/20161013.015447^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=103a188e57ce3cda0e9ba68b13255e6584005061;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [WidgetService] - Fixing addChangeStateListener crash Change-Id: Id8cd5505b3809b1902f836465bcc2ae1f4f65e1f Signed-off-by: Andrzej Popowski Signed-off-by: jk.pu --- diff --git a/src/widgetservice/widgetservice_api.js b/src/widgetservice/widgetservice_api.js index e043c962..0ec0275d 100644 --- a/src/widgetservice/widgetservice_api.js +++ b/src/widgetservice/widgetservice_api.js @@ -110,7 +110,7 @@ function WidgetInstance(data, widget) { enumerable: true }, id: { - value: data, + value: data.id, writable: false, enumerable: true }, diff --git a/src/widgetservice/widgetservice_instance.cc b/src/widgetservice/widgetservice_instance.cc index c3c56c30..a37ac193 100644 --- a/src/widgetservice/widgetservice_instance.cc +++ b/src/widgetservice/widgetservice_instance.cc @@ -99,7 +99,9 @@ int WidgetInstanceCb(const char* widget_id, const char* instance_id, void* data) return WIDGET_ERROR_NONE; } - array->push_back(picojson::value(instance_id)); + picojson::object obj; + obj.insert(std::make_pair(kId, picojson::value(instance_id))); + array->push_back(picojson::value(obj)); return WIDGET_ERROR_NONE; } @@ -109,7 +111,7 @@ int WidgetLifecycleCb(const char* widget_id, widget_lifecycle_event_e lifecycle_ ScopeLogger(); //WIDGET_LIFE_CYCLE_EVENT_MAX event is not supported - if (WIDGET_LIFE_CYCLE_EVENT_RESUME < lifecycle_event) { + if (WIDGET_LIFE_CYCLE_EVENT_RESUME < lifecycle_event || WIDGET_LIFE_CYCLE_EVENT_APP_DEAD == lifecycle_event) { LoggerW("Unknown event type"); return WIDGET_ERROR_NONE; } @@ -124,8 +126,18 @@ int WidgetLifecycleCb(const char* widget_id, widget_lifecycle_event_e lifecycle_ picojson::value response = picojson::value(picojson::object()); auto& obj = response.get(); - obj.insert(std::make_pair(kWidgetId, picojson::value(widget_id))); - obj.insert(std::make_pair(kId, picojson::value(widget_instance_id))); + if (widget_id) { + obj.insert(std::make_pair(kWidgetId, picojson::value(widget_id))); + } else { + obj.insert(std::make_pair(kWidgetId, picojson::value(""))); + } + + if (widget_instance_id) { + obj.insert(std::make_pair(kId, picojson::value(widget_instance_id))); + } else { + obj.insert(std::make_pair(kId, picojson::value(""))); + } + obj.insert(std::make_pair(kEvent, picojson::value(WidgetServiceUtils::FromEventType(lifecycle_event)))); instance->CallWidgetLifecycleListener(widget_id, response); @@ -133,6 +145,12 @@ int WidgetLifecycleCb(const char* widget_id, widget_lifecycle_event_e lifecycle_ return WIDGET_ERROR_NONE; } +void bundleIterator(const char *key, const char *val, void *data) { + LOGD("Entered, adding key-pair value: (%s) - (%s)", key, val); + auto obj = static_cast(data); + obj->insert(std::make_pair(key, picojson::value(val))); +} + } // namespace WidgetServiceInstance::WidgetServiceInstance() { @@ -515,6 +533,11 @@ TizenResult WidgetServiceInstance::ChangeUpdatePeriod(picojson::object const& ar const auto& instance_id = args.find(kInstanceId)->second.get(); const double seconds = args.find(kSeconds)->second.get(); + if(seconds <= 0){ + int err = WIDGET_ERROR_INVALID_PARAMETER; + LogAndReturnTizenError(common::InvalidValuesError(err), ("period second should be greater than zero")); + } + int ret = widget_service_change_period(widget_id.c_str(), instance_id.c_str(), seconds); if (WIDGET_ERROR_NONE != ret) { @@ -592,22 +615,16 @@ TizenResult WidgetServiceInstance::GetContent(picojson::object const& args, cons return; } - char* data_str = nullptr; - ret = bundle_get_str(bundle_data, kData.c_str(), &data_str); - if (BUNDLE_ERROR_NONE != ret) { - LoggerE("bundle_get_str() failed"); - this->Post(token, common::AbortError(ret)); + picojson::value response = picojson::value(picojson::object()); + auto& obj = response.get(); + if (!bundle_data) { + LoggerE("bundle_data is null"); + obj.insert(std::make_pair("", picojson::value(""))); + this->Post(token, TizenSuccess{response}); return; } - picojson::value response; - std::string err; - picojson::parse(response, data_str, data_str + strlen(data_str), &err); - if (!err.empty()) { - LoggerE("Failed to parse bundle data() failed [%s]", err.c_str()); - this->Post(token, common::AbortError()); - return; - } + bundle_iterate(bundle_data, bundleIterator, &obj); this->Post(token, TizenSuccess{response}); };