Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(764)

Unified Diff: content/browser/quota/storage_monitor_unittest.cc

Issue 2368913003: Populate storage_unittests target. (Closed)
Patch Set: Removed unnecessary include from storage/browser/blob/blob_storage_context_unittest.cc. Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/quota/storage_monitor_unittest.cc
diff --git a/content/browser/quota/storage_monitor_unittest.cc b/content/browser/quota/storage_monitor_unittest.cc
deleted file mode 100644
index 7cbeb9140ee282a0040c544ad2f01b833b833845..0000000000000000000000000000000000000000
--- a/content/browser/quota/storage_monitor_unittest.cc
+++ /dev/null
@@ -1,703 +0,0 @@
-// 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.
-
-#include <stdint.h>
-
-#include <vector>
-
-#include "base/files/scoped_temp_dir.h"
-#include "base/run_loop.h"
-#include "base/threading/thread_task_runner_handle.h"
-#include "content/public/test/mock_special_storage_policy.h"
-#include "content/public/test/mock_storage_client.h"
-#include "net/base/url_util.h"
-#include "storage/browser/quota/quota_manager.h"
-#include "storage/browser/quota/quota_manager_proxy.h"
-#include "storage/browser/quota/storage_monitor.h"
-#include "storage/browser/quota/storage_observer.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using storage::HostStorageObservers;
-using storage::kQuotaErrorNotSupported;
-using storage::kQuotaStatusOk;
-using storage::kStorageTypePersistent;
-using storage::kStorageTypeTemporary;
-using storage::QuotaClient;
-using storage::QuotaManager;
-using storage::QuotaStatusCode;
-using storage::SpecialStoragePolicy;
-using storage::StorageMonitor;
-using storage::StorageObserver;
-using storage::StorageObserverList;
-using storage::StorageType;
-using storage::StorageTypeObservers;
-
-namespace content {
-
-namespace {
-
-const char kDefaultOrigin[] = "http://www.foo.com/";
-const char kAlternativeOrigin[] = "http://www.bar.com/";
-
-class MockObserver : public StorageObserver {
- public:
- const StorageObserver::Event& LastEvent() const {
- CHECK(!events_.empty());
- return events_.back();
- }
-
- int EventCount() const {
- return events_.size();
- }
-
- // StorageObserver implementation:
- void OnStorageEvent(const StorageObserver::Event& event) override {
- events_.push_back(event);
- }
-
- private:
- std::vector<StorageObserver::Event> events_;
-};
-
-// A mock quota manager for overriding GetUsageAndQuotaForWebApps().
-class UsageMockQuotaManager : public QuotaManager {
- public:
- UsageMockQuotaManager(SpecialStoragePolicy* special_storage_policy)
- : QuotaManager(false,
- base::FilePath(),
- base::ThreadTaskRunnerHandle::Get().get(),
- base::ThreadTaskRunnerHandle::Get().get(),
- special_storage_policy),
- callback_usage_(0),
- callback_quota_(0),
- callback_status_(kQuotaStatusOk),
- initialized_(false) {}
-
- void SetCallbackParams(int64_t usage, int64_t quota, QuotaStatusCode status) {
- initialized_ = true;
- callback_quota_ = quota;
- callback_usage_ = usage;
- callback_status_ = status;
- }
-
- void InvokeCallback() {
- delayed_callback_.Run(callback_status_, callback_usage_, callback_quota_);
- }
-
- void GetUsageAndQuotaForWebApps(
- const GURL& origin,
- StorageType type,
- const GetUsageAndQuotaCallback& callback) override {
- if (initialized_)
- callback.Run(callback_status_, callback_usage_, callback_quota_);
- else
- delayed_callback_ = callback;
- }
-
- protected:
- ~UsageMockQuotaManager() override {}
-
- private:
- int64_t callback_usage_;
- int64_t callback_quota_;
- QuotaStatusCode callback_status_;
- bool initialized_;
- GetUsageAndQuotaCallback delayed_callback_;
-};
-
-} // namespace
-
-class StorageMonitorTestBase : public testing::Test {
- protected:
- void DispatchPendingEvents(StorageObserverList& observer_list) {
- observer_list.DispatchPendingEvent();
- }
-
- const StorageObserver::Event* GetPendingEvent(
- const StorageObserverList& observer_list) {
- return observer_list.notification_timer_.IsRunning()
- ? &observer_list.pending_event_ : NULL;
- }
-
- const StorageObserver::Event* GetPendingEvent(
- const HostStorageObservers& host_observers) {
- return GetPendingEvent(host_observers.observers_);
- }
-
- int GetRequiredUpdatesCount(const StorageObserverList& observer_list) {
- int count = 0;
- for (StorageObserverList::StorageObserverStateMap::const_iterator it =
- observer_list.observers_.begin();
- it != observer_list.observers_.end(); ++it) {
- if (it->second.requires_update)
- ++count;
- }
-
- return count;
- }
-
- int GetRequiredUpdatesCount(const HostStorageObservers& host_observers) {
- return GetRequiredUpdatesCount(host_observers.observers_);
- }
-
- void SetLastNotificationTime(StorageObserverList& observer_list,
- StorageObserver* observer) {
- ASSERT_TRUE(observer_list.observers_.find(observer) !=
- observer_list.observers_.end());
-
- StorageObserverList::ObserverState& state =
- observer_list.observers_[observer];
- state.last_notification_time = base::TimeTicks::Now() - state.rate;
- }
-
- void SetLastNotificationTime(HostStorageObservers& host_observers,
- StorageObserver* observer) {
- SetLastNotificationTime(host_observers.observers_, observer);
- }
-
- int GetObserverCount(const HostStorageObservers& host_observers) {
- return host_observers.observers_.ObserverCount();
- }
-};
-
-class StorageTestWithManagerBase : public StorageMonitorTestBase {
- public:
- void SetUp() override {
- storage_policy_ = new MockSpecialStoragePolicy();
- quota_manager_ = new UsageMockQuotaManager(storage_policy_.get());
- }
-
- void TearDown() override {
- // This ensures the quota manager is destroyed correctly.
- quota_manager_ = NULL;
- base::RunLoop().RunUntilIdle();
- }
-
- protected:
- base::MessageLoop message_loop_;
- scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
- scoped_refptr<UsageMockQuotaManager> quota_manager_;
-};
-
-// Tests for StorageObserverList:
-
-typedef StorageMonitorTestBase StorageObserverListTest;
-
-// Test dispatching events to one observer.
-TEST_F(StorageObserverListTest, DispatchEventToSingleObserver) {
- // A message loop is required as StorageObserverList may schedule jobs.
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
-
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer;
- StorageObserverList observer_list;
- observer_list.AddObserver(&mock_observer, params);
-
- StorageObserver::Event event;
- event.filter = params.filter;
-
- // Verify that the first event is dispatched immediately.
- event.quota = 1;
- event.usage = 1;
- observer_list.OnStorageChange(event);
- EXPECT_EQ(1, mock_observer.EventCount());
- EXPECT_EQ(event, mock_observer.LastEvent());
- EXPECT_EQ(NULL, GetPendingEvent(observer_list));
- EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
- // Verify that the next event is pending.
- event.quota = 2;
- event.usage = 2;
- observer_list.OnStorageChange(event);
- EXPECT_EQ(1, mock_observer.EventCount());
- ASSERT_TRUE(GetPendingEvent(observer_list));
- EXPECT_EQ(event, *GetPendingEvent(observer_list));
- EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
-
- // Fake the last notification time so that an event will be dispatched.
- SetLastNotificationTime(observer_list, &mock_observer);
- event.quota = 3;
- event.usage = 3;
- observer_list.OnStorageChange(event);
- EXPECT_EQ(2, mock_observer.EventCount());
- EXPECT_EQ(event, mock_observer.LastEvent());
- EXPECT_EQ(NULL, GetPendingEvent(observer_list));
- EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
- // Remove the observer.
- event.quota = 4;
- event.usage = 4;
- observer_list.RemoveObserver(&mock_observer);
- observer_list.OnStorageChange(event);
- EXPECT_EQ(2, mock_observer.EventCount());
- EXPECT_EQ(NULL, GetPendingEvent(observer_list));
-}
-
-// Test dispatching events to multiple observers.
-TEST_F(StorageObserverListTest, DispatchEventToMultipleObservers) {
- // A message loop is required as StorageObserverList may schedule jobs.
- base::MessageLoop loop(base::MessageLoop::TYPE_DEFAULT);
-
- MockObserver mock_observer1;
- MockObserver mock_observer2;
- StorageObserverList observer_list;
- StorageObserver::Filter filter(kStorageTypePersistent,
- GURL(kDefaultOrigin));
- observer_list.AddObserver(
- &mock_observer1,
- StorageObserver::MonitorParams(
- filter, base::TimeDelta::FromHours(1), false));
- observer_list.AddObserver(
- &mock_observer2,
- StorageObserver::MonitorParams(
- filter, base::TimeDelta::FromHours(2), false));
-
- StorageObserver::Event event;
- event.filter = filter;
-
- // Verify that the first event is dispatched immediately.
- event.quota = 1;
- event.usage = 1;
- observer_list.OnStorageChange(event);
- EXPECT_EQ(1, mock_observer1.EventCount());
- EXPECT_EQ(1, mock_observer2.EventCount());
- EXPECT_EQ(event, mock_observer1.LastEvent());
- EXPECT_EQ(event, mock_observer2.LastEvent());
- EXPECT_EQ(NULL, GetPendingEvent(observer_list));
- EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-
- // Fake the last notification time so that observer1 will receive the next
- // event, but it will be pending for observer2.
- SetLastNotificationTime(observer_list, &mock_observer1);
- event.quota = 2;
- event.usage = 2;
- observer_list.OnStorageChange(event);
- EXPECT_EQ(2, mock_observer1.EventCount());
- EXPECT_EQ(1, mock_observer2.EventCount());
- EXPECT_EQ(event, mock_observer1.LastEvent());
- ASSERT_TRUE(GetPendingEvent(observer_list));
- EXPECT_EQ(event, *GetPendingEvent(observer_list));
- EXPECT_EQ(1, GetRequiredUpdatesCount(observer_list));
-
- // Now dispatch the pending event to observer2.
- SetLastNotificationTime(observer_list, &mock_observer2);
- DispatchPendingEvents(observer_list);
- EXPECT_EQ(2, mock_observer1.EventCount());
- EXPECT_EQ(2, mock_observer2.EventCount());
- EXPECT_EQ(event, mock_observer1.LastEvent());
- EXPECT_EQ(event, mock_observer2.LastEvent());
- EXPECT_EQ(NULL, GetPendingEvent(observer_list));
- EXPECT_EQ(0, GetRequiredUpdatesCount(observer_list));
-}
-
-// Ensure that the |origin| field in events match the origin specified by the
-// observer on registration.
-TEST_F(StorageObserverListTest, ReplaceEventOrigin) {
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer;
- StorageObserverList observer_list;
- observer_list.AddObserver(&mock_observer, params);
-
- StorageObserver::Event dispatched_event;
- dispatched_event.filter = params.filter;
- dispatched_event.filter.origin = GURL("https://www.foo.com/bar");
- observer_list.OnStorageChange(dispatched_event);
-
- EXPECT_EQ(params.filter.origin, mock_observer.LastEvent().filter.origin);
-}
-
-// Tests for HostStorageObservers:
-
-typedef StorageTestWithManagerBase HostStorageObserversTest;
-
-// Verify that HostStorageObservers is initialized after the first usage change.
-TEST_F(HostStorageObserversTest, InitializeOnUsageChange) {
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- const int64_t kUsage = 324554;
- const int64_t kQuota = 234354354;
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-
- MockObserver mock_observer;
- HostStorageObservers host_observers(quota_manager_.get());
- host_observers.AddObserver(&mock_observer, params);
-
- // Verify that HostStorageObservers dispatches the first event correctly.
- StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
- host_observers.NotifyUsageChange(params.filter, 87324);
- EXPECT_EQ(1, mock_observer.EventCount());
- EXPECT_EQ(expected_event, mock_observer.LastEvent());
- EXPECT_TRUE(host_observers.is_initialized());
-
- // Verify that HostStorageObservers handles subsequent usage changes
- // correctly.
- const int64_t kDelta = 2345;
- expected_event.usage += kDelta;
- SetLastNotificationTime(host_observers, &mock_observer);
- host_observers.NotifyUsageChange(params.filter, kDelta);
- EXPECT_EQ(2, mock_observer.EventCount());
- EXPECT_EQ(expected_event, mock_observer.LastEvent());
-}
-
-// Verify that HostStorageObservers is initialized after the adding the first
-// observer that elected to receive the initial state.
-TEST_F(HostStorageObserversTest, InitializeOnObserver) {
- const int64_t kUsage = 74387;
- const int64_t kQuota = 92834743;
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
- HostStorageObservers host_observers(quota_manager_.get());
-
- // |host_observers| should not be initialized after the first observer is
- // added because it did not elect to receive the initial state.
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer1;
- host_observers.AddObserver(&mock_observer1, params);
- EXPECT_FALSE(host_observers.is_initialized());
- EXPECT_EQ(0, mock_observer1.EventCount());
-
- // |host_observers| should be initialized after the second observer is
- // added.
- MockObserver mock_observer2;
- params.dispatch_initial_state = true;
- host_observers.AddObserver(&mock_observer2, params);
- StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
- EXPECT_EQ(0, mock_observer1.EventCount());
- EXPECT_EQ(1, mock_observer2.EventCount());
- EXPECT_EQ(expected_event, mock_observer2.LastEvent());
- EXPECT_TRUE(host_observers.is_initialized());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
- // Verify that both observers will receive events after a usage change.
- const int64_t kDelta = 2345;
- expected_event.usage += kDelta;
- SetLastNotificationTime(host_observers, &mock_observer2);
- host_observers.NotifyUsageChange(params.filter, kDelta);
- EXPECT_EQ(1, mock_observer1.EventCount());
- EXPECT_EQ(2, mock_observer2.EventCount());
- EXPECT_EQ(expected_event, mock_observer1.LastEvent());
- EXPECT_EQ(expected_event, mock_observer2.LastEvent());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
- // Verify that the addition of a third observer only causes an event to be
- // dispatched to the new observer.
- MockObserver mock_observer3;
- params.dispatch_initial_state = true;
- host_observers.AddObserver(&mock_observer3, params);
- EXPECT_EQ(1, mock_observer1.EventCount());
- EXPECT_EQ(2, mock_observer2.EventCount());
- EXPECT_EQ(1, mock_observer3.EventCount());
- EXPECT_EQ(expected_event, mock_observer3.LastEvent());
-}
-
-// Verify that negative usage and quota is changed to zero.
-TEST_F(HostStorageObserversTest, NegativeUsageAndQuota) {
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- const int64_t kUsage = -324554;
- const int64_t kQuota = -234354354;
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
-
- MockObserver mock_observer;
- HostStorageObservers host_observers(quota_manager_.get());
- host_observers.AddObserver(&mock_observer, params);
-
- StorageObserver::Event expected_event(params.filter, 0, 0);
- host_observers.NotifyUsageChange(params.filter, -87324);
- EXPECT_EQ(expected_event, mock_observer.LastEvent());
-}
-
-// Verify that HostStorageObservers can recover from a bad initialization.
-TEST_F(HostStorageObserversTest, RecoverFromBadUsageInit) {
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer;
- HostStorageObservers host_observers(quota_manager_.get());
- host_observers.AddObserver(&mock_observer, params);
-
- // Set up the quota manager to return an error status.
- const int64_t kUsage = 6656;
- const int64_t kQuota = 99585556;
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaErrorNotSupported);
-
- // Verify that |host_observers| is not initialized and an event has not been
- // dispatched.
- host_observers.NotifyUsageChange(params.filter, 9438);
- EXPECT_EQ(0, mock_observer.EventCount());
- EXPECT_FALSE(host_observers.is_initialized());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
- // Now ensure that quota manager returns a good status.
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
- host_observers.NotifyUsageChange(params.filter, 9048543);
- StorageObserver::Event expected_event(params.filter, kUsage, kQuota);
- EXPECT_EQ(1, mock_observer.EventCount());
- EXPECT_EQ(expected_event, mock_observer.LastEvent());
- EXPECT_TRUE(host_observers.is_initialized());
-}
-
-// Verify that HostStorageObservers handle initialization of the cached usage
-// and quota correctly.
-TEST_F(HostStorageObserversTest, AsyncInitialization) {
- StorageObserver::MonitorParams params(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer;
- HostStorageObservers host_observers(quota_manager_.get());
- host_observers.AddObserver(&mock_observer, params);
-
- // Trigger initialization. Leave the mock quota manager uninitialized so that
- // the callback is not invoked.
- host_observers.NotifyUsageChange(params.filter, 7645);
- EXPECT_EQ(0, mock_observer.EventCount());
- EXPECT_FALSE(host_observers.is_initialized());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
- // Simulate notifying |host_observers| of a usage change before initialization
- // is complete.
- const int64_t kUsage = 6656;
- const int64_t kQuota = 99585556;
- const int64_t kDelta = 327643;
- host_observers.NotifyUsageChange(params.filter, kDelta);
- EXPECT_EQ(0, mock_observer.EventCount());
- EXPECT_FALSE(host_observers.is_initialized());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-
- // Simulate an asynchronous callback from QuotaManager.
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
- quota_manager_->InvokeCallback();
- StorageObserver::Event expected_event(params.filter, kUsage + kDelta, kQuota);
- EXPECT_EQ(1, mock_observer.EventCount());
- EXPECT_EQ(expected_event, mock_observer.LastEvent());
- EXPECT_TRUE(host_observers.is_initialized());
- EXPECT_EQ(NULL, GetPendingEvent(host_observers));
- EXPECT_EQ(0, GetRequiredUpdatesCount(host_observers));
-}
-
-// Tests for StorageTypeObservers:
-
-typedef StorageTestWithManagerBase StorageTypeObserversTest;
-
-// Test adding and removing observers.
-TEST_F(StorageTypeObserversTest, AddRemoveObservers) {
- StorageTypeObservers type_observers(quota_manager_.get());
-
- StorageObserver::MonitorParams params1(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- StorageObserver::MonitorParams params2(kStorageTypePersistent,
- GURL(kAlternativeOrigin),
- base::TimeDelta::FromHours(1),
- false);
- std::string host1 = net::GetHostOrSpecFromURL(params1.filter.origin);
- std::string host2 = net::GetHostOrSpecFromURL(params2.filter.origin);
-
- MockObserver mock_observer1;
- MockObserver mock_observer2;
- MockObserver mock_observer3;
- type_observers.AddObserver(&mock_observer1, params1);
- type_observers.AddObserver(&mock_observer2, params1);
-
- type_observers.AddObserver(&mock_observer1, params2);
- type_observers.AddObserver(&mock_observer2, params2);
- type_observers.AddObserver(&mock_observer3, params2);
-
- // Verify that the observers have been removed correctly.
- ASSERT_TRUE(type_observers.GetHostObservers(host1));
- ASSERT_TRUE(type_observers.GetHostObservers(host2));
- EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host1)));
- EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
-
- // Remove an observer for a specific filter.
- type_observers.RemoveObserverForFilter(&mock_observer1, params1.filter);
- ASSERT_TRUE(type_observers.GetHostObservers(host1));
- ASSERT_TRUE(type_observers.GetHostObservers(host2));
- EXPECT_EQ(1, GetObserverCount(*type_observers.GetHostObservers(host1)));
- EXPECT_EQ(3, GetObserverCount(*type_observers.GetHostObservers(host2)));
-
- // Remove all instances of an observer.
- type_observers.RemoveObserver(&mock_observer2);
- ASSERT_TRUE(type_observers.GetHostObservers(host2));
- EXPECT_EQ(2, GetObserverCount(*type_observers.GetHostObservers(host2)));
- // Observers of host1 has been deleted as it is empty.
- EXPECT_FALSE(type_observers.GetHostObservers(host1));
-}
-
-// Tests for StorageMonitor:
-
-class StorageMonitorTest : public StorageTestWithManagerBase {
- public:
- StorageMonitorTest()
- : storage_monitor_(NULL),
- params1_(kStorageTypeTemporary,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false),
- params2_(kStorageTypePersistent,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false) {
- }
-
- protected:
- void SetUp() override {
- StorageTestWithManagerBase::SetUp();
-
- storage_monitor_ = quota_manager_->storage_monitor_.get();
- host_ = net::GetHostOrSpecFromURL(params1_.filter.origin);
-
- storage_monitor_->AddObserver(&mock_observer1_, params1_);
- storage_monitor_->AddObserver(&mock_observer2_, params1_);
-
- storage_monitor_->AddObserver(&mock_observer1_, params2_);
- storage_monitor_->AddObserver(&mock_observer2_, params2_);
- storage_monitor_->AddObserver(&mock_observer3_, params2_);
- }
-
- int GetObserverCount(StorageType storage_type) {
- const StorageTypeObservers* type_observers =
- storage_monitor_->GetStorageTypeObservers(storage_type);
- return StorageMonitorTestBase::GetObserverCount(
- *type_observers->GetHostObservers(host_));
- }
-
- void CheckObserverCount(int expected_temporary, int expected_persistent) {
- ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
- kStorageTypeTemporary));
- ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
- kStorageTypeTemporary)->GetHostObservers(host_));
- EXPECT_EQ(expected_temporary, GetObserverCount(kStorageTypeTemporary));
-
- ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
- kStorageTypePersistent));
- ASSERT_TRUE(storage_monitor_->GetStorageTypeObservers(
- kStorageTypePersistent)->GetHostObservers(host_));
- EXPECT_EQ(expected_persistent, GetObserverCount(kStorageTypePersistent));
- }
-
- StorageMonitor* storage_monitor_;
- StorageObserver::MonitorParams params1_;
- StorageObserver::MonitorParams params2_;
- MockObserver mock_observer1_;
- MockObserver mock_observer2_;
- MockObserver mock_observer3_;
- std::string host_;
-};
-
-// Test adding storage observers.
-TEST_F(StorageMonitorTest, AddObservers) {
- // Verify that the observers are added correctly.
- CheckObserverCount(2, 3);
-}
-
-// Test dispatching events to storage observers.
-TEST_F(StorageMonitorTest, EventDispatch) {
- // Verify dispatch of events.
- const int64_t kUsage = 5325;
- const int64_t kQuota = 903845;
- quota_manager_->SetCallbackParams(kUsage, kQuota, kQuotaStatusOk);
- storage_monitor_->NotifyUsageChange(params1_.filter, 9048543);
-
- StorageObserver::Event expected_event(params1_.filter, kUsage, kQuota);
- EXPECT_EQ(1, mock_observer1_.EventCount());
- EXPECT_EQ(1, mock_observer2_.EventCount());
- EXPECT_EQ(0, mock_observer3_.EventCount());
- EXPECT_EQ(expected_event, mock_observer1_.LastEvent());
- EXPECT_EQ(expected_event, mock_observer2_.LastEvent());
-}
-
-// Test removing all instances of an observer.
-TEST_F(StorageMonitorTest, RemoveObserver) {
- storage_monitor_->RemoveObserver(&mock_observer1_);
- CheckObserverCount(1, 2);
-}
-
-// Test removing an observer for a specific filter.
-TEST_F(StorageMonitorTest, RemoveObserverForFilter) {
- storage_monitor_->RemoveObserverForFilter(&mock_observer1_, params2_.filter);
- CheckObserverCount(2, 2);
-}
-
-// Integration test for QuotaManager and StorageMonitor:
-
-class StorageMonitorIntegrationTest : public testing::Test {
- public:
- void SetUp() override {
- ASSERT_TRUE(data_dir_.CreateUniqueTempDir());
- storage_policy_ = new MockSpecialStoragePolicy();
- quota_manager_ = new QuotaManager(
- false, data_dir_.GetPath(), base::ThreadTaskRunnerHandle::Get().get(),
- base::ThreadTaskRunnerHandle::Get().get(), storage_policy_.get());
-
- client_ = new MockStorageClient(quota_manager_->proxy(),
- NULL,
- QuotaClient::kFileSystem,
- 0);
-
- quota_manager_->proxy()->RegisterClient(client_);
- }
-
- void TearDown() override {
- // This ensures the quota manager is destroyed correctly.
- quota_manager_ = NULL;
- base::RunLoop().RunUntilIdle();
- }
-
- protected:
- base::MessageLoop message_loop_;
- base::ScopedTempDir data_dir_;
- scoped_refptr<MockSpecialStoragePolicy> storage_policy_;
- scoped_refptr<QuotaManager> quota_manager_;
- MockStorageClient* client_;
-};
-
-// This test simulates a usage change in a quota client and verifies that a
-// storage observer will receive a storage event.
-TEST_F(StorageMonitorIntegrationTest, NotifyUsageEvent) {
- const StorageType kTestStorageType = kStorageTypePersistent;
- const int64_t kTestUsage = 234743;
-
- // Register the observer.
- StorageObserver::MonitorParams params(kTestStorageType,
- GURL(kDefaultOrigin),
- base::TimeDelta::FromHours(1),
- false);
- MockObserver mock_observer;
- quota_manager_->AddStorageObserver(&mock_observer, params);
-
- // Fire a usage change.
- client_->AddOriginAndNotify(GURL(kDefaultOrigin),
- kTestStorageType,
- kTestUsage);
- base::RunLoop().RunUntilIdle();
-
- // Verify that the observer receives it.
- ASSERT_EQ(1, mock_observer.EventCount());
- const StorageObserver::Event& event = mock_observer.LastEvent();
- EXPECT_EQ(params.filter, event.filter);
- EXPECT_EQ(kTestUsage, event.usage);
-}
-
-} // namespace content
« no previous file with comments | « content/browser/quota/quota_temporary_storage_evictor_unittest.cc ('k') | content/browser/quota/usage_tracker_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698