Chromium Code Reviews| Index: chrome/browser/prerender/prerender_manager.cc |
| diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc |
| index 2b80186a016af74f55beef070ac690160af1de9f..e12dead1031180caa82144c3b46d4acb1ace5216 100644 |
| --- a/chrome/browser/prerender/prerender_manager.cc |
| +++ b/chrome/browser/prerender/prerender_manager.cc |
| @@ -147,6 +147,18 @@ void HandlePrefetchTagOnUIThread( |
| prerender_manager->AddPreload(child_route_id_pair, url, referrer); |
| } |
| +void DestroyPreloadForChildRouteIdPairOnUIThread( |
| + const base::WeakPtr<PrerenderManager>& prerender_manager_weak_ptr, |
| + const std::pair<int, int>& child_route_id_pair, |
| + FinalStatus final_status) { |
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| + PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get(); |
| + if (!prerender_manager || !prerender_manager->is_enabled()) |
|
cbentzel
2011/04/29 20:00:30
In this case, you should call even if the prerende
dominich
2011/04/29 21:13:52
Done.
|
| + return; |
| + prerender_manager->DestroyPreloadForChildRouteIdPair(child_route_id_pair, |
| + final_status); |
| +} |
| + |
| PrerenderManager::PrerenderManager(Profile* profile) |
| : rate_limit_enabled_(true), |
| enabled_(true), |
| @@ -306,6 +318,33 @@ void PrerenderManager::AddPendingPreload( |
| it->second.push_back(PendingContentsData(url, referrer)); |
| } |
| +void PrerenderManager::DestroyPreloadForChildRouteIdPair( |
| + const std::pair<int, int>& child_route_id_pair, |
| + FinalStatus final_status) { |
| + DCHECK(CalledOnValidThread()); |
| + for (std::list<PrerenderContentsData>::iterator it = prerender_list_.begin(); |
|
cbentzel
2011/04/29 20:00:30
There should only be on PrerenderContents per chil
dominich
2011/04/29 21:13:52
Done.
|
| + it != prerender_list_.end();) { |
| + PrerenderContents* prerender_contents = it->contents_; |
| + |
| + int child_id; |
| + int route_id; |
| + bool has_child_id = prerender_contents->GetChildId(&child_id); |
| + bool has_route_id = has_child_id && |
| + prerender_contents->GetRouteId(&route_id); |
| + |
| + if (has_child_id && has_route_id && |
| + child_id == child_route_id_pair.first && |
| + route_id == child_route_id_pair.second) { |
| + prerender_contents->set_final_status(final_status); |
| + RemovePendingPreload(prerender_contents); |
| + delete prerender_contents; |
| + it = prerender_list_.erase(it); |
| + } else { |
| + ++it; |
| + } |
| + } |
| +} |
| + |
| void PrerenderManager::DeleteOldEntries() { |
| DCHECK(CalledOnValidThread()); |
| while (!prerender_list_.empty()) { |