1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ 6 #define WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ 7 8 #include <set> 9 10 #include "base/basictypes.h" 11 #include "base/compiler_specific.h" 12 #include "base/memory/ref_counted.h" 13 #include "base/sequenced_task_runner_helpers.h" 14 #include "webkit/browser/webkit_storage_browser_export.h" 15 16 namespace base { 17 class SingleThreadTaskRunner; 18 class TaskRunner; 19 } 20 21 namespace quota { 22 23 class QuotaTaskObserver; 24 25 // A base class for quota tasks. 26 // TODO(kinuko): Revise this using base::Callback. 27 class QuotaTask { 28 public: 29 void Start(); 30 31 protected: 32 explicit QuotaTask(QuotaTaskObserver* observer); 33 virtual ~QuotaTask(); 34 35 // The task body. 36 virtual void Run() = 0; 37 38 // Called upon completion, on the original message loop. 39 virtual void Completed() = 0; 40 41 // Called when the task is aborted. Aborted()42 virtual void Aborted() {} 43 44 void CallCompleted(); 45 46 // Call this to delete itself. 47 void DeleteSoon(); 48 observer()49 QuotaTaskObserver* observer() const { return observer_; } original_task_runner()50 base::SingleThreadTaskRunner* original_task_runner() const { 51 return original_task_runner_.get(); 52 } 53 54 private: 55 friend class base::DeleteHelper<QuotaTask>; 56 friend class QuotaTaskObserver; 57 58 void Abort(); 59 QuotaTaskObserver* observer_; 60 scoped_refptr<base::SingleThreadTaskRunner> original_task_runner_; 61 bool delete_scheduled_; 62 }; 63 64 class WEBKIT_STORAGE_BROWSER_EXPORT QuotaTaskObserver { 65 protected: 66 friend class QuotaTask; 67 68 QuotaTaskObserver(); 69 virtual ~QuotaTaskObserver(); 70 71 void RegisterTask(QuotaTask* task); 72 void UnregisterTask(QuotaTask* task); 73 74 typedef std::set<QuotaTask*> TaskSet; 75 TaskSet running_quota_tasks_; 76 }; 77 } 78 79 #endif // WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ 80