service_worker_registration_unittest.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/service_worker/service_worker_registration.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/browser_thread_impl.h" 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "url/gurl.h" 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ServiceWorkerRegistrationTest : public testing::Test { 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceWorkerRegistrationTest() 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : io_thread_(BrowserThread::IO, &message_loop_) {} 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void SetUp() OVERRIDE {} 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoopForIO message_loop_; 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThreadImpl io_thread_; 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ServiceWorkerRegistrationTest, Shutdown) { 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 registration_id = -1L; 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerRegistration> registration = 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerRegistration( 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/*"), 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/service_worker.js"), 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration_id); 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerVersion> active_version = 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerVersion(registration); 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->set_active_version(active_version); 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->Shutdown(); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(registration->is_shutdown()); 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(active_version->is_shutdown()); 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(registration->HasOneRef()); 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(active_version->HasOneRef()); 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Make sure that activation does not leak 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ServiceWorkerRegistrationTest, ActivatePending) { 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 registration_id = -1L; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerRegistration> registration = 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerRegistration( 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/*"), 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/service_worker.js"), 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration_id); 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerVersion> version_1 = 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerVersion(registration); 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->set_active_version(version_1); 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerVersion> version_2 = 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerVersion(registration); 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->set_pending_version(version_2); 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->ActivatePendingVersion(); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK_EQ(version_2, registration->active_version()); 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(version_1->is_shutdown()); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(version_1->HasOneRef()); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) version_1 = NULL; 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!version_2->is_shutdown()); 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!version_2->HasOneRef()); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->Shutdown(); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(registration->is_shutdown()); 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(version_2->is_shutdown()); 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(registration->HasOneRef()); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(version_2->HasOneRef()); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 83