Chromium Code Reviews| Index: content/browser/dom_storage/dom_storage_message_filter.cc |
| =================================================================== |
| --- content/browser/dom_storage/dom_storage_message_filter.cc (revision 133051) |
| +++ content/browser/dom_storage/dom_storage_message_filter.cc (working copy) |
| @@ -86,12 +86,16 @@ |
| IPC_BEGIN_MESSAGE_MAP_EX(DOMStorageMessageFilter, message, *message_was_ok) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_OpenStorageArea, OnOpenStorageArea) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_CloseStorageArea, OnCloseStorageArea) |
| + IPC_MESSAGE_HANDLER(DOMStorageHostMsg_LoadStorageArea, OnLoadStorageArea) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Length, OnLength) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Key, OnKey) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_GetItem, OnGetItem) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_SetItem, OnSetItem) |
| + IPC_MESSAGE_HANDLER(DOMStorageHostMsg_SetItemAsync, OnSetItemAsync) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_RemoveItem, OnRemoveItem) |
| + IPC_MESSAGE_HANDLER(DOMStorageHostMsg_RemoveItemAsync, OnRemoveItemAsync) |
| IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Clear, OnClear) |
| + IPC_MESSAGE_HANDLER(DOMStorageHostMsg_ClearAsync, OnClearAsync) |
| IPC_MESSAGE_UNHANDLED(handled = false) |
| IPC_END_MESSAGE_MAP() |
| return handled; |
| @@ -102,7 +106,7 @@ |
| const GURL& origin) { |
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| if (!host_->OpenStorageArea(connection_id, namespace_id, origin)) { |
| - content::RecordAction(UserMetricsAction("BadMessageTerminate_DSMF")); |
| + content::RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_1")); |
| BadMessageReceived(); |
| } |
| } |
| @@ -112,6 +116,15 @@ |
| host_->CloseStorageArea(connection_id); |
| } |
| +void DOMStorageMessageFilter::OnLoadStorageArea(int connection_id, |
| + dom_storage::ValuesMap* map) { |
| + DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + if (!host_->ExtractAreaValues(connection_id, map)) { |
| + content::RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_2")); |
| + BadMessageReceived(); |
| + } |
|
michaeln
2012/04/20 15:24:51
i think we'll also need to send a separate message
|
| +} |
| + |
| void DOMStorageMessageFilter::OnLength(int connection_id, |
| unsigned* length) { |
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| @@ -143,23 +156,49 @@ |
| *result = WebKit::WebStorageArea::ResultBlockedByQuota; |
| } |
| +void DOMStorageMessageFilter::OnSetItemAsync( |
| + int connection_id, int operation_id, const string16& key, |
| + const string16& value, const GURL& page_url) { |
| + DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + NullableString16 not_used; |
| + bool success = host_->SetAreaItem(connection_id, key, value, |
| + page_url, ¬_used); |
| + Send(new DOMStorageHostMsg_AsyncOperationComplete(operation_id, success)); |
| +} |
| + |
| void DOMStorageMessageFilter::OnRemoveItem( |
| - int connection_id, const string16& key, const GURL& pageUrl, |
| + int connection_id, const string16& key, const GURL& page_url, |
| NullableString16* old_value) { |
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| string16 old_string_value; |
| - if (host_->RemoveAreaItem(connection_id, key, pageUrl, &old_string_value)) |
| + if (host_->RemoveAreaItem(connection_id, key, page_url, &old_string_value)) |
| *old_value = NullableString16(old_string_value, false); |
| else |
| *old_value = NullableString16(true); |
| } |
| +void DOMStorageMessageFilter::OnRemoveItemAsync( |
| + int connection_id, int operation_id, const string16& key, |
| + const GURL& page_url) { |
| + DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + string16 not_used; |
| + host_->RemoveAreaItem(connection_id, key, page_url, ¬_used); |
| + Send(new DOMStorageHostMsg_AsyncOperationComplete(operation_id, true)); |
| +} |
| + |
| void DOMStorageMessageFilter::OnClear(int connection_id, const GURL& page_url, |
| bool* something_cleared) { |
| DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| *something_cleared = host_->ClearArea(connection_id, page_url); |
| } |
| +void DOMStorageMessageFilter::OnClearAsync( |
| + int connection_id, int operation_id, const GURL& page_url) { |
| + DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
| + host_->ClearArea(connection_id, page_url); |
| + Send(new DOMStorageHostMsg_AsyncOperationComplete(operation_id, true)); |
| +} |
| + |
| void DOMStorageMessageFilter::OnDomStorageItemSet( |
| const dom_storage::DomStorageArea* area, |
| const string16& key, |