| OLD | NEW |
| 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 #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/prerender/prerender_pending_swap_throttle.h" | |
| 10 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" |
| 11 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
| 12 #include "net/url_request/url_request_context.h" | 11 #include "net/url_request/url_request_context.h" |
| 13 #include "net/url_request/url_request_context_getter.h" | 12 #include "net/url_request/url_request_context_getter.h" |
| 14 | 13 |
| 15 using content::BrowserThread; | 14 using content::BrowserThread; |
| 16 | 15 |
| 17 namespace prerender { | 16 namespace prerender { |
| 18 | 17 |
| 19 PrerenderTracker::PrerenderTracker() { | 18 PrerenderTracker::PrerenderTracker() { |
| 20 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 19 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 21 } | 20 } |
| 22 | 21 |
| 23 PrerenderTracker::~PrerenderTracker() { | 22 PrerenderTracker::~PrerenderTracker() { |
| 24 } | 23 } |
| 25 | 24 |
| 26 bool PrerenderTracker::IsPendingSwapRequestOnIOThread( | |
| 27 int render_process_id, int render_frame_id, const GURL& url) const { | |
| 28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 29 | |
| 30 ChildRouteIdPair render_frame_route_id_pair( | |
| 31 render_process_id, render_frame_id); | |
| 32 PendingSwapThrottleMap::const_iterator it = | |
| 33 pending_swap_throttle_map_.find(render_frame_route_id_pair); | |
| 34 return (it != pending_swap_throttle_map_.end() && it->second.url == url); | |
| 35 } | |
| 36 | |
| 37 void PrerenderTracker::AddPendingSwapThrottleOnIOThread( | |
| 38 int render_process_id, | |
| 39 int render_frame_id, | |
| 40 const GURL& url, | |
| 41 const base::WeakPtr<PrerenderPendingSwapThrottle>& throttle) { | |
| 42 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 43 | |
| 44 ChildRouteIdPair render_frame_route_id_pair( | |
| 45 render_process_id, render_frame_id); | |
| 46 PendingSwapThrottleMap::iterator it = | |
| 47 pending_swap_throttle_map_.find(render_frame_route_id_pair); | |
| 48 DCHECK(it != pending_swap_throttle_map_.end()); | |
| 49 if (it == pending_swap_throttle_map_.end()) | |
| 50 return; | |
| 51 CHECK(!it->second.throttle); | |
| 52 it->second.throttle = throttle; | |
| 53 } | |
| 54 | |
| 55 void PrerenderTracker::AddPrerenderPendingSwapOnIOThread( | |
| 56 const ChildRouteIdPair& render_frame_route_id_pair, | |
| 57 const GURL& url) { | |
| 58 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 59 std::pair<PendingSwapThrottleMap::iterator, bool> insert_result = | |
| 60 pending_swap_throttle_map_.insert(std::make_pair( | |
| 61 render_frame_route_id_pair, PendingSwapThrottleData(url))); | |
| 62 DCHECK(insert_result.second); | |
| 63 } | |
| 64 | |
| 65 void PrerenderTracker::RemovePrerenderPendingSwapOnIOThread( | |
| 66 const ChildRouteIdPair& render_frame_route_id_pair, | |
| 67 bool swap_successful) { | |
| 68 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | |
| 69 PendingSwapThrottleMap::iterator it = | |
| 70 pending_swap_throttle_map_.find(render_frame_route_id_pair); | |
| 71 DCHECK(it != pending_swap_throttle_map_.end()); | |
| 72 // Cancel or resume all throttled resources. | |
| 73 if (it->second.throttle) { | |
| 74 if (swap_successful) | |
| 75 it->second.throttle->Cancel(); | |
| 76 else | |
| 77 it->second.throttle->Resume(); | |
| 78 } | |
| 79 pending_swap_throttle_map_.erase(render_frame_route_id_pair); | |
| 80 } | |
| 81 | |
| 82 void PrerenderTracker::AddPrerenderPendingSwap( | |
| 83 const ChildRouteIdPair& render_frame_route_id_pair, | |
| 84 const GURL& url) { | |
| 85 BrowserThread::PostTask( | |
| 86 BrowserThread::IO, FROM_HERE, | |
| 87 base::Bind(&PrerenderTracker::AddPrerenderPendingSwapOnIOThread, | |
| 88 base::Unretained(this), render_frame_route_id_pair, url)); | |
| 89 } | |
| 90 | |
| 91 void PrerenderTracker::RemovePrerenderPendingSwap( | |
| 92 const ChildRouteIdPair& render_frame_route_id_pair, | |
| 93 bool swap_successful) { | |
| 94 BrowserThread::PostTask( | |
| 95 BrowserThread::IO, FROM_HERE, | |
| 96 base::Bind(&PrerenderTracker::RemovePrerenderPendingSwapOnIOThread, | |
| 97 base::Unretained(this), render_frame_route_id_pair, | |
| 98 swap_successful)); | |
| 99 } | |
| 100 | |
| 101 PrerenderTracker::PendingSwapThrottleData::PendingSwapThrottleData( | |
| 102 const GURL& swap_url) | |
| 103 : url(swap_url) { | |
| 104 } | |
| 105 | |
| 106 PrerenderTracker::PendingSwapThrottleData::~PendingSwapThrottleData() { | |
| 107 } | |
| 108 | |
| 109 scoped_refptr<PrerenderCookieStore> | 25 scoped_refptr<PrerenderCookieStore> |
| 110 PrerenderTracker::GetPrerenderCookieStoreForRenderProcess( | 26 PrerenderTracker::GetPrerenderCookieStoreForRenderProcess( |
| 111 int process_id) { | 27 int process_id) { |
| 112 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 28 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| 113 PrerenderCookieStoreMap::const_iterator it = | 29 PrerenderCookieStoreMap::const_iterator it = |
| 114 prerender_cookie_store_map_.find(process_id); | 30 prerender_cookie_store_map_.find(process_id); |
| 115 | 31 |
| 116 if (it == prerender_cookie_store_map_.end()) | 32 if (it == prerender_cookie_store_map_.end()) |
| 117 return NULL; | 33 return NULL; |
| 118 | 34 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 184 prerender_cookie_store_map_.end()); | 100 prerender_cookie_store_map_.end()); |
| 185 DCHECK(!exists); | 101 DCHECK(!exists); |
| 186 if (exists) | 102 if (exists) |
| 187 return; | 103 return; |
| 188 prerender_cookie_store_map_[process_id] = | 104 prerender_cookie_store_map_[process_id] = |
| 189 new PrerenderCookieStore(make_scoped_refptr(cookie_monster), | 105 new PrerenderCookieStore(make_scoped_refptr(cookie_monster), |
| 190 cookie_conflict_cb); | 106 cookie_conflict_cb); |
| 191 } | 107 } |
| 192 | 108 |
| 193 } // namespace prerender | 109 } // namespace prerender |
| OLD | NEW |