service_worker_registration_unittest.cc revision 010d83a9304c5a91596085d917d248abff47903a
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) 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/files/scoped_temp_dir.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/logging.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/message_loop/message_loop.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/run_loop.h" 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/browser/browser_thread_impl.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/browser/service_worker/service_worker_context_core.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "url/gurl.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace content { 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class ServiceWorkerRegistrationTest : public testing::Test { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ServiceWorkerRegistrationTest() 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : io_thread_(BrowserThread::IO, &message_loop_) {} 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void SetUp() OVERRIDE { 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu context_.reset(new ServiceWorkerContextCore( 265c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu base::FilePath(), 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::MessageLoopProxy::current(), 285c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NULL, 295c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu NULL, 305c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu scoped_ptr<ServiceWorkerProcessManager>())); 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch context_ptr_ = context_->AsWeakPtr(); 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void TearDown() OVERRIDE { 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) context_.reset(); 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::RunLoop().RunUntilIdle(); 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) } 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) protected: 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_ptr<ServiceWorkerContextCore> context_; 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch base::WeakPtr<ServiceWorkerContextCore> context_ptr_; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) base::MessageLoopForIO message_loop_; 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) BrowserThreadImpl io_thread_; 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Make sure that activation does not leak 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)TEST_F(ServiceWorkerRegistrationTest, ActivatePending) { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) int64 registration_id = -1L; 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerRegistration> registration = 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) new ServiceWorkerRegistration( 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/*"), 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) GURL("http://www.example.com/service_worker.js"), 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch registration_id, 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch context_ptr_); 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 56a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64 version_1_id = 1L; 57a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) const int64 version_2_id = 2L; 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerVersion> version_1 = 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ServiceWorkerVersion(registration, version_1_id, context_ptr_); 60a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) version_1->SetStatus(ServiceWorkerVersion::ACTIVE); 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->set_active_version(version_1); 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_refptr<ServiceWorkerVersion> version_2 = 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch new ServiceWorkerVersion(registration, version_2_id, context_ptr_); 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->set_pending_version(version_2); 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) registration->ActivatePendingVersion(); 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK_EQ(version_2, registration->active_version()); 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(version_1->HasOneRef()); 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) version_1 = NULL; 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DCHECK(!version_2->HasOneRef()); 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace content 76