summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/quota/mock_quota_manager.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/quota/mock_quota_manager.h')
-rw-r--r--chromium/content/browser/quota/mock_quota_manager.h152
1 files changed, 152 insertions, 0 deletions
diff --git a/chromium/content/browser/quota/mock_quota_manager.h b/chromium/content/browser/quota/mock_quota_manager.h
new file mode 100644
index 00000000000..ded0b907904
--- /dev/null
+++ b/chromium/content/browser/quota/mock_quota_manager.h
@@ -0,0 +1,152 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CONTENT_BROWSER_QUOTA_MOCK_QUOTA_MANAGER_H_
+#define CONTENT_BROWSER_QUOTA_MOCK_QUOTA_MANAGER_H_
+
+#include <map>
+#include <set>
+#include <utility>
+#include <vector>
+
+#include "base/memory/scoped_ptr.h"
+#include "url/gurl.h"
+#include "webkit/browser/quota/quota_client.h"
+#include "webkit/browser/quota/quota_manager.h"
+#include "webkit/browser/quota/quota_task.h"
+#include "webkit/common/quota/quota_types.h"
+
+using quota::GetOriginsCallback;
+using quota::QuotaClient;
+using quota::QuotaManager;
+using quota::QuotaStatusCode;
+using quota::SpecialStoragePolicy;
+using quota::StatusCallback;
+using quota::StorageType;
+
+namespace content {
+
+// Mocks the pieces of QuotaManager's interface.
+//
+// For usage/quota tracking test:
+// Usage and quota information can be updated by following private helper
+// methods: SetQuota() and UpdateUsage().
+//
+// For time-based deletion test:
+// Origins can be added to the mock by calling AddOrigin, and that list of
+// origins is then searched through in GetOriginsModifiedSince.
+// Neither GetOriginsModifiedSince nor DeleteOriginData touches the actual
+// origin data stored in the profile.
+class MockQuotaManager : public QuotaManager {
+ public:
+ MockQuotaManager(bool is_incognito,
+ const base::FilePath& profile_path,
+ base::SingleThreadTaskRunner* io_thread,
+ base::SequencedTaskRunner* db_thread,
+ SpecialStoragePolicy* special_storage_policy);
+
+ // Overrides QuotaManager's implementation. The internal usage data is
+ // updated when MockQuotaManagerProxy::NotifyStorageModified() is
+ // called. The internal quota value can be updated by calling
+ // a helper method MockQuotaManagerProxy::SetQuota().
+ virtual void GetUsageAndQuota(
+ const GURL& origin,
+ quota::StorageType type,
+ const GetUsageAndQuotaCallback& callback) OVERRIDE;
+
+ // Overrides QuotaManager's implementation with a canned implementation that
+ // allows clients to set up the origin database that should be queried. This
+ // method will only search through the origins added explicitly via AddOrigin.
+ virtual void GetOriginsModifiedSince(
+ StorageType type,
+ base::Time modified_since,
+ const GetOriginsCallback& callback) OVERRIDE;
+
+ // Removes an origin from the canned list of origins, but doesn't touch
+ // anything on disk. The caller must provide |quota_client_mask| which
+ // specifies the types of QuotaClients which should be removed from this
+ // origin as a bitmask built from QuotaClient::IDs. Setting the mask to
+ // QuotaClient::kAllClientsMask will remove all clients from the origin,
+ // regardless of type.
+ virtual void DeleteOriginData(const GURL& origin,
+ StorageType type,
+ int quota_client_mask,
+ const StatusCallback& callback) OVERRIDE;
+
+ // Helper method for updating internal quota info.
+ void SetQuota(const GURL& origin, StorageType type, int64 quota);
+
+ // Helper methods for timed-deletion testing:
+ // Adds an origin to the canned list that will be searched through via
+ // GetOriginsModifiedSince. The caller must provide |quota_client_mask|
+ // which specifies the types of QuotaClients this canned origin contains
+ // as a bitmask built from QuotaClient::IDs.
+ bool AddOrigin(const GURL& origin,
+ StorageType type,
+ int quota_client_mask,
+ base::Time modified);
+
+ // Helper methods for timed-deletion testing:
+ // Checks an origin and type against the origins that have been added via
+ // AddOrigin and removed via DeleteOriginData. If the origin exists in the
+ // canned list with the proper StorageType and client, returns true.
+ bool OriginHasData(const GURL& origin,
+ StorageType type,
+ QuotaClient::ID quota_client) const;
+
+ protected:
+ virtual ~MockQuotaManager();
+
+ private:
+ friend class MockQuotaManagerProxy;
+
+ // Contains the essential bits of information about an origin that the
+ // MockQuotaManager needs to understand for time-based deletion:
+ // the origin itself, the StorageType and its modification time.
+ struct OriginInfo {
+ OriginInfo(const GURL& origin,
+ StorageType type,
+ int quota_client_mask,
+ base::Time modified);
+ ~OriginInfo();
+
+ GURL origin;
+ StorageType type;
+ int quota_client_mask;
+ base::Time modified;
+ };
+
+ // Contains the essential information for each origin for usage/quota testing.
+ // (Ideally this should probably merged into the above struct, but for
+ // regular usage/quota testing we hardly need modified time but only
+ // want to keep usage and quota information, so this struct exists.
+ struct StorageInfo {
+ StorageInfo();
+ ~StorageInfo();
+ int64 usage;
+ int64 quota;
+ };
+
+ typedef std::pair<GURL, StorageType> OriginAndType;
+ typedef std::map<OriginAndType, StorageInfo> UsageAndQuotaMap;
+
+ // This must be called via MockQuotaManagerProxy.
+ void UpdateUsage(const GURL& origin, StorageType type, int64 delta);
+ void DidGetModifiedSince(const GetOriginsCallback& callback,
+ std::set<GURL>* origins,
+ StorageType storage_type);
+ void DidDeleteOriginData(const StatusCallback& callback,
+ QuotaStatusCode status);
+
+ // The list of stored origins that have been added via AddOrigin.
+ std::vector<OriginInfo> origins_;
+ UsageAndQuotaMap usage_and_quota_map_;
+ base::WeakPtrFactory<MockQuotaManager> weak_factory_;
+
+ DISALLOW_COPY_AND_ASSIGN(MockQuotaManager);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_QUOTA_MOCK_QUOTA_MANAGER_H_