| 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())
|
| + 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();
|
| + 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()) {
|
|
|