| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "webkit/database/database_quota_client.h" | 5 #include "webkit/database/database_quota_client.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/location.h" | 9 #include "base/location.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 130 std::string host_; | 130 std::string host_; |
| 131 quota::StorageType type_; | 131 quota::StorageType type_; |
| 132 }; | 132 }; |
| 133 | 133 |
| 134 class DatabaseQuotaClient::DeleteOriginTask : public HelperTask { | 134 class DatabaseQuotaClient::DeleteOriginTask : public HelperTask { |
| 135 public: | 135 public: |
| 136 DeleteOriginTask( | 136 DeleteOriginTask( |
| 137 DatabaseQuotaClient* client, | 137 DatabaseQuotaClient* client, |
| 138 base::MessageLoopProxy* db_tracker_thread, | 138 base::MessageLoopProxy* db_tracker_thread, |
| 139 const GURL& origin_url, | 139 const GURL& origin_url, |
| 140 DeletionCallback* caller_callback) | 140 const DeletionCallback& caller_callback) |
| 141 : HelperTask(client, db_tracker_thread), | 141 : HelperTask(client, db_tracker_thread), |
| 142 origin_url_(origin_url), | 142 origin_url_(origin_url), |
| 143 result_(quota::kQuotaStatusUnknown), | 143 result_(quota::kQuotaStatusUnknown), |
| 144 caller_callback_(caller_callback), | 144 caller_callback_(caller_callback), |
| 145 ALLOW_THIS_IN_INITIALIZER_LIST(completion_callback_( | 145 ALLOW_THIS_IN_INITIALIZER_LIST(completion_callback_( |
| 146 this, &DeleteOriginTask::OnOldCompletionCallback)) { | 146 this, &DeleteOriginTask::OnOldCompletionCallback)) { |
| 147 } | 147 } |
| 148 | 148 |
| 149 private: | 149 private: |
| 150 virtual void Completed() OVERRIDE { | 150 virtual void Completed() OVERRIDE { |
| 151 if (!caller_callback_.get()) | 151 if (caller_callback_.is_null()) |
| 152 return; | 152 return; |
| 153 caller_callback_->Run(result_); | 153 caller_callback_.Run(result_); |
| 154 caller_callback_.reset(); | 154 caller_callback_.Reset(); |
| 155 } | 155 } |
| 156 | 156 |
| 157 virtual void Aborted() OVERRIDE { | 157 virtual void Aborted() OVERRIDE { |
| 158 caller_callback_.reset(); | 158 caller_callback_.Reset(); |
| 159 } | 159 } |
| 160 | 160 |
| 161 virtual bool RunOnTargetThreadAsync() OVERRIDE { | 161 virtual bool RunOnTargetThreadAsync() OVERRIDE { |
| 162 AddRef(); // balanced in OnOldCompletionCallback | 162 AddRef(); // balanced in OnOldCompletionCallback |
| 163 string16 origin_id = DatabaseUtil::GetOriginIdentifier(origin_url_); | 163 string16 origin_id = DatabaseUtil::GetOriginIdentifier(origin_url_); |
| 164 int rv = db_tracker_->DeleteDataForOrigin(origin_id, &completion_callback_); | 164 int rv = db_tracker_->DeleteDataForOrigin(origin_id, &completion_callback_); |
| 165 if (rv == net::ERR_IO_PENDING) | 165 if (rv == net::ERR_IO_PENDING) |
| 166 return false; // we wait for the callback | 166 return false; // we wait for the callback |
| 167 OnOldCompletionCallback(rv); | 167 OnOldCompletionCallback(rv); |
| 168 return false; | 168 return false; |
| 169 } | 169 } |
| 170 | 170 |
| 171 void OnOldCompletionCallback(int rv) { | 171 void OnOldCompletionCallback(int rv) { |
| 172 if (rv == net::OK) | 172 if (rv == net::OK) |
| 173 result_ = quota::kQuotaStatusOk; | 173 result_ = quota::kQuotaStatusOk; |
| 174 original_message_loop()->PostTask( | 174 original_message_loop()->PostTask( |
| 175 FROM_HERE, NewRunnableMethod(this, &DeleteOriginTask::CallCompleted)); | 175 FROM_HERE, NewRunnableMethod(this, &DeleteOriginTask::CallCompleted)); |
| 176 Release(); // balanced in RunOnTargetThreadAsync | 176 Release(); // balanced in RunOnTargetThreadAsync |
| 177 } | 177 } |
| 178 | 178 |
| 179 const GURL origin_url_; | 179 const GURL origin_url_; |
| 180 quota::QuotaStatusCode result_; | 180 quota::QuotaStatusCode result_; |
| 181 scoped_ptr<DeletionCallback> caller_callback_; | 181 DeletionCallback caller_callback_; |
| 182 net::OldCompletionCallbackImpl<DeleteOriginTask> completion_callback_; | 182 net::OldCompletionCallbackImpl<DeleteOriginTask> completion_callback_; |
| 183 }; | 183 }; |
| 184 | 184 |
| 185 // DatabaseQuotaClient -------------------------------------------------------- | 185 // DatabaseQuotaClient -------------------------------------------------------- |
| 186 | 186 |
| 187 DatabaseQuotaClient::DatabaseQuotaClient( | 187 DatabaseQuotaClient::DatabaseQuotaClient( |
| 188 base::MessageLoopProxy* db_tracker_thread, | 188 base::MessageLoopProxy* db_tracker_thread, |
| 189 DatabaseTracker* db_tracker) | 189 DatabaseTracker* db_tracker) |
| 190 : db_tracker_thread_(db_tracker_thread), db_tracker_(db_tracker) { | 190 : db_tracker_thread_(db_tracker_thread), db_tracker_(db_tracker) { |
| 191 } | 191 } |
| 192 | 192 |
| 193 DatabaseQuotaClient::~DatabaseQuotaClient() { | 193 DatabaseQuotaClient::~DatabaseQuotaClient() { |
| 194 } | 194 } |
| 195 | 195 |
| 196 QuotaClient::ID DatabaseQuotaClient::id() const { | 196 QuotaClient::ID DatabaseQuotaClient::id() const { |
| 197 return kDatabase; | 197 return kDatabase; |
| 198 } | 198 } |
| 199 | 199 |
| 200 void DatabaseQuotaClient::OnQuotaManagerDestroyed() { | 200 void DatabaseQuotaClient::OnQuotaManagerDestroyed() { |
| 201 delete this; | 201 delete this; |
| 202 } | 202 } |
| 203 | 203 |
| 204 void DatabaseQuotaClient::GetOriginUsage( | 204 void DatabaseQuotaClient::GetOriginUsage( |
| 205 const GURL& origin_url, | 205 const GURL& origin_url, |
| 206 quota::StorageType type, | 206 quota::StorageType type, |
| 207 GetUsageCallback* callback_ptr) { | 207 const GetUsageCallback& callback) { |
| 208 DCHECK(callback_ptr); | 208 DCHECK(!callback.is_null()); |
| 209 DCHECK(db_tracker_.get()); | 209 DCHECK(db_tracker_.get()); |
| 210 scoped_ptr<GetUsageCallback> callback(callback_ptr); | |
| 211 | 210 |
| 212 // All databases are in the temp namespace for now. | 211 // All databases are in the temp namespace for now. |
| 213 if (type != quota::kStorageTypeTemporary) { | 212 if (type != quota::kStorageTypeTemporary) { |
| 214 callback->Run(0); | 213 callback.Run(0); |
| 215 return; | 214 return; |
| 216 } | 215 } |
| 217 | 216 |
| 218 if (usage_for_origin_callbacks_.Add(origin_url, callback.release())) { | 217 if (usage_for_origin_callbacks_.Add(origin_url, callback)) { |
| 219 scoped_refptr<GetOriginUsageTask> task( | 218 scoped_refptr<GetOriginUsageTask> task( |
| 220 new GetOriginUsageTask(this, db_tracker_thread_, origin_url)); | 219 new GetOriginUsageTask(this, db_tracker_thread_, origin_url)); |
| 221 task->Start(); | 220 task->Start(); |
| 222 } | 221 } |
| 223 } | 222 } |
| 224 | 223 |
| 225 void DatabaseQuotaClient::GetOriginsForType( | 224 void DatabaseQuotaClient::GetOriginsForType( |
| 226 quota::StorageType type, | 225 quota::StorageType type, |
| 227 GetOriginsCallback* callback_ptr) { | 226 const GetOriginsCallback& callback) { |
| 228 DCHECK(callback_ptr); | 227 DCHECK(!callback.is_null()); |
| 229 DCHECK(db_tracker_.get()); | 228 DCHECK(db_tracker_.get()); |
| 230 scoped_ptr<GetOriginsCallback> callback(callback_ptr); | |
| 231 | 229 |
| 232 // All databases are in the temp namespace for now. | 230 // All databases are in the temp namespace for now. |
| 233 if (type != quota::kStorageTypeTemporary) { | 231 if (type != quota::kStorageTypeTemporary) { |
| 234 callback->Run(std::set<GURL>(), type); | 232 callback.Run(std::set<GURL>(), type); |
| 235 return; | 233 return; |
| 236 } | 234 } |
| 237 | 235 |
| 238 if (origins_for_type_callbacks_.Add(callback.release())) { | 236 if (origins_for_type_callbacks_.Add(callback)) { |
| 239 scoped_refptr<GetAllOriginsTask> task( | 237 scoped_refptr<GetAllOriginsTask> task( |
| 240 new GetAllOriginsTask(this, db_tracker_thread_, type)); | 238 new GetAllOriginsTask(this, db_tracker_thread_, type)); |
| 241 task->Start(); | 239 task->Start(); |
| 242 } | 240 } |
| 243 } | 241 } |
| 244 | 242 |
| 245 void DatabaseQuotaClient::GetOriginsForHost( | 243 void DatabaseQuotaClient::GetOriginsForHost( |
| 246 quota::StorageType type, | 244 quota::StorageType type, |
| 247 const std::string& host, | 245 const std::string& host, |
| 248 GetOriginsCallback* callback_ptr) { | 246 const GetOriginsCallback& callback) { |
| 249 DCHECK(callback_ptr); | 247 DCHECK(!callback.is_null()); |
| 250 DCHECK(db_tracker_.get()); | 248 DCHECK(db_tracker_.get()); |
| 251 scoped_ptr<GetOriginsCallback> callback(callback_ptr); | |
| 252 | 249 |
| 253 // All databases are in the temp namespace for now. | 250 // All databases are in the temp namespace for now. |
| 254 if (type != quota::kStorageTypeTemporary) { | 251 if (type != quota::kStorageTypeTemporary) { |
| 255 callback->Run(std::set<GURL>(), type); | 252 callback.Run(std::set<GURL>(), type); |
| 256 return; | 253 return; |
| 257 } | 254 } |
| 258 | 255 |
| 259 if (origins_for_host_callbacks_.Add(host, callback.release())) { | 256 if (origins_for_host_callbacks_.Add(host, callback)) { |
| 260 scoped_refptr<GetOriginsForHostTask> task( | 257 scoped_refptr<GetOriginsForHostTask> task( |
| 261 new GetOriginsForHostTask(this, db_tracker_thread_, host, type)); | 258 new GetOriginsForHostTask(this, db_tracker_thread_, host, type)); |
| 262 task->Start(); | 259 task->Start(); |
| 263 } | 260 } |
| 264 } | 261 } |
| 265 | 262 |
| 266 void DatabaseQuotaClient::DeleteOriginData(const GURL& origin, | 263 void DatabaseQuotaClient::DeleteOriginData(const GURL& origin, |
| 267 quota::StorageType type, | 264 quota::StorageType type, |
| 268 DeletionCallback* callback_ptr) { | 265 const DeletionCallback& callback) { |
| 269 DCHECK(callback_ptr); | 266 DCHECK(!callback.is_null()); |
| 270 DCHECK(db_tracker_.get()); | 267 DCHECK(db_tracker_.get()); |
| 271 scoped_ptr<DeletionCallback> callback(callback_ptr); | |
| 272 | 268 |
| 273 // All databases are in the temp namespace for now, so nothing to delete. | 269 // All databases are in the temp namespace for now, so nothing to delete. |
| 274 if (type != quota::kStorageTypeTemporary) { | 270 if (type != quota::kStorageTypeTemporary) { |
| 275 callback->Run(quota::kQuotaStatusOk); | 271 callback.Run(quota::kQuotaStatusOk); |
| 276 return; | 272 return; |
| 277 } | 273 } |
| 278 | 274 |
| 279 scoped_refptr<DeleteOriginTask> task( | 275 scoped_refptr<DeleteOriginTask> task( |
| 280 new DeleteOriginTask(this, db_tracker_thread_, | 276 new DeleteOriginTask(this, db_tracker_thread_, |
| 281 origin, callback.release())); | 277 origin, callback)); |
| 282 task->Start(); | 278 task->Start(); |
| 283 } | 279 } |
| 284 | 280 |
| 285 void DatabaseQuotaClient::DidGetOriginUsage( | 281 void DatabaseQuotaClient::DidGetOriginUsage( |
| 286 const GURL& origin_url, int64 usage) { | 282 const GURL& origin_url, int64 usage) { |
| 287 DCHECK(usage_for_origin_callbacks_.HasCallbacks(origin_url)); | 283 DCHECK(usage_for_origin_callbacks_.HasCallbacks(origin_url)); |
| 288 usage_for_origin_callbacks_.Run(origin_url, usage); | 284 usage_for_origin_callbacks_.Run(origin_url, usage); |
| 289 } | 285 } |
| 290 | 286 |
| 291 void DatabaseQuotaClient::DidGetAllOrigins(const std::set<GURL>& origins, | 287 void DatabaseQuotaClient::DidGetAllOrigins(const std::set<GURL>& origins, |
| 292 quota::StorageType type) { | 288 quota::StorageType type) { |
| 293 DCHECK(origins_for_type_callbacks_.HasCallbacks()); | 289 DCHECK(origins_for_type_callbacks_.HasCallbacks()); |
| 294 origins_for_type_callbacks_.Run(origins, type); | 290 origins_for_type_callbacks_.Run(origins, type); |
| 295 } | 291 } |
| 296 | 292 |
| 297 void DatabaseQuotaClient::DidGetOriginsForHost( | 293 void DatabaseQuotaClient::DidGetOriginsForHost( |
| 298 const std::string& host, const std::set<GURL>& origins, | 294 const std::string& host, const std::set<GURL>& origins, |
| 299 quota::StorageType type) { | 295 quota::StorageType type) { |
| 300 DCHECK(origins_for_host_callbacks_.HasCallbacks(host)); | 296 DCHECK(origins_for_host_callbacks_.HasCallbacks(host)); |
| 301 origins_for_host_callbacks_.Run(host, origins, type); | 297 origins_for_host_callbacks_.Run(host, origins, type); |
| 302 } | 298 } |
| 303 | 299 |
| 304 } // namespace webkit_database | 300 } // namespace webkit_database |
| OLD | NEW |