OLD | NEW |
---|---|
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/appcache_util.h" | |
9 #include "chrome/test/testing_browser_process.h" | 10 #include "chrome/test/testing_browser_process.h" |
10 #include "chrome/test/testing_browser_process_test.h" | 11 #include "chrome/test/testing_browser_process_test.h" |
11 #include "content/browser/appcache/chrome_appcache_service.h" | 12 #include "content/browser/appcache/chrome_appcache_service.h" |
12 #include "content/browser/browser_thread.h" | 13 #include "content/browser/browser_thread.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 14 #include "testing/gtest/include/gtest/gtest.h" |
15 #include "webkit/appcache/appcache_database.h" | |
14 #include "webkit/appcache/appcache_storage_impl.h" | 16 #include "webkit/appcache/appcache_storage_impl.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 GURL kProtectedManifest("http://www.protected.com/cache.manifest"); | |
28 const GURL kNormalManifest("http://www.normal.com/cache.manifest"); | |
michaeln
2011/07/15 19:15:46
Can you make these non-primitives data members of
marja(google)
2011/07/18 09:55:41
Done for this file. But I left the GURLs in browsi
| |
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), |
27 db_thread_(BrowserThread::DB, &message_loop_), | 38 db_thread_(BrowserThread::DB, &message_loop_), |
28 file_thread_(BrowserThread::FILE, &message_loop_), | 39 file_thread_(BrowserThread::FILE, &message_loop_), |
29 cache_thread_(BrowserThread::CACHE, &message_loop_), | 40 cache_thread_(BrowserThread::CACHE, &message_loop_), |
30 io_thread_(BrowserThread::IO, &message_loop_) { | 41 io_thread_(BrowserThread::IO, &message_loop_) { |
31 } | 42 } |
32 | 43 |
33 protected: | 44 protected: |
45 void CreateAppCacheService( | |
46 scoped_refptr<ChromeAppCacheService>& appache_service, | |
47 const FilePath& appcache_path, | |
48 bool init_storage); | |
49 void InsertDataIntoAppCache(ChromeAppCacheService* appcache_service); | |
50 | |
34 MessageLoop message_loop_; | 51 MessageLoop message_loop_; |
35 ScopedTempDir temp_dir_; | 52 ScopedTempDir temp_dir_; |
36 | 53 |
37 private: | 54 private: |
38 BrowserThread db_thread_; | 55 BrowserThread db_thread_; |
39 BrowserThread file_thread_; | 56 BrowserThread file_thread_; |
40 BrowserThread cache_thread_; | 57 BrowserThread cache_thread_; |
41 BrowserThread io_thread_; | 58 BrowserThread io_thread_; |
42 }; | 59 }; |
43 | 60 |
44 TEST_F(ChromeAppCacheServiceTest, KeepOnDestruction) { | 61 void ChromeAppCacheServiceTest::CreateAppCacheService( |
45 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 62 scoped_refptr<ChromeAppCacheService>& appcache_service, |
michaeln
2011/07/15 19:15:46
Google style thing... we discourage non-const refe
marja(google)
2011/07/18 09:55:41
The reason for not returning scoped_refptr was to
marja(google)
2011/07/18 15:03:20
Hmm, it seems that ASSSERT_* in a non-test functio
marja(google)
2011/07/18 15:03:20
Done.
| |
46 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); | 63 const FilePath& appcache_path, |
47 scoped_refptr<ChromeAppCacheService> appcache_service = | 64 bool init_storage) { |
48 new ChromeAppCacheService(NULL); | 65 appcache_service = new ChromeAppCacheService(NULL); |
49 const content::ResourceContext* resource_context = NULL; | 66 const content::ResourceContext* resource_context = NULL; |
67 scoped_refptr<quota::MockSpecialStoragePolicy> mock_policy = | |
68 new quota::MockSpecialStoragePolicy; | |
69 mock_policy->AddProtected(kProtectedManifest.GetOrigin()); | |
50 BrowserThread::PostTask( | 70 BrowserThread::PostTask( |
51 BrowserThread::IO, FROM_HERE, | 71 BrowserThread::IO, FROM_HERE, |
52 NewRunnableMethod(appcache_service.get(), | 72 NewRunnableMethod(appcache_service.get(), |
53 &ChromeAppCacheService::InitializeOnIOThread, | 73 &ChromeAppCacheService::InitializeOnIOThread, |
54 appcache_path, | 74 appcache_path, |
55 resource_context, | 75 resource_context, |
56 scoped_refptr<quota::SpecialStoragePolicy>(NULL), | 76 mock_policy)); |
57 false)); | |
58 // Make the steps needed to initialize the storage of AppCache data. | 77 // Make the steps needed to initialize the storage of AppCache data. |
59 message_loop_.RunAllPending(); | 78 message_loop_.RunAllPending(); |
60 appcache::AppCacheStorageImpl* storage = | 79 if (init_storage) { |
61 static_cast<appcache::AppCacheStorageImpl*>(appcache_service->storage()); | 80 appcache::AppCacheStorageImpl* storage = |
62 ASSERT_TRUE(storage->database_->db_connection()); | 81 static_cast<appcache::AppCacheStorageImpl*>( |
63 ASSERT_EQ(1, storage->NewCacheId()); | 82 appcache_service->storage()); |
64 storage->disk_cache(); | 83 ASSERT_TRUE(storage->database_->db_connection()); |
65 message_loop_.RunAllPending(); | 84 ASSERT_EQ(1, storage->NewCacheId()); |
85 storage->disk_cache(); | |
86 message_loop_.RunAllPending(); | |
87 } | |
88 } | |
66 | 89 |
90 void ChromeAppCacheServiceTest::InsertDataIntoAppCache( | |
91 ChromeAppCacheService* appcache_service) { | |
92 AppCacheInserter appcache_inserter; | |
93 appcache_inserter.AddGroupAndCache(appcache_service, kNormalManifest); | |
94 appcache_inserter.AddGroupAndCache(appcache_service, kProtectedManifest); | |
95 | |
96 // Verify that adding the data succeeded | |
97 AppCacheReader reader(appcache_service); | |
98 std::set<GURL>* origins = reader.ReadAppCaches(); | |
99 ASSERT_EQ(2UL, origins->size()); | |
100 ASSERT_TRUE(origins->find(kProtectedManifest.GetOrigin()) != origins->end()); | |
101 ASSERT_TRUE(origins->find(kNormalManifest.GetOrigin()) != origins->end()); | |
102 } | |
103 | |
104 TEST_F(ChromeAppCacheServiceTest, KeepOnDestruction) { | |
105 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | |
106 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); | |
107 | |
108 // Create a ChromeAppCacheService and insert data into it | |
109 scoped_refptr<ChromeAppCacheService> appcache_service; | |
110 CreateAppCacheService(appcache_service, appcache_path, true); | |
67 ASSERT_TRUE(file_util::PathExists(appcache_path)); | 111 ASSERT_TRUE(file_util::PathExists(appcache_path)); |
68 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); | 112 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); |
113 InsertDataIntoAppCache(appcache_service); | |
69 | 114 |
115 // Test: delete the ChromeAppCacheService | |
116 appcache_service->set_clear_local_state_on_exit(false); | |
70 appcache_service = NULL; | 117 appcache_service = NULL; |
71 message_loop_.RunAllPending(); | 118 message_loop_.RunAllPending(); |
72 | 119 |
120 // Recreate the appcache (for reading the data back) | |
121 CreateAppCacheService(appcache_service, appcache_path, false); | |
122 | |
123 // The directory is still there | |
73 ASSERT_TRUE(file_util::PathExists(appcache_path)); | 124 ASSERT_TRUE(file_util::PathExists(appcache_path)); |
125 | |
126 // The appcache data is also there | |
127 AppCacheReader reader(appcache_service); | |
128 std::set<GURL>* origins = reader.ReadAppCaches(); | |
129 EXPECT_EQ(2UL, origins->size()); | |
130 EXPECT_TRUE(origins->find(kProtectedManifest.GetOrigin()) != origins->end()); | |
131 EXPECT_TRUE(origins->find(kNormalManifest.GetOrigin()) != origins->end()); | |
74 } | 132 } |
75 | 133 |
76 TEST_F(ChromeAppCacheServiceTest, RemoveOnDestruction) { | 134 TEST_F(ChromeAppCacheServiceTest, RemoveOnDestruction) { |
77 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 135 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
78 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); | 136 FilePath appcache_path = temp_dir_.path().Append(kTestingAppCacheDirname); |
79 scoped_refptr<ChromeAppCacheService> appcache_service = | |
80 new ChromeAppCacheService(NULL); | |
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 | 137 |
138 // Create a ChromeAppCacheService and insert data into it | |
139 scoped_refptr<ChromeAppCacheService> appcache_service; | |
140 CreateAppCacheService(appcache_service, appcache_path, true); | |
99 ASSERT_TRUE(file_util::PathExists(appcache_path)); | 141 ASSERT_TRUE(file_util::PathExists(appcache_path)); |
100 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); | 142 ASSERT_TRUE(file_util::PathExists(appcache_path.AppendASCII("Index"))); |
143 InsertDataIntoAppCache(appcache_service); | |
101 | 144 |
145 // Test: delete the ChromeAppCacheService | |
146 appcache_service->set_clear_local_state_on_exit(true); | |
102 appcache_service = NULL; | 147 appcache_service = NULL; |
103 message_loop_.RunAllPending(); | 148 message_loop_.RunAllPending(); |
104 | 149 |
105 ASSERT_FALSE(file_util::PathExists(appcache_path)); | 150 // Recreate the appcache (for reading the data back) |
151 CreateAppCacheService(appcache_service, appcache_path, false); | |
152 | |
153 // The directory is still there | |
154 ASSERT_TRUE(file_util::PathExists(appcache_path)); | |
155 | |
156 // The appcache data for the protected origin is there, and the data for the | |
157 // unprotected origin was deleted. | |
158 AppCacheReader reader(appcache_service); | |
159 std::set<GURL>* origins = reader.ReadAppCaches(); | |
160 EXPECT_EQ(1UL, origins->size()); | |
161 EXPECT_TRUE(origins->find(kProtectedManifest.GetOrigin()) != origins->end()); | |
162 EXPECT_TRUE(origins->find(kNormalManifest.GetOrigin()) == origins->end()); | |
106 } | 163 } |
107 | 164 |
108 } // namespace appcache | 165 } // namespace appcache |
OLD | NEW |