| 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 "content/browser/service_worker/service_worker_storage.h" | 5 #include "content/browser/service_worker/service_worker_storage.h" |
| 6 | 6 |
| 7 #include <stdint.h> | 7 #include <stdint.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 | 75 |
| 76 ServiceWorkerStorage::FindRegistrationCallback MakeFindCallback( | 76 ServiceWorkerStorage::FindRegistrationCallback MakeFindCallback( |
| 77 bool* was_called, | 77 bool* was_called, |
| 78 ServiceWorkerStatusCode* result, | 78 ServiceWorkerStatusCode* result, |
| 79 scoped_refptr<ServiceWorkerRegistration>* found) { | 79 scoped_refptr<ServiceWorkerRegistration>* found) { |
| 80 return base::Bind(&FindCallback, was_called, result, found); | 80 return base::Bind(&FindCallback, was_called, result, found); |
| 81 } | 81 } |
| 82 | 82 |
| 83 void GetAllCallback( | 83 void GetAllCallback( |
| 84 bool* was_called, | 84 bool* was_called, |
| 85 ServiceWorkerStatusCode* result, |
| 85 std::vector<scoped_refptr<ServiceWorkerRegistration>>* all_out, | 86 std::vector<scoped_refptr<ServiceWorkerRegistration>>* all_out, |
| 87 ServiceWorkerStatusCode status, |
| 86 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& all) { | 88 const std::vector<scoped_refptr<ServiceWorkerRegistration>>& all) { |
| 87 *was_called = true; | 89 *was_called = true; |
| 90 *result = status; |
| 88 *all_out = all; | 91 *all_out = all; |
| 89 } | 92 } |
| 90 | 93 |
| 91 void GetAllInfosCallback( | 94 void GetAllInfosCallback( |
| 92 bool* was_called, | 95 bool* was_called, |
| 96 ServiceWorkerStatusCode* result, |
| 93 std::vector<ServiceWorkerRegistrationInfo>* all_out, | 97 std::vector<ServiceWorkerRegistrationInfo>* all_out, |
| 98 ServiceWorkerStatusCode status, |
| 94 const std::vector<ServiceWorkerRegistrationInfo>& all) { | 99 const std::vector<ServiceWorkerRegistrationInfo>& all) { |
| 95 *was_called = true; | 100 *was_called = true; |
| 101 *result = status; |
| 96 *all_out = all; | 102 *all_out = all; |
| 97 } | 103 } |
| 98 | 104 |
| 99 ServiceWorkerStorage::GetRegistrationsCallback MakeGetRegistrationsCallback( | 105 ServiceWorkerStorage::GetRegistrationsCallback MakeGetRegistrationsCallback( |
| 100 bool* was_called, | 106 bool* was_called, |
| 107 ServiceWorkerStatusCode* status, |
| 101 std::vector<scoped_refptr<ServiceWorkerRegistration>>* all) { | 108 std::vector<scoped_refptr<ServiceWorkerRegistration>>* all) { |
| 102 return base::Bind(&GetAllCallback, was_called, all); | 109 return base::Bind(&GetAllCallback, was_called, status, all); |
| 103 } | 110 } |
| 104 | 111 |
| 105 ServiceWorkerStorage::GetRegistrationsInfosCallback | 112 ServiceWorkerStorage::GetRegistrationsInfosCallback |
| 106 MakeGetRegistrationsInfosCallback( | 113 MakeGetRegistrationsInfosCallback( |
| 107 bool* was_called, | 114 bool* was_called, |
| 115 ServiceWorkerStatusCode* status, |
| 108 std::vector<ServiceWorkerRegistrationInfo>* all) { | 116 std::vector<ServiceWorkerRegistrationInfo>* all) { |
| 109 return base::Bind(&GetAllInfosCallback, was_called, all); | 117 return base::Bind(&GetAllInfosCallback, was_called, status, all); |
| 110 } | 118 } |
| 111 | 119 |
| 112 void GetUserDataCallback( | 120 void GetUserDataCallback( |
| 113 bool* was_called, | 121 bool* was_called, |
| 114 std::string* data_out, | 122 std::string* data_out, |
| 115 ServiceWorkerStatusCode* status_out, | 123 ServiceWorkerStatusCode* status_out, |
| 116 const std::string& data, | 124 const std::string& data, |
| 117 ServiceWorkerStatusCode status) { | 125 ServiceWorkerStatusCode status) { |
| 118 *was_called = true; | 126 *was_called = true; |
| 119 *data_out = data; | 127 *data_out = data; |
| 120 *status_out = status; | 128 *status_out = status; |
| 121 } | 129 } |
| 122 | 130 |
| 123 void GetUserDataForAllRegistrationsCallback( | 131 void GetUserDataForAllRegistrationsCallback( |
| 124 bool* was_called, | 132 bool* was_called, |
| 125 std::vector<std::pair<int64_t, std::string>>* data_out, | 133 std::vector<std::pair<int64_t, std::string>>* data_out, |
| 126 ServiceWorkerStatusCode* status_out, | 134 ServiceWorkerStatusCode* status_out, |
| 127 const std::vector<std::pair<int64_t, std::string>>& data, | 135 const std::vector<std::pair<int64_t, std::string>>& data, |
| 128 ServiceWorkerStatusCode status) { | 136 ServiceWorkerStatusCode status) { |
| 129 *was_called = true; | 137 *was_called = true; |
| 130 *data_out = data; | 138 *data_out = data; |
| 131 *status_out = status; | 139 *status_out = status; |
| 132 } | 140 } |
| 133 | 141 |
| 134 void WriteResponse(ServiceWorkerStorage* storage, | 142 int WriteResponse(ServiceWorkerStorage* storage, |
| 135 int64_t id, | 143 int64_t id, |
| 136 const std::string& headers, | 144 const std::string& headers, |
| 137 IOBuffer* body, | 145 IOBuffer* body, |
| 138 int length) { | 146 int length) { |
| 139 scoped_ptr<ServiceWorkerResponseWriter> writer = | 147 scoped_ptr<ServiceWorkerResponseWriter> writer = |
| 140 storage->CreateResponseWriter(id); | 148 storage->CreateResponseWriter(id); |
| 141 | 149 |
| 142 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo); | 150 scoped_ptr<net::HttpResponseInfo> info(new net::HttpResponseInfo); |
| 143 info->request_time = base::Time::Now(); | 151 info->request_time = base::Time::Now(); |
| 144 info->response_time = base::Time::Now(); | 152 info->response_time = base::Time::Now(); |
| 145 info->was_cached = false; | 153 info->was_cached = false; |
| 146 info->headers = new net::HttpResponseHeaders(headers); | 154 info->headers = new net::HttpResponseHeaders(headers); |
| 147 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = | 155 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = |
| 148 new HttpResponseInfoIOBuffer(info.release()); | 156 new HttpResponseInfoIOBuffer(info.release()); |
| 157 int rv = 0; |
| 149 { | 158 { |
| 150 TestCompletionCallback cb; | 159 TestCompletionCallback cb; |
| 151 writer->WriteInfo(info_buffer.get(), cb.callback()); | 160 writer->WriteInfo(info_buffer.get(), cb.callback()); |
| 152 int rv = cb.WaitForResult(); | 161 rv = cb.WaitForResult(); |
| 153 EXPECT_LT(0, rv); | 162 if (rv < 0) |
| 163 return rv; |
| 154 } | 164 } |
| 155 { | 165 { |
| 156 TestCompletionCallback cb; | 166 TestCompletionCallback cb; |
| 157 writer->WriteData(body, length, cb.callback()); | 167 writer->WriteData(body, length, cb.callback()); |
| 158 int rv = cb.WaitForResult(); | 168 rv = cb.WaitForResult(); |
| 159 EXPECT_EQ(length, rv); | |
| 160 } | 169 } |
| 170 return rv; |
| 161 } | 171 } |
| 162 | 172 |
| 163 void WriteStringResponse(ServiceWorkerStorage* storage, | 173 int WriteStringResponse(ServiceWorkerStorage* storage, |
| 164 int64_t id, | 174 int64_t id, |
| 165 const std::string& headers, | 175 const std::string& headers, |
| 166 const std::string& body) { | 176 const std::string& body) { |
| 167 scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(body.data())); | 177 scoped_refptr<IOBuffer> body_buffer(new WrappedIOBuffer(body.data())); |
| 168 WriteResponse(storage, id, headers, body_buffer.get(), body.length()); | 178 return WriteResponse(storage, id, headers, body_buffer.get(), body.length()); |
| 169 } | 179 } |
| 170 | 180 |
| 171 void WriteBasicResponse(ServiceWorkerStorage* storage, int64_t id) { | 181 int WriteBasicResponse(ServiceWorkerStorage* storage, int64_t id) { |
| 172 scoped_ptr<ServiceWorkerResponseWriter> writer = | |
| 173 storage->CreateResponseWriter(id); | |
| 174 | |
| 175 const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0Content-Length: 5\0\0"; | 182 const char kHttpHeaders[] = "HTTP/1.0 200 HONKYDORY\0Content-Length: 5\0\0"; |
| 176 const char kHttpBody[] = "Hello"; | 183 const char kHttpBody[] = "Hello"; |
| 177 std::string headers(kHttpHeaders, arraysize(kHttpHeaders)); | 184 std::string headers(kHttpHeaders, arraysize(kHttpHeaders)); |
| 178 WriteStringResponse(storage, id, headers, std::string(kHttpBody)); | 185 return WriteStringResponse(storage, id, headers, std::string(kHttpBody)); |
| 186 } |
| 187 |
| 188 int ReadResponseInfo(ServiceWorkerStorage* storage, |
| 189 int64_t id, |
| 190 HttpResponseInfoIOBuffer* info_buffer) { |
| 191 scoped_ptr<ServiceWorkerResponseReader> reader = |
| 192 storage->CreateResponseReader(id); |
| 193 TestCompletionCallback cb; |
| 194 reader->ReadInfo(info_buffer, cb.callback()); |
| 195 return cb.WaitForResult(); |
| 179 } | 196 } |
| 180 | 197 |
| 181 bool VerifyBasicResponse(ServiceWorkerStorage* storage, | 198 bool VerifyBasicResponse(ServiceWorkerStorage* storage, |
| 182 int64_t id, | 199 int64_t id, |
| 183 bool expected_positive_result) { | 200 bool expected_positive_result) { |
| 184 const std::string kExpectedHttpBody("Hello"); | 201 const std::string kExpectedHttpBody("Hello"); |
| 185 scoped_ptr<ServiceWorkerResponseReader> reader = | 202 scoped_ptr<ServiceWorkerResponseReader> reader = |
| 186 storage->CreateResponseReader(id); | 203 storage->CreateResponseReader(id); |
| 187 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = | 204 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = |
| 188 new HttpResponseInfoIOBuffer(); | 205 new HttpResponseInfoIOBuffer(); |
| 189 { | 206 int rv = ReadResponseInfo(storage, id, info_buffer.get()); |
| 190 TestCompletionCallback cb; | 207 if (expected_positive_result) |
| 191 reader->ReadInfo(info_buffer.get(), cb.callback()); | 208 EXPECT_LT(0, rv); |
| 192 int rv = cb.WaitForResult(); | 209 if (rv <= 0) |
| 193 if (expected_positive_result) | 210 return false; |
| 194 EXPECT_LT(0, rv); | |
| 195 if (rv <= 0) | |
| 196 return false; | |
| 197 } | |
| 198 | 211 |
| 199 std::string received_body; | 212 std::string received_body; |
| 200 { | 213 const int kBigEnough = 512; |
| 201 const int kBigEnough = 512; | 214 scoped_refptr<net::IOBuffer> buffer = new IOBuffer(kBigEnough); |
| 202 scoped_refptr<net::IOBuffer> buffer = new IOBuffer(kBigEnough); | 215 TestCompletionCallback cb; |
| 203 TestCompletionCallback cb; | 216 reader->ReadData(buffer.get(), kBigEnough, cb.callback()); |
| 204 reader->ReadData(buffer.get(), kBigEnough, cb.callback()); | 217 rv = cb.WaitForResult(); |
| 205 int rv = cb.WaitForResult(); | 218 EXPECT_EQ(static_cast<int>(kExpectedHttpBody.size()), rv); |
| 206 EXPECT_EQ(static_cast<int>(kExpectedHttpBody.size()), rv); | 219 if (rv <= 0) |
| 207 if (rv <= 0) | 220 return false; |
| 208 return false; | 221 received_body.assign(buffer->data(), rv); |
| 209 received_body.assign(buffer->data(), rv); | |
| 210 } | |
| 211 | 222 |
| 212 bool status_match = | 223 bool status_match = |
| 213 std::string("HONKYDORY") == | 224 std::string("HONKYDORY") == |
| 214 info_buffer->http_info->headers->GetStatusText(); | 225 info_buffer->http_info->headers->GetStatusText(); |
| 215 bool data_match = kExpectedHttpBody == received_body; | 226 bool data_match = kExpectedHttpBody == received_body; |
| 216 | 227 |
| 217 EXPECT_TRUE(status_match); | 228 EXPECT_TRUE(status_match); |
| 218 EXPECT_TRUE(data_match); | 229 EXPECT_TRUE(data_match); |
| 219 return status_match && data_match; | 230 return status_match && data_match; |
| 220 } | 231 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 314 protected: | 325 protected: |
| 315 void LazyInitialize() { | 326 void LazyInitialize() { |
| 316 storage()->LazyInitialize(base::Bind(&base::DoNothing)); | 327 storage()->LazyInitialize(base::Bind(&base::DoNothing)); |
| 317 base::RunLoop().RunUntilIdle(); | 328 base::RunLoop().RunUntilIdle(); |
| 318 } | 329 } |
| 319 | 330 |
| 320 ServiceWorkerStatusCode StoreRegistration( | 331 ServiceWorkerStatusCode StoreRegistration( |
| 321 scoped_refptr<ServiceWorkerRegistration> registration, | 332 scoped_refptr<ServiceWorkerRegistration> registration, |
| 322 scoped_refptr<ServiceWorkerVersion> version) { | 333 scoped_refptr<ServiceWorkerVersion> version) { |
| 323 bool was_called = false; | 334 bool was_called = false; |
| 324 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 335 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 325 storage()->StoreRegistration(registration.get(), | 336 storage()->StoreRegistration(registration.get(), |
| 326 version.get(), | 337 version.get(), |
| 327 MakeStatusCallback(&was_called, &result)); | 338 MakeStatusCallback(&was_called, &result)); |
| 328 EXPECT_FALSE(was_called); // always async | 339 EXPECT_FALSE(was_called); // always async |
| 329 base::RunLoop().RunUntilIdle(); | 340 base::RunLoop().RunUntilIdle(); |
| 330 EXPECT_TRUE(was_called); | 341 EXPECT_TRUE(was_called); |
| 331 return result; | 342 return result; |
| 332 } | 343 } |
| 333 | 344 |
| 334 ServiceWorkerStatusCode DeleteRegistration(int64_t registration_id, | 345 ServiceWorkerStatusCode DeleteRegistration(int64_t registration_id, |
| 335 const GURL& origin) { | 346 const GURL& origin) { |
| 336 bool was_called = false; | 347 bool was_called = false; |
| 337 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 348 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 338 storage()->DeleteRegistration( | 349 storage()->DeleteRegistration( |
| 339 registration_id, origin, MakeStatusCallback(&was_called, &result)); | 350 registration_id, origin, MakeStatusCallback(&was_called, &result)); |
| 340 EXPECT_FALSE(was_called); // always async | 351 EXPECT_FALSE(was_called); // always async |
| 341 base::RunLoop().RunUntilIdle(); | 352 base::RunLoop().RunUntilIdle(); |
| 342 EXPECT_TRUE(was_called); | 353 EXPECT_TRUE(was_called); |
| 343 return result; | 354 return result; |
| 344 } | 355 } |
| 345 | 356 |
| 346 void GetAllRegistrationsInfos( | 357 ServiceWorkerStatusCode GetAllRegistrationsInfos( |
| 347 std::vector<ServiceWorkerRegistrationInfo>* registrations) { | 358 std::vector<ServiceWorkerRegistrationInfo>* registrations) { |
| 348 bool was_called = false; | 359 bool was_called = false; |
| 360 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 349 storage()->GetAllRegistrationsInfos( | 361 storage()->GetAllRegistrationsInfos( |
| 350 MakeGetRegistrationsInfosCallback(&was_called, registrations)); | 362 MakeGetRegistrationsInfosCallback(&was_called, &result, registrations)); |
| 351 EXPECT_FALSE(was_called); // always async | 363 EXPECT_FALSE(was_called); // always async |
| 352 base::RunLoop().RunUntilIdle(); | 364 base::RunLoop().RunUntilIdle(); |
| 353 EXPECT_TRUE(was_called); | 365 EXPECT_TRUE(was_called); |
| 366 return result; |
| 354 } | 367 } |
| 355 | 368 |
| 356 void GetRegistrationsForOrigin( | 369 ServiceWorkerStatusCode GetRegistrationsForOrigin( |
| 357 const GURL& origin, | 370 const GURL& origin, |
| 358 std::vector<scoped_refptr<ServiceWorkerRegistration>>* registrations) { | 371 std::vector<scoped_refptr<ServiceWorkerRegistration>>* registrations) { |
| 359 bool was_called = false; | 372 bool was_called = false; |
| 373 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 360 storage()->GetRegistrationsForOrigin( | 374 storage()->GetRegistrationsForOrigin( |
| 361 origin, MakeGetRegistrationsCallback(&was_called, registrations)); | 375 origin, |
| 376 MakeGetRegistrationsCallback(&was_called, &result, registrations)); |
| 362 EXPECT_FALSE(was_called); // always async | 377 EXPECT_FALSE(was_called); // always async |
| 363 base::RunLoop().RunUntilIdle(); | 378 base::RunLoop().RunUntilIdle(); |
| 364 EXPECT_TRUE(was_called); | 379 EXPECT_TRUE(was_called); |
| 380 return result; |
| 365 } | 381 } |
| 366 | 382 |
| 367 ServiceWorkerStatusCode GetUserData(int64_t registration_id, | 383 ServiceWorkerStatusCode GetUserData(int64_t registration_id, |
| 368 const std::string& key, | 384 const std::string& key, |
| 369 std::string* data) { | 385 std::string* data) { |
| 370 bool was_called = false; | 386 bool was_called = false; |
| 371 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 387 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 372 storage()->GetUserData( | 388 storage()->GetUserData( |
| 373 registration_id, key, | 389 registration_id, key, |
| 374 base::Bind(&GetUserDataCallback, &was_called, data, &result)); | 390 base::Bind(&GetUserDataCallback, &was_called, data, &result)); |
| 375 EXPECT_FALSE(was_called); // always async | 391 EXPECT_FALSE(was_called); // always async |
| 376 base::RunLoop().RunUntilIdle(); | 392 base::RunLoop().RunUntilIdle(); |
| 377 EXPECT_TRUE(was_called); | 393 EXPECT_TRUE(was_called); |
| 378 return result; | 394 return result; |
| 379 } | 395 } |
| 380 | 396 |
| 381 ServiceWorkerStatusCode StoreUserData(int64_t registration_id, | 397 ServiceWorkerStatusCode StoreUserData(int64_t registration_id, |
| 382 const GURL& origin, | 398 const GURL& origin, |
| 383 const std::string& key, | 399 const std::string& key, |
| 384 const std::string& data) { | 400 const std::string& data) { |
| 385 bool was_called = false; | 401 bool was_called = false; |
| 386 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 402 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 387 storage()->StoreUserData( | 403 storage()->StoreUserData( |
| 388 registration_id, origin, key, data, | 404 registration_id, origin, key, data, |
| 389 MakeStatusCallback(&was_called, &result)); | 405 MakeStatusCallback(&was_called, &result)); |
| 390 EXPECT_FALSE(was_called); // always async | 406 EXPECT_FALSE(was_called); // always async |
| 391 base::RunLoop().RunUntilIdle(); | 407 base::RunLoop().RunUntilIdle(); |
| 392 EXPECT_TRUE(was_called); | 408 EXPECT_TRUE(was_called); |
| 393 return result; | 409 return result; |
| 394 } | 410 } |
| 395 | 411 |
| 396 ServiceWorkerStatusCode ClearUserData(int64_t registration_id, | 412 ServiceWorkerStatusCode ClearUserData(int64_t registration_id, |
| 397 const std::string& key) { | 413 const std::string& key) { |
| 398 bool was_called = false; | 414 bool was_called = false; |
| 399 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 415 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 400 storage()->ClearUserData( | 416 storage()->ClearUserData( |
| 401 registration_id, key, MakeStatusCallback(&was_called, &result)); | 417 registration_id, key, MakeStatusCallback(&was_called, &result)); |
| 402 EXPECT_FALSE(was_called); // always async | 418 EXPECT_FALSE(was_called); // always async |
| 403 base::RunLoop().RunUntilIdle(); | 419 base::RunLoop().RunUntilIdle(); |
| 404 EXPECT_TRUE(was_called); | 420 EXPECT_TRUE(was_called); |
| 405 return result; | 421 return result; |
| 406 } | 422 } |
| 407 | 423 |
| 408 ServiceWorkerStatusCode GetUserDataForAllRegistrations( | 424 ServiceWorkerStatusCode GetUserDataForAllRegistrations( |
| 409 const std::string& key, | 425 const std::string& key, |
| 410 std::vector<std::pair<int64_t, std::string>>* data) { | 426 std::vector<std::pair<int64_t, std::string>>* data) { |
| 411 bool was_called = false; | 427 bool was_called = false; |
| 412 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 428 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 413 storage()->GetUserDataForAllRegistrations( | 429 storage()->GetUserDataForAllRegistrations( |
| 414 key, base::Bind(&GetUserDataForAllRegistrationsCallback, &was_called, | 430 key, base::Bind(&GetUserDataForAllRegistrationsCallback, &was_called, |
| 415 data, &result)); | 431 data, &result)); |
| 416 EXPECT_FALSE(was_called); // always async | 432 EXPECT_FALSE(was_called); // always async |
| 417 base::RunLoop().RunUntilIdle(); | 433 base::RunLoop().RunUntilIdle(); |
| 418 EXPECT_TRUE(was_called); | 434 EXPECT_TRUE(was_called); |
| 419 return result; | 435 return result; |
| 420 } | 436 } |
| 421 | 437 |
| 422 ServiceWorkerStatusCode UpdateToActiveState( | 438 ServiceWorkerStatusCode UpdateToActiveState( |
| 423 scoped_refptr<ServiceWorkerRegistration> registration) { | 439 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| 424 bool was_called = false; | 440 bool was_called = false; |
| 425 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 441 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 426 storage()->UpdateToActiveState(registration.get(), | 442 storage()->UpdateToActiveState(registration.get(), |
| 427 MakeStatusCallback(&was_called, &result)); | 443 MakeStatusCallback(&was_called, &result)); |
| 428 EXPECT_FALSE(was_called); // always async | 444 EXPECT_FALSE(was_called); // always async |
| 429 base::RunLoop().RunUntilIdle(); | 445 base::RunLoop().RunUntilIdle(); |
| 430 EXPECT_TRUE(was_called); | 446 EXPECT_TRUE(was_called); |
| 431 return result; | 447 return result; |
| 432 } | 448 } |
| 433 | 449 |
| 434 void UpdateLastUpdateCheckTime(ServiceWorkerRegistration* registration) { | 450 void UpdateLastUpdateCheckTime( |
| 435 storage()->UpdateLastUpdateCheckTime(registration); | 451 const scoped_refptr<ServiceWorkerRegistration>& registration) { |
| 452 storage()->UpdateLastUpdateCheckTime(registration.get()); |
| 436 base::RunLoop().RunUntilIdle(); | 453 base::RunLoop().RunUntilIdle(); |
| 437 } | 454 } |
| 438 | 455 |
| 439 ServiceWorkerStatusCode FindRegistrationForDocument( | 456 ServiceWorkerStatusCode FindRegistrationForDocument( |
| 440 const GURL& document_url, | 457 const GURL& document_url, |
| 441 scoped_refptr<ServiceWorkerRegistration>* registration) { | 458 scoped_refptr<ServiceWorkerRegistration>* registration) { |
| 442 bool was_called = false; | 459 bool was_called = false; |
| 443 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 460 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 444 storage()->FindRegistrationForDocument( | 461 storage()->FindRegistrationForDocument( |
| 445 document_url, MakeFindCallback(&was_called, &result, registration)); | 462 document_url, MakeFindCallback(&was_called, &result, registration)); |
| 446 base::RunLoop().RunUntilIdle(); | 463 base::RunLoop().RunUntilIdle(); |
| 447 EXPECT_TRUE(was_called); | 464 EXPECT_TRUE(was_called); |
| 448 return result; | 465 return result; |
| 449 } | 466 } |
| 450 | 467 |
| 451 ServiceWorkerStatusCode FindRegistrationForPattern( | 468 ServiceWorkerStatusCode FindRegistrationForPattern( |
| 452 const GURL& scope, | 469 const GURL& scope, |
| 453 scoped_refptr<ServiceWorkerRegistration>* registration) { | 470 scoped_refptr<ServiceWorkerRegistration>* registration) { |
| 454 bool was_called = false; | 471 bool was_called = false; |
| 455 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 472 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 456 storage()->FindRegistrationForPattern( | 473 storage()->FindRegistrationForPattern( |
| 457 scope, MakeFindCallback(&was_called, &result, registration)); | 474 scope, MakeFindCallback(&was_called, &result, registration)); |
| 458 EXPECT_FALSE(was_called); // always async | 475 EXPECT_FALSE(was_called); // always async |
| 459 base::RunLoop().RunUntilIdle(); | 476 base::RunLoop().RunUntilIdle(); |
| 460 EXPECT_TRUE(was_called); | 477 EXPECT_TRUE(was_called); |
| 461 return result; | 478 return result; |
| 462 } | 479 } |
| 463 | 480 |
| 464 ServiceWorkerStatusCode FindRegistrationForId( | 481 ServiceWorkerStatusCode FindRegistrationForId( |
| 465 int64_t registration_id, | 482 int64_t registration_id, |
| 466 const GURL& origin, | 483 const GURL& origin, |
| 467 scoped_refptr<ServiceWorkerRegistration>* registration) { | 484 scoped_refptr<ServiceWorkerRegistration>* registration) { |
| 468 bool was_called = false; | 485 bool was_called = false; |
| 469 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 486 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 470 storage()->FindRegistrationForId( | 487 storage()->FindRegistrationForId( |
| 471 registration_id, origin, | 488 registration_id, origin, |
| 472 MakeFindCallback(&was_called, &result, registration)); | 489 MakeFindCallback(&was_called, &result, registration)); |
| 473 base::RunLoop().RunUntilIdle(); | 490 base::RunLoop().RunUntilIdle(); |
| 474 EXPECT_TRUE(was_called); | 491 EXPECT_TRUE(was_called); |
| 475 return result; | 492 return result; |
| 476 } | 493 } |
| 477 | 494 |
| 478 ServiceWorkerStatusCode FindRegistrationForIdOnly( | 495 ServiceWorkerStatusCode FindRegistrationForIdOnly( |
| 479 int64_t registration_id, | 496 int64_t registration_id, |
| 480 scoped_refptr<ServiceWorkerRegistration>* registration) { | 497 scoped_refptr<ServiceWorkerRegistration>* registration) { |
| 481 bool was_called = false; | 498 bool was_called = false; |
| 482 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; | 499 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 483 storage()->FindRegistrationForIdOnly( | 500 storage()->FindRegistrationForIdOnly( |
| 484 registration_id, MakeFindCallback(&was_called, &result, registration)); | 501 registration_id, MakeFindCallback(&was_called, &result, registration)); |
| 485 base::RunLoop().RunUntilIdle(); | 502 base::RunLoop().RunUntilIdle(); |
| 486 EXPECT_TRUE(was_called); | 503 EXPECT_TRUE(was_called); |
| 487 return result; | 504 return result; |
| 488 } | 505 } |
| 489 | 506 |
| 490 // user_data_directory_ must be declared first to preserve destructor order. | 507 // user_data_directory_ must be declared first to preserve destructor order. |
| 491 base::ScopedTempDir user_data_directory_; | 508 base::ScopedTempDir user_data_directory_; |
| 492 scoped_ptr<EmbeddedWorkerTestHelper> helper_; | 509 scoped_ptr<EmbeddedWorkerTestHelper> helper_; |
| 493 TestBrowserThreadBundle browser_thread_bundle_; | 510 TestBrowserThreadBundle browser_thread_bundle_; |
| 494 }; | 511 }; |
| 495 | 512 |
| 513 TEST_F(ServiceWorkerStorageTest, DisabledStorage) { |
| 514 const GURL kScope("http://www.example.com/scope/"); |
| 515 const GURL kScript("http://www.example.com/script.js"); |
| 516 const GURL kDocumentUrl("http://www.example.com/scope/document.html"); |
| 517 const int64_t kRegistrationId = 0; |
| 518 const int64_t kVersionId = 0; |
| 519 const int64_t kResourceId = 0; |
| 520 |
| 521 LazyInitialize(); |
| 522 storage()->Disable(); |
| 523 |
| 524 scoped_refptr<ServiceWorkerRegistration> found_registration; |
| 525 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 526 FindRegistrationForDocument(kDocumentUrl, &found_registration)); |
| 527 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 528 FindRegistrationForPattern(kScope, &found_registration)); |
| 529 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 530 FindRegistrationForId(kRegistrationId, kScope.GetOrigin(), |
| 531 &found_registration)); |
| 532 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 533 FindRegistrationForIdOnly(kRegistrationId, &found_registration)); |
| 534 EXPECT_FALSE(storage()->GetUninstallingRegistration(kScope.GetOrigin())); |
| 535 |
| 536 std::vector<scoped_refptr<ServiceWorkerRegistration>> found_registrations; |
| 537 EXPECT_EQ( |
| 538 SERVICE_WORKER_ERROR_ABORT, |
| 539 GetRegistrationsForOrigin(kScope.GetOrigin(), &found_registrations)); |
| 540 |
| 541 std::vector<ServiceWorkerRegistrationInfo> all_registrations; |
| 542 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 543 GetAllRegistrationsInfos(&all_registrations)); |
| 544 |
| 545 scoped_refptr<ServiceWorkerRegistration> live_registration = |
| 546 new ServiceWorkerRegistration(kScope, kRegistrationId, |
| 547 context()->AsWeakPtr()); |
| 548 scoped_refptr<ServiceWorkerVersion> live_version = new ServiceWorkerVersion( |
| 549 live_registration.get(), kScript, kVersionId, context()->AsWeakPtr()); |
| 550 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 551 StoreRegistration(live_registration, live_version)); |
| 552 |
| 553 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, UpdateToActiveState(live_registration)); |
| 554 |
| 555 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 556 DeleteRegistration(kRegistrationId, kScope.GetOrigin())); |
| 557 |
| 558 // Response reader and writer created by the disabled storage should fail to |
| 559 // access the disk cache. |
| 560 scoped_refptr<HttpResponseInfoIOBuffer> info_buffer = |
| 561 new HttpResponseInfoIOBuffer(); |
| 562 EXPECT_EQ(net::ERR_CACHE_MISS, |
| 563 ReadResponseInfo(storage(), kResourceId, info_buffer.get())); |
| 564 EXPECT_EQ(net::ERR_FAILED, WriteBasicResponse(storage(), kResourceId)); |
| 565 EXPECT_EQ(net::ERR_FAILED, |
| 566 WriteResponseMetadata(storage(), kResourceId, "foo")); |
| 567 |
| 568 const std::string kUserDataKey = "key"; |
| 569 std::string user_data_out; |
| 570 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 571 GetUserData(kRegistrationId, kUserDataKey, &user_data_out)); |
| 572 EXPECT_EQ( |
| 573 SERVICE_WORKER_ERROR_ABORT, |
| 574 StoreUserData(kRegistrationId, kScope.GetOrigin(), kUserDataKey, "foo")); |
| 575 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 576 ClearUserData(kRegistrationId, kUserDataKey)); |
| 577 std::vector<std::pair<int64_t, std::string>> data_list_out; |
| 578 EXPECT_EQ(SERVICE_WORKER_ERROR_ABORT, |
| 579 GetUserDataForAllRegistrations(kUserDataKey, &data_list_out)); |
| 580 |
| 581 EXPECT_FALSE( |
| 582 storage()->OriginHasForeignFetchRegistrations(kScope.GetOrigin())); |
| 583 |
| 584 // Next available ids should be invalid. |
| 585 EXPECT_EQ(kInvalidServiceWorkerRegistrationId, |
| 586 storage()->NewRegistrationId()); |
| 587 EXPECT_EQ(kInvalidServiceWorkerVersionId, storage()->NewVersionId()); |
| 588 EXPECT_EQ(kInvalidServiceWorkerResourceId, storage()->NewRegistrationId()); |
| 589 } |
| 590 |
| 496 TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) { | 591 TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) { |
| 497 const GURL kScope("http://www.test.not/scope/"); | 592 const GURL kScope("http://www.test.not/scope/"); |
| 498 const GURL kScript("http://www.test.not/script.js"); | 593 const GURL kScript("http://www.test.not/script.js"); |
| 499 const GURL kDocumentUrl("http://www.test.not/scope/document.html"); | 594 const GURL kDocumentUrl("http://www.test.not/scope/document.html"); |
| 500 const GURL kResource1("http://www.test.not/scope/resource1.js"); | 595 const GURL kResource1("http://www.test.not/scope/resource1.js"); |
| 501 const int64_t kResource1Size = 1591234; | 596 const int64_t kResource1Size = 1591234; |
| 502 const GURL kResource2("http://www.test.not/scope/resource2.js"); | 597 const GURL kResource2("http://www.test.not/scope/resource2.js"); |
| 503 const int64_t kResource2Size = 51; | 598 const int64_t kResource2Size = 51; |
| 504 const int64_t kRegistrationId = 0; | 599 const int64_t kRegistrationId = 0; |
| 505 const int64_t kVersionId = 0; | 600 const int64_t kVersionId = 0; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 585 FindRegistrationForDocument(kDocumentUrl, &found_registration)); | 680 FindRegistrationForDocument(kDocumentUrl, &found_registration)); |
| 586 ASSERT_TRUE(found_registration.get()); | 681 ASSERT_TRUE(found_registration.get()); |
| 587 EXPECT_EQ(kRegistrationId, found_registration->id()); | 682 EXPECT_EQ(kRegistrationId, found_registration->id()); |
| 588 EXPECT_TRUE(found_registration->HasOneRef()); | 683 EXPECT_TRUE(found_registration->HasOneRef()); |
| 589 | 684 |
| 590 // Check that sizes are populated correctly | 685 // Check that sizes are populated correctly |
| 591 EXPECT_EQ(live_version.get(), found_registration->waiting_version()); | 686 EXPECT_EQ(live_version.get(), found_registration->waiting_version()); |
| 592 EXPECT_EQ(kResource1Size + kResource2Size, | 687 EXPECT_EQ(kResource1Size + kResource2Size, |
| 593 found_registration->resources_total_size_bytes()); | 688 found_registration->resources_total_size_bytes()); |
| 594 std::vector<ServiceWorkerRegistrationInfo> all_registrations; | 689 std::vector<ServiceWorkerRegistrationInfo> all_registrations; |
| 595 GetAllRegistrationsInfos(&all_registrations); | 690 EXPECT_EQ(SERVICE_WORKER_OK, GetAllRegistrationsInfos(&all_registrations)); |
| 596 EXPECT_EQ(1u, all_registrations.size()); | 691 EXPECT_EQ(1u, all_registrations.size()); |
| 597 ServiceWorkerRegistrationInfo info = all_registrations[0]; | 692 ServiceWorkerRegistrationInfo info = all_registrations[0]; |
| 598 EXPECT_EQ(kResource1Size + kResource2Size, info.stored_version_size_bytes); | 693 EXPECT_EQ(kResource1Size + kResource2Size, info.stored_version_size_bytes); |
| 599 all_registrations.clear(); | 694 all_registrations.clear(); |
| 600 | 695 |
| 601 // Finding by origin should provide the same result if origin is kScope. | 696 // Finding by origin should provide the same result if origin is kScope. |
| 602 std::vector<scoped_refptr<ServiceWorkerRegistration>> | 697 std::vector<scoped_refptr<ServiceWorkerRegistration>> |
| 603 registrations_for_origin; | 698 registrations_for_origin; |
| 604 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin); | 699 EXPECT_EQ( |
| 700 SERVICE_WORKER_OK, |
| 701 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin)); |
| 605 EXPECT_EQ(1u, registrations_for_origin.size()); | 702 EXPECT_EQ(1u, registrations_for_origin.size()); |
| 606 registrations_for_origin.clear(); | 703 registrations_for_origin.clear(); |
| 607 | 704 |
| 608 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), | 705 EXPECT_EQ(SERVICE_WORKER_OK, |
| 609 ®istrations_for_origin); | 706 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), |
| 707 ®istrations_for_origin)); |
| 610 EXPECT_TRUE(registrations_for_origin.empty()); | 708 EXPECT_TRUE(registrations_for_origin.empty()); |
| 611 | 709 |
| 612 found_registration = NULL; | 710 found_registration = NULL; |
| 613 | 711 |
| 614 // Drop the live version too. | 712 // Drop the live version too. |
| 615 live_version = NULL; | 713 live_version = NULL; |
| 616 | 714 |
| 617 // And FindRegistrationForPattern is always async. | 715 // And FindRegistrationForPattern is always async. |
| 618 EXPECT_EQ(SERVICE_WORKER_OK, | 716 EXPECT_EQ(SERVICE_WORKER_OK, |
| 619 FindRegistrationForPattern(kScope, &found_registration)); | 717 FindRegistrationForPattern(kScope, &found_registration)); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 713 | 811 |
| 714 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 812 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 715 FindRegistrationForDocument(kDocumentUrl, &found_registration)); | 813 FindRegistrationForDocument(kDocumentUrl, &found_registration)); |
| 716 EXPECT_FALSE(found_registration.get()); | 814 EXPECT_FALSE(found_registration.get()); |
| 717 | 815 |
| 718 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 816 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 719 FindRegistrationForPattern(kScope, &found_registration)); | 817 FindRegistrationForPattern(kScope, &found_registration)); |
| 720 EXPECT_FALSE(found_registration.get()); | 818 EXPECT_FALSE(found_registration.get()); |
| 721 | 819 |
| 722 std::vector<ServiceWorkerRegistrationInfo> all_registrations; | 820 std::vector<ServiceWorkerRegistrationInfo> all_registrations; |
| 723 GetAllRegistrationsInfos(&all_registrations); | 821 EXPECT_EQ(SERVICE_WORKER_OK, GetAllRegistrationsInfos(&all_registrations)); |
| 724 EXPECT_TRUE(all_registrations.empty()); | 822 EXPECT_TRUE(all_registrations.empty()); |
| 725 | 823 |
| 726 std::vector<scoped_refptr<ServiceWorkerRegistration>> | 824 std::vector<scoped_refptr<ServiceWorkerRegistration>> |
| 727 registrations_for_origin; | 825 registrations_for_origin; |
| 728 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin); | 826 EXPECT_EQ( |
| 827 SERVICE_WORKER_OK, |
| 828 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin)); |
| 729 EXPECT_TRUE(registrations_for_origin.empty()); | 829 EXPECT_TRUE(registrations_for_origin.empty()); |
| 730 | 830 |
| 731 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), | 831 EXPECT_EQ(SERVICE_WORKER_OK, |
| 732 ®istrations_for_origin); | 832 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), |
| 833 ®istrations_for_origin)); |
| 733 EXPECT_TRUE(registrations_for_origin.empty()); | 834 EXPECT_TRUE(registrations_for_origin.empty()); |
| 734 | 835 |
| 735 // Notify storage of it being installed. | 836 // Notify storage of it being installed. |
| 736 storage()->NotifyInstallingRegistration(live_registration.get()); | 837 storage()->NotifyInstallingRegistration(live_registration.get()); |
| 737 | 838 |
| 738 // Now should be findable. | 839 // Now should be findable. |
| 739 EXPECT_EQ(SERVICE_WORKER_OK, | 840 EXPECT_EQ(SERVICE_WORKER_OK, |
| 740 FindRegistrationForId( | 841 FindRegistrationForId( |
| 741 kRegistrationId, kScope.GetOrigin(), &found_registration)); | 842 kRegistrationId, kScope.GetOrigin(), &found_registration)); |
| 742 EXPECT_EQ(live_registration, found_registration); | 843 EXPECT_EQ(live_registration, found_registration); |
| 743 found_registration = NULL; | 844 found_registration = NULL; |
| 744 | 845 |
| 745 EXPECT_EQ(SERVICE_WORKER_OK, | 846 EXPECT_EQ(SERVICE_WORKER_OK, |
| 746 FindRegistrationForIdOnly(kRegistrationId, &found_registration)); | 847 FindRegistrationForIdOnly(kRegistrationId, &found_registration)); |
| 747 EXPECT_EQ(live_registration, found_registration); | 848 EXPECT_EQ(live_registration, found_registration); |
| 748 found_registration = NULL; | 849 found_registration = NULL; |
| 749 | 850 |
| 750 EXPECT_EQ(SERVICE_WORKER_OK, | 851 EXPECT_EQ(SERVICE_WORKER_OK, |
| 751 FindRegistrationForDocument(kDocumentUrl, &found_registration)); | 852 FindRegistrationForDocument(kDocumentUrl, &found_registration)); |
| 752 EXPECT_EQ(live_registration, found_registration); | 853 EXPECT_EQ(live_registration, found_registration); |
| 753 found_registration = NULL; | 854 found_registration = NULL; |
| 754 | 855 |
| 755 EXPECT_EQ(SERVICE_WORKER_OK, | 856 EXPECT_EQ(SERVICE_WORKER_OK, |
| 756 FindRegistrationForPattern(kScope, &found_registration)); | 857 FindRegistrationForPattern(kScope, &found_registration)); |
| 757 EXPECT_EQ(live_registration, found_registration); | 858 EXPECT_EQ(live_registration, found_registration); |
| 758 found_registration = NULL; | 859 found_registration = NULL; |
| 759 | 860 |
| 760 GetAllRegistrationsInfos(&all_registrations); | 861 EXPECT_EQ(SERVICE_WORKER_OK, GetAllRegistrationsInfos(&all_registrations)); |
| 761 EXPECT_EQ(1u, all_registrations.size()); | 862 EXPECT_EQ(1u, all_registrations.size()); |
| 762 all_registrations.clear(); | 863 all_registrations.clear(); |
| 763 | 864 |
| 764 // Finding by origin should provide the same result if origin is kScope. | 865 // Finding by origin should provide the same result if origin is kScope. |
| 765 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin); | 866 EXPECT_EQ( |
| 867 SERVICE_WORKER_OK, |
| 868 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin)); |
| 766 EXPECT_EQ(1u, registrations_for_origin.size()); | 869 EXPECT_EQ(1u, registrations_for_origin.size()); |
| 767 registrations_for_origin.clear(); | 870 registrations_for_origin.clear(); |
| 768 | 871 |
| 769 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), | 872 EXPECT_EQ(SERVICE_WORKER_OK, |
| 770 ®istrations_for_origin); | 873 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), |
| 874 ®istrations_for_origin)); |
| 771 EXPECT_TRUE(registrations_for_origin.empty()); | 875 EXPECT_TRUE(registrations_for_origin.empty()); |
| 772 | 876 |
| 773 // Notify storage of installation no longer happening. | 877 // Notify storage of installation no longer happening. |
| 774 storage()->NotifyDoneInstallingRegistration( | 878 storage()->NotifyDoneInstallingRegistration( |
| 775 live_registration.get(), NULL, SERVICE_WORKER_OK); | 879 live_registration.get(), NULL, SERVICE_WORKER_OK); |
| 776 | 880 |
| 777 // Once again, should not be findable. | 881 // Once again, should not be findable. |
| 778 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 882 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 779 FindRegistrationForId( | 883 FindRegistrationForId( |
| 780 kRegistrationId, kScope.GetOrigin(), &found_registration)); | 884 kRegistrationId, kScope.GetOrigin(), &found_registration)); |
| 781 EXPECT_FALSE(found_registration.get()); | 885 EXPECT_FALSE(found_registration.get()); |
| 782 | 886 |
| 783 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 887 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 784 FindRegistrationForIdOnly(kRegistrationId, &found_registration)); | 888 FindRegistrationForIdOnly(kRegistrationId, &found_registration)); |
| 785 EXPECT_FALSE(found_registration.get()); | 889 EXPECT_FALSE(found_registration.get()); |
| 786 | 890 |
| 787 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 891 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 788 FindRegistrationForDocument(kDocumentUrl, &found_registration)); | 892 FindRegistrationForDocument(kDocumentUrl, &found_registration)); |
| 789 EXPECT_FALSE(found_registration.get()); | 893 EXPECT_FALSE(found_registration.get()); |
| 790 | 894 |
| 791 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, | 895 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, |
| 792 FindRegistrationForPattern(kScope, &found_registration)); | 896 FindRegistrationForPattern(kScope, &found_registration)); |
| 793 EXPECT_FALSE(found_registration.get()); | 897 EXPECT_FALSE(found_registration.get()); |
| 794 | 898 |
| 795 GetAllRegistrationsInfos(&all_registrations); | 899 EXPECT_EQ(SERVICE_WORKER_OK, GetAllRegistrationsInfos(&all_registrations)); |
| 796 EXPECT_TRUE(all_registrations.empty()); | 900 EXPECT_TRUE(all_registrations.empty()); |
| 797 | 901 |
| 798 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin); | 902 EXPECT_EQ( |
| 903 SERVICE_WORKER_OK, |
| 904 GetRegistrationsForOrigin(kScope.GetOrigin(), ®istrations_for_origin)); |
| 799 EXPECT_TRUE(registrations_for_origin.empty()); | 905 EXPECT_TRUE(registrations_for_origin.empty()); |
| 800 | 906 |
| 801 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), | 907 EXPECT_EQ(SERVICE_WORKER_OK, |
| 802 ®istrations_for_origin); | 908 GetRegistrationsForOrigin(GURL("http://example.com/").GetOrigin(), |
| 909 ®istrations_for_origin)); |
| 803 EXPECT_TRUE(registrations_for_origin.empty()); | 910 EXPECT_TRUE(registrations_for_origin.empty()); |
| 804 } | 911 } |
| 805 | 912 |
| 806 TEST_F(ServiceWorkerStorageTest, StoreUserData) { | 913 TEST_F(ServiceWorkerStorageTest, StoreUserData) { |
| 807 const GURL kScope("http://www.test.not/scope/"); | 914 const GURL kScope("http://www.test.not/scope/"); |
| 808 const GURL kScript("http://www.test.not/script.js"); | 915 const GURL kScript("http://www.test.not/script.js"); |
| 809 const int64_t kRegistrationId = 0; | 916 const int64_t kRegistrationId = 0; |
| 810 const int64_t kVersionId = 0; | 917 const int64_t kVersionId = 0; |
| 811 | 918 |
| 812 LazyInitialize(); | 919 LazyInitialize(); |
| (...skipping 421 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1234 VerifyBasicResponse(storage(), kStaleUncommittedResourceId, false)); | 1341 VerifyBasicResponse(storage(), kStaleUncommittedResourceId, false)); |
| 1235 EXPECT_TRUE(VerifyBasicResponse(storage(), kNewResourceId, true)); | 1342 EXPECT_TRUE(VerifyBasicResponse(storage(), kNewResourceId, true)); |
| 1236 } | 1343 } |
| 1237 | 1344 |
| 1238 TEST_F(ServiceWorkerResourceStorageDiskTest, DeleteAndStartOver) { | 1345 TEST_F(ServiceWorkerResourceStorageDiskTest, DeleteAndStartOver) { |
| 1239 EXPECT_FALSE(storage()->IsDisabled()); | 1346 EXPECT_FALSE(storage()->IsDisabled()); |
| 1240 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1347 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1241 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); | 1348 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); |
| 1242 | 1349 |
| 1243 base::RunLoop run_loop; | 1350 base::RunLoop run_loop; |
| 1244 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_ABORT; | 1351 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1245 storage()->DeleteAndStartOver( | 1352 storage()->DeleteAndStartOver( |
| 1246 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); | 1353 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); |
| 1247 run_loop.Run(); | 1354 run_loop.Run(); |
| 1248 | 1355 |
| 1249 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1356 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1250 EXPECT_TRUE(storage()->IsDisabled()); | 1357 EXPECT_TRUE(storage()->IsDisabled()); |
| 1251 EXPECT_FALSE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1358 EXPECT_FALSE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1252 EXPECT_FALSE(base::DirectoryExists(storage()->GetDatabasePath())); | 1359 EXPECT_FALSE(base::DirectoryExists(storage()->GetDatabasePath())); |
| 1253 } | 1360 } |
| 1254 | 1361 |
| 1255 TEST_F(ServiceWorkerResourceStorageDiskTest, | 1362 TEST_F(ServiceWorkerResourceStorageDiskTest, |
| 1256 DeleteAndStartOver_UnrelatedFileExists) { | 1363 DeleteAndStartOver_UnrelatedFileExists) { |
| 1257 EXPECT_FALSE(storage()->IsDisabled()); | 1364 EXPECT_FALSE(storage()->IsDisabled()); |
| 1258 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1365 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1259 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); | 1366 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); |
| 1260 | 1367 |
| 1261 // Create an unrelated file in the database directory to make sure such a file | 1368 // Create an unrelated file in the database directory to make sure such a file |
| 1262 // does not prevent DeleteAndStartOver. | 1369 // does not prevent DeleteAndStartOver. |
| 1263 base::FilePath file_path; | 1370 base::FilePath file_path; |
| 1264 ASSERT_TRUE( | 1371 ASSERT_TRUE( |
| 1265 base::CreateTemporaryFileInDir(storage()->GetDatabasePath(), &file_path)); | 1372 base::CreateTemporaryFileInDir(storage()->GetDatabasePath(), &file_path)); |
| 1266 ASSERT_TRUE(base::PathExists(file_path)); | 1373 ASSERT_TRUE(base::PathExists(file_path)); |
| 1267 | 1374 |
| 1268 base::RunLoop run_loop; | 1375 base::RunLoop run_loop; |
| 1269 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_ABORT; | 1376 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1270 storage()->DeleteAndStartOver( | 1377 storage()->DeleteAndStartOver( |
| 1271 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); | 1378 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); |
| 1272 run_loop.Run(); | 1379 run_loop.Run(); |
| 1273 | 1380 |
| 1274 EXPECT_EQ(SERVICE_WORKER_OK, status); | 1381 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 1275 EXPECT_TRUE(storage()->IsDisabled()); | 1382 EXPECT_TRUE(storage()->IsDisabled()); |
| 1276 EXPECT_FALSE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1383 EXPECT_FALSE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1277 EXPECT_FALSE(base::DirectoryExists(storage()->GetDatabasePath())); | 1384 EXPECT_FALSE(base::DirectoryExists(storage()->GetDatabasePath())); |
| 1278 } | 1385 } |
| 1279 | 1386 |
| 1280 TEST_F(ServiceWorkerResourceStorageDiskTest, | 1387 TEST_F(ServiceWorkerResourceStorageDiskTest, |
| 1281 DeleteAndStartOver_OpenedFileExists) { | 1388 DeleteAndStartOver_OpenedFileExists) { |
| 1282 EXPECT_FALSE(storage()->IsDisabled()); | 1389 EXPECT_FALSE(storage()->IsDisabled()); |
| 1283 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1390 ASSERT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1284 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); | 1391 ASSERT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); |
| 1285 | 1392 |
| 1286 // Create an unrelated opened file in the database directory to make sure such | 1393 // Create an unrelated opened file in the database directory to make sure such |
| 1287 // a file does not prevent DeleteAndStartOver on non-Windows platforms. | 1394 // a file does not prevent DeleteAndStartOver on non-Windows platforms. |
| 1288 base::FilePath file_path; | 1395 base::FilePath file_path; |
| 1289 base::ScopedFILE file(base::CreateAndOpenTemporaryFileInDir( | 1396 base::ScopedFILE file(base::CreateAndOpenTemporaryFileInDir( |
| 1290 storage()->GetDatabasePath(), &file_path)); | 1397 storage()->GetDatabasePath(), &file_path)); |
| 1291 ASSERT_TRUE(file); | 1398 ASSERT_TRUE(file); |
| 1292 ASSERT_TRUE(base::PathExists(file_path)); | 1399 ASSERT_TRUE(base::PathExists(file_path)); |
| 1293 | 1400 |
| 1294 base::RunLoop run_loop; | 1401 base::RunLoop run_loop; |
| 1295 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_ABORT; | 1402 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_MAX_VALUE; |
| 1296 storage()->DeleteAndStartOver( | 1403 storage()->DeleteAndStartOver( |
| 1297 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); | 1404 base::Bind(&StatusAndQuitCallback, &status, run_loop.QuitClosure())); |
| 1298 run_loop.Run(); | 1405 run_loop.Run(); |
| 1299 | 1406 |
| 1300 #if defined(OS_WIN) | 1407 #if defined(OS_WIN) |
| 1301 // On Windows, deleting the directory containing an opened file should fail. | 1408 // On Windows, deleting the directory containing an opened file should fail. |
| 1302 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); | 1409 EXPECT_EQ(SERVICE_WORKER_ERROR_FAILED, status); |
| 1303 EXPECT_TRUE(storage()->IsDisabled()); | 1410 EXPECT_TRUE(storage()->IsDisabled()); |
| 1304 EXPECT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); | 1411 EXPECT_TRUE(base::DirectoryExists(storage()->GetDiskCachePath())); |
| 1305 EXPECT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); | 1412 EXPECT_TRUE(base::DirectoryExists(storage()->GetDatabasePath())); |
| (...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1568 // Remove other registration at first origin. | 1675 // Remove other registration at first origin. |
| 1569 EXPECT_EQ(SERVICE_WORKER_OK, | 1676 EXPECT_EQ(SERVICE_WORKER_OK, |
| 1570 DeleteRegistration(kRegistrationId2, kScope2.GetOrigin())); | 1677 DeleteRegistration(kRegistrationId2, kScope2.GetOrigin())); |
| 1571 | 1678 |
| 1572 // No foreign fetch registrations remain. | 1679 // No foreign fetch registrations remain. |
| 1573 EXPECT_FALSE(storage()->OriginHasForeignFetchRegistrations(kOrigin1)); | 1680 EXPECT_FALSE(storage()->OriginHasForeignFetchRegistrations(kOrigin1)); |
| 1574 EXPECT_FALSE(storage()->OriginHasForeignFetchRegistrations(kOrigin2)); | 1681 EXPECT_FALSE(storage()->OriginHasForeignFetchRegistrations(kOrigin2)); |
| 1575 } | 1682 } |
| 1576 | 1683 |
| 1577 } // namespace content | 1684 } // namespace content |
| OLD | NEW |