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

Side by Side Diff: chrome/browser/browsing_data_remover_unittest.cc

Issue 7210006: AppCaches which belong to hosted apps are not protected from deletion (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Clearing appcaches & waiting in Shutdown(). Created 9 years, 5 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/browsing_data_remover.h" 5 #include "chrome/browser/browsing_data_remover.h"
6 6
7 #include <set>
8
7 #include "base/message_loop.h" 9 #include "base/message_loop.h"
8 #include "base/platform_file.h" 10 #include "base/platform_file.h"
9 #include "chrome/browser/history/history.h" 11 #include "chrome/browser/history/history.h"
10 #include "chrome/test/testing_profile.h" 12 #include "chrome/test/testing_profile.h"
13 #include "content/browser/appcache/chrome_appcache_service.h"
11 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "webkit/appcache/appcache.h"
16 #include "webkit/appcache/appcache_group.h"
17 #include "webkit/appcache/appcache_storage.h"
12 #include "webkit/fileapi/file_system_context.h" 18 #include "webkit/fileapi/file_system_context.h"
13 #include "webkit/fileapi/file_system_operation_context.h" 19 #include "webkit/fileapi/file_system_operation_context.h"
14 #include "webkit/fileapi/file_system_file_util.h" 20 #include "webkit/fileapi/file_system_file_util.h"
15 #include "webkit/fileapi/file_system_path_manager.h" 21 #include "webkit/fileapi/file_system_path_manager.h"
16 #include "webkit/fileapi/sandbox_mount_point_provider.h" 22 #include "webkit/fileapi/sandbox_mount_point_provider.h"
23 #include "webkit/quota/mock_special_storage_policy.h"
17 24
18 namespace { 25 namespace browsing_data_remover_test {
19 26
20 const char kTestkOrigin1[] = "http://host1:1/"; 27 const char kTestkOrigin1[] = "http://host1:1/";
21 const char kTestkOrigin2[] = "http://host2:1/"; 28 const char kTestkOrigin2[] = "http://host2:1/";
22 const char kTestkOrigin3[] = "http://host3:1/"; 29 const char kTestkOrigin3[] = "http://host3:1/";
23 30
24 const GURL kOrigin1(kTestkOrigin1); 31 const GURL kOrigin1(kTestkOrigin1);
25 const GURL kOrigin2(kTestkOrigin2); 32 const GURL kOrigin2(kTestkOrigin2);
26 const GURL kOrigin3(kTestkOrigin3); 33 const GURL kOrigin3(kTestkOrigin3);
27 34
35 const GURL kProtectedManifest("http://www.protected.com/cache.manifest");
36 const GURL kNormalManifest("http://www.normal.com/cache.manifest");
37
28 class BrowsingDataRemoverTester : public BrowsingDataRemover::Observer { 38 class BrowsingDataRemoverTester : public BrowsingDataRemover::Observer {
29 public: 39 public:
30 BrowsingDataRemoverTester() {} 40 BrowsingDataRemoverTester() {}
31 virtual ~BrowsingDataRemoverTester() {} 41 virtual ~BrowsingDataRemoverTester() {}
32 42
33 void BlockUntilNotified() { 43 void BlockUntilNotified() {
34 MessageLoop::current()->Run(); 44 MessageLoop::current()->Run();
35 } 45 }
36 46
37 protected: 47 protected:
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 EXPECT_TRUE(file_util::DirectoryExists(target)); 159 EXPECT_TRUE(file_util::DirectoryExists(target));
150 } 160 }
151 161
152 private: 162 private:
153 fileapi::SandboxMountPointProvider* sandbox_; 163 fileapi::SandboxMountPointProvider* sandbox_;
154 bool found_file_system_; 164 bool found_file_system_;
155 165
156 DISALLOW_COPY_AND_ASSIGN(RemoveFileSystemTester); 166 DISALLOW_COPY_AND_ASSIGN(RemoveFileSystemTester);
157 }; 167 };
158 168
169 // Helper class for injecting data into AppCacheStorage.
170 class DummyStorageDelegate : public appcache::AppCacheStorage::Delegate {
171 public:
172 DummyStorageDelegate() { }
173 virtual void OnGroupAndNewestCacheStored(
174 appcache::AppCacheGroup* /*group*/, appcache::AppCache* /*newest_cache*/,
175 bool success, bool /*would_exceed_quota*/) {
176 EXPECT_TRUE(success);
177 MessageLoop::current()->Quit();
178 }
179 };
180
181 void AddGroupAndCache(ChromeAppCacheService* appcache_service,
182 const GURL& manifest_url) {
183
184 using appcache::AppCache;
185 using appcache::AppCacheEntry;
186 using appcache::AppCacheGroup;
187 static int group_id = 0;
188 static int appcache_id = 0;
189 static int response_id = 0;
190 AppCacheGroup* appcache_group =
191 new AppCacheGroup(appcache_service, manifest_url, ++group_id);
192 AppCache* appcache = new appcache::AppCache(appcache_service, ++appcache_id);
193 AppCacheEntry entry(AppCacheEntry::MANIFEST, ++response_id);
194 appcache->AddEntry(manifest_url, entry);
195 appcache->set_complete(true);
196 appcache_group->AddCache(appcache);
197 DummyStorageDelegate test_delegate;
198 appcache_service->storage()->StoreGroupAndNewestCache(appcache_group,
199 appcache,
200 &test_delegate);
201 // DummyStorageDelegate::OnGroupAndNewestCacheStored will quit the message
202 // loop.
203 MessageLoop::current()->Run();
204 }
205
206 // Helper class for reading appcaches.
207 class AppCacheReader {
208 public:
209 explicit AppCacheReader(ChromeAppCacheService* appcache_service)
210 : appcache_service_(appcache_service),
211 ALLOW_THIS_IN_INITIALIZER_LIST(appcache_got_info_callback_(
212 this, &AppCacheReader::OnGotAppCacheInfo)) {
213 }
214
215 std::set<GURL>* ReadAppCaches() {
216 appcache_info_ = new appcache::AppCacheInfoCollection;
217 appcache_service_->GetAllAppCacheInfo(
218 appcache_info_, &appcache_got_info_callback_);
219
220 MessageLoop::current()->Run();
221 return &origins_;
222 }
223
224 private:
225 void OnGotAppCacheInfo(int rv) {
226 using appcache::AppCacheInfoVector;
227 typedef std::map<GURL, AppCacheInfoVector> InfoByOrigin;
228
229 origins_.clear();
230 for (InfoByOrigin::const_iterator origin =
231 appcache_info_->infos_by_origin.begin();
232 origin != appcache_info_->infos_by_origin.end(); ++origin) {
233 origins_.insert(origin->first);
234 }
235 MessageLoop::current()->Quit();
236 }
237
238 scoped_refptr<ChromeAppCacheService> appcache_service_;
239 net::CompletionCallbackImpl<AppCacheReader>
240 appcache_got_info_callback_;
241 scoped_refptr<appcache::AppCacheInfoCollection> appcache_info_;
242 std::set<GURL> origins_;
243 };
244
159 class BrowsingDataRemoverTest : public testing::Test { 245 class BrowsingDataRemoverTest : public testing::Test {
160 public: 246 public:
161 BrowsingDataRemoverTest() 247 BrowsingDataRemoverTest()
162 : ui_thread_(BrowserThread::UI, &message_loop_), 248 : ui_thread_(BrowserThread::UI, &message_loop_),
163 db_thread_(BrowserThread::DB, &message_loop_), 249 db_thread_(BrowserThread::DB, &message_loop_),
164 webkit_thread_(BrowserThread::WEBKIT, &message_loop_), 250 webkit_thread_(BrowserThread::WEBKIT, &message_loop_),
165 file_thread_(BrowserThread::FILE, &message_loop_), 251 file_thread_(BrowserThread::FILE, &message_loop_),
166 io_thread_(BrowserThread::IO, &message_loop_), 252 io_thread_(BrowserThread::IO, &message_loop_),
167 profile_(new TestingProfile()) { 253 profile_(new TestingProfile()) {
168 } 254 }
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
257 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin2, 343 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin2,
258 fileapi::kFileSystemTypePersistent)); 344 fileapi::kFileSystemTypePersistent));
259 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin2, 345 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin2,
260 fileapi::kFileSystemTypeTemporary)); 346 fileapi::kFileSystemTypeTemporary));
261 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin3, 347 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin3,
262 fileapi::kFileSystemTypePersistent)); 348 fileapi::kFileSystemTypePersistent));
263 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin3, 349 EXPECT_FALSE(tester->FileSystemContainsOriginAndType(kOrigin3,
264 fileapi::kFileSystemTypeTemporary)); 350 fileapi::kFileSystemTypeTemporary));
265 } 351 }
266 352
267 } // namespace 353
354 TEST_F(BrowsingDataRemoverTest, RemoveAppCacheForever) {
355 // Set up ChromeAppCacheService.
356 scoped_refptr<ChromeAppCacheService> appcache_service =
357 new ChromeAppCacheService(NULL);
358 const content::ResourceContext* resource_context = NULL;
359 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy =
360 new quota::MockSpecialStoragePolicy;
361 mock_policy->AddProtected(kProtectedManifest.GetOrigin());
362 BrowserThread::PostTask(
363 BrowserThread::IO, FROM_HERE,
364 NewRunnableMethod(appcache_service.get(),
365 &ChromeAppCacheService::InitializeOnIOThread,
366 FilePath(""),
367 resource_context,
368 mock_policy));
369 MessageLoop::current()->RunAllPending();
370 TestingProfile* profile = GetProfile();
371 profile->SetAppCacheService(appcache_service);
372
373 // Add data into the AppCacheStorage.
374 AddGroupAndCache(appcache_service, kNormalManifest);
375 AddGroupAndCache(appcache_service, kProtectedManifest);
376
377 // Verify that adding the data succeeded.
378 scoped_ptr<AppCacheReader> reader(new AppCacheReader(appcache_service));
379 std::set<GURL>* origins = reader->ReadAppCaches();
380 EXPECT_EQ(2UL, origins->size());
381 EXPECT_NE(origins->end(), origins->find(kProtectedManifest.GetOrigin()));
382 EXPECT_NE(origins->end(), origins->find(kNormalManifest.GetOrigin()));
383
384 // Set up the object to be tested.
385 scoped_ptr<BrowsingDataRemoverTester> tester(new BrowsingDataRemoverTester());
386 BrowsingDataRemover* remover = new BrowsingDataRemover(
387 profile, BrowsingDataRemover::EVERYTHING, base::Time::Now());
388 remover->AddObserver(tester.get());
389
390 // Remove the appcaches and wait for it to complete. BrowsingDataRemover
391 // deletes itself when it completes.
392 remover->Remove(BrowsingDataRemover::REMOVE_COOKIES);
393 tester->BlockUntilNotified();
394
395 // Results: appcaches for the normal origin got deleted, appcaches for the
396 // protected origin didn't.
397 origins = reader->ReadAppCaches();
398 EXPECT_EQ(1UL, origins->size());
399 EXPECT_NE(origins->end(), origins->find(kProtectedManifest.GetOrigin()));
400 }
401
402 } // namespace browsing_data_remover_test
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698