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

Side by Side Diff: content/browser/appcache/chrome_appcache_service_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: Moving test helpers to webkit/appcache. 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
« no previous file with comments | « content/browser/appcache/chrome_appcache_service.cc ('k') | webkit/appcache/appcache_service.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "base/file_util.h" 5 #include "base/file_util.h"
6 #include "base/memory/ref_counted.h" 6 #include "base/memory/ref_counted.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/scoped_temp_dir.h" 8 #include "base/scoped_temp_dir.h"
9 #include "chrome/test/testing_browser_process.h" 9 #include "chrome/test/testing_browser_process.h"
10 #include "chrome/test/testing_browser_process_test.h" 10 #include "chrome/test/testing_browser_process_test.h"
11 #include "content/browser/appcache/chrome_appcache_service.h" 11 #include "content/browser/appcache/chrome_appcache_service.h"
12 #include "content/browser/browser_thread.h" 12 #include "content/browser/browser_thread.h"
13 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "webkit/appcache/appcache_database.h"
14 #include "webkit/appcache/appcache_storage_impl.h" 15 #include "webkit/appcache/appcache_storage_impl.h"
16 #include "webkit/appcache/appcache_test_helper.h"
17 #include "webkit/quota/mock_special_storage_policy.h"
18
19 #include <set>
15 20
16 namespace { 21 namespace {
17 const FilePath::CharType kTestingAppCacheDirname[] = 22 const FilePath::CharType kTestingAppCacheDirname[] =
18 FILE_PATH_LITERAL("Application Cache"); 23 FILE_PATH_LITERAL("Application Cache");
19 } 24
25 // Examples of a protected and an unprotected origin, to be used througout the
26 // test.
27 const char kProtectedManifest[] = "http://www.protected.com/cache.manifest";
28 const char kNormalManifest[] = "http://www.normal.com/cache.manifest";
29
30 } // namespace
20 31
21 namespace appcache { 32 namespace appcache {
22 33
23 class ChromeAppCacheServiceTest : public TestingBrowserProcessTest { 34 class ChromeAppCacheServiceTest : public TestingBrowserProcessTest {
24 public: 35 public:
25 ChromeAppCacheServiceTest() 36 ChromeAppCacheServiceTest()
26 : message_loop_(MessageLoop::TYPE_IO), 37 : message_loop_(MessageLoop::TYPE_IO),
38 kProtectedManifestURL(kProtectedManifest),
39 kNormalManifestURL(kNormalManifest),
27 db_thread_(BrowserThread::DB, &message_loop_), 40 db_thread_(BrowserThread::DB, &message_loop_),
28 file_thread_(BrowserThread::FILE, &message_loop_), 41 file_thread_(BrowserThread::FILE, &message_loop_),
29 cache_thread_(BrowserThread::CACHE, &message_loop_), 42 cache_thread_(BrowserThread::CACHE, &message_loop_),
30 io_thread_(BrowserThread::IO, &message_loop_) { 43 io_thread_(BrowserThread::IO, &message_loop_) {
31 } 44 }
32 45
33 protected: 46 protected:
47 scoped_refptr<ChromeAppCacheService> CreateAppCacheService(
48 const FilePath& appcache_path,
49 bool init_storage);
50 void InsertDataIntoAppCache(ChromeAppCacheService* appcache_service);
51
34 MessageLoop message_loop_; 52 MessageLoop message_loop_;
35 ScopedTempDir temp_dir_; 53 ScopedTempDir temp_dir_;
54 const GURL kProtectedManifestURL;
55 const GURL kNormalManifestURL;
36 56
37 private: 57 private:
38 BrowserThread db_thread_; 58 BrowserThread db_thread_;
39 BrowserThread file_thread_; 59 BrowserThread file_thread_;
40 BrowserThread cache_thread_; 60 BrowserThread cache_thread_;
41 BrowserThread io_thread_; 61 BrowserThread io_thread_;
42 }; 62 };
43 63
44 TEST_F(ChromeAppCacheServiceTest, KeepOnDestruction) { 64 scoped_refptr<ChromeAppCacheService>
45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 65 ChromeAppCacheServiceTest::CreateAppCacheService(
46 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); 66 const FilePath& appcache_path,
67 bool init_storage) {
47 scoped_refptr<ChromeAppCacheService> appcache_service = 68 scoped_refptr<ChromeAppCacheService> appcache_service =
48 new ChromeAppCacheService(NULL); 69 new ChromeAppCacheService(NULL);
49 const content::ResourceContext* resource_context = NULL; 70 const content::ResourceContext* resource_context = NULL;
71 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy =
72 new quota::MockSpecialStoragePolicy;
73 mock_policy->AddProtected(kProtectedManifestURL.GetOrigin());
50 BrowserThread::PostTask( 74 BrowserThread::PostTask(
51 BrowserThread::IO, FROM_HERE, 75 BrowserThread::IO, FROM_HERE,
52 NewRunnableMethod(appcache_service.get(), 76 NewRunnableMethod(appcache_service.get(),
53 &ChromeAppCacheService::InitializeOnIOThread, 77 &ChromeAppCacheService::InitializeOnIOThread,
54 appcache_path, 78 appcache_path,
55 resource_context, 79 resource_context,
56 scoped_refptr<quota::SpecialStoragePolicy>(NULL), 80 mock_policy));
57 false)); 81 // Steps needed to initialize the storage of AppCache data.
58 // Make the steps needed to initialize the storage of AppCache data.
59 message_loop_.RunAllPending(); 82 message_loop_.RunAllPending();
60 appcache::AppCacheStorageImpl* storage = 83 if (init_storage) {
61 static_cast<appcache::AppCacheStorageImpl*>(appcache_service->storage()); 84 appcache::AppCacheStorageImpl* storage =
62 ASSERT_TRUE(storage->database_->db_connection()); 85 static_cast<appcache::AppCacheStorageImpl*>(
63 ASSERT_EQ(1, storage->NewCacheId()); 86 appcache_service->storage());
64 storage->disk_cache(); 87 storage->database_->db_connection();
65 message_loop_.RunAllPending(); 88 storage->disk_cache();
89 message_loop_.RunAllPending();
90 }
91 return appcache_service;
92 }
66 93
94 void ChromeAppCacheServiceTest::InsertDataIntoAppCache(
95 ChromeAppCacheService* appcache_service) {
96 AppCacheTestHelper appcache_helper;
97 appcache_helper.AddGroupAndCache(appcache_service, kNormalManifestURL);
98 appcache_helper.AddGroupAndCache(appcache_service, kProtectedManifestURL);
99
100 // Verify that adding the data succeeded
101 std::set<GURL> origins;
102 appcache_helper.GetOriginsWithCaches(appcache_service, &origins);
103 ASSERT_EQ(2UL, origins.size());
104 ASSERT_TRUE(origins.find(kProtectedManifestURL.GetOrigin()) != origins.end());
105 ASSERT_TRUE(origins.find(kNormalManifestURL.GetOrigin()) != origins.end());
106 }
107
108 TEST_F(ChromeAppCacheServiceTest, KeepOnDestruction) {
109 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
110 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname);
111
112 // Create a ChromeAppCacheService and insert data into it
113 scoped_refptr<ChromeAppCacheService> appcache_service =
114 CreateAppCacheService(appcache_path, true);
67 ASSERT_TRUE(file_util::PathExists(appcache_path)); 115 ASSERT_TRUE(file_util::PathExists(appcache_path));
68 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); 116 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index")));
117 InsertDataIntoAppCache(appcache_service);
69 118
119 // Test: delete the ChromeAppCacheService
120 appcache_service->set_clear_local_state_on_exit(false);
70 appcache_service = NULL; 121 appcache_service = NULL;
71 message_loop_.RunAllPending(); 122 message_loop_.RunAllPending();
72 123
124 // Recreate the appcache (for reading the data back)
125 appcache_service = CreateAppCacheService(appcache_path, false);
126
127 // The directory is still there
73 ASSERT_TRUE(file_util::PathExists(appcache_path)); 128 ASSERT_TRUE(file_util::PathExists(appcache_path));
129
130 // The appcache data is also there
131 AppCacheTestHelper appcache_helper;
132 std::set<GURL> origins;
133 appcache_helper.GetOriginsWithCaches(appcache_service, &origins);
134 EXPECT_EQ(2UL, origins.size());
135 EXPECT_TRUE(origins.find(kProtectedManifestURL.GetOrigin()) != origins.end());
136 EXPECT_TRUE(origins.find(kNormalManifestURL.GetOrigin()) != origins.end());
74 } 137 }
75 138
76 TEST_F(ChromeAppCacheServiceTest, RemoveOnDestruction) { 139 TEST_F(ChromeAppCacheServiceTest, RemoveOnDestruction) {
77 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 140 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
78 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); 141 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname);
142
143 // Create a ChromeAppCacheService and insert data into it
79 scoped_refptr<ChromeAppCacheService> appcache_service = 144 scoped_refptr<ChromeAppCacheService> appcache_service =
80 new ChromeAppCacheService(NULL); 145 CreateAppCacheService(appcache_path, true);
81 const content::ResourceContext* resource_context = NULL;
82 BrowserThread::PostTask(
83 BrowserThread::IO, FROM_HERE,
84 NewRunnableMethod(appcache_service.get(),
85 &ChromeAppCacheService::InitializeOnIOThread,
86 appcache_path,
87 resource_context,
88 scoped_refptr<quota::SpecialStoragePolicy>(NULL),
89 true));
90 // Make the steps needed to initialize the storage of AppCache data.
91 message_loop_.RunAllPending();
92 appcache::AppCacheStorageImpl* storage =
93 static_cast<appcache::AppCacheStorageImpl*>(appcache_service->storage());
94 ASSERT_TRUE(storage->database_->db_connection());
95 ASSERT_EQ(1, storage->NewCacheId());
96 storage->disk_cache();
97 message_loop_.RunAllPending();
98
99 ASSERT_TRUE(file_util::PathExists(appcache_path)); 146 ASSERT_TRUE(file_util::PathExists(appcache_path));
100 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); 147 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index")));
148 InsertDataIntoAppCache(appcache_service);
101 149
150 // Test: delete the ChromeAppCacheService
151 appcache_service->set_clear_local_state_on_exit(true);
102 appcache_service = NULL; 152 appcache_service = NULL;
103 message_loop_.RunAllPending(); 153 message_loop_.RunAllPending();
104 154
105 ASSERT_FALSE(file_util::PathExists(appcache_path)); 155 // Recreate the appcache (for reading the data back)
156 appcache_service = CreateAppCacheService(appcache_path, false);
157
158 // The directory is still there
159 ASSERT_TRUE(file_util::PathExists(appcache_path));
160
161 // The appcache data for the protected origin is there, and the data for the
162 // unprotected origin was deleted.
163 AppCacheTestHelper appcache_helper;
164 std::set<GURL> origins;
165 appcache_helper.GetOriginsWithCaches(appcache_service, &origins);
166 EXPECT_EQ(1UL, origins.size());
167 EXPECT_TRUE(origins.find(kProtectedManifestURL.GetOrigin()) != origins.end());
168 EXPECT_TRUE(origins.find(kNormalManifestURL.GetOrigin()) == origins.end());
106 } 169 }
107 170
108 } // namespace appcache 171 } // namespace appcache
OLDNEW
« no previous file with comments | « content/browser/appcache/chrome_appcache_service.cc ('k') | webkit/appcache/appcache_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698