diff options
author | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-21 15:20:33 +0000 |
---|---|---|
committer | sky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-08-21 15:20:33 +0000 |
commit | f25387b62a3cccde48622d0b7fca57cd6fb16ab7 (patch) | |
tree | 06ac2c1972d6608fb65979c3a279a6d214fecc6c /chrome/browser/dom_ui | |
parent | bcc682fc4f5050ac911635ab649fbd30002fc2b4 (diff) | |
download | chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.zip chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.tar.gz chromium_src-f25387b62a3cccde48622d0b7fca57cd6fb16ab7.tar.bz2 |
Moves bookmarks out of history into its own file (JSON).
Interesting points:
. Migration was a bit atypical. Here is the approach I took:
. If the URL db contains bookmarks it writes the bookmarks to a
temporary file.
. When the bookmark bar model is loaded it assumes bookmarks are
stored in a file. If the bookmarks file doesn't exist it then
attempts to load from history, after waiting for history to finish
processing tasks.
. I've broken having the omnibox query for starred only. This patch
was already too ginormous for me to contemplate this too. I'll return
to it after I land this.
. Similarly the history page isn't searching for starred titles
now. As we discussed with Glen, that is probably fine for now.
. I've converted NOTIFY_STARRED_FAVICON_CHANGED to
NOTIFY_FAVICON_CHANGED and it is notified ANY time a favicon
changes. I'm mildly concerned about the extra notifications, but
without having history know about starred it's the best I can do for
now.
. Autocomplete (specifically URLDatabase::AutocompleteForPrefix)
previously sorted by starred. It can no longer do this. I don't
think I can get this functionality back:( Luckily it only mattered
if you had a starred and non-starred URL with the same type count
that matched a query. Probably pretty rare.
What's left:
. Fix up HistoryContentsProvider to query for starred entries titles.
. Clean up the delete all case. I basically just made it compile; it
can be greatly simplified.
. Rename BookmarkBarModel to BookmarksModel.
BUG=1256202
TEST=this is a huge change to bookmarks. Thanfully it's pretty well
covered by tests, none-the-less make sure you exercise bookmarks
pretty heavily to make sure nothing is busted.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@1153 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/dom_ui')
-rw-r--r-- | chrome/browser/dom_ui/new_tab_ui.cc | 56 | ||||
-rw-r--r-- | chrome/browser/dom_ui/new_tab_ui.h | 34 |
2 files changed, 69 insertions, 21 deletions
diff --git a/chrome/browser/dom_ui/new_tab_ui.cc b/chrome/browser/dom_ui/new_tab_ui.cc index ef36f49..58ce89d 100644 --- a/chrome/browser/dom_ui/new_tab_ui.cc +++ b/chrome/browser/dom_ui/new_tab_ui.cc @@ -518,37 +518,63 @@ void TemplateURLHandler::OnTemplateURLModelChanged() { } RecentlyBookmarkedHandler::RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host) - : dom_ui_host_(dom_ui_host) { + : dom_ui_host_(dom_ui_host), + model_(NULL) { dom_ui_host->RegisterMessageCallback("getRecentlyBookmarked", NewCallback(this, &RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked)); } +RecentlyBookmarkedHandler::~RecentlyBookmarkedHandler() { + if (model_) + model_->RemoveObserver(this); +} + void RecentlyBookmarkedHandler::HandleGetRecentlyBookmarked(const Value*) { - HistoryService* hs = - dom_ui_host_->profile()->GetHistoryService(Profile::EXPLICIT_ACCESS); - if (hs) { - HistoryService::Handle handle = hs->GetMostRecentStarredEntries( - kRecentBookmarks, - &cancelable_consumer_, - NewCallback(this, - &RecentlyBookmarkedHandler::OnMostRecentStarredEntries)); + if (!model_) { + model_ = dom_ui_host_->profile()->GetBookmarkBarModel(); + model_->AddObserver(this); } + // If the model is loaded, synchronously send the bookmarks down. Otherwise + // when the model loads we'll send the bookmarks down. + if (model_->IsLoaded()) + SendBookmarksToPage(); } -void RecentlyBookmarkedHandler::OnMostRecentStarredEntries( - HistoryService::Handle request_handle, - std::vector<history::StarredEntry>* entries) { +void RecentlyBookmarkedHandler::SendBookmarksToPage() { + std::vector<BookmarkBarNode*> recently_bookmarked; + model_->GetMostRecentlyAddedEntries(kRecentBookmarks, &recently_bookmarked); ListValue list_value; - for (size_t i = 0; i < entries->size(); ++i) { - const history::StarredEntry& entry = (*entries)[i]; + for (size_t i = 0; i < recently_bookmarked.size(); ++i) { + BookmarkBarNode* node = recently_bookmarked[i]; DictionaryValue* entry_value = new DictionaryValue; - SetURLAndTitle(entry_value, entry.title, entry.url); + SetURLAndTitle(entry_value, node->GetTitle(), node->GetURL()); list_value.Append(entry_value); } dom_ui_host_->CallJavascriptFunction(L"recentlyBookmarked", list_value); } +void RecentlyBookmarkedHandler::Loaded(BookmarkBarModel* model) { + SendBookmarksToPage(); +} + +void RecentlyBookmarkedHandler::BookmarkNodeAdded(BookmarkBarModel* model, + BookmarkBarNode* parent, + int index) { + SendBookmarksToPage(); +} + +void RecentlyBookmarkedHandler::BookmarkNodeRemoved(BookmarkBarModel* model, + BookmarkBarNode* parent, + int index) { + SendBookmarksToPage(); +} + +void RecentlyBookmarkedHandler::BookmarkNodeChanged(BookmarkBarModel* model, + BookmarkBarNode* node) { + SendBookmarksToPage(); +} + RecentlyClosedTabsHandler::RecentlyClosedTabsHandler(DOMUIHost* dom_ui_host) : dom_ui_host_(dom_ui_host), tab_restore_service_(NULL), diff --git a/chrome/browser/dom_ui/new_tab_ui.h b/chrome/browser/dom_ui/new_tab_ui.h index 71a4f50..944fa88 100644 --- a/chrome/browser/dom_ui/new_tab_ui.h +++ b/chrome/browser/dom_ui/new_tab_ui.h @@ -30,6 +30,7 @@ #ifndef CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ #define CHROME_BROWSER_DOM_UI_NEW_TAB_UI_H__ +#include "chrome/browser/bookmark_bar_model.h" #include "chrome/browser/dom_ui/dom_ui_host.h" #include "chrome/browser/dom_ui/chrome_url_data_manager.h" #include "chrome/browser/history/history.h" @@ -202,9 +203,11 @@ class TemplateURLHandler : public DOMMessageHandler, DISALLOW_EVIL_CONSTRUCTORS(TemplateURLHandler); }; -class RecentlyBookmarkedHandler : public DOMMessageHandler { +class RecentlyBookmarkedHandler : public DOMMessageHandler, + public BookmarkBarModelObserver { public: explicit RecentlyBookmarkedHandler(DOMUIHost* dom_ui_host); + ~RecentlyBookmarkedHandler(); // Callback which navigates to the bookmarks page. void HandleShowBookmarkPage(const Value*); @@ -213,13 +216,32 @@ class RecentlyBookmarkedHandler : public DOMMessageHandler { // It takes no arguments. void HandleGetRecentlyBookmarked(const Value*); - void OnMostRecentStarredEntries( - HistoryService::Handle request_handle, - std::vector<history::StarredEntry>* entries); - private: + void SendBookmarksToPage(); + + // BookmarkBarModelObserver methods. These invoke SendBookmarksToPage. + virtual void Loaded(BookmarkBarModel* model); + virtual void BookmarkNodeAdded(BookmarkBarModel* model, + BookmarkBarNode* parent, + int index); + virtual void BookmarkNodeRemoved(BookmarkBarModel* model, + BookmarkBarNode* parent, + int index); + virtual void BookmarkNodeChanged(BookmarkBarModel* model, + BookmarkBarNode* node); + + // These two won't effect what is shown, so they do nothing. + virtual void BookmarkNodeMoved(BookmarkBarModel* model, + BookmarkBarNode* old_parent, + int old_index, + BookmarkBarNode* new_parent, + int new_index) {} + virtual void BookmarkNodeFavIconLoaded(BookmarkBarModel* model, + BookmarkBarNode* node) {} + DOMUIHost* dom_ui_host_; - CancelableRequestConsumerT<int, 0> cancelable_consumer_; + // The model we're getting bookmarks from. The model is owned by the Profile. + BookmarkBarModel* model_; DISALLOW_EVIL_CONSTRUCTORS(RecentlyBookmarkedHandler); }; |