1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_ 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_ 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/basictypes.h" 9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/time/time.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/browser/quota/quota_client.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "storage/common/quota/quota_types.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "url/gurl.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 1403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)namespace storage { 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// This interface is implemented by observers that wish to monitor storage 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// events, such as changes in quota or usage. 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass STORAGE_EXPORT StorageObserver { 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct STORAGE_EXPORT Filter { 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The storage type to monitor. This must not be kStorageTypeUnknown or 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // kStorageTypeQuotaNotManaged. 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch StorageType storage_type; 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The origin to monitor usage for. Must be specified. 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GURL origin; 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Filter(); 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Filter(StorageType storage_type, const GURL& origin); 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool operator==(const Filter& other) const; 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct STORAGE_EXPORT MonitorParams { 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Storage type and origin to monitor. 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Filter filter; 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The rate at which storage events will be fired. Events will be fired at 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // approximately this rate, or when a storage status change has been 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // detected, whichever is the least frequent. 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::TimeDelta rate; 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // If set to true, the observer will be dispatched an event when added. 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool dispatch_initial_state; 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MonitorParams(); 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MonitorParams(StorageType storage_type, 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const GURL& origin, 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::TimeDelta& rate, 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool get_initial_state); 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch MonitorParams(const Filter& filter, 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const base::TimeDelta& rate, 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool get_initial_state); 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci struct STORAGE_EXPORT Event { 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The storage type and origin monitored. 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Filter filter; 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The current usage corresponding to the filter. 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int64 usage; 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // The quota corresponding to the filter. 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch int64 quota; 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Event(); 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Event(const Filter& filter, int64 usage, int64 quota); 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch bool operator==(const Event& other) const; 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch }; 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Will be called on the IO thread when a storage event occurs. 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void OnStorageEvent(const Event& event) = 0; 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~StorageObserver() {} 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace storage 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif // STORAGE_BROWSER_QUOTA_STORAGE_OBSERVER_H_ 80