| 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 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 | 43 |
| 44 // Adds either a preload or a pending preload to the PrerenderManager. | 44 // Adds either a preload or a pending preload to the PrerenderManager. |
| 45 // Must be called on the UI thread. | 45 // Must be called on the UI thread. |
| 46 void HandleTag( | 46 void HandleTag( |
| 47 const base::WeakPtr<PrerenderManager>& prerender_manager, | 47 const base::WeakPtr<PrerenderManager>& prerender_manager, |
| 48 int render_process_id, | 48 int render_process_id, |
| 49 int render_view_id, | 49 int render_view_id, |
| 50 const GURL& url, | 50 const GURL& url, |
| 51 const GURL& referrer); | 51 const GURL& referrer); |
| 52 | 52 |
| 53 void DestroyPreloadForRenderView( | 53 void DestroyPrerenderForRenderView( |
| 54 const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr, | 54 const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr, |
| 55 int child_id, | 55 int child_id, |
| 56 int route_id, | 56 int route_id, |
| 57 FinalStatus final_status); | 57 FinalStatus final_status); |
| 58 | 58 |
| 59 // PrerenderManager is responsible for initiating and keeping prerendered | 59 // PrerenderManager is responsible for initiating and keeping prerendered |
| 60 // views of webpages. All methods must be called on the UI thread unless | 60 // views of webpages. All methods must be called on the UI thread unless |
| 61 // indicated otherwise. | 61 // indicated otherwise. |
| 62 class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, | 62 class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| 63 public base::NonThreadSafe { | 63 public base::NonThreadSafe { |
| 64 public: | 64 public: |
| 65 // PrerenderManagerMode is used in a UMA_HISTOGRAM, so please do not | 65 // PrerenderManagerMode is used in a UMA_HISTOGRAM, so please do not |
| 66 // add in the middle. | 66 // add in the middle. |
| 67 enum PrerenderManagerMode { | 67 enum PrerenderManagerMode { |
| 68 PRERENDER_MODE_DISABLED, | 68 PRERENDER_MODE_DISABLED, |
| 69 PRERENDER_MODE_ENABLED, | 69 PRERENDER_MODE_ENABLED, |
| 70 PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP, | 70 PRERENDER_MODE_EXPERIMENT_CONTROL_GROUP, |
| 71 PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP, | 71 PRERENDER_MODE_EXPERIMENT_PRERENDER_GROUP, |
| 72 PRERENDER_MODE_MAX | 72 PRERENDER_MODE_MAX |
| 73 }; | 73 }; |
| 74 | 74 |
| 75 // Owned by a Profile object for the lifetime of the profile. | 75 // Owned by a Profile object for the lifetime of the profile. |
| 76 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker); | 76 PrerenderManager(Profile* profile, PrerenderTracker* prerender_tracker); |
| 77 | 77 |
| 78 virtual ~PrerenderManager(); | 78 virtual ~PrerenderManager(); |
| 79 | 79 |
| 80 // Preloads |url| if valid. |child_route_id_pair| identifies the | 80 // Starts a prerender for |url| if valid. |child_route_id_pair| identifies the |
| 81 // RenderViewHost that the prerender request came from and is used to | 81 // RenderViewHost that the prerender request came from and is used to |
| 82 // set the initial window size of the RenderViewHost used for prerendering. | 82 // set the initial window size of the RenderViewHost used for prerendering. |
| 83 // Returns true if the URL was added, false if it was not. | 83 // Returns true if the URL was added, false if it was not. |
| 84 // If |child_route_id_pair| itself is prerendering, adds the preloads as | 84 // If |child_route_id_pair| itself is prerendering, adds the preloads as |
| 85 // a pending preload. | 85 // a pending preload. |
| 86 bool AddPreload( | 86 bool AddPrerender( |
| 87 const std::pair<int, int>& child_route_id_pair, | 87 const std::pair<int, int>& child_route_id_pair, |
| 88 const GURL& url, | 88 const GURL& url, |
| 89 const GURL& referrer); | 89 const GURL& referrer); |
| 90 | 90 |
| 91 // Destroy all preloads for the given child route id pair and assign a final | 91 // Starts a prerender for |url| if valid. As the prerender request is coming |
| 92 // from a source without a RenderViewHost (ie, the omnibox) we don't have a |
| 93 // child or route id, or a referrer. This method uses sensible values for |
| 94 // those. |
| 95 bool AddPrerenderWithNoTag(const GURL& url); |
| 96 |
| 97 // Destroy all prerenders for the given child route id pair and assign a final |
| 92 // status to them. | 98 // status to them. |
| 93 virtual void DestroyPreloadForChildRouteIdPair( | 99 virtual void DestroyPrerenderForChildRouteIdPair( |
| 94 const std::pair<int, int>& child_route_id_pair, | 100 const std::pair<int, int>& child_route_id_pair, |
| 95 FinalStatus final_status); | 101 FinalStatus final_status); |
| 96 | 102 |
| 97 // For a given TabContents that wants to navigate to the URL supplied, | 103 // For a given TabContents that wants to navigate to the URL supplied, |
| 98 // determines whether a preloaded version of the URL can be used, | 104 // determines whether a prerendered version of the URL can be used, |
| 99 // and substitutes the prerendered RVH into the TabContents. Returns | 105 // and substitutes the prerendered RVH into the TabContents. Returns |
| 100 // whether or not a prerendered RVH could be used or not. | 106 // whether or not a prerendered RVH could be used or not. |
| 101 bool MaybeUsePreloadedPage(TabContents* tab_contents, | 107 bool MaybeUsePrerenderedPage(TabContents* tab_contents, |
| 102 const GURL& url, | 108 const GURL& url, |
| 103 bool has_opener_set); | 109 bool has_opener_set); |
| 104 | 110 |
| 105 // Moves a PrerenderContents to the pending delete list from the list of | 111 // Moves a PrerenderContents to the pending delete list from the list of |
| 106 // active prerenders when prerendering should be cancelled. | 112 // active prerenders when prerendering should be cancelled. |
| 107 void MoveEntryToPendingDelete(PrerenderContents* entry); | 113 void MoveEntryToPendingDelete(PrerenderContents* entry); |
| 108 | 114 |
| 109 // Checks if the PrerenderContents has been added to the pending delete list. | 115 // Checks if the PrerenderContents has been added to the pending delete list. |
| 110 bool IsPendingDelete(PrerenderContents* entry) const; | 116 bool IsPendingDelete(PrerenderContents* entry) const; |
| 111 | 117 |
| 112 // Retrieves the PrerenderContents object for the specified URL, if it | 118 // Retrieves the PrerenderContents object for the specified URL, if it |
| 113 // has been prerendered. The caller will then have ownership of the | 119 // has been prerendered. The caller will then have ownership of the |
| (...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 205 friend class base::RefCountedThreadSafe<PrerenderManager>; | 211 friend class base::RefCountedThreadSafe<PrerenderManager>; |
| 206 | 212 |
| 207 struct PrerenderContentsData; | 213 struct PrerenderContentsData; |
| 208 struct NavigationRecord; | 214 struct NavigationRecord; |
| 209 | 215 |
| 210 class OnCloseTabContentsDeleter; | 216 class OnCloseTabContentsDeleter; |
| 211 | 217 |
| 212 // Adds a pending preload issued by the prerendering RenderView identified by | 218 // Adds a pending preload issued by the prerendering RenderView identified by |
| 213 // |child_route_id_pair|. If and when that prerendering RenderView is used, | 219 // |child_route_id_pair|. If and when that prerendering RenderView is used, |
| 214 // the specified prerender will start. | 220 // the specified prerender will start. |
| 215 void AddPendingPreload(const std::pair<int, int>& child_route_id_pair, | 221 void AddPendingPrerender(const std::pair<int, int>& child_route_id_pair, |
| 216 const GURL& url, | 222 const GURL& url, |
| 217 const GURL& referrer); | 223 const GURL& referrer); |
| 218 | 224 |
| 219 // Starts scheduling periodic cleanups. | 225 // Starts scheduling periodic cleanups. |
| 220 void StartSchedulingPeriodicCleanups(); | 226 void StartSchedulingPeriodicCleanups(); |
| 221 // Stops scheduling periodic cleanups if they're no longer needed. | 227 // Stops scheduling periodic cleanups if they're no longer needed. |
| 222 void MaybeStopSchedulingPeriodicCleanups(); | 228 void MaybeStopSchedulingPeriodicCleanups(); |
| 223 | 229 |
| 224 // Deletes stale and cancelled prerendered PrerenderContents, as well as | 230 // Deletes stale and cancelled prerendered PrerenderContents, as well as |
| 225 // TabContents that have been replaced by prerendered TabContents. | 231 // TabContents that have been replaced by prerendered TabContents. |
| 226 // Also identifies and kills PrerenderContents that use too much | 232 // Also identifies and kills PrerenderContents that use too much |
| 227 // resources. | 233 // resources. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 255 FindPrerenderContentsForChildRouteIdPair( | 261 FindPrerenderContentsForChildRouteIdPair( |
| 256 const std::pair<int, int>& child_route_id_pair); | 262 const std::pair<int, int>& child_route_id_pair); |
| 257 | 263 |
| 258 // Returns whether the PrerenderManager is currently within the prerender | 264 // Returns whether the PrerenderManager is currently within the prerender |
| 259 // window - effectively, up to 30 seconds after a prerender tag has been | 265 // window - effectively, up to 30 seconds after a prerender tag has been |
| 260 // observed. | 266 // observed. |
| 261 bool WithinWindow() const; | 267 bool WithinWindow() const; |
| 262 | 268 |
| 263 // Called when removing a preload to ensure we clean up any pending preloads | 269 // Called when removing a preload to ensure we clean up any pending preloads |
| 264 // that might remain in the map. | 270 // that might remain in the map. |
| 265 void RemovePendingPreload(PrerenderContents* entry); | 271 void RemovePendingPrerender(PrerenderContents* entry); |
| 266 | 272 |
| 267 bool DoesRateLimitAllowPrerender() const; | 273 bool DoesRateLimitAllowPrerender() const; |
| 268 | 274 |
| 269 // Deletes old TabContents that have been replaced by prerendered ones. This | 275 // Deletes old TabContents that have been replaced by prerendered ones. This |
| 270 // is needed because they're replaced in a callback from the old TabContents, | 276 // is needed because they're replaced in a callback from the old TabContents, |
| 271 // so cannot immediately be deleted. | 277 // so cannot immediately be deleted. |
| 272 void DeleteOldTabContents(); | 278 void DeleteOldTabContents(); |
| 273 | 279 |
| 274 // Cleans up old NavigationRecord's. | 280 // Cleans up old NavigationRecord's. |
| 275 void CleanUpOldNavigations(); | 281 void CleanUpOldNavigations(); |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 342 ScopedRunnableMethodFactory<PrerenderManager> runnable_method_factory_; | 348 ScopedRunnableMethodFactory<PrerenderManager> runnable_method_factory_; |
| 343 | 349 |
| 344 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_; | 350 ScopedVector<OnCloseTabContentsDeleter> on_close_tab_contents_deleters_; |
| 345 | 351 |
| 346 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); | 352 DISALLOW_COPY_AND_ASSIGN(PrerenderManager); |
| 347 }; | 353 }; |
| 348 | 354 |
| 349 } // namespace prerender | 355 } // namespace prerender |
| 350 | 356 |
| 351 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ | 357 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_MANAGER_H_ |
| OLD | NEW |