Chromium Code Reviews| 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, |