| Index: chrome/browser/prerender/prerender_manager.cc
|
| ===================================================================
|
| --- chrome/browser/prerender/prerender_manager.cc (revision 86832)
|
| +++ chrome/browser/prerender/prerender_manager.cc (working copy)
|
| @@ -173,8 +173,7 @@
|
| int render_process_id,
|
| int render_view_id,
|
| const GURL& url,
|
| - const GURL& referrer,
|
| - bool make_pending) {
|
| + const GURL& referrer) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| PrerenderManager* prerender_manager = prerender_manager_weak_ptr.get();
|
| if (!prerender_manager || !prerender_manager->is_enabled())
|
| @@ -183,13 +182,8 @@
|
|
|
| std::pair<int, int> child_route_id_pair = std::make_pair(render_process_id,
|
| render_view_id);
|
| - // TODO(cbentzel): Should the decision to make pending be done on the
|
| - // UI thread rather than the IO thread? The page may have
|
| - // become activated at this point.
|
| - if (make_pending)
|
| - prerender_manager->AddPendingPreload(child_route_id_pair, url, referrer);
|
| - else
|
| - prerender_manager->AddPreload(child_route_id_pair, url, referrer);
|
| +
|
| + prerender_manager->AddPreload(child_route_id_pair, url, referrer);
|
| }
|
|
|
| void DestroyPreloadForRenderView(
|
| @@ -248,6 +242,14 @@
|
| const GURL& url_arg,
|
| const GURL& referrer) {
|
| DCHECK(CalledOnValidThread());
|
| +
|
| + // If the referring page is prerendering, defer the prerender.
|
| + if (FindPrerenderContentsForChildRouteIdPair(child_route_id_pair) !=
|
| + prerender_list_.end()) {
|
| + AddPendingPreload(child_route_id_pair, url_arg, referrer);
|
| + return true;
|
| + }
|
| +
|
| DeleteOldEntries();
|
| DeletePendingDeleteEntries();
|
|
|
| @@ -327,23 +329,8 @@
|
| const std::pair<int, int>& child_route_id_pair,
|
| const GURL& url,
|
| const GURL& referrer) {
|
| - DCHECK(CalledOnValidThread());
|
| - // Check if this is coming from a valid prerender RenderViewHost.
|
| - bool is_valid_prerender =
|
| - (FindPrerenderContentsForChildRouteIdPair(child_route_id_pair) !=
|
| - prerender_list_.end());
|
| -
|
| - // If not, we could check to see if the RenderViewHost specified by the
|
| - // child_route_id_pair exists and if so just start prerendering, as this
|
| - // suggests that the link was clicked, though this might prerender something
|
| - // that the user has already navigated away from. For now, we'll be
|
| - // conservative and skip the prerender which will mean some prerender requests
|
| - // from prerendered pages will be missed if the user navigates quickly.
|
| - if (!is_valid_prerender) {
|
| - RecordFinalStatus(FINAL_STATUS_PENDING_SKIPPED);
|
| - return;
|
| - }
|
| -
|
| + DCHECK(FindPrerenderContentsForChildRouteIdPair(child_route_id_pair) !=
|
| + prerender_list_.end());
|
| PendingPrerenderList::iterator it =
|
| pending_prerender_list_.find(child_route_id_pair);
|
| if (it == pending_prerender_list_.end()) {
|
|
|