1a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch// Copyright 2014 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) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <map> 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <set> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h" 9868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/message_loop/message_loop_proxy.h" 10d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "base/run_loop.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/browser/appcache/appcache_quota_client.h" 120529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch#include "content/browser/appcache/mock_appcache_service.h" 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "net/base/net_errors.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch 16a02191e04bc25c4935f804f2c080ae28663d096dBen Murdochnamespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Declared to shorten the line lengths. 1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)static const storage::StorageType kTemp = storage::kStorageTypeTemporary; 2003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)static const storage::StorageType kPerm = storage::kStorageTypePersistent; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Base class for our test fixtures. 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AppCacheQuotaClientTest : public testing::Test { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kOriginA; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kOriginB; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL kOriginOther; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClientTest() 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : kOriginA("http://host"), 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kOriginB("http://host:8000"), 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) kOriginOther("http://other"), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_(0), 3403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) delete_status_(storage::kQuotaStatusUnknown), 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_get_origin_usage_completions_(0), 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_get_origins_completions_(0), 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) num_delete_origins_completions_(0), 3803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) weak_factory_(this) {} 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) int64 GetOriginUsage(storage::QuotaClient* client, 4103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& origin, 4203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type) { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = -1; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, origin, type); 45d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return usage_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::set<GURL>& GetOriginsForType(storage::QuotaClient* client, 5003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins_.clear(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, type); 53d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return origins_; 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::set<GURL>& GetOriginsForHost(storage::QuotaClient* client, 5803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type, 5903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::string& host) { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins_.clear(); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, type, host); 62d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return origins_; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::QuotaStatusCode DeleteOriginData(storage::QuotaClient* client, 6703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type, 6803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& origin) { 6903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) delete_status_ = storage::kQuotaStatusUnknown; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, type, origin); 71d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return delete_status_; 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 7503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AsyncGetOriginUsage(storage::QuotaClient* client, 7603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& origin, 7703b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->GetOriginUsage( 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&AppCacheQuotaClientTest::OnGetOriginUsageComplete, 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 8403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AsyncGetOriginsForType(storage::QuotaClient* client, 8503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type) { 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->GetOriginsForType( 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&AppCacheQuotaClientTest::OnGetOriginsComplete, 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 9203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AsyncGetOriginsForHost(storage::QuotaClient* client, 9303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type, 9403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const std::string& host) { 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->GetOriginsForHost( 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) type, host, 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&AppCacheQuotaClientTest::OnGetOriginsComplete, 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void AsyncDeleteOriginData(storage::QuotaClient* client, 10203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::StorageType type, 10303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const GURL& origin) { 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->DeleteOriginData( 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origin, type, 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::Bind(&AppCacheQuotaClientTest::OnDeleteOriginDataComplete, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_factory_.GetWeakPtr())); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void SetUsageMapEntry(const GURL& origin, int64 usage) { 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_service_.storage()->usage_map_[origin] = usage; 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* CreateClient() { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return new AppCacheQuotaClient(&mock_service_); 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Call_NotifyAppCacheReady(AppCacheQuotaClient* client) { 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->NotifyAppCacheReady(); 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Call_NotifyAppCacheDestroyed(AppCacheQuotaClient* client) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->NotifyAppCacheDestroyed(); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void Call_OnQuotaManagerDestroyed(AppCacheQuotaClient* client) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) client->OnQuotaManagerDestroyed(); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void OnGetOriginUsageComplete(int64 usage) { 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++num_get_origin_usage_completions_; 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) usage_ = usage; 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 13690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void OnGetOriginsComplete(const std::set<GURL>& origins) { 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++num_get_origins_completions_; 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins_ = origins; 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 14103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) void OnDeleteOriginDataComplete(storage::QuotaStatusCode status) { 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ++num_delete_origins_completions_; 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete_status_ = status; 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 146b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) base::MessageLoop message_loop_; 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 usage_; 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> origins_; 14903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) storage::QuotaStatusCode delete_status_; 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_get_origin_usage_completions_; 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_get_origins_completions_; 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int num_delete_origins_completions_; 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MockAppCacheService mock_service_; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::WeakPtrFactory<AppCacheQuotaClientTest> weak_factory_; 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, BasicCreateDestroy) { 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, EmptyService) { 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetOriginUsage(client, kOriginA, kTemp)); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetOriginUsage(client, kOriginA, kPerm)); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kTemp).empty()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kPerm).empty()); 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForHost(client, kTemp, kOriginA.host()).empty()); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForHost(client, kPerm, kOriginA.host()).empty()); 17503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaStatusOk, DeleteOriginData(client, kTemp, kOriginA)); 17603b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaStatusOk, DeleteOriginData(client, kPerm, kOriginA)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, NoService) { 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetOriginUsage(client, kOriginA, kTemp)); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetOriginUsage(client, kOriginA, kPerm)); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kTemp).empty()); 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kPerm).empty()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForHost(client, kTemp, kOriginA.host()).empty()); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForHost(client, kPerm, kOriginA.host()).empty()); 19303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(client, kTemp, kOriginA)); 19503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(client, kPerm, kOriginA)); 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, GetOriginUsage) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1000, GetOriginUsage(client, kOriginA, kTemp)); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, GetOriginUsage(client, kOriginA, kPerm)); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, GetOriginsForHost) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(kOriginA.host(), kOriginB.host()); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_NE(kOriginA.host(), kOriginOther.host()); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> origins = GetOriginsForHost(client, kTemp, kOriginA.host()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.empty()); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginB, 10); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginOther, 500); 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins = GetOriginsForHost(client, kTemp, kOriginA.host()); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2ul, origins.size()); 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(kOriginA) != origins.end()); 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(kOriginB) != origins.end()); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins = GetOriginsForHost(client, kTemp, kOriginOther.host()); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1ul, origins.size()); 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(kOriginOther) != origins.end()); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) origins = GetOriginsForHost(client, kPerm, kOriginA.host()); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.empty()); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, GetOriginsForType) { 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kTemp).empty()); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kPerm).empty()); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginB, 10); 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::set<GURL> origins = GetOriginsForType(client, kTemp); 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2ul, origins.size()); 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(kOriginA) != origins.end()); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins.find(kOriginB) != origins.end()); 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(GetOriginsForType(client, kPerm).empty()); 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, DeleteOriginData) { 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Perm deletions are short circuited in the Client and 26946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // should not reach the AppCacheServiceImpl. 27003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaStatusOk, DeleteOriginData(client, kPerm, kOriginA)); 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, mock_service_.delete_called_count()); 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaStatusOk, DeleteOriginData(client, kTemp, kOriginA)); 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, mock_service_.delete_called_count()); 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) mock_service_.set_mock_delete_appcaches_for_origin_result( 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) net::ERR_ABORTED); 27803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DeleteOriginData(client, kTemp, kOriginA)); 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, mock_service_.delete_called_count()); 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, PendingRequests) { 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginB, 10); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginOther, 500); 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Queue up some reqeusts. 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginA, kPerm); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginB, kTemp); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kPerm); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kTemp); 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginA); 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kPerm, kOriginA); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginB); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origin_usage_completions_); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origins_completions_); 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 307d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origin_usage_completions_); 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origins_completions_); 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Pending requests should get serviced when the appcache is ready. 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, num_get_origin_usage_completions_); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, num_get_origins_completions_); 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 317d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, num_delete_origins_completions_); // deletes are really async 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // They should be serviced in order requested. 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, usage_); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1ul, origins_.size()); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins_.find(kOriginOther) != origins_.end()); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, DestroyServiceWithPending) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginB, 10); 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginOther, 500); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Queue up some reqeusts prior to being ready. 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginA, kPerm); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginB, kTemp); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kPerm); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kTemp); 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginA); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kPerm, kOriginA); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginB); 346d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origin_usage_completions_); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origins_completions_); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the service. 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // All should have been aborted and called completion. 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(2, num_get_origin_usage_completions_); 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(4, num_get_origins_completions_); 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(3, num_delete_origins_completions_); 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, usage_); 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(origins_.empty()); 36003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, delete_status_); 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, DestroyQuotaManagerWithPending) { 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginA, 1000); 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginB, 10); 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SetUsageMapEntry(kOriginOther, 500); 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Queue up some reqeusts prior to being ready. 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginA, kPerm); 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginUsage(client, kOriginB, kTemp); 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kPerm); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForType(client, kTemp); 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginA.host()); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncGetOriginsForHost(client, kTemp, kOriginOther.host()); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginA); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kPerm, kOriginA); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginB); 382d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origin_usage_completions_); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origins_completions_); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the quota manager. 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Callbacks should be deleted and not called. 392d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origin_usage_completions_); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_get_origins_completions_); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(AppCacheQuotaClientTest, DestroyWithDeleteInProgress) { 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AppCacheQuotaClient* client = CreateClient(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheReady(client); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Start an async delete. 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) AsyncDeleteOriginData(client, kTemp, kOriginB); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, num_delete_origins_completions_); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Kill the service. 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_NotifyAppCacheDestroyed(client); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Should have been aborted. 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, num_delete_origins_completions_); 41303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, delete_status_); 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // A real completion callback from the service should 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // be dropped if it comes in after NotifyAppCacheDestroyed. 417d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(1, num_delete_origins_completions_); 41903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) EXPECT_EQ(storage::kQuotaErrorAbort, delete_status_); 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Call_OnQuotaManagerDestroyed(client); 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 424a02191e04bc25c4935f804f2c080ae28663d096dBen Murdoch} // namespace content 425