Index: webkit/tools/test_shell/simple_dom_storage_system.cc |
=================================================================== |
--- webkit/tools/test_shell/simple_dom_storage_system.cc (revision 133749) |
+++ webkit/tools/test_shell/simple_dom_storage_system.cc (working copy) |
@@ -4,21 +4,23 @@ |
#include "webkit/tools/test_shell/simple_dom_storage_system.h" |
+#include "base/auto_reset.h" |
#include "googleurl/src/gurl.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebURL.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageArea.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageEventDispatcher.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageNamespace.h" |
#include "webkit/database/database_util.h" |
-#include "webkit/dom_storage/dom_storage_context.h" |
+#include "webkit/dom_storage/dom_storage_area.h" |
#include "webkit/dom_storage/dom_storage_host.h" |
-#include "webkit/dom_storage/dom_storage_session.h" |
using dom_storage::DomStorageContext; |
using dom_storage::DomStorageHost; |
using dom_storage::DomStorageSession; |
using webkit_database::DatabaseUtil; |
+using WebKit::WebStorageArea; |
using WebKit::WebStorageNamespace; |
-using WebKit::WebStorageArea; |
+using WebKit::WebStorageEventDispatcher; |
using WebKit::WebString; |
using WebKit::WebURL; |
@@ -34,7 +36,7 @@ |
virtual ~NamespaceImpl(); |
virtual WebStorageArea* createStorageArea(const WebString& origin) OVERRIDE; |
virtual WebStorageNamespace* copy() OVERRIDE; |
- virtual void close() OVERRIDE; |
+ virtual bool isSameNamespace(const WebStorageNamespace&) const OVERRIDE; |
private: |
DomStorageContext* Context() { |
@@ -110,8 +112,10 @@ |
return new NamespaceImpl(parent_, new_id); |
} |
-void SimpleDomStorageSystem::NamespaceImpl::close() { |
- // TODO(michaeln): remove this deprecated method. |
+bool SimpleDomStorageSystem::NamespaceImpl::isSameNamespace( |
+ const WebStorageNamespace& other) const { |
+ const NamespaceImpl* other_impl = static_cast<const NamespaceImpl*>(&other); |
+ return namespace_id_ == other_impl->namespace_id_; |
} |
// AreaImpl ----------------------------- |
@@ -158,6 +162,7 @@ |
if (!Host()) |
return; |
+ AutoReset<AreaImpl*> auto_reset(&parent_->area_being_processed_, this); |
NullableString16 old_value; |
if (!Host()->SetAreaItem(connection_id_, key, newValue, pageUrl, |
&old_value)) |
@@ -173,6 +178,7 @@ |
if (!Host()) |
return; |
+ AutoReset<AreaImpl*> auto_reset(&parent_->area_being_processed_, this); |
string16 old_value; |
if (!Host()->RemoveAreaItem(connection_id_, key, pageUrl, &old_value)) |
return; |
@@ -182,10 +188,12 @@ |
void SimpleDomStorageSystem::AreaImpl::clear( |
const WebURL& pageUrl, bool& somethingCleared) { |
- if (Host()) |
+ if (Host()) { |
+ AutoReset<AreaImpl*> auto_reset(&parent_->area_being_processed_, this); |
somethingCleared = Host()->ClearArea(connection_id_, pageUrl); |
- else |
- somethingCleared = false; |
+ return; |
+ } |
+ somethingCleared = false; |
} |
// SimpleDomStorageSystem ----------------------------- |
@@ -196,14 +204,17 @@ |
: weak_factory_(this), |
context_(new DomStorageContext(FilePath(), FilePath(), NULL, NULL)), |
host_(new DomStorageHost(context_)), |
+ area_being_processed_(NULL), |
next_connection_id_(1) { |
DCHECK(!g_instance_); |
g_instance_ = this; |
+ context_->AddEventObserver(this); |
} |
SimpleDomStorageSystem::~SimpleDomStorageSystem() { |
g_instance_ = NULL; |
host_.reset(); |
+ context_->RemoveEventObserver(this); |
} |
WebStorageNamespace* SimpleDomStorageSystem::CreateLocalStorageNamespace() { |
@@ -215,3 +226,66 @@ |
context_->CreateSessionNamespace(id); |
return new NamespaceImpl(weak_factory_.GetWeakPtr(), id); |
} |
+ |
+void SimpleDomStorageSystem::OnDomStorageItemSet( |
+ const dom_storage::DomStorageArea* area, |
+ const string16& key, |
+ const string16& new_value, |
+ const NullableString16& old_value, |
+ const GURL& page_url) { |
+ DispatchDomStorageEvent(area, page_url, |
+ NullableString16(key, false), |
+ NullableString16(new_value, false), |
+ old_value); |
+} |
+ |
+void SimpleDomStorageSystem::OnDomStorageItemRemoved( |
+ const dom_storage::DomStorageArea* area, |
+ const string16& key, |
+ const string16& old_value, |
+ const GURL& page_url) { |
+ DispatchDomStorageEvent(area, page_url, |
+ NullableString16(key, false), |
+ NullableString16(true), |
+ NullableString16(old_value, false)); |
+} |
+ |
+void SimpleDomStorageSystem::OnDomStorageAreaCleared( |
+ const dom_storage::DomStorageArea* area, |
+ const GURL& page_url) { |
+ DispatchDomStorageEvent(area, page_url, |
+ NullableString16(true), |
+ NullableString16(true), |
+ NullableString16(true)); |
+} |
+ |
+void SimpleDomStorageSystem::DispatchDomStorageEvent( |
+ const dom_storage::DomStorageArea* area, |
+ const GURL& page_url, |
+ const NullableString16& key, |
+ const NullableString16& new_value, |
+ const NullableString16& old_value) { |
+ DCHECK(area_being_processed_); |
+ if (area->namespace_id() == dom_storage::kLocalStorageNamespaceId) { |
+ WebStorageEventDispatcher::dispatchLocalStorageEvent( |
+ key, |
+ old_value, |
+ new_value, |
+ area->origin(), |
+ page_url, |
+ area_being_processed_, |
+ true /* originatedInProcess */); |
+ } else { |
+ NamespaceImpl session_namespace_for_event_dispatch( |
+ base::WeakPtr<SimpleDomStorageSystem>(), area->namespace_id()); |
+ WebStorageEventDispatcher::dispatchSessionStorageEvent( |
+ key, |
+ old_value, |
+ new_value, |
+ area->origin(), |
+ page_url, |
+ session_namespace_for_event_dispatch, |
+ area_being_processed_, |
+ true /* originatedInProcess */); |
+ } |
+} |