diff options
author | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 11:12:10 +0000 |
---|---|---|
committer | jorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-03-05 11:12:10 +0000 |
commit | ff039f0833a278d7ca80aeb8987e73b6c258f305 (patch) | |
tree | d14996adb5e34eec385b4bf52a9c95160c9ccd0e | |
parent | 6a8622399085cf24ba5c7840e12ac6a21e02c45c (diff) | |
download | chromium_src-ff039f0833a278d7ca80aeb8987e73b6c258f305.zip chromium_src-ff039f0833a278d7ca80aeb8987e73b6c258f305.tar.gz chromium_src-ff039f0833a278d7ca80aeb8987e73b6c258f305.tar.bz2 |
Switch to using the CookieMessageFilter when pumping messages for StorageArea::setItem.
TEST=none
BUG=37350
Review URL: http://codereview.chromium.org/669072
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@40731 0039d316-1c4b-4281-b951-d872f2087c98
4 files changed, 23 insertions, 10 deletions
diff --git a/chrome/browser/in_process_webkit/dom_storage_area.cc b/chrome/browser/in_process_webkit/dom_storage_area.cc index a3a031b..a0ef9b9 100644 --- a/chrome/browser/in_process_webkit/dom_storage_area.cc +++ b/chrome/browser/in_process_webkit/dom_storage_area.cc @@ -13,6 +13,7 @@ #include "chrome/browser/in_process_webkit/dom_storage_namespace.h" #include "chrome/browser/in_process_webkit/dom_storage_permission_request.h" #include "chrome/browser/host_content_settings_map.h" +#include "chrome/common/render_messages.h" #include "third_party/WebKit/WebKit/chromium/public/WebSecurityOrigin.h" #include "third_party/WebKit/WebKit/chromium/public/WebStorageArea.h" #include "third_party/WebKit/WebKit/chromium/public/WebString.h" @@ -58,8 +59,8 @@ NullableString16 DOMStorageArea::GetItem(const string16& key) { NullableString16 DOMStorageArea::SetItem( const string16& key, const string16& value, - WebStorageArea::Result* result) { - if (!CheckContentSetting(key, value)) { + WebStorageArea::Result* result, DOMStorageDispatcherHost* sender) { + if (!CheckContentSetting(key, value, sender)) { *result = WebStorageArea::ResultBlockedByPolicy; return NullableString16(true); // Ignored if the content was blocked. } @@ -93,8 +94,9 @@ void DOMStorageArea::CreateWebStorageAreaIfNecessary() { storage_area_.reset(owner_->CreateWebStorageArea(origin_)); } -bool DOMStorageArea::CheckContentSetting(const string16& key, - const string16& value) { +bool DOMStorageArea::CheckContentSetting( + const string16& key, const string16& value, + DOMStorageDispatcherHost* sender) { ContentSetting content_setting = host_content_settings_map_->GetContentSetting( origin_url_, CONTENT_SETTINGS_TYPE_COOKIES); @@ -106,6 +108,8 @@ bool DOMStorageArea::CheckContentSetting(const string16& key, ChromeThread::UI, FROM_HERE, NewRunnableFunction(&DOMStoragePermissionRequest::PromptUser, &request)); + // Tell the renderer that it needs to run a nested message loop. + sender->Send(new ViewMsg_SignalCookiePromptEvent()); content_setting = request.WaitOnResponse(); } diff --git a/chrome/browser/in_process_webkit/dom_storage_area.h b/chrome/browser/in_process_webkit/dom_storage_area.h index 4cba146..f14033a 100644 --- a/chrome/browser/in_process_webkit/dom_storage_area.h +++ b/chrome/browser/in_process_webkit/dom_storage_area.h @@ -15,6 +15,7 @@ #include "googleurl/src/gurl.h" #include "third_party/WebKit/WebKit/chromium/public/WebStorageArea.h" +class DOMStorageDispatcherHost; class DOMStorageNamespace; class HostContentSettingsMap; @@ -31,8 +32,14 @@ class DOMStorageArea { unsigned Length(); NullableString16 Key(unsigned index); NullableString16 GetItem(const string16& key); - NullableString16 SetItem(const string16& key, const string16& value, - WebKit::WebStorageArea::Result* result); + // The DOMStorageDispatcherHost parameter is required in case we get a + // CONTENT_SETTING_ASK response from the HostContentettingsMap. If we do, + // we'll need to let the renderer know that it'll need to run a nested message + // loop. + NullableString16 SetItem( + const string16& key, const string16& value, + WebKit::WebStorageArea::Result* result, + DOMStorageDispatcherHost* sender); NullableString16 RemoveItem(const string16& key); bool Clear(); void PurgeMemory(); @@ -44,7 +51,8 @@ class DOMStorageArea { void CreateWebStorageAreaIfNecessary(); // Used to see if setItem has permission to do its thing. - bool CheckContentSetting(const string16& key, const string16& value); + bool CheckContentSetting(const string16& key, const string16& value, + DOMStorageDispatcherHost* sender); // The origin this storage area represents. string16 origin_; diff --git a/chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc b/chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc index ccd9e97..ddd9439 100644 --- a/chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc +++ b/chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc @@ -270,7 +270,7 @@ void DOMStorageDispatcherHost::OnSetItem( ScopedStorageEventContext scope(this, &url); WebStorageArea::Result result; - NullableString16 old_value = storage_area->SetItem(key, value, &result); + NullableString16 old_value = storage_area->SetItem(key, value, &result, this); ViewHostMsg_DOMStorageSetItem::WriteReplyParams(reply_msg, result, old_value); Send(reply_msg); } diff --git a/chrome/renderer/renderer_webstoragearea_impl.cc b/chrome/renderer/renderer_webstoragearea_impl.cc index e4e87fa..61c3448 100644 --- a/chrome/renderer/renderer_webstoragearea_impl.cc +++ b/chrome/renderer/renderer_webstoragearea_impl.cc @@ -5,6 +5,7 @@ #include "chrome/renderer/renderer_webstoragearea_impl.h" #include "chrome/common/render_messages.h" +#include "chrome/renderer/cookie_message_filter.h" #include "chrome/renderer/render_thread.h" #include "chrome/renderer/render_view.h" #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" @@ -57,8 +58,8 @@ void RendererWebStorageAreaImpl::setItem( IPC::SyncMessage* message = new ViewHostMsg_DOMStorageSetItem(routing_id, storage_area_id_, key, value, url, &result, &old_value); - // TODO(darin): Response to ViewMsg_SignalCookiePromptEvent instead. - message->EnableMessagePumping(); + message->set_pump_messages_event( + RenderThread::current()->cookie_message_filter()->pump_messages_event()); RenderThread::current()->Send(message); old_value_webkit = old_value; |