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

Unified Diff: chrome/browser/prerender/prerender_manager.cc

Issue 7741002: Add code to keep track of what fraction of pageviews are top sites. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_observer.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_manager.cc
===================================================================
--- chrome/browser/prerender/prerender_manager.cc (revision 98138)
+++ chrome/browser/prerender/prerender_manager.cc (working copy)
@@ -15,6 +15,7 @@
#include "base/utf_string_conversions.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/favicon/favicon_tab_helper.h"
+#include "chrome/browser/history/top_sites.h"
#include "chrome/browser/prerender/prerender_condition.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_final_status.h"
@@ -26,15 +27,19 @@
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h"
#include "chrome/browser/ui/tab_contents/tab_contents_wrapper_delegate.h"
+#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/render_messages.h"
#include "content/browser/browser_thread.h"
+#include "content/browser/cancelable_request.h"
#include "content/browser/renderer_host/render_process_host.h"
#include "content/browser/renderer_host/render_view_host.h"
#include "content/browser/renderer_host/resource_dispatcher_host.h"
#include "content/browser/tab_contents/render_view_host_manager.h"
#include "content/browser/tab_contents/tab_contents.h"
#include "content/browser/tab_contents/tab_contents_delegate.h"
+#include "content/common/notification_observer.h"
+#include "content/common/notification_registrar.h"
#include "content/common/notification_service.h"
namespace prerender {
@@ -165,6 +170,63 @@
Origin origin_;
};
+class PrerenderManager::MostVisitedSites : public NotificationObserver {
+ public:
+ explicit MostVisitedSites(Profile* profile) :
+ profile_(profile) {
+ history::TopSites* ts = GetTopSites();
+ if (ts) {
+ registrar_.Add(this, chrome::NOTIFICATION_TOP_SITES_CHANGED,
+ Source<history::TopSites>(ts));
+ }
+
+ UpdateMostVisited();
+ }
+
+ void UpdateMostVisited() {
+ history::TopSites* ts = GetTopSites();
+ if (ts) {
+ ts->GetMostVisitedURLs(
+ &topsites_consumer_,
+ NewCallback(this,
+ &prerender::PrerenderManager::MostVisitedSites::
+ OnMostVisitedURLsAvailable));
+ }
+ }
+
+ void OnMostVisitedURLsAvailable(const history::MostVisitedURLList& data) {
+ urls_.clear();
+ for (int i = 0; i < static_cast<int>(data.size()); i++)
+ urls_.insert(data[i].url);
+ }
+
+ void Observe(int type,
+ const NotificationSource& source,
+ const NotificationDetails& details) {
+ DCHECK_EQ(type, chrome::NOTIFICATION_TOP_SITES_CHANGED);
+ UpdateMostVisited();
+ }
+
+ bool IsTopSite(const GURL& url) const {
+ return (urls_.count(url) > 0);
+ }
+
+ private:
+ history::TopSites* GetTopSites() const {
+ if (profile_)
+ return profile_->GetTopSites();
+ return NULL;
+ }
+ CancelableRequestConsumer topsites_consumer_;
+ Profile* profile_;
+ NotificationRegistrar registrar_;
+ std::set<GURL> urls_;
+};
+
+bool PrerenderManager::IsTopSite(const GURL& url) const {
+ return most_visited_->IsTopSite(url);
+}
+
PrerenderManager::PrerenderManager(Profile* profile,
PrerenderTracker* prerender_tracker)
: enabled_(true),
@@ -175,7 +237,8 @@
base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)),
runnable_method_factory_(this),
prerender_history_(new PrerenderHistory(kHistoryLength)),
- histograms_(new PrerenderHistograms()) {
+ histograms_(new PrerenderHistograms()),
+ most_visited_(new MostVisitedSites(profile)) {
// There are some assumptions that the PrerenderManager is on the UI thread.
// Any other checks simply make sure that the PrerenderManager is accessed on
// the same thread that it was created on.
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | chrome/browser/prerender/prerender_observer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698