From: Pawel Andruszkiewicz Date: Mon, 8 Jun 2015 07:17:12 +0000 (+0200) Subject: [Bookmark] Fixed implementation of BookmarkUrlExists method. X-Git-Tag: submit/tizen_mobile/20150612.133019^2~2^2~43 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ffd9f12b19ebcd35117d5829750e8c7545134145;p=platform%2Fcore%2Fapi%2Fwebapi-plugins.git [Bookmark] Fixed implementation of BookmarkUrlExists method. Prevent CID: 385388 [Verification] TCT pass rate: 36/36. Change-Id: Ibf39aa0dd7c6ff8e5414d04e95c18bde743f878d Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/bookmark/bookmark_instance.cc b/src/bookmark/bookmark_instance.cc index 1b27846a..2b335377 100755 --- a/src/bookmark/bookmark_instance.cc +++ b/src/bookmark/bookmark_instance.cc @@ -23,6 +23,9 @@ #include "common/converter.h" #include "common/logger.h" +using common::ErrorCode; +using common::PlatformResult; + namespace extension { namespace bookmark { @@ -80,31 +83,48 @@ bool BookmarkInstance::bookmark_foreach( return true; } -bool BookmarkInstance::bookmark_url_exists(const char* url) { +PlatformResult BookmarkInstance::BookmarkUrlExists(const char* url, + bool* exists) { LoggerD("Enter"); int ids_count = 0; - int* ids = NULL; - char* compare_url = NULL; + int* ids = nullptr; + char* compare_url = nullptr; + + if (bp_bookmark_adaptor_get_ids_p(&ids, // ids + &ids_count, // count + -1, //limit + 0, // offset + -1, //parent + -1, //type + -1, // is_operator + -1, // is_editable + BP_BOOKMARK_O_DATE_CREATED, // order_offset + 0 // ordering ASC + ) < 0) { + LoggerE("Failed to obtain bookmarks"); + return PlatformResult{ErrorCode::UNKNOWN_ERR, "Failed to obtain bookmarks"}; + } - if (bp_bookmark_adaptor_get_ids_p(&ids, &ids_count, -1, 0, -1, -1, -1, -1, - BP_BOOKMARK_O_DATE_CREATED, 0) < 0) - return true; - if (ids_count > 0) { - for (int i = 0; i < ids_count; i++) { - if (bp_bookmark_adaptor_get_url(ids[i], &compare_url) < 0) { - free(ids); - return true; - } - if (strcmp(url, compare_url) == 0) { - free(compare_url); - free(ids); - return true; - } + PlatformResult result{ErrorCode::NO_ERROR}; + bool url_found = false; + for (int i = 0; (i < ids_count) && result && !url_found; ++i) { + if (bp_bookmark_adaptor_get_url(ids[i], &compare_url) < 0) { + LoggerE("Failed to obtain URL"); + result = PlatformResult{ErrorCode::UNKNOWN_ERR, "Failed to obtain URL"}; + } else { + url_found = (0 == strcmp(url, compare_url)); + free(compare_url); + compare_url = nullptr; } } - free(compare_url); + + if (result) { + *exists = url_found; + } + free(ids); - return false; + + return result; } bool BookmarkInstance::bookmark_title_exists_in_parent( @@ -189,9 +209,16 @@ void BookmarkInstance::BookmarkAdd( data.type = arg.get(kType).get(); data.url = const_cast(arg.get(kUrl).to_str().c_str()); - if (!data.type && bookmark_url_exists(data.url)) { - ReportError(o); - return; + if (!data.type) { // bookmark + bool exists = false; + auto result = BookmarkUrlExists(data.url, &exists); + if (!result) { + ReportError(result, &o); + return; + } else if (exists) { + ReportError(PlatformResult{ErrorCode::UNKNOWN_ERR, "Bookmark already exists"}, &o); + return; + } } if (data.type && bookmark_title_exists_in_parent(data.title, data.parent)) { ReportError(o); diff --git a/src/bookmark/bookmark_instance.h b/src/bookmark/bookmark_instance.h index 9a5d33de..eb958994 100755 --- a/src/bookmark/bookmark_instance.h +++ b/src/bookmark/bookmark_instance.h @@ -22,6 +22,7 @@ #include "common/extension.h" #include "common/picojson.h" +#include "common/platform_result.h" namespace extension { namespace bookmark { @@ -44,7 +45,7 @@ class BookmarkInstance : public common::ParsedInstance { private: bool bookmark_foreach(Context& ctx, bp_bookmark_info_fmt& info); - bool bookmark_url_exists(const char* url); + common::PlatformResult BookmarkUrlExists(const char* url, bool* exists); bool bookmark_title_exists_in_parent(const char* title, int parent); void BookmarkGet(const picojson::value& arg, picojson::object& o); void BookmarkAdd(const picojson::value& arg, picojson::object& o);