Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(273)

Side by Side Diff: content/renderer/dom_storage/dom_storage_dispatcher.cc

Issue 757723002: [Tests not passing yet] Remove prerender sessionStorage namespace merging. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/renderer/dom_storage/dom_storage_dispatcher.h" 5 #include "content/renderer/dom_storage/dom_storage_dispatcher.h"
6 6
7 #include <list> 7 #include <list>
8 #include <map> 8 #include <map>
9 9
10 #include "base/strings/string_number_conversions.h" 10 #include "base/strings/string_number_conversions.h"
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 class DomStorageDispatcher::ProxyImpl : public DOMStorageProxy { 97 class DomStorageDispatcher::ProxyImpl : public DOMStorageProxy {
98 public: 98 public:
99 explicit ProxyImpl(RenderThreadImpl* sender); 99 explicit ProxyImpl(RenderThreadImpl* sender);
100 100
101 // Methods for use by DomStorageDispatcher directly. 101 // Methods for use by DomStorageDispatcher directly.
102 DOMStorageCachedArea* OpenCachedArea( 102 DOMStorageCachedArea* OpenCachedArea(
103 int64 namespace_id, const GURL& origin); 103 int64 namespace_id, const GURL& origin);
104 void CloseCachedArea(DOMStorageCachedArea* area); 104 void CloseCachedArea(DOMStorageCachedArea* area);
105 DOMStorageCachedArea* LookupCachedArea( 105 DOMStorageCachedArea* LookupCachedArea(
106 int64 namespace_id, const GURL& origin); 106 int64 namespace_id, const GURL& origin);
107 void ResetAllCachedAreas(int64 namespace_id);
108 void CompleteOnePendingCallback(bool success); 107 void CompleteOnePendingCallback(bool success);
109 void Shutdown(); 108 void Shutdown();
110 109
111 // DOMStorageProxy interface for use by DOMStorageCachedArea. 110 // DOMStorageProxy interface for use by DOMStorageCachedArea.
112 void LoadArea(int connection_id, 111 void LoadArea(int connection_id,
113 DOMStorageValuesMap* values, 112 DOMStorageValuesMap* values,
114 bool* send_log_get_messages,
115 const CompletionCallback& callback) override; 113 const CompletionCallback& callback) override;
116 void SetItem(int connection_id, 114 void SetItem(int connection_id,
117 const base::string16& key, 115 const base::string16& key,
118 const base::string16& value, 116 const base::string16& value,
119 const GURL& page_url, 117 const GURL& page_url,
120 const CompletionCallback& callback) override; 118 const CompletionCallback& callback) override;
121 void LogGetItem(int connection_id,
122 const base::string16& key,
123 const base::NullableString16& value) override;
124 void RemoveItem(int connection_id, 119 void RemoveItem(int connection_id,
125 const base::string16& key, 120 const base::string16& key,
126 const GURL& page_url, 121 const GURL& page_url,
127 const CompletionCallback& callback) override; 122 const CompletionCallback& callback) override;
128 void ClearArea(int connection_id, 123 void ClearArea(int connection_id,
129 const GURL& page_url, 124 const GURL& page_url,
130 const CompletionCallback& callback) override; 125 const CompletionCallback& callback) override;
131 126
132 private: 127 private:
133 // Struct to hold references to our contained areas and 128 // Struct to hold references to our contained areas and
134 // to keep track of how many tabs have a given area open. 129 // to keep track of how many tabs have a given area open.
135 struct CachedAreaHolder { 130 struct CachedAreaHolder {
136 scoped_refptr<DOMStorageCachedArea> area_; 131 scoped_refptr<DOMStorageCachedArea> area_;
137 int open_count_; 132 int open_count_;
138 int64 namespace_id_;
139 CachedAreaHolder() : open_count_(0) {} 133 CachedAreaHolder() : open_count_(0) {}
140 CachedAreaHolder(DOMStorageCachedArea* area, int count, 134 CachedAreaHolder(DOMStorageCachedArea* area, int count)
141 int64 namespace_id) 135 : area_(area), open_count_(count) {}
142 : area_(area), open_count_(count), namespace_id_(namespace_id) {}
143 }; 136 };
144 typedef std::map<std::string, CachedAreaHolder> CachedAreaMap; 137 typedef std::map<std::string, CachedAreaHolder> CachedAreaMap;
145 typedef std::list<CompletionCallback> CallbackList; 138 typedef std::list<CompletionCallback> CallbackList;
146 139
147 ~ProxyImpl() override {} 140 ~ProxyImpl() override {}
148 141
149 // Sudden termination is disabled when there are callbacks pending 142 // Sudden termination is disabled when there are callbacks pending
150 // to more reliably commit changes during shutdown. 143 // to more reliably commit changes during shutdown.
151 void PushPendingCallback(const CompletionCallback& callback) { 144 void PushPendingCallback(const CompletionCallback& callback) {
152 if (pending_callbacks_.empty()) 145 if (pending_callbacks_.empty())
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 180
188 DOMStorageCachedArea* DomStorageDispatcher::ProxyImpl::OpenCachedArea( 181 DOMStorageCachedArea* DomStorageDispatcher::ProxyImpl::OpenCachedArea(
189 int64 namespace_id, const GURL& origin) { 182 int64 namespace_id, const GURL& origin) {
190 std::string key = GetCachedAreaKey(namespace_id, origin); 183 std::string key = GetCachedAreaKey(namespace_id, origin);
191 if (CachedAreaHolder* holder = GetAreaHolder(key)) { 184 if (CachedAreaHolder* holder = GetAreaHolder(key)) {
192 ++(holder->open_count_); 185 ++(holder->open_count_);
193 return holder->area_.get(); 186 return holder->area_.get();
194 } 187 }
195 scoped_refptr<DOMStorageCachedArea> area = 188 scoped_refptr<DOMStorageCachedArea> area =
196 new DOMStorageCachedArea(namespace_id, origin, this); 189 new DOMStorageCachedArea(namespace_id, origin, this);
197 cached_areas_[key] = CachedAreaHolder(area.get(), 1, namespace_id); 190 cached_areas_[key] = CachedAreaHolder(area.get(), 1);
198 return area.get(); 191 return area.get();
199 } 192 }
200 193
201 void DomStorageDispatcher::ProxyImpl::CloseCachedArea( 194 void DomStorageDispatcher::ProxyImpl::CloseCachedArea(
202 DOMStorageCachedArea* area) { 195 DOMStorageCachedArea* area) {
203 std::string key = GetCachedAreaKey(area->namespace_id(), area->origin()); 196 std::string key = GetCachedAreaKey(area->namespace_id(), area->origin());
204 CachedAreaHolder* holder = GetAreaHolder(key); 197 CachedAreaHolder* holder = GetAreaHolder(key);
205 DCHECK(holder); 198 DCHECK(holder);
206 DCHECK_EQ(holder->area_.get(), area); 199 DCHECK_EQ(holder->area_.get(), area);
207 DCHECK_GT(holder->open_count_, 0); 200 DCHECK_GT(holder->open_count_, 0);
208 if (--(holder->open_count_) == 0) { 201 if (--(holder->open_count_) == 0) {
209 cached_areas_.erase(key); 202 cached_areas_.erase(key);
210 } 203 }
211 } 204 }
212 205
213 DOMStorageCachedArea* DomStorageDispatcher::ProxyImpl::LookupCachedArea( 206 DOMStorageCachedArea* DomStorageDispatcher::ProxyImpl::LookupCachedArea(
214 int64 namespace_id, const GURL& origin) { 207 int64 namespace_id, const GURL& origin) {
215 std::string key = GetCachedAreaKey(namespace_id, origin); 208 std::string key = GetCachedAreaKey(namespace_id, origin);
216 CachedAreaHolder* holder = GetAreaHolder(key); 209 CachedAreaHolder* holder = GetAreaHolder(key);
217 if (!holder) 210 if (!holder)
218 return NULL; 211 return NULL;
219 return holder->area_.get(); 212 return holder->area_.get();
220 } 213 }
221 214
222 void DomStorageDispatcher::ProxyImpl::ResetAllCachedAreas(int64 namespace_id) {
223 for (CachedAreaMap::iterator it = cached_areas_.begin();
224 it != cached_areas_.end();
225 ++it) {
226 if (it->second.namespace_id_ == namespace_id)
227 it->second.area_->Reset();
228 }
229 }
230
231 void DomStorageDispatcher::ProxyImpl::CompleteOnePendingCallback(bool success) { 215 void DomStorageDispatcher::ProxyImpl::CompleteOnePendingCallback(bool success) {
232 PopPendingCallback().Run(success); 216 PopPendingCallback().Run(success);
233 } 217 }
234 218
235 void DomStorageDispatcher::ProxyImpl::Shutdown() { 219 void DomStorageDispatcher::ProxyImpl::Shutdown() {
236 throttling_filter_->Shutdown(); 220 throttling_filter_->Shutdown();
237 sender_->RemoveFilter(throttling_filter_.get()); 221 sender_->RemoveFilter(throttling_filter_.get());
238 sender_ = NULL; 222 sender_ = NULL;
239 cached_areas_.clear(); 223 cached_areas_.clear();
240 pending_callbacks_.clear(); 224 pending_callbacks_.clear();
241 } 225 }
242 226
243 void DomStorageDispatcher::ProxyImpl::LoadArea( 227 void DomStorageDispatcher::ProxyImpl::LoadArea(
244 int connection_id, DOMStorageValuesMap* values, bool* send_log_get_messages, 228 int connection_id, DOMStorageValuesMap* values,
245 const CompletionCallback& callback) { 229 const CompletionCallback& callback) {
246 PushPendingCallback(callback); 230 PushPendingCallback(callback);
247 throttling_filter_->SendThrottled(new DOMStorageHostMsg_LoadStorageArea( 231 throttling_filter_->SendThrottled(new DOMStorageHostMsg_LoadStorageArea(
248 connection_id, values, send_log_get_messages)); 232 connection_id, values));
249 } 233 }
250 234
251 void DomStorageDispatcher::ProxyImpl::SetItem( 235 void DomStorageDispatcher::ProxyImpl::SetItem(
252 int connection_id, const base::string16& key, 236 int connection_id, const base::string16& key,
253 const base::string16& value, const GURL& page_url, 237 const base::string16& value, const GURL& page_url,
254 const CompletionCallback& callback) { 238 const CompletionCallback& callback) {
255 PushPendingCallback(callback); 239 PushPendingCallback(callback);
256 throttling_filter_->SendThrottled(new DOMStorageHostMsg_SetItem( 240 throttling_filter_->SendThrottled(new DOMStorageHostMsg_SetItem(
257 connection_id, key, value, page_url)); 241 connection_id, key, value, page_url));
258 } 242 }
259 243
260 void DomStorageDispatcher::ProxyImpl::LogGetItem(
261 int connection_id, const base::string16& key,
262 const base::NullableString16& value) {
263 sender_->Send(new DOMStorageHostMsg_LogGetItem(connection_id, key, value));
264 }
265
266 void DomStorageDispatcher::ProxyImpl::RemoveItem( 244 void DomStorageDispatcher::ProxyImpl::RemoveItem(
267 int connection_id, const base::string16& key, const GURL& page_url, 245 int connection_id, const base::string16& key, const GURL& page_url,
268 const CompletionCallback& callback) { 246 const CompletionCallback& callback) {
269 PushPendingCallback(callback); 247 PushPendingCallback(callback);
270 throttling_filter_->SendThrottled(new DOMStorageHostMsg_RemoveItem( 248 throttling_filter_->SendThrottled(new DOMStorageHostMsg_RemoveItem(
271 connection_id, key, page_url)); 249 connection_id, key, page_url));
272 } 250 }
273 251
274 void DomStorageDispatcher::ProxyImpl::ClearArea(int connection_id, 252 void DomStorageDispatcher::ProxyImpl::ClearArea(int connection_id,
275 const GURL& page_url, 253 const GURL& page_url,
(...skipping 27 matching lines...) Expand all
303 new DOMStorageHostMsg_CloseStorageArea(connection_id)); 281 new DOMStorageHostMsg_CloseStorageArea(connection_id));
304 proxy_->CloseCachedArea(area); 282 proxy_->CloseCachedArea(area);
305 } 283 }
306 284
307 bool DomStorageDispatcher::OnMessageReceived(const IPC::Message& msg) { 285 bool DomStorageDispatcher::OnMessageReceived(const IPC::Message& msg) {
308 bool handled = true; 286 bool handled = true;
309 IPC_BEGIN_MESSAGE_MAP(DomStorageDispatcher, msg) 287 IPC_BEGIN_MESSAGE_MAP(DomStorageDispatcher, msg)
310 IPC_MESSAGE_HANDLER(DOMStorageMsg_Event, OnStorageEvent) 288 IPC_MESSAGE_HANDLER(DOMStorageMsg_Event, OnStorageEvent)
311 IPC_MESSAGE_HANDLER(DOMStorageMsg_AsyncOperationComplete, 289 IPC_MESSAGE_HANDLER(DOMStorageMsg_AsyncOperationComplete,
312 OnAsyncOperationComplete) 290 OnAsyncOperationComplete)
313 IPC_MESSAGE_HANDLER(DOMStorageMsg_ResetCachedValues,
314 OnResetCachedValues)
315 IPC_MESSAGE_UNHANDLED(handled = false) 291 IPC_MESSAGE_UNHANDLED(handled = false)
316 IPC_END_MESSAGE_MAP() 292 IPC_END_MESSAGE_MAP()
317 return handled; 293 return handled;
318 } 294 }
319 295
320 void DomStorageDispatcher::OnStorageEvent( 296 void DomStorageDispatcher::OnStorageEvent(
321 const DOMStorageMsg_Event_Params& params) { 297 const DOMStorageMsg_Event_Params& params) {
322 RenderThreadImpl::current()->EnsureWebKitInitialized(); 298 RenderThreadImpl::current()->EnsureWebKitInitialized();
323 299
324 bool originated_in_process = params.connection_id != 0; 300 bool originated_in_process = params.connection_id != 0;
(...skipping 29 matching lines...) Expand all
354 session_namespace_for_event_dispatch, 330 session_namespace_for_event_dispatch,
355 originating_area, 331 originating_area,
356 originated_in_process); 332 originated_in_process);
357 } 333 }
358 } 334 }
359 335
360 void DomStorageDispatcher::OnAsyncOperationComplete(bool success) { 336 void DomStorageDispatcher::OnAsyncOperationComplete(bool success) {
361 proxy_->CompleteOnePendingCallback(success); 337 proxy_->CompleteOnePendingCallback(success);
362 } 338 }
363 339
364 void DomStorageDispatcher::OnResetCachedValues(int64 namespace_id) {
365 proxy_->ResetAllCachedAreas(namespace_id);
366 }
367
368 } // namespace content 340 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/dom_storage/dom_storage_dispatcher.h ('k') | content/renderer/dom_storage/dom_storage_proxy.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698