| 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/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 21 matching lines...) Expand all Loading... |
| 32 // observes receipt of the acks on the IPC thread to decrement a counter. | 32 // observes receipt of the acks on the IPC thread to decrement a counter. |
| 33 class MessageThrottlingFilter : public IPC::MessageFilter { | 33 class MessageThrottlingFilter : public IPC::MessageFilter { |
| 34 public: | 34 public: |
| 35 explicit MessageThrottlingFilter(RenderThreadImpl* sender) | 35 explicit MessageThrottlingFilter(RenderThreadImpl* sender) |
| 36 : pending_count_(0), sender_(sender) {} | 36 : pending_count_(0), sender_(sender) {} |
| 37 | 37 |
| 38 void SendThrottled(IPC::Message* message); | 38 void SendThrottled(IPC::Message* message); |
| 39 void Shutdown() { sender_ = NULL; } | 39 void Shutdown() { sender_ = NULL; } |
| 40 | 40 |
| 41 private: | 41 private: |
| 42 virtual ~MessageThrottlingFilter() {} | 42 ~MessageThrottlingFilter() override {} |
| 43 | 43 |
| 44 virtual bool OnMessageReceived(const IPC::Message& message) override; | 44 bool OnMessageReceived(const IPC::Message& message) override; |
| 45 | 45 |
| 46 int GetPendingCount() { return IncrementPendingCountN(0); } | 46 int GetPendingCount() { return IncrementPendingCountN(0); } |
| 47 int IncrementPendingCount() { return IncrementPendingCountN(1); } | 47 int IncrementPendingCount() { return IncrementPendingCountN(1); } |
| 48 int DecrementPendingCount() { return IncrementPendingCountN(-1); } | 48 int DecrementPendingCount() { return IncrementPendingCountN(-1); } |
| 49 int IncrementPendingCountN(int increment) { | 49 int IncrementPendingCountN(int increment) { |
| 50 base::AutoLock locker(lock_); | 50 base::AutoLock locker(lock_); |
| 51 pending_count_ += increment; | 51 pending_count_ += increment; |
| 52 return pending_count_; | 52 return pending_count_; |
| 53 } | 53 } |
| 54 | 54 |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 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); | 107 void ResetAllCachedAreas(int64 namespace_id); |
| 108 void CompleteOnePendingCallback(bool success); | 108 void CompleteOnePendingCallback(bool success); |
| 109 void Shutdown(); | 109 void Shutdown(); |
| 110 | 110 |
| 111 // DOMStorageProxy interface for use by DOMStorageCachedArea. | 111 // DOMStorageProxy interface for use by DOMStorageCachedArea. |
| 112 virtual void LoadArea(int connection_id, DOMStorageValuesMap* values, | 112 void LoadArea(int connection_id, |
| 113 bool* send_log_get_messages, | 113 DOMStorageValuesMap* values, |
| 114 const CompletionCallback& callback) override; | 114 bool* send_log_get_messages, |
| 115 virtual void SetItem(int connection_id, const base::string16& key, | 115 const CompletionCallback& callback) override; |
| 116 const base::string16& value, const GURL& page_url, | 116 void SetItem(int connection_id, |
| 117 const CompletionCallback& callback) override; | 117 const base::string16& key, |
| 118 virtual void LogGetItem(int connection_id, const base::string16& key, | 118 const base::string16& value, |
| 119 const base::NullableString16& value) override; | 119 const GURL& page_url, |
| 120 virtual void RemoveItem(int connection_id, const base::string16& key, | 120 const CompletionCallback& callback) override; |
| 121 const GURL& page_url, | 121 void LogGetItem(int connection_id, |
| 122 const CompletionCallback& callback) override; | 122 const base::string16& key, |
| 123 virtual void ClearArea(int connection_id, | 123 const base::NullableString16& value) override; |
| 124 const GURL& page_url, | 124 void RemoveItem(int connection_id, |
| 125 const CompletionCallback& callback) override; | 125 const base::string16& key, |
| 126 const GURL& page_url, |
| 127 const CompletionCallback& callback) override; |
| 128 void ClearArea(int connection_id, |
| 129 const GURL& page_url, |
| 130 const CompletionCallback& callback) override; |
| 126 | 131 |
| 127 private: | 132 private: |
| 128 // Struct to hold references to our contained areas and | 133 // Struct to hold references to our contained areas and |
| 129 // to keep track of how many tabs have a given area open. | 134 // to keep track of how many tabs have a given area open. |
| 130 struct CachedAreaHolder { | 135 struct CachedAreaHolder { |
| 131 scoped_refptr<DOMStorageCachedArea> area_; | 136 scoped_refptr<DOMStorageCachedArea> area_; |
| 132 int open_count_; | 137 int open_count_; |
| 133 int64 namespace_id_; | 138 int64 namespace_id_; |
| 134 CachedAreaHolder() : open_count_(0) {} | 139 CachedAreaHolder() : open_count_(0) {} |
| 135 CachedAreaHolder(DOMStorageCachedArea* area, int count, | 140 CachedAreaHolder(DOMStorageCachedArea* area, int count, |
| 136 int64 namespace_id) | 141 int64 namespace_id) |
| 137 : area_(area), open_count_(count), namespace_id_(namespace_id) {} | 142 : area_(area), open_count_(count), namespace_id_(namespace_id) {} |
| 138 }; | 143 }; |
| 139 typedef std::map<std::string, CachedAreaHolder> CachedAreaMap; | 144 typedef std::map<std::string, CachedAreaHolder> CachedAreaMap; |
| 140 typedef std::list<CompletionCallback> CallbackList; | 145 typedef std::list<CompletionCallback> CallbackList; |
| 141 | 146 |
| 142 virtual ~ProxyImpl() { | 147 ~ProxyImpl() override {} |
| 143 } | |
| 144 | 148 |
| 145 // Sudden termination is disabled when there are callbacks pending | 149 // Sudden termination is disabled when there are callbacks pending |
| 146 // to more reliably commit changes during shutdown. | 150 // to more reliably commit changes during shutdown. |
| 147 void PushPendingCallback(const CompletionCallback& callback) { | 151 void PushPendingCallback(const CompletionCallback& callback) { |
| 148 if (pending_callbacks_.empty()) | 152 if (pending_callbacks_.empty()) |
| 149 blink::Platform::current()->suddenTerminationChanged(false); | 153 blink::Platform::current()->suddenTerminationChanged(false); |
| 150 pending_callbacks_.push_back(callback); | 154 pending_callbacks_.push_back(callback); |
| 151 } | 155 } |
| 152 | 156 |
| 153 CompletionCallback PopPendingCallback() { | 157 CompletionCallback PopPendingCallback() { |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 | 359 |
| 356 void DomStorageDispatcher::OnAsyncOperationComplete(bool success) { | 360 void DomStorageDispatcher::OnAsyncOperationComplete(bool success) { |
| 357 proxy_->CompleteOnePendingCallback(success); | 361 proxy_->CompleteOnePendingCallback(success); |
| 358 } | 362 } |
| 359 | 363 |
| 360 void DomStorageDispatcher::OnResetCachedValues(int64 namespace_id) { | 364 void DomStorageDispatcher::OnResetCachedValues(int64 namespace_id) { |
| 361 proxy_->ResetAllCachedAreas(namespace_id); | 365 proxy_->ResetAllCachedAreas(namespace_id); |
| 362 } | 366 } |
| 363 | 367 |
| 364 } // namespace content | 368 } // namespace content |
| OLD | NEW |