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

Side by Side Diff: chrome/browser/prerender/prerender_tracker.cc

Issue 6966017: Remove a chrome dependency by removing Prerender from ResourceDispatcherHost. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 9 years, 7 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) 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 #include "chrome/browser/prerender/prerender_tracker.h"
6
5 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "chrome/browser/browser_process.h"
6 #include "chrome/browser/prerender/prerender_manager.h" 9 #include "chrome/browser/prerender/prerender_manager.h"
7 #include "chrome/browser/prerender/prerender_tracker.h"
8 #include "content/browser/browser_thread.h" 10 #include "content/browser/browser_thread.h"
11 #include "content/browser/resource_context.h"
12 #include "content/common/resource_messages.h"
13 #include "net/base/load_flags.h"
9 14
10 namespace prerender { 15 namespace prerender {
11 16
12 namespace {
13
14 void DestroyPreloadForRenderView(
15 const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr,
16 int child_id,
17 int route_id,
18 FinalStatus final_status) {
19 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
20 PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get();
21 if (!prerender_manager)
22 return;
23
24 prerender_manager->DestroyPreloadForChildRouteIdPair(
25 std::make_pair(child_id, route_id),
26 final_status);
27 }
28
29 } // namespace
30
31 struct RenderViewInfo { 17 struct RenderViewInfo {
32 explicit RenderViewInfo(PrerenderManager* prerender_manager) 18 explicit RenderViewInfo(PrerenderManager* prerender_manager)
33 : final_status(FINAL_STATUS_MAX), 19 : final_status(FINAL_STATUS_MAX),
34 prerender_manager(prerender_manager->AsWeakPtr()) { 20 prerender_manager(prerender_manager->AsWeakPtr()) {
35 } 21 }
22 ~RenderViewInfo() {}
36 23
37 FinalStatus final_status; 24 FinalStatus final_status;
38 base::WeakPtr<PrerenderManager> prerender_manager; 25 base::WeakPtr<PrerenderManager> prerender_manager;
39 }; 26 };
40 27
41 // static 28 PrerenderTracker::PrerenderTracker() {
42 PrerenderTracker* PrerenderTracker::GetInstance() { 29 }
43 return Singleton<PrerenderTracker>::get(); 30
31 PrerenderTracker::~PrerenderTracker() {
44 } 32 }
45 33
46 bool PrerenderTracker::TryUse(int child_id, int route_id) { 34 bool PrerenderTracker::TryUse(int child_id, int route_id) {
47 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 35 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
48 36
49 return SetFinalStatus(child_id, route_id, FINAL_STATUS_USED, NULL); 37 return SetFinalStatus(child_id, route_id, FINAL_STATUS_USED, NULL);
50 } 38 }
51 39
52 bool PrerenderTracker::TryCancel( 40 bool PrerenderTracker::TryCancel(
53 int child_id, 41 int child_id,
(...skipping 13 matching lines...) Expand all
67 int route_id, 55 int route_id,
68 FinalStatus final_status) { 56 FinalStatus final_status) {
69 DCHECK_NE(FINAL_STATUS_USED, final_status); 57 DCHECK_NE(FINAL_STATUS_USED, final_status);
70 DCHECK(final_status >= 0 && final_status < FINAL_STATUS_MAX); 58 DCHECK(final_status >= 0 && final_status < FINAL_STATUS_MAX);
71 59
72 if (!IsPrerenderingOnIOThread(child_id, route_id)) 60 if (!IsPrerenderingOnIOThread(child_id, route_id))
73 return false; 61 return false;
74 return TryCancel(child_id, route_id, final_status); 62 return TryCancel(child_id, route_id, final_status);
75 } 63 }
76 64
77 bool PrerenderTracker::IsPrerenderingOnIOThread(int child_id,
78 int route_id) const {
79 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
80
81 ChildRouteIdPair child_route_id_pair(child_id, route_id);
82 return possibly_prerendering_io_thread_set_.end() !=
83 possibly_prerendering_io_thread_set_.find(child_route_id_pair);
84 }
85
86 bool PrerenderTracker::GetFinalStatus(int child_id, int route_id, 65 bool PrerenderTracker::GetFinalStatus(int child_id, int route_id,
87 FinalStatus* final_status) const { 66 FinalStatus* final_status) const {
88 ChildRouteIdPair child_route_id_pair(child_id, route_id); 67 ChildRouteIdPair child_route_id_pair(child_id, route_id);
89 68
90 base::AutoLock lock(final_status_map_lock_); 69 base::AutoLock lock(final_status_map_lock_);
91 FinalStatusMap::const_iterator final_status_it = 70 FinalStatusMap::const_iterator final_status_it =
92 final_status_map_.find(child_route_id_pair); 71 final_status_map_.find(child_route_id_pair);
93 if (final_status_map_.end() == final_status_map_.find(child_route_id_pair)) 72 if (final_status_map_.end() == final_status_map_.find(child_route_id_pair))
94 return false; 73 return false;
95 *final_status = final_status_it->second.final_status; 74 *final_status = final_status_it->second.final_status;
(...skipping 15 matching lines...) Expand all
111 BrowserThread::PostTask( 90 BrowserThread::PostTask(
112 BrowserThread::IO, FROM_HERE, 91 BrowserThread::IO, FROM_HERE,
113 NewRunnableFunction(&AddPrerenderOnIOThreadTask, child_route_id_pair)); 92 NewRunnableFunction(&AddPrerenderOnIOThreadTask, child_route_id_pair));
114 93
115 base::AutoLock lock(final_status_map_lock_); 94 base::AutoLock lock(final_status_map_lock_);
116 95
117 final_status_map_.insert( 96 final_status_map_.insert(
118 std::make_pair(child_route_id_pair, RenderViewInfo(prerender_manager))); 97 std::make_pair(child_route_id_pair, RenderViewInfo(prerender_manager)));
119 } 98 }
120 99
121 PrerenderTracker::PrerenderTracker() {
122 }
123
124 PrerenderTracker::~PrerenderTracker() {
125 }
126
127 void PrerenderTracker::OnPrerenderingFinished(int child_id, int route_id) { 100 void PrerenderTracker::OnPrerenderingFinished(int child_id, int route_id) {
128 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 101 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
129 DCHECK_GE(child_id, 0); 102 DCHECK_GE(child_id, 0);
130 DCHECK_GE(route_id, 0); 103 DCHECK_GE(route_id, 0);
131 104
132 ChildRouteIdPair child_route_id_pair(child_id, route_id); 105 ChildRouteIdPair child_route_id_pair(child_id, route_id);
133 106
134 BrowserThread::PostTask( 107 BrowserThread::PostTask(
135 BrowserThread::IO, FROM_HERE, 108 BrowserThread::IO, FROM_HERE,
136 NewRunnableFunction(&RemovePrerenderOnIOThreadTask, child_route_id_pair)); 109 NewRunnableFunction(&RemovePrerenderOnIOThreadTask, child_route_id_pair));
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
173 if (actual_final_status) 146 if (actual_final_status)
174 *actual_final_status = desired_final_status; 147 *actual_final_status = desired_final_status;
175 return true; 148 return true;
176 } 149 }
177 150
178 if (actual_final_status) 151 if (actual_final_status)
179 *actual_final_status = final_status_it->second.final_status; 152 *actual_final_status = final_status_it->second.final_status;
180 return false; 153 return false;
181 } 154 }
182 155
156 bool PrerenderTracker::IsPrerenderingOnIOThread(int child_id,
157 int route_id) const {
158 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
159
160 ChildRouteIdPair child_route_id_pair(child_id, route_id);
161 return possibly_prerendering_io_thread_set_.end() !=
162 possibly_prerendering_io_thread_set_.find(child_route_id_pair);
163 }
164
183 void PrerenderTracker::AddPrerenderOnIOThread( 165 void PrerenderTracker::AddPrerenderOnIOThread(
184 const ChildRouteIdPair& child_route_id_pair) { 166 const ChildRouteIdPair& child_route_id_pair) {
185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 167 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
186 DCHECK(!IsPrerenderingOnIOThread(child_route_id_pair.first, 168 DCHECK(!IsPrerenderingOnIOThread(child_route_id_pair.first,
187 child_route_id_pair.second)); 169 child_route_id_pair.second));
188 170
189 possibly_prerendering_io_thread_set_.insert(child_route_id_pair); 171 possibly_prerendering_io_thread_set_.insert(child_route_id_pair);
190 } 172 }
191 173
192 void PrerenderTracker::RemovePrerenderOnIOThread( 174 void PrerenderTracker::RemovePrerenderOnIOThread(
193 const ChildRouteIdPair& child_route_id_pair) { 175 const ChildRouteIdPair& child_route_id_pair) {
194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 176 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
195 DCHECK(IsPrerenderingOnIOThread(child_route_id_pair.first, 177 DCHECK(IsPrerenderingOnIOThread(child_route_id_pair.first,
196 child_route_id_pair.second)); 178 child_route_id_pair.second));
197 179
198 possibly_prerendering_io_thread_set_.erase(child_route_id_pair); 180 possibly_prerendering_io_thread_set_.erase(child_route_id_pair);
199 } 181 }
200 182
201 // static 183 // static
202 void PrerenderTracker::AddPrerenderOnIOThreadTask( 184 void PrerenderTracker::AddPrerenderOnIOThreadTask(
203 const ChildRouteIdPair& child_route_id_pair) { 185 const ChildRouteIdPair& child_route_id_pair) {
204 GetInstance()->AddPrerenderOnIOThread(child_route_id_pair); 186 g_browser_process->prerender_tracker()->AddPrerenderOnIOThread(
187 child_route_id_pair);
205 } 188 }
206 189
207 // static 190 // static
208 void PrerenderTracker::RemovePrerenderOnIOThreadTask( 191 void PrerenderTracker::RemovePrerenderOnIOThreadTask(
209 const ChildRouteIdPair& child_route_id_pair) { 192 const ChildRouteIdPair& child_route_id_pair) {
210 GetInstance()->RemovePrerenderOnIOThread(child_route_id_pair); 193 g_browser_process->prerender_tracker()->RemovePrerenderOnIOThread(
194 child_route_id_pair);
211 } 195 }
212 196
213 } // namespace prerender 197 } // namespace prerender
OLDNEW
« no previous file with comments | « chrome/browser/prerender/prerender_tracker.h ('k') | chrome/browser/prerender/prerender_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698