| 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 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ | 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ |
| 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ | 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <list> | 9 #include <list> |
| 10 #include <map> | 10 #include <map> |
| (...skipping 22 matching lines...) Expand all Loading... |
| 33 } | 33 } |
| 34 }; | 34 }; |
| 35 } | 35 } |
| 36 | 36 |
| 37 #endif | 37 #endif |
| 38 | 38 |
| 39 namespace prerender { | 39 namespace prerender { |
| 40 | 40 |
| 41 // Adds either a preload or a pending preload to the PrerenderManager. | 41 // Adds either a preload or a pending preload to the PrerenderManager. |
| 42 // Must be called on the UI thread. | 42 // Must be called on the UI thread. |
| 43 void HandlePrefetchTag( | 43 void HandleTag( |
| 44 const base::WeakPtr<PrerenderManager>& prerender_manager, | 44 const base::WeakPtr<PrerenderManager>& prerender_manager, |
| 45 int render_process_id, | 45 int render_process_id, |
| 46 int render_view_id, | 46 int render_view_id, |
| 47 const GURL& url, | 47 const GURL& url, |
| 48 const GURL& referrer, | 48 const GURL& referrer, |
| 49 bool make_pending); | 49 bool make_pending); |
| 50 | 50 |
| 51 // PrerenderManager is responsible for initiating and keeping prerendered | 51 // PrerenderManager is responsible for initiating and keeping prerendered |
| 52 // views of webpages. All methods must be called on the UI thread unless | 52 // views of webpages. All methods must be called on the UI thread unless |
| 53 // indicated otherwise. | 53 // indicated otherwise. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 146 // Must be called on the UI thread. | 146 // Must be called on the UI thread. |
| 147 // If |enabled| is false, existing prerendered pages will still persist until | 147 // If |enabled| is false, existing prerendered pages will still persist until |
| 148 // they time out, but new ones will not be generated. | 148 // they time out, but new ones will not be generated. |
| 149 void set_enabled(bool enabled); | 149 void set_enabled(bool enabled); |
| 150 | 150 |
| 151 static PrerenderManagerMode GetMode(); | 151 static PrerenderManagerMode GetMode(); |
| 152 static void SetMode(PrerenderManagerMode mode); | 152 static void SetMode(PrerenderManagerMode mode); |
| 153 static bool IsPrerenderingPossible(); | 153 static bool IsPrerenderingPossible(); |
| 154 static bool IsControlGroup(); | 154 static bool IsControlGroup(); |
| 155 | 155 |
| 156 // Records that a prefetch tag has been observed. | 156 // Records that a prerender tag has been observed. |
| 157 void RecordPrefetchTagObserved(); | 157 void RecordTagObserved(); |
| 158 | 158 |
| 159 // Query the list of current prerender pages to see if the given tab contents | 159 // Query the list of current prerender pages to see if the given tab contents |
| 160 // is prerendering a page. | 160 // is prerendering a page. |
| 161 bool IsTabContentsPrerendering(TabContents* tab_contents) const; | 161 bool IsTabContentsPrerendering(TabContents* tab_contents) const; |
| 162 | 162 |
| 163 // Maintaining and querying the set of TabContents belonging to this | 163 // Maintaining and querying the set of TabContents belonging to this |
| 164 // PrerenderManager that are currently showing prerendered pages. | 164 // PrerenderManager that are currently showing prerendered pages. |
| 165 void MarkTabContentsAsPrerendered(TabContents* tab_contents); | 165 void MarkTabContentsAsPrerendered(TabContents* tab_contents); |
| 166 void MarkTabContentsAsWouldBePrerendered(TabContents* tab_contents); | 166 void MarkTabContentsAsWouldBePrerendered(TabContents* tab_contents); |
| 167 void MarkTabContentsAsNotPrerendered(TabContents* tab_contents); | 167 void MarkTabContentsAsNotPrerendered(TabContents* tab_contents); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 236 // ownership of the PrerenderContents. | 236 // ownership of the PrerenderContents. |
| 237 PrerenderContents* FindEntry(const GURL& url); | 237 PrerenderContents* FindEntry(const GURL& url); |
| 238 | 238 |
| 239 // Returns the iterator to the PrerenderContentsData entry that is being | 239 // Returns the iterator to the PrerenderContentsData entry that is being |
| 240 // prerendered from the given child route id pair. | 240 // prerendered from the given child route id pair. |
| 241 std::list<PrerenderContentsData>::iterator | 241 std::list<PrerenderContentsData>::iterator |
| 242 FindPrerenderContentsForChildRouteIdPair( | 242 FindPrerenderContentsForChildRouteIdPair( |
| 243 const std::pair<int, int>& child_route_id_pair); | 243 const std::pair<int, int>& child_route_id_pair); |
| 244 | 244 |
| 245 // Returns whether the PrerenderManager is currently within the prerender | 245 // Returns whether the PrerenderManager is currently within the prerender |
| 246 // window - effectively, up to 30 seconds after a prefetch tag has been | 246 // window - effectively, up to 30 seconds after a prerender tag has been |
| 247 // observed. | 247 // observed. |
| 248 bool WithinWindow() const; | 248 bool WithinWindow() const; |
| 249 | 249 |
| 250 // Called when removing a preload to ensure we clean up any pending preloads | 250 // Called when removing a preload to ensure we clean up any pending preloads |
| 251 // that might remain in the map. | 251 // that might remain in the map. |
| 252 void RemovePendingPreload(PrerenderContents* entry); | 252 void RemovePendingPreload(PrerenderContents* entry); |
| 253 | 253 |
| 254 bool DoesRateLimitAllowPrerender() const; | 254 bool DoesRateLimitAllowPrerender() const; |
| 255 | 255 |
| 256 // Deletes old TabContents that have been replaced by prerendered ones. This | 256 // Deletes old TabContents that have been replaced by prerendered ones. This |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 293 | 293 |
| 294 // Map of child/route id pairs to pending prerender data. | 294 // Map of child/route id pairs to pending prerender data. |
| 295 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> > | 295 typedef std::map<std::pair<int, int>, std::vector<PendingContentsData> > |
| 296 PendingPrerenderList; | 296 PendingPrerenderList; |
| 297 PendingPrerenderList pending_prerender_list_; | 297 PendingPrerenderList pending_prerender_list_; |
| 298 | 298 |
| 299 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_; | 299 scoped_ptr<PrerenderContents::Factory> prerender_contents_factory_; |
| 300 | 300 |
| 301 static PrerenderManagerMode mode_; | 301 static PrerenderManagerMode mode_; |
| 302 | 302 |
| 303 // The time when we last saw a prefetch request coming from a renderer. | 303 // The time when we last saw a prerender request coming from a renderer. |
| 304 // This is used to record perceived PLT's for a certain amount of time | 304 // This is used to record perceived PLT's for a certain amount of time |
| 305 // from the point that we last saw a <link rel=prefetch> tag. | 305 // from the point that we last saw a <link rel=prerender> tag. |
| 306 base::TimeTicks last_prefetch_seen_time_; | 306 base::TimeTicks last_prerender_seen_time_; |
| 307 | 307 |
| 308 // A count of how many prerenders we do per session. Initialized to 0 then | 308 // A count of how many prerenders we do per session. Initialized to 0 then |
| 309 // incremented and emitted to a histogram on each successful prerender. | 309 // incremented and emitted to a histogram on each successful prerender. |
| 310 static int prerenders_per_session_count_; | 310 static int prerenders_per_session_count_; |
| 311 | 311 |
| 312 // RepeatingTimer to perform periodic cleanups of pending prerendered | 312 // RepeatingTimer to perform periodic cleanups of pending prerendered |
| 313 // pages. | 313 // pages. |
| 314 base::RepeatingTimer<PrerenderManager> repeating_timer_; | 314 base::RepeatingTimer<PrerenderManager> repeating_timer_; |
| 315 | 315 |
| 316 // Track time of last prerender to limit prerender spam. | 316 // Track time of last prerender to limit prerender spam. |
| 317 base::TimeTicks last_prerender_start_time_; | 317 base::TimeTicks last_prerender_start_time_; |
| 318 | 318 |
| 319 std::list<TabContentsWrapper*> old_tab_contents_list_; | 319 std::list<TabContentsWrapper*> old_tab_contents_list_; |
| 320 | 320 |
| 321 // Cancels pending tasks on deletion. | 321 // Cancels pending tasks on deletion. |
| 322 ScopedRunnableMethodFactory<PrerenderManager> runnable_method_factory_; | 322 ScopedRunnableMethodFactory<PrerenderManager> runnable_method_factory_; |
| 323 | 323 |
| 324 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); | 324 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); |
| 325 }; | 325 }; |
| 326 | 326 |
| 327 } // namespace prerender | 327 } // namespace prerender |
| 328 | 328 |
| 329 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ | 329 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ |
| OLD | NEW |