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

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: clear to land Created 7 years, 11 months 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"
11 #include "base/time.h"
12 #include "chrome/browser/prerender/prerender_handle.h" 12 #include "chrome/browser/prerender/prerender_handle.h"
13 #include "chrome/browser/profiles/profile_keyed_service.h" 13 #include "chrome/browser/profiles/profile_keyed_service.h"
14 #include "googleurl/src/gurl.h" 14 #include "googleurl/src/gurl.h"
15 15
16 class Profile; 16 class Profile;
17 17
18 namespace content { 18 namespace content {
19 struct Referrer; 19 struct Referrer;
20 } 20 }
21 21
(...skipping 12 matching lines...) Expand all
34 // and controls the PrerenderManager accordingly. 34 // and controls the PrerenderManager accordingly.
35 class PrerenderLinkManager : public ProfileKeyedService, 35 class PrerenderLinkManager : public ProfileKeyedService,
36 public PrerenderHandle::Observer { 36 public PrerenderHandle::Observer {
37 public: 37 public:
38 explicit PrerenderLinkManager(PrerenderManager* manager); 38 explicit PrerenderLinkManager(PrerenderManager* manager);
39 virtual ~PrerenderLinkManager(); 39 virtual ~PrerenderLinkManager();
40 40
41 // A <link rel=prerender ...> element has been inserted into the document. 41 // 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 42 // The |prerender_id| must be unique per |child_id|, and is assigned by the
43 // WebPrerendererClient. 43 // WebPrerendererClient.
44 // Returns true if the prerender was accepted by the prerender manager, 44 void OnAddPrerender(int child_id,
45 // and false if not. In either case, the |prerender_id| is usable for 45 int prerender_id,
46 // future OnCancelPrerender and OnAbandonPrerender calls. 46 const GURL& url,
47 bool OnAddPrerender( 47 const content::Referrer& referrer,
48 int child_id, 48 const gfx::Size& size,
49 int prerender_id, 49 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 50
55 // A <link rel=prerender ...> element has been explicitly removed from a 51 // A <link rel=prerender ...> element has been explicitly removed from a
56 // document. 52 // document.
57 void OnCancelPrerender(int child_id, int prerender_id); 53 void OnCancelPrerender(int child_id, int prerender_id);
58 54
59 // A renderer launching <link rel=prerender ...> has navigated away from the 55 // A renderer launching <link rel=prerender ...> has navigated away from the
60 // launching page, the launching renderer process has crashed, or perhaps the 56 // 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 57 // renderer process was fast-closed when the last render view in it was
62 // closed. 58 // closed.
63 void OnAbandonPrerender(int child_id, int prerender_id); 59 void OnAbandonPrerender(int child_id, int prerender_id);
64 60
65 // If a renderer channel closes (crash, fast exit, etc...), that's effectively 61 // If a renderer channel closes (crash, fast exit, etc...), that's effectively
66 // an abandon of any prerenders launched by that child. 62 // an abandon of any prerenders launched by that child.
67 void OnChannelClosing(int child_id); 63 void OnChannelClosing(int child_id);
68 64
69 private: 65 private:
70 friend class PrerenderBrowserTest; 66 friend class PrerenderBrowserTest;
71 friend class PrerenderTest; 67 friend class PrerenderTest;
72 68
73 typedef std::pair<int, int> ChildAndPrerenderIdPair; 69 struct LinkPrerender {
74 typedef std::map<ChildAndPrerenderIdPair, PrerenderHandle*> 70 LinkPrerender(int launcher_child_id,
75 IdPairToPrerenderHandleMap; 71 int prerender_id,
72 const GURL& url,
73 const content::Referrer& referrer,
74 const gfx::Size& size,
75 int render_view_route_id,
76 base::TimeTicks creation_time);
77 ~LinkPrerender();
76 78
77 void RemovePrerender( 79 // Parameters from PrerenderLinkManager::OnAddPrerender():
78 const IdPairToPrerenderHandleMap::iterator& id_to_handle_iter); 80 int launcher_child_id;
81 int prerender_id;
82 GURL url;
83 content::Referrer referrer;
84 gfx::Size size;
85 int render_view_route_id;
86
87 // The time at which this Prerender was added to PrerenderLinkManager.
88 base::TimeTicks creation_time;
89
90 // Initially NULL, |handle| is set once we start this prerender. It is owned
91 // by this struct, and must be deleted before destructing this struct.
92 PrerenderHandle* handle;
93 };
79 94
80 bool IsEmpty() const; 95 bool IsEmpty() const;
81 96
82 IdPairToPrerenderHandleMap::iterator FindPrerenderHandle( 97 // Returns a count of currently running prerenders.
83 PrerenderHandle* prerender_handle); 98 size_t CountRunningPrerenders() const;
99
100 // Start any prerenders that can be started, respecting concurrency limits for
101 // the system and per launcher.
102 void StartPrerenders();
103
104 LinkPrerender* FindByLauncherChildIdAndPrerenderId(int child_id,
105 int prerender_id);
106
107 LinkPrerender* FindByPrerenderHandle(PrerenderHandle* prerender_handle);
108
109 void RemovePrerender(LinkPrerender* prerender);
110
111 // From ProfileKeyedService:
112 virtual void Shutdown() OVERRIDE;
84 113
85 // From PrerenderHandle::Observer: 114 // From PrerenderHandle::Observer:
86 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE; 115 virtual void OnPrerenderStart(PrerenderHandle* prerender_handle) OVERRIDE;
87 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE; 116 virtual void OnPrerenderStop(PrerenderHandle* prerender_handle) OVERRIDE;
88 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle, 117 virtual void OnPrerenderAddAlias(PrerenderHandle* prerender_handle,
89 const GURL& alias_url) OVERRIDE; 118 const GURL& alias_url) OVERRIDE;
90 119
120 bool has_shutdown_;
121
91 PrerenderManager* manager_; 122 PrerenderManager* manager_;
92 123
93 // A map from child process id and prerender id to PrerenderHandles. We map 124 // All prerenders known to this PrerenderLinkManager. Insertions are always
94 // from this pair because the prerender ids are only unique within their 125 // made at the back, so the oldest prerender is at the front, and the youngest
95 // renderer process. 126 // at the back.
96 IdPairToPrerenderHandleMap ids_to_handle_map_; 127 std::list<LinkPrerender> prerenders_;
97 128
98 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager); 129 DISALLOW_COPY_AND_ASSIGN(PrerenderLinkManager);
99 }; 130 };
100 131
101 } // namespace prerender 132 } // namespace prerender
102 133
103 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_ 134 #endif // CHROME_BROWSER_PRERENDER_PRERENDER_LINK_MANAGER_H_
104 135
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_histograms.cc ('k') | chrome/browser/prerender/prerender_link_manager.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698