Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5615)

Unified Diff: chrome/browser/search/instant_service.cc

Issue 14660022: Move most visited item state info from InstantController to InstantService. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: '' Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/search/instant_service.cc
diff --git a/chrome/browser/search/instant_service.cc b/chrome/browser/search/instant_service.cc
index e6db319cb57adf2df49f10adc6d2c80b44557534..56318dfc1cc8a426401011d98ce3a45b5180af39 100644
--- a/chrome/browser/search/instant_service.cc
+++ b/chrome/browser/search/instant_service.cc
@@ -4,14 +4,22 @@
#include "chrome/browser/search/instant_service.h"
+#include <vector>
+
#include "base/strings/string_number_conversions.h"
#include "chrome/browser/history/history_notifications.h"
+#include "chrome/browser/history/top_sites.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/instant_io_context.h"
#include "chrome/browser/search/instant_service_factory.h"
#include "chrome/browser/search/local_ntp_source.h"
#include "chrome/browser/search/most_visited_iframe_source.h"
#include "chrome/browser/search/suggestion_iframe_source.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
+#include "chrome/browser/ui/browser_instant_controller.h"
+#include "chrome/browser/ui/host_desktop.h"
+#include "chrome/browser/ui/search/instant_controller.h"
#include "chrome/browser/ui/webui/favicon_source.h"
#include "chrome/browser/ui/webui/ntp/thumbnail_source.h"
#include "chrome/browser/ui/webui/theme_source.h"
@@ -28,7 +36,8 @@ using content::BrowserThread;
InstantService::InstantService(Profile* profile)
: profile_(profile),
- most_visited_item_cache_(kMaxInstantMostVisitedItemCacheSize) {
+ most_visited_item_cache_(kMaxInstantMostVisitedItemCacheSize),
+ weak_ptr_factory_(this) {
// Stub for unit tests.
if (!BrowserThread::CurrentlyOn(BrowserThread::UI))
return;
@@ -37,6 +46,12 @@ InstantService::InstantService(Profile* profile)
content::NOTIFICATION_RENDERER_PROCESS_TERMINATED,
content::NotificationService::AllSources());
+ history::TopSites* top_sites = profile_->GetTopSites();
+ if (top_sites) {
+ registrar_.Add(this,
+ chrome::NOTIFICATION_TOP_SITES_CHANGED,
+ content::Source<history::TopSites>(top_sites));
+ }
instant_io_context_ = new InstantIOContext();
if (profile_ && profile_->GetResourceContext()) {
@@ -138,18 +153,36 @@ void InstantService::AddMostVisitedItems(
}
}
+void InstantService::DeleteMostVisitedItem(const GURL& item_url) {
+ history::TopSites* top_sites = profile_->GetTopSites();
+ if (!top_sites)
+ return;
+
+ top_sites->AddBlacklistedURL(item_url);
+}
+
+void InstantService::UndoMostVisitedDeletion(
+ const GURL& most_visited_item_url) {
Jered 2013/05/21 20:18:21 "item_url" or "url" would be clear to me.
kmadhusu 2013/05/23 18:26:22 most_visited_item_url => url. Fixed.
+ history::TopSites* top_sites = profile_->GetTopSites();
+ if (!top_sites)
+ return;
+
+ top_sites->RemoveBlacklistedURL(most_visited_item_url);
+}
+
+void InstantService::UndoAllMostVisitedDeletions() {
+ history::TopSites* top_sites = profile_->GetTopSites();
+ if (!top_sites)
+ return;
+
+ top_sites->ClearBlacklistedURLs();
+}
+
void InstantService::GetCurrentMostVisitedItems(
std::vector<InstantMostVisitedItemIDPair>* items) const {
most_visited_item_cache_.GetCurrentItems(items);
}
-bool InstantService::GetMostVisitedItemForID(
- InstantRestrictedID most_visited_item_id,
- InstantMostVisitedItem* item) const {
- return most_visited_item_cache_.GetItemWithRestrictedID(
- most_visited_item_id, item);
-}
-
void InstantService::Shutdown() {
process_ids_.clear();
@@ -179,7 +212,55 @@ void InstantService::Observe(int type,
}
break;
}
+ case chrome::NOTIFICATION_TOP_SITES_CHANGED: {
+ history::TopSites* top_sites = profile_->GetTopSites();
+ if (top_sites) {
+ top_sites->GetMostVisitedURLs(
+ base::Bind(&InstantService::OnMostVisitedItemsReceived,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
+ break;
+ }
default:
NOTREACHED() << "Unexpected notification type in InstantService.";
}
}
+
+bool InstantService::GetMostVisitedItemForID(
+ InstantRestrictedID most_visited_item_id,
+ InstantMostVisitedItem* item) const {
+ return most_visited_item_cache_.GetItemWithRestrictedID(
+ most_visited_item_id, item);
+}
+
+void InstantService::OnMostVisitedItemsReceived(
+ const history::MostVisitedURLList& data) {
+ if (data.empty())
+ return;
+
+ std::vector<InstantMostVisitedItem> most_visited_items;
+ for (size_t i = 0; i < data.size(); i++) {
+ const history::MostVisitedURL& url = data[i];
+ InstantMostVisitedItem item;
+ item.url = url.url;
+ item.title = url.title;
+ most_visited_items.push_back(item);
+ }
+ AddMostVisitedItems(most_visited_items);
+ SendMostVisitedItems();
+}
+
+void InstantService::SendMostVisitedItems() {
+ Browser* browser = chrome::FindBrowserWithProfile(profile_,
Jered 2013/05/21 20:18:21 Is it correct to send the update only to one brows
kmadhusu 2013/05/23 18:26:22 Good catch. Fixed to send updates to all the brows
+ chrome::GetActiveDesktop());
+ if (!browser || !browser->instant_controller())
+ return;
+
+ InstantController* controller = browser->instant_controller()->instant();
+ if (!controller)
+ return;
+
+ std::vector<InstantMostVisitedItemIDPair> items_with_ids;
Jered 2013/05/21 20:18:21 Instead, expose UpdateMostVisitedItems() and call
kmadhusu 2013/05/23 18:26:22 Done.
+ GetCurrentMostVisitedItems(&items_with_ids);
+ controller->SendMostVisitedItems(items_with_ids);
+}

Powered by Google App Engine
This is Rietveld 408576698