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