Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(204)

Side by Side Diff: content/browser/service_worker/service_worker_version_unittest.cc

Issue 188283003: Add ServiceWorkerVersion::status() (which is to be persisted unlike running status) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/run_loop.h" 6 #include "base/run_loop.h"
7 #include "content/browser/service_worker/embedded_worker_registry.h" 7 #include "content/browser/service_worker/embedded_worker_registry.h"
8 #include "content/browser/service_worker/embedded_worker_test_helper.h" 8 #include "content/browser/service_worker/embedded_worker_test_helper.h"
9 #include "content/browser/service_worker/service_worker_context_core.h" 9 #include "content/browser/service_worker/service_worker_context_core.h"
10 #include "content/browser/service_worker/service_worker_registration.h" 10 #include "content/browser/service_worker/service_worker_registration.h"
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
93 context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL)); 93 context_.reset(new ServiceWorkerContextCore(base::FilePath(), NULL));
94 helper_.reset(new MessageReceiver(context_.get())); 94 helper_.reset(new MessageReceiver(context_.get()));
95 95
96 registration_ = new ServiceWorkerRegistration( 96 registration_ = new ServiceWorkerRegistration(
97 GURL("http://www.example.com/*"), 97 GURL("http://www.example.com/*"),
98 GURL("http://www.example.com/service_worker.js"), 98 GURL("http://www.example.com/service_worker.js"),
99 1L); 99 1L);
100 version_ = new ServiceWorkerVersion( 100 version_ = new ServiceWorkerVersion(
101 registration_, 101 registration_,
102 embedded_worker_registry(), 102 embedded_worker_registry(),
103 1L); 103 1L,
104 ServiceWorkerVersion::NEW);
104 105
105 // Simulate adding one process to the worker. 106 // Simulate adding one process to the worker.
106 int embedded_worker_id = version_->embedded_worker()->embedded_worker_id(); 107 int embedded_worker_id = version_->embedded_worker()->embedded_worker_id();
107 helper_->SimulateAddProcessToWorker(embedded_worker_id, kRenderProcessId); 108 helper_->SimulateAddProcessToWorker(embedded_worker_id, kRenderProcessId);
108 } 109 }
109 110
110 virtual void TearDown() OVERRIDE { 111 virtual void TearDown() OVERRIDE {
111 version_->Shutdown(); 112 version_->Shutdown();
112 version_ = 0; 113 version_ = 0;
113 registration_->Shutdown(); 114 registration_->Shutdown();
(...skipping 15 matching lines...) Expand all
129 }; 130 };
130 131
131 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { 132 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) {
132 // Call StartWorker() multiple times. 133 // Call StartWorker() multiple times.
133 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 134 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
134 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 135 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
135 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; 136 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED;
136 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); 137 version_->StartWorker(CreateReceiverOnCurrentThread(&status1));
137 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); 138 version_->StartWorker(CreateReceiverOnCurrentThread(&status2));
138 139
139 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->status()); 140 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status());
140 base::RunLoop().RunUntilIdle(); 141 base::RunLoop().RunUntilIdle();
141 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 142 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
142 143
143 // Call StartWorker() after it's started. 144 // Call StartWorker() after it's started.
144 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 145 version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
145 base::RunLoop().RunUntilIdle(); 146 base::RunLoop().RunUntilIdle();
146 147
147 // All should just succeed. 148 // All should just succeed.
148 EXPECT_EQ(SERVICE_WORKER_OK, status1); 149 EXPECT_EQ(SERVICE_WORKER_OK, status1);
149 EXPECT_EQ(SERVICE_WORKER_OK, status2); 150 EXPECT_EQ(SERVICE_WORKER_OK, status2);
150 EXPECT_EQ(SERVICE_WORKER_OK, status3); 151 EXPECT_EQ(SERVICE_WORKER_OK, status3);
151 152
152 // Call StopWorker() multiple times. 153 // Call StopWorker() multiple times.
153 status1 = SERVICE_WORKER_ERROR_FAILED; 154 status1 = SERVICE_WORKER_ERROR_FAILED;
154 status2 = SERVICE_WORKER_ERROR_FAILED; 155 status2 = SERVICE_WORKER_ERROR_FAILED;
155 status3 = SERVICE_WORKER_ERROR_FAILED; 156 status3 = SERVICE_WORKER_ERROR_FAILED;
156 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); 157 version_->StopWorker(CreateReceiverOnCurrentThread(&status1));
157 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); 158 version_->StopWorker(CreateReceiverOnCurrentThread(&status2));
158 159
159 // Also try calling StartWorker while StopWorker is in queue. 160 // Also try calling StartWorker while StopWorker is in queue.
160 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); 161 version_->StartWorker(CreateReceiverOnCurrentThread(&status3));
161 162
162 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->status()); 163 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status());
163 base::RunLoop().RunUntilIdle(); 164 base::RunLoop().RunUntilIdle();
164 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 165 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
165 166
166 // All StopWorker should just succeed, while StartWorker fails. 167 // All StopWorker should just succeed, while StartWorker fails.
167 EXPECT_EQ(SERVICE_WORKER_OK, status1); 168 EXPECT_EQ(SERVICE_WORKER_OK, status1);
168 EXPECT_EQ(SERVICE_WORKER_OK, status2); 169 EXPECT_EQ(SERVICE_WORKER_OK, status2);
169 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3); 170 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3);
170 } 171 }
171 172
172 TEST_F(ServiceWorkerVersionTest, SendMessage) { 173 TEST_F(ServiceWorkerVersionTest, SendMessage) {
173 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 174 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
174 175
175 // Send a message without starting the worker. 176 // Send a message without starting the worker.
176 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; 177 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED;
177 version_->SendMessage(TestMsg_Message(), 178 version_->SendMessage(TestMsg_Message(),
178 CreateReceiverOnCurrentThread(&status)); 179 CreateReceiverOnCurrentThread(&status));
179 base::RunLoop().RunUntilIdle(); 180 base::RunLoop().RunUntilIdle();
180 EXPECT_EQ(SERVICE_WORKER_OK, status); 181 EXPECT_EQ(SERVICE_WORKER_OK, status);
181 182
182 // The worker should be now started. 183 // The worker should be now started.
183 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 184 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
184 185
185 // Stop the worker, and then send the message immediately. 186 // Stop the worker, and then send the message immediately.
186 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; 187 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED;
187 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 188 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
188 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 189 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
189 version_->SendMessage(TestMsg_Message(), 190 version_->SendMessage(TestMsg_Message(),
190 CreateReceiverOnCurrentThread(&msg_status)); 191 CreateReceiverOnCurrentThread(&msg_status));
191 base::RunLoop().RunUntilIdle(); 192 base::RunLoop().RunUntilIdle();
192 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 193 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
193 194
194 // SendMessage should return START_WORKER_FAILED error since it tried to 195 // SendMessage should return START_WORKER_FAILED error since it tried to
195 // start a worker while it was stopping. 196 // start a worker while it was stopping.
196 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); 197 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status);
197 } 198 }
198 199
199 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) { 200 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) {
200 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); 201 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status());
201 202
202 // Start the worker. 203 // Start the worker.
203 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; 204 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED;
204 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); 205 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status));
205 base::RunLoop().RunUntilIdle(); 206 base::RunLoop().RunUntilIdle();
206 EXPECT_EQ(SERVICE_WORKER_OK, start_status); 207 EXPECT_EQ(SERVICE_WORKER_OK, start_status);
207 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 208 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
208 209
209 // Stop the worker, and then send the message immediately. 210 // Stop the worker, and then send the message immediately.
210 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; 211 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED;
211 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; 212 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED;
212 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); 213 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status));
213 version_->SendMessage(TestMsg_Message(), 214 version_->SendMessage(TestMsg_Message(),
214 CreateReceiverOnCurrentThread(&msg_status)); 215 CreateReceiverOnCurrentThread(&msg_status));
215 base::RunLoop().RunUntilIdle(); 216 base::RunLoop().RunUntilIdle();
216 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); 217 EXPECT_EQ(SERVICE_WORKER_OK, stop_status);
217 218
218 // SendMessage should return START_WORKER_FAILED error since it tried to 219 // SendMessage should return START_WORKER_FAILED error since it tried to
219 // start a worker while it was stopping. 220 // start a worker while it was stopping.
220 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); 221 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status);
221 222
222 // Resend the message, which should succeed and restart the worker. 223 // Resend the message, which should succeed and restart the worker.
223 version_->SendMessage(TestMsg_Message(), 224 version_->SendMessage(TestMsg_Message(),
224 CreateReceiverOnCurrentThread(&msg_status)); 225 CreateReceiverOnCurrentThread(&msg_status));
225 base::RunLoop().RunUntilIdle(); 226 base::RunLoop().RunUntilIdle();
226 EXPECT_EQ(SERVICE_WORKER_OK, msg_status); 227 EXPECT_EQ(SERVICE_WORKER_OK, msg_status);
227 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); 228 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status());
228 } 229 }
229 230
230 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) { 231 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) {
231 // Send multiple messages and verify responses. 232 // Send multiple messages and verify responses.
232 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; 233 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED;
233 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; 234 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED;
234 int value1 = -1, value2 = -1; 235 int value1 = -1, value2 = -1;
235 236
236 version_->SendMessageAndRegisterCallback( 237 version_->SendMessageAndRegisterCallback(
237 TestMsg_Request(111), 238 TestMsg_Request(111),
238 base::Bind(&ReceiveResponse, &status1, &value1)); 239 base::Bind(&ReceiveResponse, &status1, &value1));
239 version_->SendMessageAndRegisterCallback( 240 version_->SendMessageAndRegisterCallback(
240 TestMsg_Request(333), 241 TestMsg_Request(333),
241 base::Bind(&ReceiveResponse, &status2, &value2)); 242 base::Bind(&ReceiveResponse, &status2, &value2));
242 base::RunLoop().RunUntilIdle(); 243 base::RunLoop().RunUntilIdle();
243 244
244 EXPECT_EQ(SERVICE_WORKER_OK, status1); 245 EXPECT_EQ(SERVICE_WORKER_OK, status1);
245 EXPECT_EQ(SERVICE_WORKER_OK, status2); 246 EXPECT_EQ(SERVICE_WORKER_OK, status2);
246 EXPECT_EQ(111 * 2, value1); 247 EXPECT_EQ(111 * 2, value1);
247 EXPECT_EQ(333 * 2, value2); 248 EXPECT_EQ(333 * 2, value2);
248 } 249 }
249 250
250 } // namespace content 251 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698