Index: content/browser/in_process_webkit/dom_storage_message_filter.cc |
diff --git a/content/browser/in_process_webkit/dom_storage_message_filter.cc b/content/browser/in_process_webkit/dom_storage_message_filter.cc |
index 8a327131b99001bd5d30d8ddb374605de9c8408c..f5771c7aed211b7b8a6b56b47434011666c6a409 100644 |
--- a/content/browser/in_process_webkit/dom_storage_message_filter.cc |
+++ b/content/browser/in_process_webkit/dom_storage_message_filter.cc |
@@ -83,7 +83,8 @@ bool DOMStorageMessageFilter::OnMessageReceived(const IPC::Message& message, |
bool* message_was_ok) { |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP_EX(DOMStorageMessageFilter, message, *message_was_ok) |
- IPC_MESSAGE_HANDLER(DOMStorageHostMsg_StorageAreaId, OnStorageAreaId) |
+ IPC_MESSAGE_HANDLER_DELAY_REPLY( |
+ DOMStorageHostMsg_StorageAreaId, OnStorageAreaId) |
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Length, OnLength) |
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Key, OnKey) |
IPC_MESSAGE_HANDLER(DOMStorageHostMsg_GetItem, OnGetItem) |
@@ -103,23 +104,58 @@ void DOMStorageMessageFilter::OnDestruct() const { |
void DOMStorageMessageFilter::OverrideThreadForMessage( |
const IPC::Message& message, |
BrowserThread::ID* thread) { |
- if (IPC_MESSAGE_CLASS(message) == DOMStorageMsgStart) |
+ if (message.type() == DOMStorageHostMsg_StorageAreaId::ID) |
+ ; |
michaeln
2011/08/02 19:47:41
this looks odd, maybe put an early return here ins
marja
2011/08/03 09:14:15
Done.
|
+ else if (IPC_MESSAGE_CLASS(message) == DOMStorageMsgStart) |
*thread = BrowserThread::WEBKIT; |
} |
void DOMStorageMessageFilter::OnStorageAreaId(int64 namespace_id, |
const string16& origin, |
- int64* storage_area_id) { |
- DCHECK(BrowserThread::CurrentlyOn(BrowserThread::WEBKIT)); |
+ IPC::Message* reply_msg) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ content::ContentBrowserClient* content_browser_client = |
+ content::GetContentClient()->browser(); |
+ bool allow_permanent_storage = |
+ content_browser_client->AllowPermanentStorage( |
+ GURL(origin), |
+ // FIXME(marja): Get the first party URL |
michaeln
2011/08/02 19:47:41
nit: TODO(marja) instead of FIXME. One of those st
marja
2011/08/03 09:14:15
Done.
Though, my intention was to get this FIXME
|
+ GURL(origin), |
+ Context()->GetResourceContext()); |
+ |
+ BrowserThread::PostTask( |
+ BrowserThread::WEBKIT, |
+ FROM_HERE, |
+ NewRunnableMethod( |
+ this, |
+ &DOMStorageMessageFilter::OnStorageAreaIdOnWebKitThread, |
+ namespace_id, |
+ origin, |
+ allow_permanent_storage, |
+ reply_msg)); |
+} |
+ |
+void DOMStorageMessageFilter::OnStorageAreaIdOnWebKitThread( |
+ int64 namespace_id, |
+ const string16& origin, |
+ bool allow_permanent_storage, |
+ IPC::Message* reply_msg) { |
DOMStorageNamespace* storage_namespace = |
Context()->GetStorageNamespace(namespace_id, true); |
if (!storage_namespace) { |
- *storage_area_id = DOMStorageContext::kInvalidStorageId; |
- return; |
+ DOMStorageHostMsg_StorageAreaId::WriteReplyParams( |
+ reply_msg, |
+ DOMStorageContext::kInvalidStorageId); |
+ } else { |
+ DOMStorageArea* storage_area = |
+ storage_namespace->GetStorageArea(origin, |
+ allow_permanent_storage); |
+ DCHECK(storage_area != NULL); |
+ DOMStorageHostMsg_StorageAreaId::WriteReplyParams(reply_msg, |
+ storage_area->id()); |
} |
- DOMStorageArea* storage_area = storage_namespace->GetStorageArea(origin); |
- *storage_area_id = storage_area->id(); |
+ Send(reply_msg); |
} |
void DOMStorageMessageFilter::OnLength(int64 storage_area_id, |