| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/prerender/prerender_manager.h" | 5 #include "chrome/browser/prerender/prerender_manager.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 166 ~PendingContentsData() {} | 166 ~PendingContentsData() {} |
| 167 GURL url_; | 167 GURL url_; |
| 168 GURL referrer_; | 168 GURL referrer_; |
| 169 Origin origin_; | 169 Origin origin_; |
| 170 }; | 170 }; |
| 171 | 171 |
| 172 class PrerenderManager::MostVisitedSites : public NotificationObserver { | 172 class PrerenderManager::MostVisitedSites : public NotificationObserver { |
| 173 public: | 173 public: |
| 174 explicit MostVisitedSites(Profile* profile) : | 174 explicit MostVisitedSites(Profile* profile) : |
| 175 profile_(profile) { | 175 profile_(profile) { |
| 176 // If TopSites is already loaded, we will want to use it right away. | |
| 177 // Otherwise, wait for three seconds to avoid race conditions. | |
| 178 // This is a hack to ensure unit tests don't fail. | |
| 179 // See http://crbug.com/94654 | |
| 180 if (profile && profile->GetTopSitesWithoutCreating()) { | |
| 181 Init(); | |
| 182 } else { | |
| 183 timer_.Start(FROM_HERE, base::TimeDelta::FromSeconds(3), this, | |
| 184 &prerender::PrerenderManager::MostVisitedSites::Init); | |
| 185 } | |
| 186 } | |
| 187 | |
| 188 void Init() { | |
| 189 history::TopSites* top_sites = GetTopSites(); | 176 history::TopSites* top_sites = GetTopSites(); |
| 190 if (top_sites) { | 177 if (top_sites) { |
| 191 registrar_.Add(this, chrome::NOTIFICATION_TOP_SITES_CHANGED, | 178 registrar_.Add(this, chrome::NOTIFICATION_TOP_SITES_CHANGED, |
| 192 Source<history::TopSites>(top_sites)); | 179 Source<history::TopSites>(top_sites)); |
| 193 } | 180 } |
| 194 | 181 |
| 195 UpdateMostVisited(); | 182 UpdateMostVisited(); |
| 196 } | 183 } |
| 197 | 184 |
| 198 void UpdateMostVisited() { | 185 void UpdateMostVisited() { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 227 history::TopSites* GetTopSites() const { | 214 history::TopSites* GetTopSites() const { |
| 228 if (profile_) | 215 if (profile_) |
| 229 return profile_->GetTopSites(); | 216 return profile_->GetTopSites(); |
| 230 return NULL; | 217 return NULL; |
| 231 } | 218 } |
| 232 | 219 |
| 233 CancelableRequestConsumer topsites_consumer_; | 220 CancelableRequestConsumer topsites_consumer_; |
| 234 Profile* profile_; | 221 Profile* profile_; |
| 235 NotificationRegistrar registrar_; | 222 NotificationRegistrar registrar_; |
| 236 std::set<GURL> urls_; | 223 std::set<GURL> urls_; |
| 237 base::OneShotTimer<prerender::PrerenderManager::MostVisitedSites> timer_; | |
| 238 }; | 224 }; |
| 239 | 225 |
| 240 bool PrerenderManager::IsTopSite(const GURL& url) const { | 226 bool PrerenderManager::IsTopSite(const GURL& url) { |
| 241 return most_visited_.get() && most_visited_->IsTopSite(url); | 227 if (!most_visited_.get()) |
| 228 most_visited_.reset(new MostVisitedSites(profile_)); |
| 229 return most_visited_->IsTopSite(url); |
| 242 } | 230 } |
| 243 | 231 |
| 244 PrerenderManager::PrerenderManager(Profile* profile, | 232 PrerenderManager::PrerenderManager(Profile* profile, |
| 245 PrerenderTracker* prerender_tracker) | 233 PrerenderTracker* prerender_tracker) |
| 246 : enabled_(true), | 234 : enabled_(true), |
| 247 profile_(profile), | 235 profile_(profile), |
| 248 prerender_tracker_(prerender_tracker), | 236 prerender_tracker_(prerender_tracker), |
| 249 prerender_contents_factory_(PrerenderContents::CreateFactory()), | 237 prerender_contents_factory_(PrerenderContents::CreateFactory()), |
| 250 last_prerender_start_time_(GetCurrentTimeTicks() - | 238 last_prerender_start_time_(GetCurrentTimeTicks() - |
| 251 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), | 239 base::TimeDelta::FromMilliseconds(kMinTimeBetweenPrerendersMs)), |
| (...skipping 773 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1025 DeletePendingDeleteEntries(); | 1013 DeletePendingDeleteEntries(); |
| 1026 } | 1014 } |
| 1027 | 1015 |
| 1028 void PrerenderManager::RecordFinalStatus(Origin origin, | 1016 void PrerenderManager::RecordFinalStatus(Origin origin, |
| 1029 uint8 experiment_id, | 1017 uint8 experiment_id, |
| 1030 FinalStatus final_status) const { | 1018 FinalStatus final_status) const { |
| 1031 histograms_->RecordFinalStatus(origin, experiment_id, final_status); | 1019 histograms_->RecordFinalStatus(origin, experiment_id, final_status); |
| 1032 } | 1020 } |
| 1033 | 1021 |
| 1034 } // namespace prerender | 1022 } // namespace prerender |
| OLD | NEW |