Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(977)

Side by Side Diff: chrome/browser/prerender/prerender_link_manager.h

Issue 11551003: Change multi-prerender API to include per launcher slots. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: surprising test deflake Created 8 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_LINK_MANAGER_H_ 5 #ifndef CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 6 #define CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
7 7
8 #include <map> 8 #include <list>
9 #include <utility>
10 9
11 #include "base/basictypes.h" 10 #include "base/basictypes.h"
12 #include "chrome/browser/prerender/prerender_handle.h" 11 #include "chrome/browser/prerender/prerender_handle.h"
13 #include "chrome/browser/profiles/profile_keyed_service.h" 12 #include "chrome/browser/profiles/profile_keyed_service.h"
14 #include "googleurl/src/gurl.h" 13 #include "googleurl/src/gurl.h"
15 14
16 class Profile; 15 class Profile;
17 16
18 namespace content { 17 namespace content {
19 struct Referrer; 18 struct Referrer;
(...skipping 14 matching lines...) Expand all
34 // and controls the PrerenderManager accordingly. 33 // and controls the PrerenderManager accordingly.
35 class PrerenderLinkManager : public ProfileKeyedService, 34 class PrerenderLinkManager : public ProfileKeyedService,
36 public PrerenderHandle::Observer { 35 public PrerenderHandle::Observer {
37 public: 36 public:
38 explicit PrerenderLinkManager(PrerenderManager* manager); 37 explicit PrerenderLinkManager(PrerenderManager* manager);
39 virtual ~PrerenderLinkManager(); 38 virtual ~PrerenderLinkManager();
40 39
41 // A <link rel=prerender ...> element has been inserted into the document. 40 // A <link rel=prerender ...> element has been inserted into the document.
42 // The |prerender_id| must be unique per |child_id|, and is assigned by the 41 // The |prerender_id| must be unique per |child_id|, and is assigned by the
43 // WebPrerendererClient. 42 // WebPrerendererClient.
44 // Returns true if the prerender was accepted by the prerender manager, 43 void OnAddPrerender(int child_id,
45 // and false if not. In either case, the |prerender_id| is usable for 44 int prerender_id,
46 // future OnCancelPrerender and OnAbandonPrerender calls. 45 const GURL& url,
47 bool OnAddPrerender( 46 const content::Referrer& referrer,
48 int child_id, 47 const gfx::Size& size,
49 int prerender_id, 48 int render_view_route_id);
50 const GURL& url,
51 const content::Referrer& referrer,
52 const gfx::Size& size,
53 int render_view_route_id);
54 49
55 // A <link rel=prerender ...> element has been explicitly removed from a 50 // A <link rel=prerender ...> element has been explicitly removed from a
56 // document. 51 // document.
57 void OnCancelPrerender(int child_id, int prerender_id); 52 void OnCancelPrerender(int child_id, int prerender_id);
58 53
59 // A renderer launching <link rel=prerender ...> has navigated away from the 54 // A renderer launching <link rel=prerender ...> has navigated away from the
60 // launching page, the launching renderer process has crashed, or perhaps the 55 // launching page, the launching renderer process has crashed, or perhaps the
61 // renderer process was fast-closed when the last render view in it was 56 // renderer process was fast-closed when the last render view in it was
62 // closed. 57 // closed.
63 void OnAbandonPrerender(int child_id, int prerender_id); 58 void OnAbandonPrerender(int child_id, int prerender_id);
64 59
65 // If a renderer channel closes (crash, fast exit, etc...), that's effectively 60 // If a renderer channel closes (crash, fast exit, etc...), that's effectively
66 // an abandon of any prerenders launched by that child. 61 // an abandon of any prerenders launched by that child.
67 void OnChannelClosing(int child_id); 62 void OnChannelClosing(int child_id);
68 63
69 private: 64 private:
70 friend class PrerenderBrowserTest; 65 friend class PrerenderBrowserTest;
71 friend class PrerenderTest; 66 friend class PrerenderTest;
72 67
73 typedef std::pair<int, int> ChildAndPrerenderIdPair; 68 struct Prerender {
74 typedef std::map<ChildAndPrerenderIdPair, PrerenderHandle*> 69 Prerender(int launcher_child_id,
75 IdPairToPrerenderHandleMap; 70 int prerender_id,
71 const GURL& url,
72 const content::Referrer& referrer,
73 const gfx::Size& size,
74 int render_view_route_id);
75 ~Prerender();
76 76
77 void RemovePrerender( 77 // Parameters from PrerenderLinkManager::OnAddPrerender():
78 const IdPairToPrerenderHandleMap::iterator& id_to_handle_iter); 78 int launcher_child_id;
79 int prerender_id;
80 GURL url;
81 content::Referrer referrer;
82 gfx::Size size;
83 int render_view_route_id;
84
85 // Initially NULL, |handle| is set once we start this prerender. It is owned
86 // by this struct, and must be deleted before destructing this struct.
87 PrerenderHandle* handle;
88 };
89
90 // Start any prerenders that can be started, respecting concurrency limits for
91 // the system and per launcher.
92 void StartPrerenders();
79 93
80 bool IsEmpty() const; 94 bool IsEmpty() const;
81 95
82 IdPairToPrerenderHandleMap::iterator FindPrerenderHandle( 96 Prerender* FindByLauncherChildIdAndPrerenderId(int child_id,
83 PrerenderHandle* prerender_handle); 97 int prerender_id);
98
99 Prerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
100
101 void RemovePrerender(Prerender* prerender);
102
103 // From ProfileKeyedService:
104 virtual void Shutdown() OVERRIDE;
84 105
85 // From PrerenderHandle::Observer: 106 // From PrerenderHandle::Observer:
86 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; 107 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
87 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; 108 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
88 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle, 109 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
89 const GURL& alias_url) OVERRIDE; 110 const GURL& alias_url) OVERRIDE;
90 111
112 bool is_shutdown_;
113
91 PrerenderManager* manager_; 114 PrerenderManager* manager_;
92 115
93 // A map from child process id and prerender id to PrerenderHandles. We map 116 // All prerenders known to this PrerenderLinkManager. Insertions are always
94 // from this pair because the prerender ids are only unique within their 117 // made at the back, so the oldest prerender is at the front, and the youngest
95 // renderer process. 118 // at the front.
96 IdPairToPrerenderHandleMap ids_to_handle_map_; 119 std::list<Prerender> prerenders_;
97 120
98 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); 121 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
99 }; 122 };
100 123
101 } // namespace prerender 124 } // namespace prerender
102 125
103 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 126 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
104 127
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698