| Index: content/renderer/render_thread_impl.cc
|
| ===================================================================
|
| --- content/renderer/render_thread_impl.cc (revision 133749)
|
| +++ content/renderer/render_thread_impl.cc (working copy)
|
| @@ -57,6 +57,7 @@
|
| #include "content/renderer/render_view_impl.h"
|
| #include "content/renderer/renderer_webkitplatformsupport_impl.h"
|
| #include "content/renderer/renderer_webstoragearea_impl.h"
|
| +#include "content/renderer/renderer_webstoragenamespace_impl.h"
|
| #include "grit/content_resources.h"
|
| #include "ipc/ipc_channel_handle.h"
|
| #include "ipc/ipc_platform_file.h"
|
| @@ -813,32 +814,40 @@
|
|
|
| void RenderThreadImpl::OnDOMStorageEvent(
|
| const DOMStorageMsg_Event_Params& params) {
|
| - if (!dom_storage_event_dispatcher_.get()) {
|
| - EnsureWebKitInitialized();
|
| - dom_storage_event_dispatcher_.reset(WebStorageEventDispatcher::create());
|
| + EnsureWebKitInitialized();
|
| +
|
| + bool originated_in_process = params.connection_id != 0;
|
| + RendererWebStorageAreaImpl* originating_area = NULL;
|
| + if (originated_in_process) {
|
| + originating_area = RendererWebStorageAreaImpl::FromConnectionId(
|
| + params.connection_id);
|
| }
|
|
|
| - // TODO(michaeln): Return early until webkit/webcore is modified to not
|
| - // raise LocalStorage events internally. Looks like i have some multi-side
|
| - // patch engineering in front of me todo.
|
| - if (params.connection_id)
|
| - return;
|
| -
|
| - // TODO(michaeln): fix the webkit api so we don't need to convert from
|
| - // string types to url types and to pass in the 'area' which
|
| - // caused this event to occur and to get rid of the is_local param.
|
| - // RendererWebStorageAreaImpl* originating_area =
|
| - // RendererWebStorageAreaImpl::FromConnectionId(params.connection_id);
|
| -
|
| - // SessionStorage events are always raised internally by webkit/webcore.
|
| - const bool kIsLocalStorage = true;
|
| - dom_storage_event_dispatcher_->dispatchStorageEvent(
|
| - params.key,
|
| - params.old_value,
|
| - params.new_value,
|
| - UTF8ToUTF16(params.origin.spec()),
|
| - params.page_url,
|
| - kIsLocalStorage);
|
| + if (params.namespace_id == dom_storage::kLocalStorageNamespaceId) {
|
| + 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.
|
| + RendererWebStorageNamespaceImpl
|
| + session_namespace_for_event_dispatch(params.namespace_id);
|
| + 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);
|
| + }
|
| }
|
|
|
| bool RenderThreadImpl::OnControlMessageReceived(const IPC::Message& msg) {
|
|
|