[WidgetService] - Fixing addChangeStateListener crash 18/92018/4 accepted/tizen/common/20161013.161238 accepted/tizen/ivi/20161013.035118 accepted/tizen/mobile/20161013.035000 accepted/tizen/tv/20161013.035028 accepted/tizen/wearable/20161013.035053 submit/tizen/20161013.015447 submit/tizen_common/20161013.071727
authorAndrzej Popowski <a.popowski@samsung.com>
Wed, 12 Oct 2016 14:55:24 +0000 (16:55 +0200)
committerjk.pu <jk.pu@samsung.com>
Thu, 13 Oct 2016 02:57:31 +0000 (11:57 +0900)
Change-Id: Id8cd5505b3809b1902f836465bcc2ae1f4f65e1f
Signed-off-by: Andrzej Popowski <a.popowski@samsung.com>
Signed-off-by: jk.pu <jk.pu@samsung.com>
src/widgetservice/widgetservice_api.js
src/widgetservice/widgetservice_instance.cc

index e043c96..0ec0275 100644 (file)
@@ -110,7 +110,7 @@ function WidgetInstance(data, widget) {
       enumerable: true
     },
     id: {
-      value: data,
+      value: data.id,
       writable: false,
       enumerable: true
     },
index c3c56c3..a37ac19 100644 (file)
@@ -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<picojson::object>();
 
-  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<picojson::object*>(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<std::string>();
   const double seconds = args.find(kSeconds)->second.get<double>();
 
+  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<picojson::object>();
+    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});
   };