summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-01 19:51:45 +0000
committerjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-10-01 19:51:45 +0000
commitb94c30ecc12799ad4f89897cb8333b5285f2918a (patch)
tree92fd0243537d0c1104ee39ff37b812029f39c12b /chrome/renderer
parent1d5ac66b45c8e625fb4ec382d4e38e5357fdb257 (diff)
downloadchromium_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.cc16
-rw-r--r--chrome/renderer/render_thread.h12
-rw-r--r--chrome/renderer/renderer_webstoragenamespace_impl.cc12
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_,