summaryrefslogtreecommitdiffstats
path: root/chrome/browser/dom_ui
diff options
context:
space:
mode:
authorsky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-21 15:20:33 +0000
committersky@google.com <sky@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2008-08-21 15:20:33 +0000
commitf25387b62a3cccde48622d0b7fca57cd6fb16ab7 (patch)
tree06ac2c1972d6608fb65979c3a279a6d214fecc6c /chrome/browser/dom_ui
parentbcc682fc4f5050ac911635ab649fbd30002fc2b4 (diff)
downloadchromium_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.cc56
-rw-r--r--chrome/browser/dom_ui/new_tab_ui.h34
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);
};