| 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.
|
|
|