| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ |
| #define WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ |
| |
| #include <set> |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "base/memory/ref_counted.h" |
| #include "base/sequenced_task_runner_helpers.h" |
| #include "webkit/browser/webkit_storage_browser_export.h" |
| |
| namespace base { |
| class SingleThreadTaskRunner; |
| class TaskRunner; |
| } |
| |
| namespace quota { |
| |
| class QuotaTaskObserver; |
| |
| // A base class for quota tasks. |
| // TODO(kinuko): Revise this using base::Callback. |
| class QuotaTask { |
| public: |
| void Start(); |
| |
| protected: |
| explicit QuotaTask(QuotaTaskObserver* observer); |
| virtual ~QuotaTask(); |
| |
| // The task body. |
| virtual void Run() = 0; |
| |
| // Called upon completion, on the original message loop. |
| virtual void Completed() = 0; |
| |
| // Called when the task is aborted. |
| virtual void Aborted() {} |
| |
| void CallCompleted(); |
| |
| // Call this to delete itself. |
| void DeleteSoon(); |
| |
| QuotaTaskObserver* observer() const { return observer_; } |
| base::SingleThreadTaskRunner* original_task_runner() const { |
| return original_task_runner_.get(); |
| } |
| |
| private: |
| friend class base::DeleteHelper<QuotaTask>; |
| friend class QuotaTaskObserver; |
| |
| void Abort(); |
| QuotaTaskObserver* observer_; |
| scoped_refptr<base::SingleThreadTaskRunner> original_task_runner_; |
| bool delete_scheduled_; |
| }; |
| |
| class WEBKIT_STORAGE_BROWSER_EXPORT QuotaTaskObserver { |
| protected: |
| friend class QuotaTask; |
| |
| QuotaTaskObserver(); |
| virtual ~QuotaTaskObserver(); |
| |
| void RegisterTask(QuotaTask* task); |
| void UnregisterTask(QuotaTask* task); |
| |
| typedef std::set<QuotaTask*> TaskSet; |
| TaskSet running_quota_tasks_; |
| }; |
| } |
| |
| #endif // WEBKIT_BROWSER_QUOTA_QUOTA_TASK_H_ |