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

Unified Diff: chrome/browser/prerender/prerender_manager.cc

Issue 10826110: Modify prerendering to support having multiple session storage namespaces per tab. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/prerender/prerender_manager.cc
diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc
index 7daa0212e0135c2c699398337e5e986c9805e07e..6eee82a30949f8c00dbdea0f0f9ae9a5e7698a21 100644
--- a/chrome/browser/prerender/prerender_manager.cc
+++ b/chrome/browser/prerender/prerender_manager.cc
@@ -55,7 +55,7 @@
using content::BrowserThread;
using content::RenderViewHost;
-using content::SessionStorageNamespace;
+using content::SessionStorageNamespaceMap;
using content::WebContents;
namespace prerender {
@@ -208,7 +208,7 @@ PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
#if defined(OS_ANDROID)
// TODO(jcivelli): http://crbug.com/113322 We should have an option to disable
// link-prerender and enable omnibox-prerender only.
- return NULL;
+ return false;
#else
DCHECK(!size.IsEmpty());
if (PrerenderData* parent_prerender_data =
@@ -228,36 +228,34 @@ PrerenderHandle* PrerenderManager::AddPrerenderFromLinkRelPrerender(
}
// Unit tests pass in a process_id == -1.
- SessionStorageNamespace* session_storage_namespace = NULL;
- if (process_id != -1) {
- RenderViewHost* source_render_view_host =
- RenderViewHost::FromID(process_id, route_id);
- if (!source_render_view_host)
- return NULL;
- WebContents* source_web_contents =
- WebContents::FromRenderViewHost(source_render_view_host);
- if (!source_web_contents)
- return NULL;
- // TODO(ajwong): This does not correctly handle storage for isolated apps.
- session_storage_namespace =
- source_web_contents->GetController()
- .GetSessionStorageNamespaceMap().find("")->second;
+ if (process_id == -1) {
+ return AddPrerender(ORIGIN_LINK_REL_PRERENDER,
+ process_id, url, referrer, size,
+ SessionStorageNamespaceMap());
}
+ RenderViewHost* source_render_view_host =
+ RenderViewHost::FromID(process_id, route_id);
+ if (!source_render_view_host)
+ return NULL;
+
+ WebContents* source_web_contents =
+ WebContents::FromRenderViewHost(source_render_view_host);
return AddPrerender(ORIGIN_LINK_REL_PRERENDER,
process_id, url, referrer, size,
- session_storage_namespace);
+ source_web_contents->GetController()
+ .GetSessionStorageNamespaceMap());
#endif
}
PrerenderHandle* PrerenderManager::AddPrerenderFromOmnibox(
const GURL& url,
- SessionStorageNamespace* session_storage_namespace,
+ const SessionStorageNamespaceMap& session_storage_namespace_map,
const gfx::Size& size) {
if (!IsOmniboxEnabled(profile_))
return NULL;
return AddPrerender(ORIGIN_OMNIBOX, -1, url, content::Referrer(), size,
- session_storage_namespace);
+ session_storage_namespace_map);
}
void PrerenderManager::DestroyPrerenderForRenderView(
@@ -283,13 +281,12 @@ bool PrerenderManager::MaybeUsePrerenderedPage(WebContents* web_contents,
DCHECK(CalledOnValidThread());
DCHECK(!IsWebContentsPrerendering(web_contents));
+ const SessionStorageNamespaceMap& old_session_storage_namespace_map =
+ web_contents->GetController().GetSessionStorageNamespaceMap();
DeleteOldEntries();
DeletePendingDeleteEntries();
- // TODO(ajwong): This doesn't handle isolated apps correctly.
- PrerenderData* prerender_data = FindPrerenderData(
- url,
- web_contents->GetController().GetSessionStorageNamespaceMap()
- .find("")->second);
+ PrerenderData* prerender_data =
+ FindPrerenderData(url, old_session_storage_namespace_map);
if (!prerender_data)
return false;
DCHECK(prerender_data->contents_);
@@ -810,7 +807,7 @@ void PrerenderManager::StartPendingPrerender(
const GURL& url,
const content::Referrer& referrer,
const gfx::Size& size,
- content::SessionStorageNamespace* session_storage_namespace) {
+ const content::SessionStorageNamespaceMap& session_storage_namespace_map) {
DCHECK(existing_prerender_handle);
DCHECK(existing_prerender_handle->IsValid());
DCHECK(existing_prerender_handle->IsPending());
@@ -819,10 +816,10 @@ void PrerenderManager::StartPendingPrerender(
DVLOG(6) << "existing_prerender_handle->handle_count_ = " <<
existing_prerender_handle->prerender_data_->handle_count_;
- DCHECK(process_id == -1 || session_storage_namespace);
+ DCHECK(process_id == -1 || !session_storage_namespace_map.empty());
scoped_ptr<PrerenderHandle> swap_prerender_handle(AddPrerender(
- origin, process_id, url, referrer, size, session_storage_namespace));
+ origin, process_id, url, referrer, size, session_storage_namespace_map));
if (swap_prerender_handle.get()) {
// AddPrerender has returned a new prerender handle to us. We want to make
// |existing_prerender_handle| active, so swap the underlying PrerenderData
@@ -871,7 +868,7 @@ PrerenderHandle* PrerenderManager::AddPrerender(
const GURL& url_arg,
const content::Referrer& referrer,
const gfx::Size& size,
- SessionStorageNamespace* session_storage_namespace) {
+ const SessionStorageNamespaceMap& session_storage_namespace_map) {
DCHECK(CalledOnValidThread());
if (!IsEnabled())
@@ -900,7 +897,7 @@ PrerenderHandle* PrerenderManager::AddPrerender(
histograms_->RecordPrerender(origin, url_arg);
if (PrerenderData* preexisting_prerender_data =
- FindPrerenderData(url, session_storage_namespace)) {
+ FindPrerenderData(url, session_storage_namespace_map)) {
RecordFinalStatus(origin, experiment, FINAL_STATUS_DUPLICATE);
return new PrerenderHandle(preexisting_prerender_data);
}
@@ -952,7 +949,7 @@ PrerenderHandle* PrerenderManager::AddPrerender(
size.IsEmpty() ? config_.default_tab_bounds.size() : size;
prerender_contents->StartPrerendering(process_id, contents_size,
- session_storage_namespace,
+ session_storage_namespace_map,
control_group_behavior);
while (active_prerender_list_.size() > config_.max_concurrency) {
@@ -1064,13 +1061,13 @@ void PrerenderManager::DeletePendingDeleteEntries() {
PrerenderManager::PrerenderData* PrerenderManager::FindPrerenderData(
const GURL& url,
- const SessionStorageNamespace* session_storage_namespace) {
+ const SessionStorageNamespaceMap& session_storage_namespace_map) {
for (std::list<linked_ptr<PrerenderData> >::iterator
it = active_prerender_list_.begin();
it != active_prerender_list_.end();
++it) {
PrerenderContents* prerender_contents = it->get()->contents_;
- if (prerender_contents->Matches(url, session_storage_namespace))
+ if (prerender_contents->Matches(url, session_storage_namespace_map))
return it->get();
}
return NULL;
« no previous file with comments | « chrome/browser/prerender/prerender_manager.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698