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