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

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

Issue 9150016: Move creation and ownership of ResourceDispatcherHost and PluginService to content. This gives a ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix chromeos ui_tests Created 8 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) 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" 5 #include "chrome/browser/prerender/prerender_tracker.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/prerender/prerender_manager.h" 10 #include "chrome/browser/prerender/prerender_manager.h"
11 #include "content/browser/renderer_host/render_view_host.h" 11 #include "content/browser/renderer_host/render_view_host.h"
12 #include "content/browser/renderer_host/resource_dispatcher_host.h" 12 #include "content/browser/renderer_host/resource_dispatcher_host.h"
13 #include "content/browser/resource_context.h" 13 #include "content/browser/resource_context.h"
14 #include "content/public/browser/browser_thread.h" 14 #include "content/public/browser/browser_thread.h"
15 #include "net/base/load_flags.h" 15 #include "net/base/load_flags.h"
16 16
17 using content::BrowserThread; 17 using content::BrowserThread;
18 18
19 namespace prerender { 19 namespace prerender {
20 20
21 namespace { 21 namespace {
22 22
23 void CancelDeferredRequestOnIOThread( 23 void CancelDeferredRequestOnIOThread(int child_id, int request_id) {
24 ResourceDispatcherHost* resource_dispatcher_host,
25 int child_id, int request_id) {
26 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 24 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
27 resource_dispatcher_host->CancelRequest(child_id, request_id, false); 25 ResourceDispatcherHost::Get()->CancelRequest(child_id, request_id, false);
28 } 26 }
29 27
30 void StartDeferredRequestOnIOThread( 28 void StartDeferredRequestOnIOThread(int child_id, int request_id) {
31 ResourceDispatcherHost* resource_dispatcher_host,
32 int child_id, int request_id) {
33 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 29 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
34 resource_dispatcher_host->StartDeferredRequest(child_id, request_id); 30 ResourceDispatcherHost::Get()->StartDeferredRequest(child_id, request_id);
35 } 31 }
36 32
37 bool ShouldCancelRequest( 33 bool ShouldCancelRequest(
38 int child_id, 34 int child_id,
39 int route_id) { 35 int route_id) {
40 // Check if the RenderViewHost associated with (child_id, route_id) no 36 // Check if the RenderViewHost associated with (child_id, route_id) no
41 // longer exists, or has already been swapped out for a prerendered page. 37 // longer exists, or has already been swapped out for a prerendered page.
42 // If that happens, then we do not want to issue the request which originated 38 // If that happens, then we do not want to issue the request which originated
43 // from it. Otherwise, keep it going. 39 // from it. Otherwise, keep it going.
44 // The RenderViewHost may exist for a couple of different reasons: such as 40 // The RenderViewHost may exist for a couple of different reasons: such as
45 // being an XHR from the originating page, being included as an iframe, 41 // being an XHR from the originating page, being included as an iframe,
46 // being requested as a favicon or stylesheet, and many other corner cases. 42 // being requested as a favicon or stylesheet, and many other corner cases.
47 RenderViewHost* render_view_host = 43 RenderViewHost* render_view_host =
48 RenderViewHost::FromID(child_id, route_id); 44 RenderViewHost::FromID(child_id, route_id);
49 if (!render_view_host) 45 if (!render_view_host)
50 return true; 46 return true;
51 PrerenderManager* prerender_manager = 47 PrerenderManager* prerender_manager =
52 FindPrerenderManagerUsingRenderProcessId(child_id); 48 FindPrerenderManagerUsingRenderProcessId(child_id);
53 return (prerender_manager && 49 return (prerender_manager &&
54 prerender_manager->IsOldRenderViewHost(render_view_host)); 50 prerender_manager->IsOldRenderViewHost(render_view_host));
55 } 51 }
56 52
57 void HandleDelayedRequestOnUIThread( 53 void HandleDelayedRequestOnUIThread(
58 int child_id, 54 int child_id,
59 int route_id, 55 int route_id,
60 int request_id) { 56 int request_id) {
61 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 57 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
62 ResourceDispatcherHost* resource_dispatcher_host =
63 g_browser_process->resource_dispatcher_host();
64 CHECK(resource_dispatcher_host);
65 if (ShouldCancelRequest(child_id, route_id)) { 58 if (ShouldCancelRequest(child_id, route_id)) {
66 BrowserThread::PostTask( 59 BrowserThread::PostTask(
67 BrowserThread::IO, FROM_HERE, 60 BrowserThread::IO, FROM_HERE,
68 base::Bind(&CancelDeferredRequestOnIOThread, resource_dispatcher_host, 61 base::Bind(&CancelDeferredRequestOnIOThread, child_id, request_id));
69 child_id, request_id));
70 } else { 62 } else {
71 BrowserThread::PostTask( 63 BrowserThread::PostTask(
72 BrowserThread::IO, FROM_HERE, 64 BrowserThread::IO, FROM_HERE,
73 base::Bind(&StartDeferredRequestOnIOThread, resource_dispatcher_host, 65 base::Bind(&StartDeferredRequestOnIOThread, child_id, request_id));
74 child_id, request_id));
75 } 66 }
76 } 67 }
77 68
78 void DestroyPrerenderForRenderViewOnUI( 69 void DestroyPrerenderForRenderViewOnUI(
79 const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr, 70 const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr,
80 int render_process_id, 71 int render_process_id,
81 int render_view_id, 72 int render_view_id,
82 FinalStatus final_status) { 73 FinalStatus final_status) {
83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 74 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
84 PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get(); 75 PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get();
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 GetDefault()->AddPrerenderOnIOThread(child_route_id_pair); 340 GetDefault()->AddPrerenderOnIOThread(child_route_id_pair);
350 } 341 }
351 342
352 // static 343 // static
353 void PrerenderTracker::RemovePrerenderOnIOThreadTask( 344 void PrerenderTracker::RemovePrerenderOnIOThreadTask(
354 const ChildRouteIdPair& child_route_id_pair) { 345 const ChildRouteIdPair& child_route_id_pair) {
355 GetDefault()->RemovePrerenderOnIOThread(child_route_id_pair); 346 GetDefault()->RemovePrerenderOnIOThread(child_route_id_pair);
356 } 347 }
357 348
358 } // namespace prerender 349 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698