Home | History | Annotate | Download | only in quota
      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.
     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 
     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