OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
8 #include "base/logging.h" | 8 #include "base/logging.h" |
9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
10 #include "base/thread_task_runner_handle.h" | 10 #include "base/thread_task_runner_handle.h" |
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
197 | 197 |
198 void WriteResponseOfSize(ServiceWorkerStorage* storage, int64 id, | 198 void WriteResponseOfSize(ServiceWorkerStorage* storage, int64 id, |
199 char val, int size) { | 199 char val, int size) { |
200 const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\00"; | 200 const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\00"; |
201 std::string headers(kHttpHeaders, arraysize(kHttpHeaders)); | 201 std::string headers(kHttpHeaders, arraysize(kHttpHeaders)); |
202 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size); | 202 scoped_refptr<net::IOBuffer> buffer = new net::IOBuffer(size); |
203 memset(buffer->data(), val, size); | 203 memset(buffer->data(), val, size); |
204 WriteResponse(storage, id, headers, buffer.get(), size); | 204 WriteResponse(storage, id, headers, buffer.get(), size); |
205 } | 205 } |
206 | 206 |
| 207 int WriteResponseMetadata(ServiceWorkerStorage* storage, |
| 208 int64 id, |
| 209 const std::string& metadata) { |
| 210 scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(metadata.data())); |
| 211 scoped_ptr<ServiceWorkerResponseMetadataWriter> metadata_writer = |
| 212 storage->CreateResponseMetadataWriter(id); |
| 213 TestCompletionCallback cb; |
| 214 metadata_writer->WriteMetadata(body_buffer.get(), metadata.length(), |
| 215 cb.callback()); |
| 216 return cb.WaitForResult(); |
| 217 } |
| 218 |
| 219 int WriteMetadata(ServiceWorkerVersion* version, |
| 220 const GURL& url, |
| 221 const std::string& metadata) { |
| 222 const std::vector<char> data(metadata.begin(), metadata.end()); |
| 223 EXPECT_TRUE(version); |
| 224 TestCompletionCallback cb; |
| 225 version->script_cache_map()->WriteMetadata(url, data, cb.callback()); |
| 226 return cb.WaitForResult(); |
| 227 } |
| 228 |
| 229 int ClearMetadata(ServiceWorkerVersion* version, const GURL& url) { |
| 230 EXPECT_TRUE(version); |
| 231 TestCompletionCallback cb; |
| 232 version->script_cache_map()->ClearMetadata(url, cb.callback()); |
| 233 return cb.WaitForResult(); |
| 234 } |
| 235 |
| 236 bool VerifyResponseMetadata(ServiceWorkerStorage* storage, |
| 237 int64 id, |
| 238 const std::string& expected_metadata) { |
| 239 scoped_ptr<ServiceWorkerResponseReader> reader = |
| 240 storage->CreateResponseReader(id); |
| 241 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = |
| 242 new HttpResponseInfoIOBuffer(); |
| 243 { |
| 244 TestCompletionCallback cb; |
| 245 reader->ReadInfo(info_buffer.get(), cb.callback()); |
| 246 int rv = cb.WaitForResult(); |
| 247 EXPECT_LT(0, rv); |
| 248 } |
| 249 const net::HttpResponseInfo* read_head = info_buffer->http_info.get(); |
| 250 if (!read_head->metadata.get()) |
| 251 return false; |
| 252 EXPECT_EQ(0, memcmp(expected_metadata.data(), read_head->metadata->data(), |
| 253 expected_metadata.length())); |
| 254 return true; |
| 255 } |
| 256 |
207 } // namespace | 257 } // namespace |
208 | 258 |
209 class ServiceWorkerStorageTest : public testing::Test { | 259 class ServiceWorkerStorageTest : public testing::Test { |
210 public: | 260 public: |
211 ServiceWorkerStorageTest() | 261 ServiceWorkerStorageTest() |
212 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) { | 262 : browser_thread_bundle_(TestBrowserThreadBundle::IO_MAINLOOP) { |
213 } | 263 } |
214 | 264 |
215 void SetUp() override { | 265 void SetUp() override { |
216 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager( | 266 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager( |
(...skipping 685 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
902 } | 952 } |
903 | 953 |
904 base::FilePath GetUserDataDirectory() override { | 954 base::FilePath GetUserDataDirectory() override { |
905 return user_data_directory_.path(); | 955 return user_data_directory_.path(); |
906 } | 956 } |
907 | 957 |
908 protected: | 958 protected: |
909 base::ScopedTempDir user_data_directory_; | 959 base::ScopedTempDir user_data_directory_; |
910 }; | 960 }; |
911 | 961 |
| 962 TEST_F(ServiceWorkerResourceStorageTest, |
| 963 WriteMetadataWithServiceWorkerResponseMetadataWriter) { |
| 964 const char kMetadata1[] = "Test metadata"; |
| 965 const char kMetadata2[] = "small"; |
| 966 int64 new_resource_id_ = storage()->NewResourceId(); |
| 967 // Writing metadata to nonexistent resoirce ID must fail. |
| 968 EXPECT_GE(0, WriteResponseMetadata(storage(), new_resource_id_, kMetadata1)); |
| 969 |
| 970 // Check metadata is written. |
| 971 EXPECT_EQ(static_cast<int>(strlen(kMetadata1)), |
| 972 WriteResponseMetadata(storage(), resource_id1_, kMetadata1)); |
| 973 EXPECT_TRUE(VerifyResponseMetadata(storage(), resource_id1_, kMetadata1)); |
| 974 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 975 |
| 976 // Check metadata is written and truncated. |
| 977 EXPECT_EQ(static_cast<int>(strlen(kMetadata2)), |
| 978 WriteResponseMetadata(storage(), resource_id1_, kMetadata2)); |
| 979 EXPECT_TRUE(VerifyResponseMetadata(storage(), resource_id1_, kMetadata2)); |
| 980 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 981 |
| 982 // Check metadata is deleted. |
| 983 EXPECT_EQ(0, WriteResponseMetadata(storage(), resource_id1_, "")); |
| 984 EXPECT_FALSE(VerifyResponseMetadata(storage(), resource_id1_, "")); |
| 985 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 986 } |
| 987 |
| 988 TEST_F(ServiceWorkerResourceStorageTest, |
| 989 WriteMetadataWithServiceWorkerScriptCacheMap) { |
| 990 const char kMetadata1[] = "Test metadata"; |
| 991 const char kMetadata2[] = "small"; |
| 992 ServiceWorkerVersion* version = registration_->waiting_version(); |
| 993 EXPECT_TRUE(version); |
| 994 |
| 995 // Writing metadata to nonexistent URL must fail. |
| 996 EXPECT_GE(0, |
| 997 WriteMetadata(version, GURL("http://www.test.not/nonexistent.js"), |
| 998 kMetadata1)); |
| 999 // Clearing metadata of nonexistent URL must fail. |
| 1000 EXPECT_GE(0, |
| 1001 ClearMetadata(version, GURL("http://www.test.not/nonexistent.js"))); |
| 1002 |
| 1003 // Check metadata is written. |
| 1004 EXPECT_EQ(static_cast<int>(strlen(kMetadata1)), |
| 1005 WriteMetadata(version, script_, kMetadata1)); |
| 1006 EXPECT_TRUE(VerifyResponseMetadata(storage(), resource_id1_, kMetadata1)); |
| 1007 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 1008 |
| 1009 // Check metadata is written and truncated. |
| 1010 EXPECT_EQ(static_cast<int>(strlen(kMetadata2)), |
| 1011 WriteMetadata(version, script_, kMetadata2)); |
| 1012 EXPECT_TRUE(VerifyResponseMetadata(storage(), resource_id1_, kMetadata2)); |
| 1013 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 1014 |
| 1015 // Check metadata is deleted. |
| 1016 EXPECT_EQ(0, ClearMetadata(version, script_)); |
| 1017 EXPECT_FALSE(VerifyResponseMetadata(storage(), resource_id1_, "")); |
| 1018 EXPECT_TRUE(VerifyBasicResponse(storage(), resource_id1_, true)); |
| 1019 } |
| 1020 |
912 TEST_F(ServiceWorkerResourceStorageTest, DeleteRegistration_NoLiveVersion) { | 1021 TEST_F(ServiceWorkerResourceStorageTest, DeleteRegistration_NoLiveVersion) { |
913 bool was_called = false; | 1022 bool was_called = false; |
914 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 1023 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; |
915 std::set<int64> verify_ids; | 1024 std::set<int64> verify_ids; |
916 | 1025 |
917 registration_->SetWaitingVersion(NULL); | 1026 registration_->SetWaitingVersion(NULL); |
918 registration_ = NULL; | 1027 registration_ = NULL; |
919 | 1028 |
920 // Deleting the registration should result in the resources being added to the | 1029 // Deleting the registration should result in the resources being added to the |
921 // purgeable list and then doomed in the disk cache and removed from that | 1030 // purgeable list and then doomed in the disk cache and removed from that |
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1331 are_equal = true; | 1440 are_equal = true; |
1332 storage()->CompareScriptResources( | 1441 storage()->CompareScriptResources( |
1333 5, 6, | 1442 5, 6, |
1334 base::Bind(&OnCompareComplete, &status, &are_equal)); | 1443 base::Bind(&OnCompareComplete, &status, &are_equal)); |
1335 base::RunLoop().RunUntilIdle(); | 1444 base::RunLoop().RunUntilIdle(); |
1336 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1445 EXPECT_EQ(SERVICE_WORKER_OK, status); |
1337 EXPECT_FALSE(are_equal); | 1446 EXPECT_FALSE(are_equal); |
1338 } | 1447 } |
1339 | 1448 |
1340 } // namespace content | 1449 } // namespace content |
OLD | NEW |