summaryrefslogtreecommitdiffstats
path: root/content/child/quota_dispatcher.h
diff options
context:
space:
mode:
Diffstat (limited to 'content/child/quota_dispatcher.h')
-rw-r--r--content/child/quota_dispatcher.h32
1 files changed, 25 insertions, 7 deletions
diff --git a/content/child/quota_dispatcher.h b/content/child/quota_dispatcher.h
index a2fbfcc..8a8754f 100644
--- a/content/child/quota_dispatcher.h
+++ b/content/child/quota_dispatcher.h
@@ -10,7 +10,8 @@
#include "base/basictypes.h"
#include "base/id_map.h"
-#include "ipc/ipc_listener.h"
+#include "base/memory/ref_counted.h"
+#include "webkit/child/worker_task_runner.h"
#include "webkit/common/quota/quota_types.h"
class GURL;
@@ -25,10 +26,14 @@ class WebStorageQuotaCallbacks;
namespace content {
+class ThreadSafeSender;
+class QuotaMessageFilter;
+
// Dispatches and sends quota related messages sent to/from a child
// process from/to the main browser process. There is one instance
-// per child process. Messages are dispatched on the main child thread.
-class QuotaDispatcher : public IPC::Listener {
+// per each thread. Thread-specific instance can be obtained by
+// ThreadSpecificInstance().
+class QuotaDispatcher : public webkit_glue::WorkerTaskRunner::Observer {
public:
class Callback {
public:
@@ -38,11 +43,20 @@ class QuotaDispatcher : public IPC::Listener {
virtual void DidFail(quota::QuotaStatusCode status) = 0;
};
- QuotaDispatcher();
+ QuotaDispatcher(ThreadSafeSender* thread_safe_sender,
+ QuotaMessageFilter* quota_message_filter);
virtual ~QuotaDispatcher();
- // IPC::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
+ // |thread_safe_sender| and |quota_message_filter| are used if
+ // calling this leads to construction.
+ static QuotaDispatcher* ThreadSpecificInstance(
+ ThreadSafeSender* thread_safe_sender,
+ QuotaMessageFilter* quota_message_filter);
+
+ // webkit_glue::WorkerTaskRunner::Observer implementation.
+ virtual void OnWorkerRunLoopStopped() OVERRIDE;
+
+ void OnMessageReceived(const IPC::Message& msg);
void QueryStorageUsageAndQuota(const GURL& gurl,
quota::StorageType type,
@@ -64,10 +78,14 @@ class QuotaDispatcher : public IPC::Listener {
int64 current_quota);
void DidGrantStorageQuota(int request_id,
int64 granted_quota);
- void DidFail(int request_id, quota::QuotaStatusCode error);
+ void DidFail(int request_id,
+ quota::QuotaStatusCode error);
IDMap<Callback, IDMapOwnPointer> pending_quota_callbacks_;
+ scoped_refptr<ThreadSafeSender> thread_safe_sender_;
+ scoped_refptr<QuotaMessageFilter> quota_message_filter_;
+
DISALLOW_COPY_AND_ASSIGN(QuotaDispatcher);
};