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 16namespace base { 17class SingleThreadTaskRunner; 18class TaskRunner; 19} 20 21namespace quota { 22 23class QuotaTaskObserver; 24 25// A base class for quota tasks. 26// TODO(kinuko): Revise this using base::Callback. 27class 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. 42 virtual void Aborted() {} 43 44 void CallCompleted(); 45 46 // Call this to delete itself. 47 void DeleteSoon(); 48 49 QuotaTaskObserver* observer() const { return observer_; } 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 64class 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