OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/dom_storage/dom_storage_message_filter.h" | 5 #include "content/browser/dom_storage/dom_storage_message_filter.h" |
6 | 6 |
7 #include "base/auto_reset.h" | 7 #include "base/auto_reset.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/stringprintf.h" | |
9 #include "base/nullable_string16.h" | 10 #include "base/nullable_string16.h" |
10 #include "base/threading/sequenced_worker_pool.h" | 11 #include "base/threading/sequenced_worker_pool.h" |
11 #include "base/utf_string_conversions.h" | 12 #include "base/utf_string_conversions.h" |
12 #include "content/public/browser/user_metrics.h" | 13 #include "content/public/browser/user_metrics.h" |
13 #include "content/browser/dom_storage/dom_storage_context_impl.h" | 14 #include "content/browser/dom_storage/dom_storage_context_impl.h" |
14 #include "content/common/dom_storage_messages.h" | 15 #include "content/common/dom_storage_messages.h" |
15 #include "googleurl/src/gurl.h" | 16 #include "googleurl/src/gurl.h" |
16 #include "webkit/dom_storage/dom_storage_area.h" | 17 #include "webkit/dom_storage/dom_storage_area.h" |
17 #include "webkit/dom_storage/dom_storage_host.h" | 18 #include "webkit/dom_storage/dom_storage_host.h" |
18 #include "webkit/dom_storage/dom_storage_task_runner.h" | 19 #include "webkit/dom_storage/dom_storage_task_runner.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
88 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_RemoveItem, OnRemoveItem) | 89 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_RemoveItem, OnRemoveItem) |
89 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Clear, OnClear) | 90 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_Clear, OnClear) |
90 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_FlushMessages, OnFlushMessages) | 91 IPC_MESSAGE_HANDLER(DOMStorageHostMsg_FlushMessages, OnFlushMessages) |
91 IPC_MESSAGE_UNHANDLED(handled = false) | 92 IPC_MESSAGE_UNHANDLED(handled = false) |
92 IPC_END_MESSAGE_MAP() | 93 IPC_END_MESSAGE_MAP() |
93 return handled; | 94 return handled; |
94 } | 95 } |
95 | 96 |
96 void DOMStorageMessageFilter::OnOpenStorageArea(int connection_id, | 97 void DOMStorageMessageFilter::OnOpenStorageArea(int connection_id, |
97 int64 namespace_id, | 98 int64 namespace_id, |
98 const GURL& origin) { | 99 const GURL& origin, |
100 int64* storage_size) { | |
99 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); | 101 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
100 if (!host_->OpenStorageArea(connection_id, namespace_id, origin)) { | 102 if (!host_->OpenStorageArea(connection_id, namespace_id, origin)) { |
101 RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_1")); | 103 RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_1")); |
102 BadMessageReceived(); | 104 BadMessageReceived(); |
103 } | 105 } |
106 *storage_size = context_->GetInMemoryStorageSize(); | |
104 } | 107 } |
105 | 108 |
106 void DOMStorageMessageFilter::OnCloseStorageArea(int connection_id) { | 109 void DOMStorageMessageFilter::OnCloseStorageArea(int connection_id) { |
107 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); | 110 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
108 host_->CloseStorageArea(connection_id); | 111 host_->CloseStorageArea(connection_id); |
109 } | 112 } |
110 | 113 |
111 void DOMStorageMessageFilter::OnLoadStorageArea(int connection_id, | 114 void DOMStorageMessageFilter::OnLoadStorageArea(int connection_id, |
112 dom_storage::ValuesMap* map) { | 115 dom_storage::ValuesMap* map) { |
113 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); | 116 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
114 if (!host_->ExtractAreaValues(connection_id, map)) { | 117 if (!host_->ExtractAreaValues(connection_id, map)) { |
115 RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_2")); | 118 RecordAction(UserMetricsAction("BadMessageTerminate_DSMF_2")); |
116 BadMessageReceived(); | 119 BadMessageReceived(); |
117 } | 120 } |
118 Send(new DOMStorageMsg_AsyncOperationComplete(true)); | 121 Send(new DOMStorageMsg_AsyncOperationComplete(true)); |
119 } | 122 } |
120 | 123 |
121 void DOMStorageMessageFilter::OnSetItem( | 124 void DOMStorageMessageFilter::OnSetItem( |
122 int connection_id, const string16& key, | 125 int connection_id, const string16& key, |
123 const string16& value, const GURL& page_url) { | 126 const string16& value, const GURL& page_url) { |
124 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); | 127 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::IO)); |
125 DCHECK_EQ(0, connection_dispatching_message_for_); | 128 DCHECK_EQ(0, connection_dispatching_message_for_); |
michaeln
2013/03/05 00:04:46
Since there is an async code path for localstorage
kinuko
2013/03/06 06:20:15
Updated to use the async IPC.
| |
126 base::AutoReset<int> auto_reset(&connection_dispatching_message_for_, | 129 base::AutoReset<int> auto_reset(&connection_dispatching_message_for_, |
127 connection_id); | 130 connection_id); |
128 NullableString16 not_used; | 131 NullableString16 not_used; |
129 bool success = host_->SetAreaItem(connection_id, key, value, | 132 bool success = host_->SetAreaItem(connection_id, key, value, |
130 page_url, ¬_used); | 133 page_url, ¬_used); |
131 Send(new DOMStorageMsg_AsyncOperationComplete(success)); | 134 Send(new DOMStorageMsg_AsyncOperationComplete(success)); |
132 } | 135 } |
133 | 136 |
134 void DOMStorageMessageFilter::OnRemoveItem( | 137 void DOMStorageMessageFilter::OnRemoveItem( |
135 int connection_id, const string16& key, | 138 int connection_id, const string16& key, |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
201 if (originated_in_process || | 204 if (originated_in_process || |
202 host_->HasAreaOpen(area->namespace_id(), area->origin())) { | 205 host_->HasAreaOpen(area->namespace_id(), area->origin())) { |
203 DOMStorageMsg_Event_Params params; | 206 DOMStorageMsg_Event_Params params; |
204 params.origin = area->origin(); | 207 params.origin = area->origin(); |
205 params.page_url = page_url; | 208 params.page_url = page_url; |
206 params.connection_id = connection_dispatching_message_for_; | 209 params.connection_id = connection_dispatching_message_for_; |
207 params.key = key; | 210 params.key = key; |
208 params.new_value = new_value; | 211 params.new_value = new_value; |
209 params.old_value = old_value; | 212 params.old_value = old_value; |
210 params.namespace_id = area->namespace_id(); | 213 params.namespace_id = area->namespace_id(); |
214 params.storage_size = context_->GetInMemoryStorageSize(); | |
211 Send(new DOMStorageMsg_Event(params)); | 215 Send(new DOMStorageMsg_Event(params)); |
212 } | 216 } |
213 } | 217 } |
214 | 218 |
215 } // namespace content | 219 } // namespace content |
OLD | NEW |