Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(130)

Side by Side Diff: chrome/browser/prerender/prerender_manager.cc

Issue 18500005: Fix SessionStorage confusion between RenderViewHostImpl and NavigationController. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: code review Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/prerender/prerender_manager.h" 5 #include "chrome/browser/prerender/prerender_manager.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <functional> 8 #include <functional>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 RenderViewHost* source_render_view_host = 316 RenderViewHost* source_render_view_host =
317 RenderViewHost::FromID(process_id, route_id); 317 RenderViewHost::FromID(process_id, route_id);
318 if (!source_render_view_host) 318 if (!source_render_view_host)
319 return NULL; 319 return NULL;
320 WebContents* source_web_contents = 320 WebContents* source_web_contents =
321 WebContents::FromRenderViewHost(source_render_view_host); 321 WebContents::FromRenderViewHost(source_render_view_host);
322 if (!source_web_contents) 322 if (!source_web_contents)
323 return NULL; 323 return NULL;
324 if (source_web_contents->GetURL().host() == url.host()) 324 if (source_web_contents->GetURL().host() == url.host())
325 origin = ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN; 325 origin = ORIGIN_LINK_REL_PRERENDER_SAMEDOMAIN;
326 // TODO(ajwong): This does not correctly handle storage for isolated apps.
327 session_storage_namespace = 326 session_storage_namespace =
328 source_web_contents->GetController() 327 source_web_contents->GetController().GetSessionStorageNamespace();
329 .GetDefaultSessionStorageNamespace();
330 } 328 }
331 329
332 // If the prerender request comes from a recently cancelled prerender that 330 // If the prerender request comes from a recently cancelled prerender that
333 // |this| still owns, then abort the prerender. 331 // |this| still owns, then abort the prerender.
334 for (ScopedVector<PrerenderData>::iterator it = to_delete_prerenders_.begin(); 332 for (ScopedVector<PrerenderData>::iterator it = to_delete_prerenders_.begin();
335 it != to_delete_prerenders_.end(); ++it) { 333 it != to_delete_prerenders_.end(); ++it) {
336 PrerenderContents* prerender_contents = (*it)->contents(); 334 PrerenderContents* prerender_contents = (*it)->contents();
337 int contents_child_id; 335 int contents_child_id;
338 int contents_route_id; 336 int contents_route_id;
339 if (prerender_contents->GetChildId(&contents_child_id) && 337 if (prerender_contents->GetChildId(&contents_child_id) &&
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
401 } 399 }
402 } 400 }
403 401
404 bool PrerenderManager::MaybeUsePrerenderedPage(WebContents* web_contents, 402 bool PrerenderManager::MaybeUsePrerenderedPage(WebContents* web_contents,
405 const GURL& url) { 403 const GURL& url) {
406 DCHECK(CalledOnValidThread()); 404 DCHECK(CalledOnValidThread());
407 DCHECK(!IsWebContentsPrerendering(web_contents, NULL)); 405 DCHECK(!IsWebContentsPrerendering(web_contents, NULL));
408 406
409 DeleteOldEntries(); 407 DeleteOldEntries();
410 to_delete_prerenders_.clear(); 408 to_delete_prerenders_.clear();
411 // TODO(ajwong): This doesn't handle isolated apps correctly.
412 PrerenderData* prerender_data = FindPrerenderData( 409 PrerenderData* prerender_data = FindPrerenderData(
413 url, 410 url, web_contents->GetController().GetSessionStorageNamespace());
414 web_contents->GetController().GetDefaultSessionStorageNamespace());
415 if (!prerender_data) 411 if (!prerender_data)
416 return false; 412 return false;
417 DCHECK(prerender_data->contents()); 413 DCHECK(prerender_data->contents());
418 if (IsNoSwapInExperiment(prerender_data->contents()->experiment_id())) 414 if (IsNoSwapInExperiment(prerender_data->contents()->experiment_id()))
419 return false; 415 return false;
420 416
421 if (WebContents* new_web_contents = 417 if (WebContents* new_web_contents =
422 prerender_data->contents()->prerender_contents()) { 418 prerender_data->contents()->prerender_contents()) {
423 if (web_contents == new_web_contents) 419 if (web_contents == new_web_contents)
424 return false; // Do not swap in to ourself. 420 return false; // Do not swap in to ourself.
(...skipping 1108 matching lines...) Expand 10 before | Expand all | Expand 10 after
1533 logged_in_state_->erase(domain_key); 1529 logged_in_state_->erase(domain_key);
1534 } 1530 }
1535 1531
1536 void PrerenderManager::LoggedInPredictorDataReceived( 1532 void PrerenderManager::LoggedInPredictorDataReceived(
1537 scoped_ptr<LoggedInStateMap> new_map) { 1533 scoped_ptr<LoggedInStateMap> new_map) {
1538 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 1534 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
1539 logged_in_state_.swap(new_map); 1535 logged_in_state_.swap(new_map);
1540 } 1536 }
1541 1537
1542 } // namespace prerender 1538 } // namespace prerender
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698