| OLD | NEW |
| 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 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 }; | 129 }; |
| 130 | 130 |
| 131 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { | 131 TEST_F(ServiceWorkerVersionTest, ConcurrentStartAndStop) { |
| 132 // Call StartWorker() multiple times. | 132 // Call StartWorker() multiple times. |
| 133 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; | 133 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; |
| 134 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; | 134 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; |
| 135 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; | 135 ServiceWorkerStatusCode status3 = SERVICE_WORKER_ERROR_FAILED; |
| 136 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); | 136 version_->StartWorker(CreateReceiverOnCurrentThread(&status1)); |
| 137 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); | 137 version_->StartWorker(CreateReceiverOnCurrentThread(&status2)); |
| 138 | 138 |
| 139 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->status()); | 139 EXPECT_EQ(ServiceWorkerVersion::STARTING, version_->running_status()); |
| 140 base::RunLoop().RunUntilIdle(); | 140 base::RunLoop().RunUntilIdle(); |
| 141 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); | 141 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 142 | 142 |
| 143 // Call StartWorker() after it's started. | 143 // Call StartWorker() after it's started. |
| 144 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); | 144 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); |
| 145 base::RunLoop().RunUntilIdle(); | 145 base::RunLoop().RunUntilIdle(); |
| 146 | 146 |
| 147 // All should just succeed. | 147 // All should just succeed. |
| 148 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 148 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 149 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 149 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 150 EXPECT_EQ(SERVICE_WORKER_OK, status3); | 150 EXPECT_EQ(SERVICE_WORKER_OK, status3); |
| 151 | 151 |
| 152 // Call StopWorker() multiple times. | 152 // Call StopWorker() multiple times. |
| 153 status1 = SERVICE_WORKER_ERROR_FAILED; | 153 status1 = SERVICE_WORKER_ERROR_FAILED; |
| 154 status2 = SERVICE_WORKER_ERROR_FAILED; | 154 status2 = SERVICE_WORKER_ERROR_FAILED; |
| 155 status3 = SERVICE_WORKER_ERROR_FAILED; | 155 status3 = SERVICE_WORKER_ERROR_FAILED; |
| 156 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); | 156 version_->StopWorker(CreateReceiverOnCurrentThread(&status1)); |
| 157 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); | 157 version_->StopWorker(CreateReceiverOnCurrentThread(&status2)); |
| 158 | 158 |
| 159 // Also try calling StartWorker while StopWorker is in queue. | 159 // Also try calling StartWorker while StopWorker is in queue. |
| 160 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); | 160 version_->StartWorker(CreateReceiverOnCurrentThread(&status3)); |
| 161 | 161 |
| 162 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->status()); | 162 EXPECT_EQ(ServiceWorkerVersion::STOPPING, version_->running_status()); |
| 163 base::RunLoop().RunUntilIdle(); | 163 base::RunLoop().RunUntilIdle(); |
| 164 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); | 164 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| 165 | 165 |
| 166 // All StopWorker should just succeed, while StartWorker fails. | 166 // All StopWorker should just succeed, while StartWorker fails. |
| 167 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 167 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 168 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 168 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 169 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3); | 169 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, status3); |
| 170 } | 170 } |
| 171 | 171 |
| 172 TEST_F(ServiceWorkerVersionTest, SendMessage) { | 172 TEST_F(ServiceWorkerVersionTest, SendMessage) { |
| 173 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); | 173 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| 174 | 174 |
| 175 // Send a message without starting the worker. | 175 // Send a message without starting the worker. |
| 176 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; | 176 ServiceWorkerStatusCode status = SERVICE_WORKER_ERROR_FAILED; |
| 177 version_->SendMessage(TestMsg_Message(), | 177 version_->SendMessage(TestMsg_Message(), |
| 178 CreateReceiverOnCurrentThread(&status)); | 178 CreateReceiverOnCurrentThread(&status)); |
| 179 base::RunLoop().RunUntilIdle(); | 179 base::RunLoop().RunUntilIdle(); |
| 180 EXPECT_EQ(SERVICE_WORKER_OK, status); | 180 EXPECT_EQ(SERVICE_WORKER_OK, status); |
| 181 | 181 |
| 182 // The worker should be now started. | 182 // The worker should be now started. |
| 183 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); | 183 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 184 | 184 |
| 185 // Stop the worker, and then send the message immediately. | 185 // Stop the worker, and then send the message immediately. |
| 186 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; | 186 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; |
| 187 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; | 187 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; |
| 188 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); | 188 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); |
| 189 version_->SendMessage(TestMsg_Message(), | 189 version_->SendMessage(TestMsg_Message(), |
| 190 CreateReceiverOnCurrentThread(&msg_status)); | 190 CreateReceiverOnCurrentThread(&msg_status)); |
| 191 base::RunLoop().RunUntilIdle(); | 191 base::RunLoop().RunUntilIdle(); |
| 192 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); | 192 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| 193 | 193 |
| 194 // SendMessage should return START_WORKER_FAILED error since it tried to | 194 // SendMessage should return START_WORKER_FAILED error since it tried to |
| 195 // start a worker while it was stopping. | 195 // start a worker while it was stopping. |
| 196 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); | 196 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); |
| 197 } | 197 } |
| 198 | 198 |
| 199 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) { | 199 TEST_F(ServiceWorkerVersionTest, ReSendMessageAfterStop) { |
| 200 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->status()); | 200 EXPECT_EQ(ServiceWorkerVersion::STOPPED, version_->running_status()); |
| 201 | 201 |
| 202 // Start the worker. | 202 // Start the worker. |
| 203 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; | 203 ServiceWorkerStatusCode start_status = SERVICE_WORKER_ERROR_FAILED; |
| 204 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); | 204 version_->StartWorker(CreateReceiverOnCurrentThread(&start_status)); |
| 205 base::RunLoop().RunUntilIdle(); | 205 base::RunLoop().RunUntilIdle(); |
| 206 EXPECT_EQ(SERVICE_WORKER_OK, start_status); | 206 EXPECT_EQ(SERVICE_WORKER_OK, start_status); |
| 207 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); | 207 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 208 | 208 |
| 209 // Stop the worker, and then send the message immediately. | 209 // Stop the worker, and then send the message immediately. |
| 210 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; | 210 ServiceWorkerStatusCode msg_status = SERVICE_WORKER_ERROR_FAILED; |
| 211 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; | 211 ServiceWorkerStatusCode stop_status = SERVICE_WORKER_ERROR_FAILED; |
| 212 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); | 212 version_->StopWorker(CreateReceiverOnCurrentThread(&stop_status)); |
| 213 version_->SendMessage(TestMsg_Message(), | 213 version_->SendMessage(TestMsg_Message(), |
| 214 CreateReceiverOnCurrentThread(&msg_status)); | 214 CreateReceiverOnCurrentThread(&msg_status)); |
| 215 base::RunLoop().RunUntilIdle(); | 215 base::RunLoop().RunUntilIdle(); |
| 216 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); | 216 EXPECT_EQ(SERVICE_WORKER_OK, stop_status); |
| 217 | 217 |
| 218 // SendMessage should return START_WORKER_FAILED error since it tried to | 218 // SendMessage should return START_WORKER_FAILED error since it tried to |
| 219 // start a worker while it was stopping. | 219 // start a worker while it was stopping. |
| 220 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); | 220 EXPECT_EQ(SERVICE_WORKER_ERROR_START_WORKER_FAILED, msg_status); |
| 221 | 221 |
| 222 // Resend the message, which should succeed and restart the worker. | 222 // Resend the message, which should succeed and restart the worker. |
| 223 version_->SendMessage(TestMsg_Message(), | 223 version_->SendMessage(TestMsg_Message(), |
| 224 CreateReceiverOnCurrentThread(&msg_status)); | 224 CreateReceiverOnCurrentThread(&msg_status)); |
| 225 base::RunLoop().RunUntilIdle(); | 225 base::RunLoop().RunUntilIdle(); |
| 226 EXPECT_EQ(SERVICE_WORKER_OK, msg_status); | 226 EXPECT_EQ(SERVICE_WORKER_OK, msg_status); |
| 227 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->status()); | 227 EXPECT_EQ(ServiceWorkerVersion::RUNNING, version_->running_status()); |
| 228 } | 228 } |
| 229 | 229 |
| 230 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) { | 230 TEST_F(ServiceWorkerVersionTest, SendMessageAndRegisterCallback) { |
| 231 // Send multiple messages and verify responses. | 231 // Send multiple messages and verify responses. |
| 232 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; | 232 ServiceWorkerStatusCode status1 = SERVICE_WORKER_ERROR_FAILED; |
| 233 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; | 233 ServiceWorkerStatusCode status2 = SERVICE_WORKER_ERROR_FAILED; |
| 234 int value1 = -1, value2 = -1; | 234 int value1 = -1, value2 = -1; |
| 235 | 235 |
| 236 version_->SendMessageAndRegisterCallback( | 236 version_->SendMessageAndRegisterCallback( |
| 237 TestMsg_Request(111), | 237 TestMsg_Request(111), |
| 238 base::Bind(&ReceiveResponse, &status1, &value1)); | 238 base::Bind(&ReceiveResponse, &status1, &value1)); |
| 239 version_->SendMessageAndRegisterCallback( | 239 version_->SendMessageAndRegisterCallback( |
| 240 TestMsg_Request(333), | 240 TestMsg_Request(333), |
| 241 base::Bind(&ReceiveResponse, &status2, &value2)); | 241 base::Bind(&ReceiveResponse, &status2, &value2)); |
| 242 base::RunLoop().RunUntilIdle(); | 242 base::RunLoop().RunUntilIdle(); |
| 243 | 243 |
| 244 EXPECT_EQ(SERVICE_WORKER_OK, status1); | 244 EXPECT_EQ(SERVICE_WORKER_OK, status1); |
| 245 EXPECT_EQ(SERVICE_WORKER_OK, status2); | 245 EXPECT_EQ(SERVICE_WORKER_OK, status2); |
| 246 EXPECT_EQ(111 * 2, value1); | 246 EXPECT_EQ(111 * 2, value1); |
| 247 EXPECT_EQ(333 * 2, value2); | 247 EXPECT_EQ(333 * 2, value2); |
| 248 } | 248 } |
| 249 | 249 |
| 250 } // namespace content | 250 } // namespace content |
| OLD | NEW |