Chromium Code Reviews| Index: chrome/browser/prerender/prerender_tracker.cc |
| =================================================================== |
| --- chrome/browser/prerender/prerender_tracker.cc (revision 86287) |
| +++ chrome/browser/prerender/prerender_tracker.cc (working copy) |
| @@ -46,9 +46,9 @@ |
| bool PrerenderTracker::TryUse(int child_id, int route_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| - FinalStatus final_status = SetFinalStatus(child_id, route_id, |
| - FINAL_STATUS_USED); |
| - return final_status == FINAL_STATUS_USED; |
| + FinalStatus actual_final_status; |
| + SetFinalStatus(child_id, route_id, FINAL_STATUS_USED, &actual_final_status); |
|
cbentzel
2011/05/23 17:02:23
Ah, I thought you could get away with just doing
mmenke
2011/05/23 17:31:46
Done.
Inertia, basically. Unit tests quite delib
|
| + return actual_final_status == FINAL_STATUS_USED; |
| } |
| bool PrerenderTracker::TryCancel( |
| @@ -58,8 +58,10 @@ |
| DCHECK_NE(FINAL_STATUS_USED, final_status); |
| DCHECK(final_status >= 0 && final_status < FINAL_STATUS_MAX); |
| - final_status = SetFinalStatus(child_id, route_id, final_status); |
| - return final_status != FINAL_STATUS_USED && final_status != FINAL_STATUS_MAX; |
| + FinalStatus actual_final_status; |
| + SetFinalStatus(child_id, route_id, final_status, &actual_final_status); |
| + return actual_final_status != FINAL_STATUS_USED && |
| + actual_final_status != FINAL_STATUS_MAX; |
| } |
| bool PrerenderTracker::TryCancelOnIOThread( |
| @@ -118,6 +120,12 @@ |
| std::make_pair(child_route_id_pair, RenderViewInfo(prerender_manager))); |
| } |
| +PrerenderTracker::PrerenderTracker() { |
| +} |
| + |
| +PrerenderTracker::~PrerenderTracker() { |
| +} |
| + |
| void PrerenderTracker::OnPrerenderingFinished(int child_id, int route_id) { |
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| DCHECK_GE(child_id, 0); |
| @@ -134,16 +142,12 @@ |
| DCHECK_EQ(1u, num_erased); |
| } |
| -PrerenderTracker::PrerenderTracker() { |
| -} |
| +bool PrerenderTracker::SetFinalStatus(int child_id, int route_id, |
| + FinalStatus desired_final_status, |
| + FinalStatus* actual_final_status) { |
| + DCHECK(desired_final_status >= FINAL_STATUS_USED && |
| + desired_final_status < FINAL_STATUS_MAX); |
| -PrerenderTracker::~PrerenderTracker() { |
| -} |
| - |
| -FinalStatus PrerenderTracker::SetFinalStatus(int child_id, int route_id, |
| - FinalStatus final_status) { |
| - DCHECK(final_status >= FINAL_STATUS_USED && final_status < FINAL_STATUS_MAX); |
| - |
| ChildRouteIdPair child_route_id_pair(child_id, route_id); |
| base::AutoLock lock(final_status_map_lock_); |
| @@ -151,22 +155,28 @@ |
| final_status_map_.find(child_route_id_pair); |
| if (final_status_it == final_status_map_.end()) { |
| // The RenderView has already been either used or destroyed. |
| - return FINAL_STATUS_MAX; |
| + *actual_final_status = FINAL_STATUS_MAX; |
| + return false; |
| } |
| if (final_status_it->second.final_status == FINAL_STATUS_MAX) { |
| - final_status_it->second.final_status = final_status; |
| - if (final_status != FINAL_STATUS_USED) { |
| + final_status_it->second.final_status = desired_final_status; |
| + if (desired_final_status != FINAL_STATUS_USED) { |
| BrowserThread::PostTask( |
| BrowserThread::UI, FROM_HERE, |
| NewRunnableFunction(&DestroyPreloadForRenderView, |
| final_status_it->second.prerender_manager, |
| child_id, |
| route_id, |
| - final_status)); |
| + desired_final_status)); |
| } |
| + |
| + *actual_final_status = desired_final_status; |
| + return true; |
| } |
| - return final_status_it->second.final_status; |
| + |
| + *actual_final_status = final_status_it->second.final_status; |
| + return false; |
| } |
| void PrerenderTracker::AddPrerenderOnIOThread( |