Chromium Code Reviews| Index: chrome/browser/prerender/prerender_manager.h |
| diff --git a/chrome/browser/prerender/prerender_manager.h b/chrome/browser/prerender/prerender_manager.h |
| index 20dcb0cabd177046fa8c2caefecf52de597bed6c..d068b695f89cd20a0d3210e47ad110cf3e81864f 100644 |
| --- a/chrome/browser/prerender/prerender_manager.h |
| +++ b/chrome/browser/prerender/prerender_manager.h |
| @@ -8,6 +8,7 @@ |
| #include <list> |
| #include <string> |
| +#include <utility> |
| #include "base/gtest_prod_util.h" |
| #include "base/hash_tables.h" |
| @@ -34,6 +35,10 @@ namespace content { |
| class WebContents; |
| } |
| +namespace gfx { |
| +class Size; |
| +} |
| + |
| #if defined(COMPILER_GCC) |
| namespace BASE_HASH_NAMESPACE { |
| @@ -96,14 +101,18 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| // Entry points for adding prerenders. |
| // Adds a prerender for |url| if valid. |process_id| and |route_id| identify |
| - // the RenderViewHost that the prerender request came from and are used to |
| - // set the initial window size of the RenderViewHost used for prerendering. |
| + // the RenderView that the prerender request came from. The |size| may be |
| + // empty, and the current tab size will be used if it is. |
|
dominich
2012/04/30 15:52:05
Or a default in the case of there being no current
gavinp
2012/04/30 23:55:39
Done.
|
| // Returns true if the URL was added, false if it was not. |
| - // If the RenderViewHost source is itself prerendering, the prerender is added |
| + // If the launching RenderView is itself prerendering, the prerender is added |
| // as a pending prerender. |
| - bool AddPrerenderFromLinkRelPrerender(int process_id, int route_id, |
| - const GURL& url, |
| - const content::Referrer& referrer); |
| + bool AddPrerenderFromLinkRelPrerender( |
| + int process_id, |
| + int route_id, |
| + const GURL& url, |
| + const content::Referrer& referrer, |
| + const gfx::Size& size, |
| + content::SessionStorageNamespace* session_storage_namespace); |
| // Adds a prerender for |url| if valid. As the prerender request is coming |
| // from a source without a RenderViewHost (i.e., the omnibox) we don't have a |
| @@ -114,9 +123,15 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| const GURL& url, |
| content::SessionStorageNamespace* session_storage_namespace); |
| + // Request cancelation of a previously added prerender. If the add_count_ of |
|
dominich
2012/04/30 15:52:05
|active_count_|
gavinp
2012/04/30 23:55:39
Done.
|
| + // the prerender is one, it will be canceled. Otherwise, add_count_ will be |
|
dominich
2012/04/30 15:52:05
'The |active_count_| of the prerender will be decr
gavinp
2012/04/30 23:55:39
Done.
|
| + // decremented by one. |
| + void MaybeCancelPrerender(const GURL& url); |
| + |
| // Destroy all prerenders for the given child route id pair and assign a final |
| // status to them. |
| - virtual void DestroyPrerenderForRenderView(int process_id, int view_id, |
| + virtual void DestroyPrerenderForRenderView(int process_id, |
| + int view_id, |
| FinalStatus final_status); |
| // Cancels all active prerenders. |
| @@ -247,31 +262,34 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| void DoShutdown(); |
| private: |
| - // Needs access to AddPrerender. |
| - friend class PrerenderContents; |
| - |
| // Test that needs needs access to internal functions. |
| friend class PrerenderBrowserTest; |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, AliasURLTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, CancelAllTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, AliasURLTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, CancelAllTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, |
| CancelOmniboxRemovesOmniboxTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, |
| CancelOmniboxDoesNotRemoveLinkTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ClearTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ControlGroup); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, DropOldestRequestTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, DropSecondRequestTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, ExpireTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, FoundTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, FragmentMatchesFragmentTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, FragmentMatchesPageTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, PageMatchesFragmentTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, PendingPrerenderTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, RateLimitInWindowTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, RateLimitOutsideWindowTest); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, SourceRenderViewClosed); |
| - FRIEND_TEST_ALL_PREFIXES(PrerenderManagerTest, TwoElementPrerenderTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, ClearTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, ControlGroup); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, DropOldestRequestTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, DropSecondRequestTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, ExpireTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, FoundTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, FragmentMatchesFragmentTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, FragmentMatchesPageTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerAddTwiceCancelTwice); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerCancel); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerCancelThenAddAgain); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerCancelTwice); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerExpireThenAddAgain); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, LinkManagerExpireThenCancel); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, PageMatchesFragmentTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, PendingPrerenderTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, RateLimitInWindowTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, RateLimitOutsideWindowTest); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, SourceRenderViewClosed); |
| + FRIEND_TEST_ALL_PREFIXES(PrerenderTest, TwoElementPrerenderTest); |
| struct PrerenderContentsData; |
| struct NavigationRecord; |
| @@ -283,15 +301,15 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| typedef std::list<PrerenderContentsData> PrerenderContentsDataList; |
| // Adds a prerender for |url| from referrer |referrer| initiated from the |
| - // RenderViewHost specified by |child_route_id_pair|. The |origin| specifies |
| - // how the prerender was added. If the |session_storage_namespace| is NULL, |
| - // it is discovered using the RenderViewHost specified by |
| - // |child_route_id_pair|. |
| + // child process specified by |child__id|. The |origin| specifies how the |
| + // prerender was added. If the |size| is empty, the size of the currently |
| + // active tab will be used, if available. |
|
dominich
2012/04/30 15:52:05
or a default if not.
gavinp
2012/04/30 23:55:39
Done.
|
| bool AddPrerender( |
| Origin origin, |
| - const std::pair<int, int>& child_route_id_pair, |
| + int child_id, |
| const GURL& url, |
| const content::Referrer& referrer, |
| + const gfx::Size& size, |
| content::SessionStorageNamespace* session_storage_namespace); |
| // Retrieves the PrerenderContents object for the specified URL, if it |
| @@ -341,9 +359,10 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| // list. |
| void DeletePendingDeleteEntries(); |
| - // Finds the specified PrerenderContents and returns it, if it exists. |
| - // Returns NULL otherwise. Unlike GetEntry, the PrerenderManager maintains |
| - // ownership of the PrerenderContents. |
| + // Finds the specified PrerenderContentsData/PrerenderContents and returns it, |
| + // if it exists. Returns NULL otherwise. Unlike GetEntry, the |
| + // PrerenderManager maintains ownership of the PrerenderContents. |
| + PrerenderContentsData* FindEntryData(const GURL& url); |
| PrerenderContents* FindEntry(const GURL& url) const; |
| // Returns the iterator to the PrerenderContentsData entry that is being |
| @@ -352,6 +371,9 @@ class PrerenderManager : public base::SupportsWeakPtr<PrerenderManager>, |
| FindPrerenderContentsForChildRouteIdPair( |
| const std::pair<int, int>& child_route_id_pair); |
| + PrerenderContentsDataList::iterator |
| + FindPrerenderContentsForURL(const GURL& url); |
| + |
| bool DoesRateLimitAllowPrerender() const; |
| // Deletes old WebContents that have been replaced by prerendered ones. This |