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

Unified Diff: content/browser/web_contents/navigation_controller_impl.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 side-by-side diff with in-line comments
Download patch
Index: content/browser/web_contents/navigation_controller_impl.cc
diff --git a/content/browser/web_contents/navigation_controller_impl.cc b/content/browser/web_contents/navigation_controller_impl.cc
index 3f446be9cf6bf82b2392c74dd578cee1a70d72db..c13f3bef8e52beb250d9cdfe400a77aacd1ed103 100644
--- a/content/browser/web_contents/navigation_controller_impl.cc
+++ b/content/browser/web_contents/navigation_controller_impl.cc
@@ -1214,14 +1214,8 @@ void NavigationControllerImpl::CopyStateFrom(
needs_reload_ = true;
InsertEntriesFrom(source, source.GetEntryCount());
- for (SessionStorageNamespaceMap::const_iterator it =
- source.session_storage_namespace_map_.begin();
- it != source.session_storage_namespace_map_.end();
- ++it) {
- SessionStorageNamespaceImpl* source_namespace =
- static_cast<SessionStorageNamespaceImpl*>(it->second.get());
- session_storage_namespace_map_[it->first] = source_namespace->Clone();
- }
+ session_storage_namespace_ = static_cast<SessionStorageNamespaceImpl*>(
+ source.session_storage_namespace_.get())->Clone();
FinishRestore(source.last_committed_entry_index_, RESTORE_CURRENT_SESSION);
@@ -1343,7 +1337,6 @@ void NavigationControllerImpl::ClearAllScreenshots() {
}
void NavigationControllerImpl::SetSessionStorageNamespace(
- const std::string& partition_id,
SessionStorageNamespace* session_storage_namespace) {
if (!session_storage_namespace)
return;
@@ -1351,12 +1344,8 @@ void NavigationControllerImpl::SetSessionStorageNamespace(
// We can't overwrite an existing SessionStorage without violating spec.
// Attempts to do so may give a tab access to another tab's session storage
// so die hard on an error.
- bool successful_insert = session_storage_namespace_map_.insert(
- make_pair(partition_id,
- static_cast<SessionStorageNamespaceImpl*>(
- session_storage_namespace)))
- .second;
- CHECK(successful_insert) << "Cannot replace existing SessionStorageNamespace";
+ CHECK(!session_storage_namespace_.get());
+ session_storage_namespace_ = session_storage_namespace;
}
void NavigationControllerImpl::SetMaxRestoredPageID(int32 max_id) {
@@ -1368,45 +1357,15 @@ int32 NavigationControllerImpl::GetMaxRestoredPageID() const {
}
SessionStorageNamespace*
-NavigationControllerImpl::GetSessionStorageNamespace(SiteInstance* instance) {
- std::string partition_id;
- if (instance) {
- // TODO(ajwong): When GetDefaultSessionStorageNamespace() goes away, remove
- // this if statement so |instance| must not be NULL.
- partition_id =
- GetContentClient()->browser()->GetStoragePartitionIdForSite(
- browser_context_, instance->GetSiteURL());
- }
-
- SessionStorageNamespaceMap::const_iterator it =
- session_storage_namespace_map_.find(partition_id);
- if (it != session_storage_namespace_map_.end())
- return it->second.get();
-
- // Create one if no one has accessed session storage for this partition yet.
- //
- // TODO(ajwong): Should this use the |partition_id| directly rather than
- // re-lookup via |instance|? http://crbug.com/142685
- StoragePartition* partition =
- BrowserContext::GetStoragePartition(browser_context_, instance);
- SessionStorageNamespaceImpl* session_storage_namespace =
- new SessionStorageNamespaceImpl(
- static_cast<DOMStorageContextImpl*>(
- partition->GetDOMStorageContext()));
- session_storage_namespace_map_[partition_id] = session_storage_namespace;
-
- return session_storage_namespace;
-}
-
-SessionStorageNamespace*
-NavigationControllerImpl::GetDefaultSessionStorageNamespace() {
- // TODO(ajwong): Remove if statement in GetSessionStorageNamespace().
- return GetSessionStorageNamespace(NULL);
-}
-
-const SessionStorageNamespaceMap&
-NavigationControllerImpl::GetSessionStorageNamespaceMap() const {
- return session_storage_namespace_map_;
+NavigationControllerImpl::GetSessionStorageNamespace() {
+ if (session_storage_namespace_.get())
+ return session_storage_namespace_.get();
+
+ session_storage_namespace_ =
+ new SessionStorageNamespaceImpl(static_cast<DOMStorageContextImpl*>(
+ BrowserContext::GetDefaultStoragePartition(browser_context_)
+ ->GetDOMStorageContext()));
awong 2013/07/22 22:35:33 Ah Hah! I think this is the bug. We should still
+ return session_storage_namespace_.get();
}
bool NavigationControllerImpl::NeedsReload() const {

Powered by Google App Engine
This is Rietveld 408576698