Index: content/renderer/dom_storage/dom_storage_dispatcher.cc |
=================================================================== |
--- content/renderer/dom_storage/dom_storage_dispatcher.cc (revision 0) |
+++ content/renderer/dom_storage/dom_storage_dispatcher.cc (revision 0) |
@@ -0,0 +1,58 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "content/renderer/dom_storage/dom_storage_dispatcher.h" |
+ |
+#include "content/common/dom_storage_messages.h" |
+#include "content/renderer/dom_storage/webstoragearea_impl.h" |
+#include "content/renderer/dom_storage/webstoragenamespace_impl.h" |
+#include "content/renderer/render_thread_impl.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebStorageEventDispatcher.h" |
+ |
+bool DomStorageDispatcher::OnMessageReceived(const IPC::Message& msg) { |
+ bool handled = true; |
+ IPC_BEGIN_MESSAGE_MAP(DomStorageDispatcher, msg) |
+ IPC_MESSAGE_HANDLER(DOMStorageMsg_Event, OnStorageEvent) |
+ IPC_MESSAGE_UNHANDLED(handled = false) |
+ IPC_END_MESSAGE_MAP() |
+ return handled; |
+} |
+ |
+void DomStorageDispatcher::OnStorageEvent( |
+ const DOMStorageMsg_Event_Params& params) { |
+ RenderThreadImpl::current()->EnsureWebKitInitialized(); |
+ |
+ bool originated_in_process = params.connection_id != 0; |
+ WebStorageAreaImpl* originating_area = NULL; |
+ if (originated_in_process) { |
+ originating_area = WebStorageAreaImpl::FromConnectionId( |
+ params.connection_id); |
+ } |
+ |
+ if (params.namespace_id == dom_storage::kLocalStorageNamespaceId) { |
+ WebKit::WebStorageEventDispatcher::dispatchLocalStorageEvent( |
+ params.key, |
+ params.old_value, |
+ params.new_value, |
+ params.origin, |
+ params.page_url, |
+ originating_area, |
+ originated_in_process); |
+ } else if (originated_in_process) { |
+ // TODO(michaeln): For now, we only raise session storage events into the |
+ // process which caused the event to occur. However there are cases where |
+ // sessions can span process boundaries, so there are correctness issues. |
+ WebStorageNamespaceImpl |
+ session_namespace_for_event_dispatch(params.namespace_id); |
+ WebKit::WebStorageEventDispatcher::dispatchSessionStorageEvent( |
+ params.key, |
+ params.old_value, |
+ params.new_value, |
+ params.origin, |
+ params.page_url, |
+ session_namespace_for_event_dispatch, |
+ originating_area, |
+ originated_in_process); |
+ } |
+} |
Property changes on: content\renderer\dom_storage\dom_storage_dispatcher.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |