summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 11:12:10 +0000
committerjorlow@chromium.org <jorlow@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-03-05 11:12:10 +0000
commitff039f0833a278d7ca80aeb8987e73b6c258f305 (patch)
treed14996adb5e34eec385b4bf52a9c95160c9ccd0e
parent6a8622399085cf24ba5c7840e12ac6a21e02c45c (diff)
downloadchromium_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
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_area.cc12
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_area.h14
-rw-r--r--chrome/browser/in_process_webkit/dom_storage_dispatcher_host.cc2
-rw-r--r--chrome/renderer/renderer_webstoragearea_impl.cc5
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;