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( |