Chromium Code Reviews| Index: chrome/browser/sessions/session_service.cc |
| diff --git a/chrome/browser/sessions/session_service.cc b/chrome/browser/sessions/session_service.cc |
| index e60d30e51d98f971c60ce634f8dd64013baeba2c..f99af8160c3b988750eb0997a1c2d9ca7b57d2e6 100644 |
| --- a/chrome/browser/sessions/session_service.cc |
| +++ b/chrome/browser/sessions/session_service.cc |
| @@ -32,6 +32,8 @@ |
| #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/extensions/extension.h" |
| +#include "content/browser/in_process_webkit/dom_storage_namespace.h" |
| +#include "content/browser/in_process_webkit/session_storage_namespace.h" |
| #include "content/browser/tab_contents/navigation_details.h" |
| #include "content/browser/tab_contents/navigation_entry.h" |
| #include "content/browser/tab_contents/tab_contents.h" |
| @@ -64,6 +66,7 @@ static const SessionCommand::id_type |
| static const SessionCommand::id_type kCommandSetPinnedState = 12; |
| static const SessionCommand::id_type kCommandSetExtensionAppID = 13; |
| static const SessionCommand::id_type kCommandSetWindowBounds3 = 14; |
| +static const SessionCommand::id_type kCommandSessionStorageCreated = 15; |
| // Every kWritesPerReset commands triggers recreating the file. |
| static const int kWritesPerReset = 250; |
| @@ -455,6 +458,8 @@ void SessionService::Init() { |
| registrar_.Add( |
| this, chrome::NOTIFICATION_TAB_CONTENTS_APPLICATION_EXTENSION_CHANGED, |
| content::NotificationService::AllSources()); |
| + registrar_.Add(this, content::NOTIFICATION_DOM_STORAGE_NAMESPACE_CREATED, |
| + content::NotificationService::AllSources()); |
| } |
| bool SessionService::ShouldNewWindowStartSession() { |
| @@ -517,6 +522,15 @@ void SessionService::Observe(int type, |
| content::Source<TabContentsWrapper>(source).ptr(); |
| if (tab->profile() != profile()) |
| return; |
| + |
| + // Record the association between the sessionStorage namespace and the |
| + // tab. |
| + SessionStorageNamespace* session_storage_namespace = |
| + tab->tab_contents()->controller().session_storage_namespace(); |
| + session_storage_namespace_map_[session_storage_namespace->id()] = |
| + std::make_pair(tab->restore_tab_helper()->window_id(), |
| + tab->restore_tab_helper()->session_id()); |
| + |
| SetTabWindow(tab->restore_tab_helper()->window_id(), |
| tab->restore_tab_helper()->session_id()); |
| if (tab->extension_tab_helper()->extension_app()) { |
| @@ -625,6 +639,24 @@ void SessionService::Observe(int type, |
| break; |
| } |
| + case content::NOTIFICATION_DOM_STORAGE_NAMESPACE_CREATED: { |
| + content::Details<DOMStorageNamespaceCreatedDetails> |
| + namespace_created_details(details); |
| + |
| + SessionStorageNamespaceMap::const_iterator it = |
| + session_storage_namespace_map_.find(namespace_created_details->id); |
| + if (it != session_storage_namespace_map_.end()) { |
| + Pickle session_storage_created_pickle; |
| + session_storage_created_pickle.WriteInt(it->second.first.id()); |
| + session_storage_created_pickle.WriteInt(it->second.second.id()); |
| + session_storage_created_pickle.WriteString( |
| + namespace_created_details->session_storage_directory.value()); |
| + ScheduleCommand(new SessionCommand(kCommandSessionStorageCreated, |
|
michaeln
2011/12/13 20:40:03
I'm not at all familiar with this SessionService c
marja
2012/01/11 15:17:53
ScheduleCommand puts the command into a queue and
|
| + session_storage_created_pickle)); |
| + } |
| + break; |
| + } |
| + |
| default: |
| NOTREACHED(); |
| } |
| @@ -1095,6 +1127,19 @@ bool SessionService::CreateTabsAndWindows( |
| GetTab(tab_id, tabs)->extension_app_id.swap(extension_app_id); |
| break; |
| } |
| + case kCommandSessionStorageCreated: { |
| + scoped_ptr<Pickle> pickle(command->PayloadAsPickle()); |
| + SessionID::id_type window_id; |
| + SessionID::id_type tab_id; |
| + std::string session_storage_directory; |
| + void* iter = NULL; |
| + pickle->ReadInt(&iter, &window_id); |
| + pickle->ReadInt(&iter, &tab_id); |
| + pickle->ReadString(&iter, &session_storage_directory); |
| + GetTab(tab_id, tabs)->session_storage_directory = |
| + FilePath(session_storage_directory); |
| + break; |
| + } |
| default: |
| return true; |