cc: Make picture pile base thread safe.
[chromium-blink-merge.git] / content / browser / service_worker / service_worker_registration_unittest.cc
blob73d383ef533d03cc20e9bf8f9edbb626bdb114f4
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
3 // found in the LICENSE file.
5 #include "content/browser/service_worker/service_worker_registration.h"
7 #include "base/files/scoped_temp_dir.h"
8 #include "base/logging.h"
9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h"
11 #include "base/thread_task_runner_handle.h"
12 #include "content/browser/browser_thread_impl.h"
13 #include "content/browser/service_worker/service_worker_context_core.h"
14 #include "content/browser/service_worker/service_worker_registration_handle.h"
15 #include "testing/gtest/include/gtest/gtest.h"
16 #include "url/gurl.h"
18 namespace content {
20 class ServiceWorkerRegistrationTest : public testing::Test {
21 public:
22 ServiceWorkerRegistrationTest()
23 : io_thread_(BrowserThread::IO, &message_loop_) {}
25 virtual void SetUp() override {
26 scoped_ptr<ServiceWorkerDatabaseTaskManager> database_task_manager(
27 new MockServiceWorkerDatabaseTaskManager(
28 base::ThreadTaskRunnerHandle::Get()));
29 context_.reset(
30 new ServiceWorkerContextCore(base::FilePath(),
31 base::ThreadTaskRunnerHandle::Get(),
32 database_task_manager.Pass(),
33 base::ThreadTaskRunnerHandle::Get(),
34 NULL,
35 NULL,
36 NULL,
37 NULL));
38 context_ptr_ = context_->AsWeakPtr();
41 virtual void TearDown() override {
42 context_.reset();
43 base::RunLoop().RunUntilIdle();
46 class RegistrationListener : public ServiceWorkerRegistration::Listener {
47 public:
48 RegistrationListener() {}
49 ~RegistrationListener() {
50 if (observed_registration_.get())
51 observed_registration_->RemoveListener(this);
54 void OnVersionAttributesChanged(
55 ServiceWorkerRegistration* registration,
56 ChangedVersionAttributesMask changed_mask,
57 const ServiceWorkerRegistrationInfo& info) override {
58 observed_registration_ = registration;
59 observed_changed_mask_ = changed_mask;
60 observed_info_ = info;
63 void OnRegistrationFailed(
64 ServiceWorkerRegistration* registration) override {
65 NOTREACHED();
68 void OnRegistrationFinishedUninstalling(
69 ServiceWorkerRegistration* registration) override {
70 NOTREACHED();
73 void OnUpdateFound(ServiceWorkerRegistration* registration) override {
74 NOTREACHED();
77 void Reset() {
78 observed_registration_ = NULL;
79 observed_changed_mask_ = ChangedVersionAttributesMask();
80 observed_info_ = ServiceWorkerRegistrationInfo();
83 scoped_refptr<ServiceWorkerRegistration> observed_registration_;
84 ChangedVersionAttributesMask observed_changed_mask_;
85 ServiceWorkerRegistrationInfo observed_info_;
88 protected:
89 scoped_ptr<ServiceWorkerContextCore> context_;
90 base::WeakPtr<ServiceWorkerContextCore> context_ptr_;
91 base::MessageLoopForIO message_loop_;
92 BrowserThreadImpl io_thread_;
95 TEST_F(ServiceWorkerRegistrationTest, SetAndUnsetVersions) {
96 const GURL kScope("http://www.example.not/");
97 const GURL kScript("http://www.example.not/service_worker.js");
98 int64 kRegistrationId = 1L;
99 scoped_refptr<ServiceWorkerRegistration> registration =
100 new ServiceWorkerRegistration(
101 kScope,
102 kRegistrationId,
103 context_ptr_);
105 const int64 version_1_id = 1L;
106 const int64 version_2_id = 2L;
107 scoped_refptr<ServiceWorkerVersion> version_1 = new ServiceWorkerVersion(
108 registration.get(), kScript, version_1_id, context_ptr_);
109 scoped_refptr<ServiceWorkerVersion> version_2 = new ServiceWorkerVersion(
110 registration.get(), kScript, version_2_id, context_ptr_);
112 RegistrationListener listener;
113 registration->AddListener(&listener);
114 registration->SetActiveVersion(version_1.get());
116 EXPECT_EQ(version_1.get(), registration->active_version());
117 EXPECT_EQ(registration, listener.observed_registration_);
118 EXPECT_EQ(ChangedVersionAttributesMask::ACTIVE_VERSION,
119 listener.observed_changed_mask_.changed());
120 EXPECT_EQ(kScope, listener.observed_info_.pattern);
121 EXPECT_EQ(version_1_id, listener.observed_info_.active_version.version_id);
122 EXPECT_EQ(kScript, listener.observed_info_.active_version.script_url);
123 EXPECT_TRUE(listener.observed_info_.installing_version.is_null);
124 EXPECT_TRUE(listener.observed_info_.waiting_version.is_null);
125 EXPECT_TRUE(listener.observed_info_.controlling_version.is_null);
126 listener.Reset();
128 registration->SetInstallingVersion(version_2.get());
130 EXPECT_EQ(version_2.get(), registration->installing_version());
131 EXPECT_EQ(ChangedVersionAttributesMask::INSTALLING_VERSION,
132 listener.observed_changed_mask_.changed());
133 EXPECT_EQ(version_1_id, listener.observed_info_.active_version.version_id);
134 EXPECT_EQ(version_2_id,
135 listener.observed_info_.installing_version.version_id);
136 EXPECT_TRUE(listener.observed_info_.waiting_version.is_null);
137 EXPECT_TRUE(listener.observed_info_.controlling_version.is_null);
138 listener.Reset();
140 registration->SetWaitingVersion(version_2.get());
142 EXPECT_EQ(version_2.get(), registration->waiting_version());
143 EXPECT_FALSE(registration->installing_version());
144 EXPECT_TRUE(listener.observed_changed_mask_.waiting_changed());
145 EXPECT_TRUE(listener.observed_changed_mask_.installing_changed());
146 EXPECT_EQ(version_1_id, listener.observed_info_.active_version.version_id);
147 EXPECT_EQ(version_2_id, listener.observed_info_.waiting_version.version_id);
148 EXPECT_TRUE(listener.observed_info_.installing_version.is_null);
149 EXPECT_TRUE(listener.observed_info_.controlling_version.is_null);
150 listener.Reset();
152 registration->UnsetVersion(version_2.get());
154 EXPECT_FALSE(registration->waiting_version());
155 EXPECT_EQ(ChangedVersionAttributesMask::WAITING_VERSION,
156 listener.observed_changed_mask_.changed());
157 EXPECT_EQ(version_1_id, listener.observed_info_.active_version.version_id);
158 EXPECT_TRUE(listener.observed_info_.waiting_version.is_null);
159 EXPECT_TRUE(listener.observed_info_.installing_version.is_null);
160 EXPECT_TRUE(listener.observed_info_.controlling_version.is_null);
163 TEST_F(ServiceWorkerRegistrationTest, FailedRegistrationNoCrash) {
164 const GURL kScope("http://www.example.not/");
165 int64 kRegistrationId = 1L;
166 int kProviderId = 1;
167 scoped_refptr<ServiceWorkerRegistration> registration =
168 new ServiceWorkerRegistration(
169 kScope,
170 kRegistrationId,
171 context_ptr_);
172 scoped_ptr<ServiceWorkerRegistrationHandle> handle(
173 new ServiceWorkerRegistrationHandle(context_ptr_,
174 NULL,
175 kProviderId,
176 registration.get()));
177 registration->NotifyRegistrationFailed();
178 // Don't crash when handle gets destructed.
181 } // namespace content