OLD | NEW |
| (Empty) |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "base/message_loop/message_loop.h" | |
6 #include "testing/gtest/include/gtest/gtest.h" | |
7 #include "webkit/browser/appcache/appcache.h" | |
8 #include "webkit/browser/appcache/appcache_group.h" | |
9 #include "webkit/browser/appcache/appcache_response.h" | |
10 #include "webkit/browser/appcache/appcache_storage.h" | |
11 #include "webkit/browser/appcache/mock_appcache_service.h" | |
12 #include "webkit/browser/quota/mock_quota_manager_proxy.h" | |
13 | |
14 namespace appcache { | |
15 | |
16 namespace { | |
17 const quota::StorageType kTemp = quota::kStorageTypeTemporary; | |
18 } | |
19 | |
20 class AppCacheStorageTest : public testing::Test { | |
21 public: | |
22 class MockStorageDelegate : public AppCacheStorage::Delegate { | |
23 public: | |
24 }; | |
25 }; | |
26 | |
27 TEST_F(AppCacheStorageTest, AddRemoveCache) { | |
28 MockAppCacheService service; | |
29 scoped_refptr<AppCache> cache(new AppCache(service.storage(), 111)); | |
30 | |
31 EXPECT_EQ(cache.get(), | |
32 service.storage()->working_set()->GetCache(111)); | |
33 | |
34 service.storage()->working_set()->RemoveCache(cache.get()); | |
35 | |
36 EXPECT_TRUE(!service.storage()->working_set()->GetCache(111)); | |
37 | |
38 // Removing non-existing cache from service should not fail. | |
39 MockAppCacheService dummy; | |
40 dummy.storage()->working_set()->RemoveCache(cache.get()); | |
41 } | |
42 | |
43 TEST_F(AppCacheStorageTest, AddRemoveGroup) { | |
44 MockAppCacheService service; | |
45 scoped_refptr<AppCacheGroup> group( | |
46 new AppCacheGroup(service.storage(), GURL(), 111)); | |
47 | |
48 EXPECT_EQ(group.get(), service.storage()->working_set()->GetGroup(GURL())); | |
49 | |
50 service.storage()->working_set()->RemoveGroup(group.get()); | |
51 | |
52 EXPECT_TRUE(!service.storage()->working_set()->GetGroup(GURL())); | |
53 | |
54 // Removing non-existing group from service should not fail. | |
55 MockAppCacheService dummy; | |
56 dummy.storage()->working_set()->RemoveGroup(group.get()); | |
57 } | |
58 | |
59 TEST_F(AppCacheStorageTest, AddRemoveResponseInfo) { | |
60 MockAppCacheService service; | |
61 scoped_refptr<AppCacheResponseInfo> info( | |
62 new AppCacheResponseInfo(service.storage(), GURL(), | |
63 111, new net::HttpResponseInfo, | |
64 kUnkownResponseDataSize)); | |
65 | |
66 EXPECT_EQ(info.get(), | |
67 service.storage()->working_set()->GetResponseInfo(111)); | |
68 | |
69 service.storage()->working_set()->RemoveResponseInfo(info.get()); | |
70 | |
71 EXPECT_TRUE(!service.storage()->working_set()->GetResponseInfo(111)); | |
72 | |
73 // Removing non-existing info from service should not fail. | |
74 MockAppCacheService dummy; | |
75 dummy.storage()->working_set()->RemoveResponseInfo(info.get()); | |
76 } | |
77 | |
78 TEST_F(AppCacheStorageTest, DelegateReferences) { | |
79 typedef scoped_refptr<AppCacheStorage::DelegateReference> | |
80 ScopedDelegateReference; | |
81 MockAppCacheService service; | |
82 MockStorageDelegate delegate; | |
83 ScopedDelegateReference delegate_reference1; | |
84 ScopedDelegateReference delegate_reference2; | |
85 | |
86 EXPECT_FALSE(service.storage()->GetDelegateReference(&delegate)); | |
87 | |
88 delegate_reference1 = | |
89 service.storage()->GetOrCreateDelegateReference(&delegate); | |
90 EXPECT_TRUE(delegate_reference1.get()); | |
91 EXPECT_TRUE(delegate_reference1->HasOneRef()); | |
92 EXPECT_TRUE(service.storage()->GetDelegateReference(&delegate)); | |
93 EXPECT_EQ(&delegate, | |
94 service.storage()->GetDelegateReference(&delegate)->delegate); | |
95 EXPECT_EQ(service.storage()->GetDelegateReference(&delegate), | |
96 service.storage()->GetOrCreateDelegateReference(&delegate)); | |
97 delegate_reference1 = NULL; | |
98 EXPECT_FALSE(service.storage()->GetDelegateReference(&delegate)); | |
99 | |
100 delegate_reference1 = | |
101 service.storage()->GetOrCreateDelegateReference(&delegate); | |
102 service.storage()->CancelDelegateCallbacks(&delegate); | |
103 EXPECT_TRUE(delegate_reference1.get()); | |
104 EXPECT_TRUE(delegate_reference1->HasOneRef()); | |
105 EXPECT_FALSE(delegate_reference1->delegate); | |
106 EXPECT_FALSE(service.storage()->GetDelegateReference(&delegate)); | |
107 | |
108 delegate_reference2 = | |
109 service.storage()->GetOrCreateDelegateReference(&delegate); | |
110 EXPECT_TRUE(delegate_reference2.get()); | |
111 EXPECT_TRUE(delegate_reference2->HasOneRef()); | |
112 EXPECT_EQ(&delegate, delegate_reference2->delegate); | |
113 EXPECT_NE(delegate_reference1.get(), delegate_reference2.get()); | |
114 } | |
115 | |
116 TEST_F(AppCacheStorageTest, UsageMap) { | |
117 const GURL kOrigin("http://origin/"); | |
118 const GURL kOrigin2("http://origin2/"); | |
119 | |
120 MockAppCacheService service; | |
121 scoped_refptr<quota::MockQuotaManagerProxy> mock_proxy( | |
122 new quota::MockQuotaManagerProxy(NULL, NULL)); | |
123 service.set_quota_manager_proxy(mock_proxy.get()); | |
124 | |
125 service.storage()->UpdateUsageMapAndNotify(kOrigin, 0); | |
126 EXPECT_EQ(0, mock_proxy->notify_storage_modified_count()); | |
127 | |
128 service.storage()->UpdateUsageMapAndNotify(kOrigin, 10); | |
129 EXPECT_EQ(1, mock_proxy->notify_storage_modified_count()); | |
130 EXPECT_EQ(10, mock_proxy->last_notified_delta()); | |
131 EXPECT_EQ(kOrigin, mock_proxy->last_notified_origin()); | |
132 EXPECT_EQ(kTemp, mock_proxy->last_notified_type()); | |
133 | |
134 service.storage()->UpdateUsageMapAndNotify(kOrigin, 100); | |
135 EXPECT_EQ(2, mock_proxy->notify_storage_modified_count()); | |
136 EXPECT_EQ(90, mock_proxy->last_notified_delta()); | |
137 EXPECT_EQ(kOrigin, mock_proxy->last_notified_origin()); | |
138 EXPECT_EQ(kTemp, mock_proxy->last_notified_type()); | |
139 | |
140 service.storage()->UpdateUsageMapAndNotify(kOrigin, 0); | |
141 EXPECT_EQ(3, mock_proxy->notify_storage_modified_count()); | |
142 EXPECT_EQ(-100, mock_proxy->last_notified_delta()); | |
143 EXPECT_EQ(kOrigin, mock_proxy->last_notified_origin()); | |
144 EXPECT_EQ(kTemp, mock_proxy->last_notified_type()); | |
145 | |
146 service.storage()->NotifyStorageAccessed(kOrigin2); | |
147 EXPECT_EQ(0, mock_proxy->notify_storage_accessed_count()); | |
148 | |
149 service.storage()->usage_map_[kOrigin2] = 1; | |
150 service.storage()->NotifyStorageAccessed(kOrigin2); | |
151 EXPECT_EQ(1, mock_proxy->notify_storage_accessed_count()); | |
152 EXPECT_EQ(kOrigin2, mock_proxy->last_notified_origin()); | |
153 EXPECT_EQ(kTemp, mock_proxy->last_notified_type()); | |
154 | |
155 service.storage()->usage_map_.clear(); | |
156 service.storage()->usage_map_[kOrigin] = 5000; | |
157 service.storage()->ClearUsageMapAndNotify(); | |
158 EXPECT_EQ(4, mock_proxy->notify_storage_modified_count()); | |
159 EXPECT_EQ(-5000, mock_proxy->last_notified_delta()); | |
160 EXPECT_EQ(kOrigin, mock_proxy->last_notified_origin()); | |
161 EXPECT_EQ(kTemp, mock_proxy->last_notified_type()); | |
162 EXPECT_TRUE(service.storage()->usage_map_.empty()); | |
163 } | |
164 | |
165 } // namespace appcache | |
OLD | NEW |