15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2011 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#ifndef CONTENT_CHILD_QUOTA_DISPATCHER_H_ 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define CONTENT_CHILD_QUOTA_DISPATCHER_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/basictypes.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/id_map.h" 13558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "base/memory/ref_counted.h" 14558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch#include "webkit/child/worker_task_runner.h" 15868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/quota/quota_types.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Message; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace blink { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebStorageQuotaCallbacks; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 29558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass ThreadSafeSender; 30558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass QuotaMessageFilter; 31558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dispatches and sends quota related messages sent to/from a child 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// process from/to the main browser process. There is one instance 34558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// per each thread. Thread-specific instance can be obtained by 35558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch// ThreadSpecificInstance(). 36558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdochclass QuotaDispatcher : public webkit_glue::WorkerTaskRunner::Observer { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) class Callback { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~Callback() {} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidQueryStorageUsageAndQuota(int64 usage, int64 quota) = 0; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidGrantStorageQuota(int64 granted_quota) = 0; 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void DidFail(quota::QuotaStatusCode status) = 0; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch QuotaDispatcher(ThreadSafeSender* thread_safe_sender, 47558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch QuotaMessageFilter* quota_message_filter); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual ~QuotaDispatcher(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 50558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // |thread_safe_sender| and |quota_message_filter| are used if 51558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // calling this leads to construction. 52558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch static QuotaDispatcher* ThreadSpecificInstance( 53558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch ThreadSafeSender* thread_safe_sender, 54558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch QuotaMessageFilter* quota_message_filter); 55558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 56558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // webkit_glue::WorkerTaskRunner::Observer implementation. 57558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch virtual void OnWorkerRunLoopStopped() OVERRIDE; 58558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 59558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void OnMessageReceived(const IPC::Message& msg); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void QueryStorageUsageAndQuota(const GURL& gurl, 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::StorageType type, 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Callback* callback); 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RequestStorageQuota(int render_view_id, 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& gurl, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) quota::StorageType type, 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 requested_size, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Callback* callback); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Creates a new Callback instance for WebStorageQuotaCallbacks. 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static Callback* CreateWebStorageQuotaCallbacksWrapper( 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) blink::WebStorageQuotaCallbacks* callbacks); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Message handlers. 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidQueryStorageUsageAndQuota(int request_id, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 current_usage, 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 current_quota); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void DidGrantStorageQuota(int request_id, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 granted_quota); 81558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void DidFail(int request_id, 82558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch quota::QuotaStatusCode error); 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) IDMap<Callback, IDMapOwnPointer> pending_quota_callbacks_; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 86558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<ThreadSafeSender> thread_safe_sender_; 87558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch scoped_refptr<QuotaMessageFilter> quota_message_filter_; 88558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(QuotaDispatcher); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 94868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#endif // CONTENT_CHILD_QUOTA_DISPATCHER_H_ 95