diff options
author | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 19:51:45 +0000 |
---|---|---|
committer | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-01 19:51:45 +0000 |
commit | b94c30ecc12799ad4f89897cb8333b5285f2918a (patch) | |
tree | 92fd0243537d0c1104ee39ff37b812029f39c12b /chrome/renderer | |
parent | 1d5ac66b45c8e625fb4ec382d4e38e5357fdb257 (diff) | |
download | chromium_src-b94c30ecc12799ad4f89897cb8333b5285f2918a.zip chromium_src-b94c30ecc12799ad4f89897cb8333b5285f2918a.tar.gz chromium_src-b94c30ecc12799ad4f89897cb8333b5285f2918a.tar.bz2 |
Another stab at the Chromium side of storage events. The WebKit side can be found here: https://bugs.webkit.org/show_bug.cgi?id=29655
TEST=Manually inspected that storage events fired. Will turn on more layout tests in a subsequent patch.
BUG=19972
Review URL: http://codereview.chromium.org/223013
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27756 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r-- | chrome/renderer/render_thread.cc | 16 | ||||
-rw-r--r-- | chrome/renderer/render_thread.h | 12 | ||||
-rw-r--r-- | chrome/renderer/renderer_webstoragenamespace_impl.cc | 12 |
3 files changed, 35 insertions, 5 deletions
diff --git a/chrome/renderer/render_thread.cc b/chrome/renderer/render_thread.cc index 60b7391..104d55c 100644 --- a/chrome/renderer/render_thread.cc +++ b/chrome/renderer/render_thread.cc @@ -11,8 +11,10 @@ #include "base/command_line.h" #include "base/lazy_instance.h" #include "base/logging.h" +#include "base/nullable_string16.h" #include "base/shared_memory.h" #include "base/stats_table.h" +#include "base/string_util.h" #include "base/thread_local.h" #include "chrome/common/appcache/appcache_dispatcher.h" #include "chrome/common/chrome_switches.h" @@ -45,6 +47,7 @@ #include "webkit/api/public/WebColor.h" #include "webkit/api/public/WebCache.h" #include "webkit/api/public/WebKit.h" +#include "webkit/api/public/WebStorageEventDispatcher.h" #include "webkit/api/public/WebString.h" #include "webkit/extensions/v8/benchmarking_extension.h" #include "webkit/extensions/v8/gears_extension.h" @@ -59,6 +62,7 @@ using WebKit::WebCache; using WebKit::WebString; +using WebKit::WebStorageEventDispatcher; namespace { static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; @@ -240,6 +244,16 @@ void RenderThread::OnExtensionSetHostPermissions( ExtensionProcessBindings::SetHostPermissions(extension_url, permissions); } +void RenderThread::OnDOMStorageEvent(const string16& key, + const NullableString16& old_value, const NullableString16& new_value, + const string16& origin, DOMStorageType dom_storage_type) { + if (!dom_storage_event_dispatcher_.get()) { + dom_storage_event_dispatcher_.reset(WebStorageEventDispatcher::create()); + } + dom_storage_event_dispatcher_->dispatchStorageEvent(key, old_value, new_value, + origin, dom_storage_type == DOM_STORAGE_LOCAL); +} + void RenderThread::OnExtensionSetL10nMessages( const std::string& extension_id, const std::map<std::string, std::string>& l10n_messages) { @@ -281,6 +295,8 @@ void RenderThread::OnControlMessageReceived(const IPC::Message& msg) { OnExtensionSetAPIPermissions) IPC_MESSAGE_HANDLER(ViewMsg_Extension_SetHostPermissions, OnExtensionSetHostPermissions) + IPC_MESSAGE_HANDLER(ViewMsg_DOMStorageEvent, + OnDOMStorageEvent) IPC_MESSAGE_HANDLER(ViewMsg_Extension_SetL10nMessages, OnExtensionSetL10nMessages) #if defined(IPC_MESSAGE_LOG_ENABLED) diff --git a/chrome/renderer/render_thread.h b/chrome/renderer/render_thread.h index 5be1585..89f2c05 100644 --- a/chrome/renderer/render_thread.h +++ b/chrome/renderer/render_thread.h @@ -14,6 +14,7 @@ #include "build/build_config.h" #include "chrome/common/child_thread.h" #include "chrome/common/css_colors.h" +#include "chrome/common/dom_storage_type.h" #include "chrome/renderer/renderer_histogram_snapshots.h" #include "chrome/renderer/visitedlink_slave.h" @@ -22,6 +23,7 @@ class DBMessageFilter; class DevToolsAgentFilter; class FilePath; class ListValue; +class NullableString16; class RenderDnsMaster; class RendererHistogram; class RendererWebKitClientImpl; @@ -32,6 +34,10 @@ class URLPattern; struct RendererPreferences; struct WebPreferences; +namespace WebKit { +class WebStorageEventDispatcher; +} + // The RenderThreadBase is the minimal interface that a RenderView/Widget // expects from a render thread. The interface basically abstracts a way to send // and receive messages. @@ -138,7 +144,10 @@ class RenderThread : public RenderThreadBase, void OnUpdateUserScripts(base::SharedMemoryHandle table); void OnSetExtensionFunctionNames(const std::vector<std::string>& names); void OnPageActionsUpdated(const std::string& extension_id, - const std::vector<std::string>& page_actions); + const std::vector<std::string>& page_actions); + void OnDOMStorageEvent(const string16& key, const NullableString16& old_value, + const NullableString16& new_value, const string16& origin, + DOMStorageType dom_storage_type); void OnExtensionSetAPIPermissions( const std::string& extension_id, const std::vector<std::string>& permissions); @@ -187,6 +196,7 @@ class RenderThread : public RenderThreadBase, scoped_refptr<DevToolsAgentFilter> devtools_agent_filter_; scoped_ptr<RendererHistogramSnapshots> histogram_snapshots_; scoped_ptr<RendererWebKitClientImpl> webkit_client_; + scoped_ptr<WebKit::WebStorageEventDispatcher> dom_storage_event_dispatcher_; scoped_refptr<DBMessageFilter> db_message_filter_; diff --git a/chrome/renderer/renderer_webstoragenamespace_impl.cc b/chrome/renderer/renderer_webstoragenamespace_impl.cc index c63d6da..41a8c6c 100644 --- a/chrome/renderer/renderer_webstoragenamespace_impl.cc +++ b/chrome/renderer/renderer_webstoragenamespace_impl.cc @@ -8,6 +8,10 @@ #include "chrome/renderer/render_thread.h" #include "chrome/renderer/renderer_webstoragearea_impl.h" +using WebKit::WebStorageArea; +using WebKit::WebStorageNamespace; +using WebKit::WebString; + RendererWebStorageNamespaceImpl::RendererWebStorageNamespaceImpl( DOMStorageType storage_type) : storage_type_(storage_type), @@ -24,8 +28,8 @@ RendererWebStorageNamespaceImpl::RendererWebStorageNamespaceImpl( RendererWebStorageNamespaceImpl::~RendererWebStorageNamespaceImpl() { } -WebKit::WebStorageArea* RendererWebStorageNamespaceImpl::createStorageArea( - const WebKit::WebString& origin) { +WebStorageArea* RendererWebStorageNamespaceImpl::createStorageArea( + const WebString& origin) { // This could be done async in the background (started when this class is // first instantiated) rather than lazily on first use, but it's unclear // whether it's worth the complexity. @@ -42,12 +46,12 @@ WebKit::WebStorageArea* RendererWebStorageNamespaceImpl::createStorageArea( return new RendererWebStorageAreaImpl(namespace_id_, origin); } -WebKit::WebStorageNamespace* RendererWebStorageNamespaceImpl::copy() { +WebStorageNamespace* RendererWebStorageNamespaceImpl::copy() { // If we haven't been used yet, we might as well start out fresh (and lazy). if (namespace_id_ == kUninitializedNamespaceId) return new RendererWebStorageNamespaceImpl(storage_type_); - // This cannot easily be differed because we need a snapshot in time. + // This cannot easily be deferred because we need a snapshot in time. int64 new_namespace_id; RenderThread::current()->Send( new ViewHostMsg_DOMStorageCloneNamespaceId(namespace_id_, |