diff options
author | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-29 21:32:12 +0000 |
---|---|---|
committer | erikkay@google.com <erikkay@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-29 21:32:12 +0000 |
commit | 15bc709d5af8b4d1d31d7297d21c5d95396f01c4 (patch) | |
tree | 4cf3be3de15af83c28d3ab0626faf0a67a90e140 | |
parent | d4db95b2c1e239700c5557197ecce1e36c735d4a (diff) | |
download | chromium_src-15bc709d5af8b4d1d31d7297d21c5d95396f01c4.zip chromium_src-15bc709d5af8b4d1d31d7297d21c5d95396f01c4.tar.gz chromium_src-15bc709d5af8b4d1d31d7297d21c5d95396f01c4.tar.bz2 |
a few minor tweaks the bookmarks API:
* change name "childrenIds" to "children"
* add dateAdded and dateGroupModified properties
* add id to onRemoved
BUG=13994
BUG=14581
BUG=12217
TEST=load sample bookmarks extension and play around with Dump Bookmarks
Review URL: http://codereview.chromium.org/151032
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19536 0039d316-1c4b-4281-b951-d872f2087c98
6 files changed, 71 insertions, 28 deletions
diff --git a/chrome/browser/extensions/extension_bookmarks_module.cc b/chrome/browser/extensions/extension_bookmarks_module.cc index f25bd40..a538d3b 100644 --- a/chrome/browser/extensions/extension_bookmarks_module.cc +++ b/chrome/browser/extensions/extension_bookmarks_module.cc @@ -31,10 +31,23 @@ class ExtensionBookmarks { if (parent) dict->SetInteger(keys::kParentIdKey, parent->id()); - if (!node->is_folder()) + if (!node->is_folder()) { dict->SetString(keys::kUrlKey, node->GetURL().spec()); + } else { + // Javascript Date wants milliseconds since the epoch, ToDoubleT is + // seconds. + base::Time t = node->date_group_modified(); + if (!t.is_null()) + dict->SetReal(keys::kDateGroupModifiedKey, floor(t.ToDoubleT() * 1000)); + } dict->SetString(keys::kTitleKey, node->GetTitle()); + if (!node->date_added().is_null()) { + // Javascript Date wants milliseconds since the epoch, ToDoubleT is + // seconds. + dict->SetReal(keys::kDateAddedKey, + floor(node->date_added().ToDoubleT() * 1000)); + } int childCount = node->GetChildCount(); ListValue* children = new ListValue(); @@ -168,12 +181,11 @@ void ExtensionBookmarkEventRouter::BookmarkNodeAdded(BookmarkModel* model, ListValue args; const BookmarkNode* node = parent->GetChild(index); args.Append(new FundamentalValue(node->id())); - DictionaryValue* object_args = new DictionaryValue(); - object_args->SetString(keys::kTitleKey, node->GetTitle()); - object_args->SetString(keys::kUrlKey, node->GetURL().spec()); - object_args->SetInteger(keys::kParentIdKey, parent->id()); - object_args->SetInteger(keys::kIndexKey, index); - args.Append(object_args); + DictionaryValue* obj = ExtensionBookmarks::GetNodeDictionary(node, false); + + // Remove id since it's already being passed as the first argument. + obj->Remove(keys::kIdKey, NULL); + args.Append(obj); std::string json_args; JSONWriter::Write(&args, false, &json_args); @@ -184,7 +196,17 @@ void ExtensionBookmarkEventRouter::BookmarkNodeRemoved( BookmarkModel* model, const BookmarkNode* parent, int index) { + // TODO(erikkay) can this version ever be called? + NOTREACHED(); +} + +void ExtensionBookmarkEventRouter::BookmarkNodeRemoved( + BookmarkModel* model, + const BookmarkNode* parent, + int index, + const BookmarkNode* node) { ListValue args; + args.Append(new FundamentalValue(node->id())); DictionaryValue* object_args = new DictionaryValue(); object_args->SetInteger(keys::kParentIdKey, parent->id()); object_args->SetInteger(keys::kIndexKey, index); diff --git a/chrome/browser/extensions/extension_bookmarks_module.h b/chrome/browser/extensions/extension_bookmarks_module.h index 426e145..cfa32de 100644 --- a/chrome/browser/extensions/extension_bookmarks_module.h +++ b/chrome/browser/extensions/extension_bookmarks_module.h @@ -40,9 +40,7 @@ class ExtensionBookmarkEventRouter : public BookmarkModelObserver { virtual void BookmarkNodeRemoved(BookmarkModel* model, const BookmarkNode* parent, int old_index, - const BookmarkNode* node) { - BookmarkNodeRemoved(model, parent, old_index); - } + const BookmarkNode* node); virtual void BookmarkNodeChanged(BookmarkModel* model, const BookmarkNode* node); virtual void BookmarkNodeFavIconLoaded(BookmarkModel* model, diff --git a/chrome/browser/extensions/extension_bookmarks_module_constants.cc b/chrome/browser/extensions/extension_bookmarks_module_constants.cc index 96b8623..cdf602d 100755 --- a/chrome/browser/extensions/extension_bookmarks_module_constants.cc +++ b/chrome/browser/extensions/extension_bookmarks_module_constants.cc @@ -13,8 +13,10 @@ const wchar_t kOldIndexKey[] = L"oldIndex"; const wchar_t kOldParentIdKey[] = L"oldParentId"; const wchar_t kUrlKey[] = L"url"; const wchar_t kTitleKey[] = L"title"; -const wchar_t kChildrenKey[] = L"childrenIds"; +const wchar_t kChildrenKey[] = L"children"; const wchar_t kRecursiveKey[] = L"recursive"; +const wchar_t kDateAddedKey[] = L"dateAdded"; +const wchar_t kDateGroupModifiedKey[] = L"dateGroupModified"; const char kNoNodeError[] = "Can't find bookmark for id."; const char kNoParentError[] = "Can't find parent bookmark for id."; diff --git a/chrome/browser/extensions/extension_bookmarks_module_constants.h b/chrome/browser/extensions/extension_bookmarks_module_constants.h index 4287359..3b504e6 100755 --- a/chrome/browser/extensions/extension_bookmarks_module_constants.h +++ b/chrome/browser/extensions/extension_bookmarks_module_constants.h @@ -19,6 +19,8 @@ extern const wchar_t kUrlKey[]; extern const wchar_t kTitleKey[]; extern const wchar_t kChildrenKey[]; extern const wchar_t kRecursiveKey[]; +extern const wchar_t kDateAddedKey[]; +extern const wchar_t kDateGroupModifiedKey[]; // Errors. extern const char kNoNodeError[]; diff --git a/chrome/renderer/resources/extension_process_bindings.js b/chrome/renderer/resources/extension_process_bindings.js index 472d9f7..2cdf661 100644 --- a/chrome/renderer/resources/extension_process_bindings.js +++ b/chrome/renderer/resources/extension_process_bindings.js @@ -503,10 +503,11 @@ var chrome; // bookmark events - // Sends (id, {title, url, parentId, index}) + // Sends (id, {title, url, parentId, index, dateAdded, dateGroupModified}) + // date values are milliseconds since the UTC epoch. chrome.bookmarks.onAdded = new chrome.Event("bookmark-added"); - // Sends ({parentId, index}) + // Sends (id, {parentId, index}) chrome.bookmarks.onRemoved = new chrome.Event("bookmark-removed"); // Sends (id, object) where object has list of properties that have changed. diff --git a/chrome/test/data/extensions/samples/bookmarks/bookmark_view.html b/chrome/test/data/extensions/samples/bookmarks/bookmark_view.html index b470bcb..5275f37 100644 --- a/chrome/test/data/extensions/samples/bookmarks/bookmark_view.html +++ b/chrome/test/data/extensions/samples/bookmarks/bookmark_view.html @@ -22,6 +22,10 @@ font-family: monospace; } +ul { + padding-left: 10px; +} + </style> <script> // XXX Hack: When you call window.open('chrome-extension://...'), the window is @@ -32,30 +36,31 @@ if (!chrome.bookmarks) location.reload(); -var logEvent = function(name, data) { +var logEvent = function(name, id, data) { var log = document.getElementById("event-log"); - log.innerHTML = name + "<br>" + log.innerHTML; + log.innerHTML = name + ": " + id + ", " + JSON.stringify(data) + "<br>" + + log.innerHTML; console.log("got event: " + name); } -chrome.bookmarks.onAdded.addListener(function(data) { - logEvent("onBookmarkAdded", data); +chrome.bookmarks.onAdded.addListener(function(id, data) { + logEvent("onBookmarkAdded", id, data); }); -chrome.bookmarks.onRemoved.addListener(function(data) { - logEvent("onBookmarkRemoved", data); +chrome.bookmarks.onRemoved.addListener(function(id, data) { + logEvent("onBookmarkRemoved", id, data); }); -chrome.bookmarks.onChanged.addListener(function(data) { - logEvent("onBookmarkChanged", data); +chrome.bookmarks.onChanged.addListener(function(id, data) { + logEvent("onBookmarkChanged", id, data); }); -chrome.bookmarks.onMoved.addListener(function(data) { - logEvent("onBookmarkMoved", data); +chrome.bookmarks.onMoved.addListener(function(id, data) { + logEvent("onBookmarkMoved", id, data); }); -chrome.bookmarks.onChildrenReordered.addListener(function(data) { - logEvent("onBookmarkChildrenReordered", data); +chrome.bookmarks.onChildrenReordered.addListener(function(id, data) { + logEvent("onBookmarkChildrenReordered", id, data); }); var prefix = "bookmark_"; @@ -89,20 +94,22 @@ var toggleBookmark = function(event) { }; var addBookmark = function(bookmark, parent) { - //console.log("addBookmark " + bookmark.id); var child = document.createElement('li'); child.className = 'bookmark'; child.id = prefix + bookmark.id; child.addEventListener('click', toggleBookmark, false); + var text = bookmark.title; + if (bookmark.dateAdded) + text += " (" + new Date(bookmark.dateAdded) + ")"; if (bookmark.url && bookmark.url.length) { var link = document.createElement('a'); link.href = bookmark.url; - link.innerHTML = bookmark.title; + link.innerHTML = text; link.className = 'bookmark_title'; child.appendChild(link); } else { var title = document.createElement('div'); - title.innerHTML = bookmark.title; + title.innerHTML = text; title.className = 'bookmark_title'; child.appendChild(title); } @@ -116,6 +123,16 @@ var addBookmarks = function(bookmarks, parent) { bookmarks.forEach(function(bookmark) { addBookmark(bookmark, list); }); }; +var testGetTree = function(results) { + console.log("testGetTree:"); + console.dir(results); + function get_children(node) { + console.log(node.title); + node.children.forEach(get_children); + }; + results.forEach(get_children); +}; + var loadBookmarks = function() { var container = document.getElementById('container'); var rootElement = document.createElement("div"); @@ -126,6 +143,7 @@ var loadBookmarks = function() { chrome.bookmarks.getChildren(rootId, function(children) { addBookmarks(children, rootElement); }); + chrome.bookmarks.getTree(testGetTree); }; </script> |