Index: chrome/browser/ui/webui/ntp/android/bookmarks_handler.h |
diff --git a/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..cddae741ca1080e498f305a839268f172e93d716 |
--- /dev/null |
+++ b/chrome/browser/ui/webui/ntp/android/bookmarks_handler.h |
@@ -0,0 +1,139 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_BOOKMARKS_HANDLER_H_ |
+#define CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_BOOKMARKS_HANDLER_H_ |
+ |
+#include "base/values.h" |
+#include "chrome/browser/bookmarks/base_bookmark_model_observer.h" |
+#include "chrome/browser/cancelable_request.h" |
+#include "chrome/browser/favicon/favicon_service.h" |
+#include "chrome/browser/ui/webui/ntp/android/partner_bookmarks_shim.h" |
+#include "content/public/browser/web_ui_message_handler.h" |
+ |
+// The handler for Javascript messages related to the bookmarks. |
+// |
+// In Javascript if getBookmarks() is called without any parameter, the 'Other |
+// Bookmark' folder and bookmark bar's bookmarks and folders are returned. |
+// If getBookmarks() is called with a valid bookmark folder id, the given |
+// folder's bookmarks and sub folders of are returned. |
+// |
+// All bookmarks and subfolder is returned by bookmarks() javascript callback |
+// function. |
+// The returned field 'folder' indicates whether the data is a folder. The |
+// returned field 'root' indicates whether or not the bookmark list that was |
+// returned is the root list or not. Besides these fields, a folder has id |
+// and title fields; A bookmark has url and title fields. |
+// |
+// A sample result looks like: |
+// { |
+// title: 'Bookmark Bar', |
+// id: '1', |
+// root: true, |
+// bookmarks: [ |
+// { |
+// title: 'Cake', |
+// url: 'http://www.google.com', |
+// folder: false |
+// }, |
+// { |
+// title: 'Puppies', |
+// folder: true, |
+// id: '2' |
+// } |
+// ] |
+// } |
+class BookmarksHandler : public content::WebUIMessageHandler, |
+ public BaseBookmarkModelObserver, |
+ public PartnerBookmarksShim::Observer { |
+ public: |
+ BookmarksHandler(); |
+ virtual ~BookmarksHandler(); |
+ |
+ // WebUIMessageHandler override and implementation. |
+ virtual void RegisterMessages() OVERRIDE; |
+ |
+ // Callback for the "getBookmarks" message. |
+ void HandleGetBookmarks(const ListValue* args); |
+ // Callback for the "deleteBookmark" message. |
+ void HandleDeleteBookmark(const ListValue* args); |
+ // Callback for the "createHomeScreenBookmarkShortcut" message. Used when |
+ // creating a shortcut on the home screen that should open the bookmark |
+ // specified in |args|. |
+ void HandleCreateHomeScreenBookmarkShortcut(const base::ListValue* args); |
+ |
+ // Notify the UI that a change occurred to the bookmark model. |
+ virtual void NotifyModelChanged(const DictionaryValue& status); |
+ |
+ // Override the methods of BookmarkModelObserver |
+ virtual void Loaded(BookmarkModel* model, bool ids_reassigned) OVERRIDE; |
+ virtual void BookmarkModelChanged() OVERRIDE; |
+ virtual void ExtensiveBookmarkChangesBeginning(BookmarkModel* model) OVERRIDE; |
+ virtual void ExtensiveBookmarkChangesEnded(BookmarkModel* model) OVERRIDE; |
+ virtual void BookmarkNodeRemoved(BookmarkModel* model, |
+ const BookmarkNode* parent, |
+ int old_index, |
+ const BookmarkNode* node) OVERRIDE; |
+ virtual void BookmarkNodeAdded(BookmarkModel* model, |
+ const BookmarkNode* parent, |
+ int index) OVERRIDE; |
+ virtual void BookmarkNodeChanged(BookmarkModel* model, |
+ const BookmarkNode* node) OVERRIDE; |
+ |
+ // Override the methods of PartnerBookmarksShim::Observer |
+ virtual void PartnerShimLoaded(PartnerBookmarksShim* shim) OVERRIDE; |
+ virtual void ShimBeingDeleted(PartnerBookmarksShim* shim) OVERRIDE; |
+ |
+ private: |
+ // The bookmark model being observed (if it has been attached). |
+ BookmarkModel* bookmark_model_; |
+ |
+ // Information about the Partner bookmarks (must check for IsLoaded()) |
+ PartnerBookmarksShim* partner_bookmarks_shim_; |
+ |
+ // Whether the bookmark data has been requested by the UI yet. |
+ bool bookmark_data_requested_; |
+ |
+ // Indicates that extensive changes to the BookmarkModel is on-going. |
+ bool extensive_changes_; |
+ |
+ // Used for loading bookmark node. |
+ CancelableRequestConsumerTSimple<const BookmarkNode*> cancelable_consumer_; |
+ |
+ // Generates the string encoded ID to be used by the NTP. |
+ std::string GetBookmarkIdForNtp(const BookmarkNode* node); |
+ |
+ // Sets the necessary parent information in the response object to be sent |
+ // to the UI renderer. |
+ void SetParentInBookmarksResult(const BookmarkNode* parent, |
+ DictionaryValue* result); |
+ |
+ // Convert the given bookmark |node| into a dictionary format to be returned |
+ // to JavaScript. |
+ void PopulateBookmark(const BookmarkNode* node, ListValue* result); |
+ |
+ // Given a bookmark folder node, |folder|, populate the |result| with the |
+ // structured JavaScript-formatted data regarding the folder. |
+ void PopulateBookmarksInFolder(const BookmarkNode* folder, |
+ DictionaryValue* result); |
+ |
+ // Sends all bookmarks and sub folders in the given folder back to the NTP. |
+ void QueryBookmarkFolder(const int64& id, bool is_partner_bookmark); |
+ |
+ // Sends bookmark bar's bookmarks and sub folders and other folders back to |
+ // NTP. |
+ void QueryInitialBookmarks(); |
+ |
+ // Sends the result back to Javascript |
+ void SendResult(const DictionaryValue& result); |
+ |
+ // Called once the favicon is loaded during creation of the bookmark shortcuts |
+ // and is available for use. |
+ void OnShortcutFaviconDataAvailable(FaviconService::Handle handle, |
+ history::FaviconData favicon); |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BookmarksHandler); |
+}; |
+ |
+#endif // CHROME_BROWSER_UI_WEBUI_NTP_ANDROID_BOOKMARKS_HANDLER_H_ |