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

Side by Side Diff: content/browser/service_worker/service_worker_storage_unittest.cc

Issue 457903002: After 24 hours, bust the browser cache when checking for ServiceWorker updates (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 4 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 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/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
(...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 bool was_called = false; 266 bool was_called = false;
267 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; 267 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED;
268 storage()->UpdateToActiveState( 268 storage()->UpdateToActiveState(
269 registration, MakeStatusCallback(&was_called, &result)); 269 registration, MakeStatusCallback(&was_called, &result));
270 EXPECT_FALSE(was_called); // always async 270 EXPECT_FALSE(was_called); // always async
271 base::RunLoop().RunUntilIdle(); 271 base::RunLoop().RunUntilIdle();
272 EXPECT_TRUE(was_called); 272 EXPECT_TRUE(was_called);
273 return result; 273 return result;
274 } 274 }
275 275
276 void UpdateLastUpdateCheckTime(ServiceWorkerRegistration* registration) {
277 storage()->UpdateLastUpdateCheckTime(registration);
278 base::RunLoop().RunUntilIdle();
279 }
280
276 ServiceWorkerStatusCode FindRegistrationForDocument( 281 ServiceWorkerStatusCode FindRegistrationForDocument(
277 const GURL& document_url, 282 const GURL& document_url,
278 scoped_refptr<ServiceWorkerRegistration>* registration) { 283 scoped_refptr<ServiceWorkerRegistration>* registration) {
279 bool was_called = false; 284 bool was_called = false;
280 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED; 285 ServiceWorkerStatusCode result = SERVICE_WORKER_ERROR_FAILED;
281 storage()->FindRegistrationForDocument( 286 storage()->FindRegistrationForDocument(
282 document_url, MakeFindCallback(&was_called, &result, registration)); 287 document_url, MakeFindCallback(&was_called, &result, registration));
283 base::RunLoop().RunUntilIdle(); 288 base::RunLoop().RunUntilIdle();
284 EXPECT_TRUE(was_called); 289 EXPECT_TRUE(was_called);
285 return result; 290 return result;
(...skipping 30 matching lines...) Expand all
316 base::WeakPtr<ServiceWorkerContextCore> context_ptr_; 321 base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
317 TestBrowserThreadBundle browser_thread_bundle_; 322 TestBrowserThreadBundle browser_thread_bundle_;
318 }; 323 };
319 324
320 TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) { 325 TEST_F(ServiceWorkerStorageTest, StoreFindUpdateDeleteRegistration) {
321 const GURL kScope("http://www.test.not/scope/"); 326 const GURL kScope("http://www.test.not/scope/");
322 const GURL kScript("http://www.test.not/script.js"); 327 const GURL kScript("http://www.test.not/script.js");
323 const GURL kDocumentUrl("http://www.test.not/scope/document.html"); 328 const GURL kDocumentUrl("http://www.test.not/scope/document.html");
324 const int64 kRegistrationId = 0; 329 const int64 kRegistrationId = 0;
325 const int64 kVersionId = 0; 330 const int64 kVersionId = 0;
331 const base::Time kToday = base::Time::Now();
332 const base::Time kYesterday = kToday - base::TimeDelta::FromDays(1);
326 333
327 scoped_refptr<ServiceWorkerRegistration> found_registration; 334 scoped_refptr<ServiceWorkerRegistration> found_registration;
328 335
329 // We shouldn't find anything without having stored anything. 336 // We shouldn't find anything without having stored anything.
330 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, 337 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
331 FindRegistrationForDocument(kDocumentUrl, &found_registration)); 338 FindRegistrationForDocument(kDocumentUrl, &found_registration));
332 EXPECT_FALSE(found_registration); 339 EXPECT_FALSE(found_registration);
333 340
334 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, 341 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
335 FindRegistrationForPattern(kScope, &found_registration)); 342 FindRegistrationForPattern(kScope, &found_registration));
336 EXPECT_FALSE(found_registration); 343 EXPECT_FALSE(found_registration);
337 344
338 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, 345 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
339 FindRegistrationForId( 346 FindRegistrationForId(
340 kRegistrationId, kScope.GetOrigin(), &found_registration)); 347 kRegistrationId, kScope.GetOrigin(), &found_registration));
341 EXPECT_FALSE(found_registration); 348 EXPECT_FALSE(found_registration);
342 349
343 // Store something. 350 // Store something.
344 scoped_refptr<ServiceWorkerRegistration> live_registration = 351 scoped_refptr<ServiceWorkerRegistration> live_registration =
345 new ServiceWorkerRegistration( 352 new ServiceWorkerRegistration(
346 kScope, kScript, kRegistrationId, context_ptr_); 353 kScope, kScript, kRegistrationId, context_ptr_);
347 scoped_refptr<ServiceWorkerVersion> live_version = 354 scoped_refptr<ServiceWorkerVersion> live_version =
348 new ServiceWorkerVersion( 355 new ServiceWorkerVersion(
349 live_registration, kVersionId, context_ptr_); 356 live_registration, kVersionId, context_ptr_);
350 live_version->SetStatus(ServiceWorkerVersion::INSTALLED); 357 live_version->SetStatus(ServiceWorkerVersion::INSTALLED);
351 live_registration->SetWaitingVersion(live_version); 358 live_registration->SetWaitingVersion(live_version);
359 live_registration->set_last_update_check(kYesterday);
352 EXPECT_EQ(SERVICE_WORKER_OK, 360 EXPECT_EQ(SERVICE_WORKER_OK,
353 StoreRegistration(live_registration, live_version)); 361 StoreRegistration(live_registration, live_version));
354 362
355 // Now we should find it and get the live ptr back immediately. 363 // Now we should find it and get the live ptr back immediately.
356 EXPECT_EQ(SERVICE_WORKER_OK, 364 EXPECT_EQ(SERVICE_WORKER_OK,
357 FindRegistrationForDocument(kDocumentUrl, &found_registration)); 365 FindRegistrationForDocument(kDocumentUrl, &found_registration));
358 EXPECT_EQ(live_registration, found_registration); 366 EXPECT_EQ(live_registration, found_registration);
359 found_registration = NULL; 367 found_registration = NULL;
360 368
361 // But FindRegistrationForPattern is always async. 369 // But FindRegistrationForPattern is always async.
(...skipping 27 matching lines...) Expand all
389 live_version = NULL; 397 live_version = NULL;
390 398
391 // And FindRegistrationForPattern is always async. 399 // And FindRegistrationForPattern is always async.
392 EXPECT_EQ(SERVICE_WORKER_OK, 400 EXPECT_EQ(SERVICE_WORKER_OK,
393 FindRegistrationForPattern(kScope, &found_registration)); 401 FindRegistrationForPattern(kScope, &found_registration));
394 ASSERT_TRUE(found_registration); 402 ASSERT_TRUE(found_registration);
395 EXPECT_EQ(kRegistrationId, found_registration->id()); 403 EXPECT_EQ(kRegistrationId, found_registration->id());
396 EXPECT_TRUE(found_registration->HasOneRef()); 404 EXPECT_TRUE(found_registration->HasOneRef());
397 EXPECT_FALSE(found_registration->active_version()); 405 EXPECT_FALSE(found_registration->active_version());
398 ASSERT_TRUE(found_registration->waiting_version()); 406 ASSERT_TRUE(found_registration->waiting_version());
407 EXPECT_EQ(kYesterday, found_registration->last_update_check());
399 EXPECT_EQ(ServiceWorkerVersion::INSTALLED, 408 EXPECT_EQ(ServiceWorkerVersion::INSTALLED,
400 found_registration->waiting_version()->status()); 409 found_registration->waiting_version()->status());
401 410
402 // Update to active. 411 // Update to active and update the last check time.
403 scoped_refptr<ServiceWorkerVersion> temp_version = 412 scoped_refptr<ServiceWorkerVersion> temp_version =
404 found_registration->waiting_version(); 413 found_registration->waiting_version();
405 temp_version->SetStatus(ServiceWorkerVersion::ACTIVATED); 414 temp_version->SetStatus(ServiceWorkerVersion::ACTIVATED);
406 found_registration->SetActiveVersion(temp_version); 415 found_registration->SetActiveVersion(temp_version);
407 temp_version = NULL; 416 temp_version = NULL;
408 EXPECT_EQ(SERVICE_WORKER_OK, UpdateToActiveState(found_registration)); 417 EXPECT_EQ(SERVICE_WORKER_OK, UpdateToActiveState(found_registration));
418 found_registration->set_last_update_check(kToday);
419 UpdateLastUpdateCheckTime(found_registration);
420
409 found_registration = NULL; 421 found_registration = NULL;
410 422
411 // Trying to update a unstored registration to active should fail. 423 // Trying to update a unstored registration to active should fail.
412 scoped_refptr<ServiceWorkerRegistration> unstored_registration = 424 scoped_refptr<ServiceWorkerRegistration> unstored_registration =
413 new ServiceWorkerRegistration( 425 new ServiceWorkerRegistration(
414 kScope, kScript, kRegistrationId + 1, context_ptr_); 426 kScope, kScript, kRegistrationId + 1, context_ptr_);
415 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, 427 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
416 UpdateToActiveState(unstored_registration)); 428 UpdateToActiveState(unstored_registration));
417 unstored_registration = NULL; 429 unstored_registration = NULL;
418 430
419 // The Find methods should return a registration with an active version. 431 // The Find methods should return a registration with an active version
432 // and the expected update time.
420 EXPECT_EQ(SERVICE_WORKER_OK, 433 EXPECT_EQ(SERVICE_WORKER_OK,
421 FindRegistrationForDocument(kDocumentUrl, &found_registration)); 434 FindRegistrationForDocument(kDocumentUrl, &found_registration));
422 ASSERT_TRUE(found_registration); 435 ASSERT_TRUE(found_registration);
423 EXPECT_EQ(kRegistrationId, found_registration->id()); 436 EXPECT_EQ(kRegistrationId, found_registration->id());
424 EXPECT_TRUE(found_registration->HasOneRef()); 437 EXPECT_TRUE(found_registration->HasOneRef());
425 EXPECT_FALSE(found_registration->waiting_version()); 438 EXPECT_FALSE(found_registration->waiting_version());
426 ASSERT_TRUE(found_registration->active_version()); 439 ASSERT_TRUE(found_registration->active_version());
427 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED, 440 EXPECT_EQ(ServiceWorkerVersion::ACTIVATED,
428 found_registration->active_version()->status()); 441 found_registration->active_version()->status());
442 EXPECT_EQ(kToday, found_registration->last_update_check());
429 443
430 // Delete from storage but with a instance still live. 444 // Delete from storage but with a instance still live.
431 EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId)); 445 EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId));
432 EXPECT_EQ(SERVICE_WORKER_OK, 446 EXPECT_EQ(SERVICE_WORKER_OK,
433 DeleteRegistration(kRegistrationId, kScope.GetOrigin())); 447 DeleteRegistration(kRegistrationId, kScope.GetOrigin()));
434 EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId)); 448 EXPECT_TRUE(context_->GetLiveVersion(kRegistrationId));
435 449
436 // Should no longer be found. 450 // Should no longer be found.
437 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND, 451 EXPECT_EQ(SERVICE_WORKER_ERROR_NOT_FOUND,
438 FindRegistrationForId( 452 FindRegistrationForId(
(...skipping 583 matching lines...) Expand 10 before | Expand all | Expand 10 after
1022 are_equal = true; 1036 are_equal = true;
1023 storage()->CompareScriptResources( 1037 storage()->CompareScriptResources(
1024 5, 6, 1038 5, 6,
1025 base::Bind(&OnCompareComplete, &status, &are_equal)); 1039 base::Bind(&OnCompareComplete, &status, &are_equal));
1026 base::RunLoop().RunUntilIdle(); 1040 base::RunLoop().RunUntilIdle();
1027 EXPECT_EQ(SERVICE_WORKER_OK, status); 1041 EXPECT_EQ(SERVICE_WORKER_OK, status);
1028 EXPECT_FALSE(are_equal); 1042 EXPECT_FALSE(are_equal);
1029 } 1043 }
1030 1044
1031 } // namespace content 1045 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698