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

Side by Side Diff: content/child/service_worker/service_worker_dispatcher_unittest.cc

Issue 2658603003: ServiceWorker: Enable UseCounter for ServiceWorkerGlobalScope (Closed)
Patch Set: int32_t -> uint32_t Created 3 years, 10 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/macros.h" 5 #include "base/macros.h"
6 #include "base/message_loop/message_loop.h" 6 #include "base/message_loop/message_loop.h"
7 #include "content/child/service_worker/service_worker_dispatcher.h" 7 #include "content/child/service_worker/service_worker_dispatcher.h"
8 #include "content/child/service_worker/service_worker_handle_reference.h" 8 #include "content/child/service_worker/service_worker_handle_reference.h"
9 #include "content/child/service_worker/service_worker_provider_context.h" 9 #include "content/child/service_worker/service_worker_provider_context.h"
10 #include "content/child/service_worker/web_service_worker_impl.h" 10 #include "content/child/service_worker/web_service_worker_impl.h"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 dispatcher_->OnAssociateRegistration(thread_id, provider_id, info, attrs); 79 dispatcher_->OnAssociateRegistration(thread_id, provider_id, info, attrs);
80 } 80 }
81 81
82 void OnDisassociateRegistration(int thread_id, int provider_id) { 82 void OnDisassociateRegistration(int thread_id, int provider_id) {
83 dispatcher_->OnDisassociateRegistration(thread_id, provider_id); 83 dispatcher_->OnDisassociateRegistration(thread_id, provider_id);
84 } 84 }
85 85
86 void OnSetControllerServiceWorker(int thread_id, 86 void OnSetControllerServiceWorker(int thread_id,
87 int provider_id, 87 int provider_id,
88 const ServiceWorkerObjectInfo& info, 88 const ServiceWorkerObjectInfo& info,
89 bool should_notify_controllerchange) { 89 bool should_notify_controllerchange,
90 const std::set<uint32_t>& used_features) {
90 dispatcher_->OnSetControllerServiceWorker(thread_id, provider_id, info, 91 dispatcher_->OnSetControllerServiceWorker(thread_id, provider_id, info,
91 should_notify_controllerchange); 92 should_notify_controllerchange,
93 used_features);
92 } 94 }
93 95
94 void OnPostMessage(const ServiceWorkerMsg_MessageToDocument_Params& params) { 96 void OnPostMessage(const ServiceWorkerMsg_MessageToDocument_Params& params) {
95 dispatcher_->OnPostMessage(params); 97 dispatcher_->OnPostMessage(params);
96 } 98 }
97 99
98 std::unique_ptr<ServiceWorkerHandleReference> Adopt( 100 std::unique_ptr<ServiceWorkerHandleReference> Adopt(
99 const ServiceWorkerObjectInfo& info) { 101 const ServiceWorkerObjectInfo& info) {
100 return dispatcher_->Adopt(info); 102 return dispatcher_->Adopt(info);
101 } 103 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 137
136 void dispatchMessageEvent( 138 void dispatchMessageEvent(
137 std::unique_ptr<blink::WebServiceWorker::Handle> handle, 139 std::unique_ptr<blink::WebServiceWorker::Handle> handle,
138 const blink::WebString& message, 140 const blink::WebString& message,
139 const blink::WebMessagePortChannelArray& channels) override { 141 const blink::WebMessagePortChannelArray& channels) override {
140 // WebPassOwnPtr cannot be owned in Chromium, so drop the handle here. 142 // WebPassOwnPtr cannot be owned in Chromium, so drop the handle here.
141 // The destruction releases ServiceWorkerHandleReference. 143 // The destruction releases ServiceWorkerHandleReference.
142 is_dispatch_message_event_called_ = true; 144 is_dispatch_message_event_called_ = true;
143 } 145 }
144 146
147 void countFeature(uint32_t feature) override {
148 used_features_.insert(feature);
149 }
150
145 bool is_set_controlled_called() const { return is_set_controlled_called_; } 151 bool is_set_controlled_called() const { return is_set_controlled_called_; }
146 152
147 bool is_dispatch_message_event_called() const { 153 bool is_dispatch_message_event_called() const {
148 return is_dispatch_message_event_called_; 154 return is_dispatch_message_event_called_;
149 } 155 }
150 156
151 private: 157 private:
152 const int provider_id_; 158 const int provider_id_;
153 bool is_set_controlled_called_ = false; 159 bool is_set_controlled_called_ = false;
154 bool is_dispatch_message_event_called_ = false; 160 bool is_dispatch_message_event_called_ = false;
155 ServiceWorkerDispatcher* dispatcher_; 161 ServiceWorkerDispatcher* dispatcher_;
162 std::set<uint32_t> used_features_;
156 }; 163 };
157 164
158 TEST_F(ServiceWorkerDispatcherTest, OnAssociateRegistration_NoProviderContext) { 165 TEST_F(ServiceWorkerDispatcherTest, OnAssociateRegistration_NoProviderContext) {
159 // Assume that these objects are passed from the browser process and own 166 // Assume that these objects are passed from the browser process and own
160 // references to browser-side registration/worker representations. 167 // references to browser-side registration/worker representations.
161 ServiceWorkerRegistrationObjectInfo info; 168 ServiceWorkerRegistrationObjectInfo info;
162 ServiceWorkerVersionAttributes attrs; 169 ServiceWorkerVersionAttributes attrs;
163 CreateObjectInfoAndVersionAttributes(&info, &attrs); 170 CreateObjectInfoAndVersionAttributes(&info, &attrs);
164 171
165 // The passed references should be adopted but immediately released because 172 // The passed references should be adopted but immediately released because
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 // Assume that these objects are passed from the browser process and own 259 // Assume that these objects are passed from the browser process and own
253 // references to browser-side registration/worker representations. 260 // references to browser-side registration/worker representations.
254 ServiceWorkerRegistrationObjectInfo info; 261 ServiceWorkerRegistrationObjectInfo info;
255 ServiceWorkerVersionAttributes attrs; 262 ServiceWorkerVersionAttributes attrs;
256 CreateObjectInfoAndVersionAttributes(&info, &attrs); 263 CreateObjectInfoAndVersionAttributes(&info, &attrs);
257 264
258 // (1) In the case there are no SWProviderContext and WebSWProviderClient for 265 // (1) In the case there are no SWProviderContext and WebSWProviderClient for
259 // the provider, the passed reference to the active worker should be adopted 266 // the provider, the passed reference to the active worker should be adopted
260 // but immediately released because there is no provider context to own it. 267 // but immediately released because there is no provider context to own it.
261 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active, 268 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active,
262 should_notify_controllerchange); 269 should_notify_controllerchange,
270 std::set<uint32_t>());
263 ASSERT_EQ(1UL, ipc_sink()->message_count()); 271 ASSERT_EQ(1UL, ipc_sink()->message_count());
264 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 272 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
265 ipc_sink()->GetMessageAt(0)->type()); 273 ipc_sink()->GetMessageAt(0)->type());
266 ipc_sink()->ClearMessages(); 274 ipc_sink()->ClearMessages();
267 275
268 // (2) In the case there is no WebSWProviderClient but SWProviderContext for 276 // (2) In the case there is no WebSWProviderClient but SWProviderContext for
269 // the provider, the passed referecence should be adopted and owned by the 277 // the provider, the passed referecence should be adopted and owned by the
270 // provider context. 278 // provider context.
271 scoped_refptr<ServiceWorkerProviderContext> provider_context( 279 scoped_refptr<ServiceWorkerProviderContext> provider_context(
272 new ServiceWorkerProviderContext(kProviderId, 280 new ServiceWorkerProviderContext(kProviderId,
273 SERVICE_WORKER_PROVIDER_FOR_WINDOW, 281 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
274 thread_safe_sender())); 282 thread_safe_sender()));
275 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs); 283 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs);
276 ipc_sink()->ClearMessages(); 284 ipc_sink()->ClearMessages();
277 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active, 285 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active,
278 should_notify_controllerchange); 286 should_notify_controllerchange,
287 std::set<uint32_t>());
279 EXPECT_EQ(0UL, ipc_sink()->message_count()); 288 EXPECT_EQ(0UL, ipc_sink()->message_count());
280 289
281 // Destruction of the provider context should release references to the 290 // Destruction of the provider context should release references to the
282 // associated registration and the controller. 291 // associated registration and the controller.
283 provider_context = nullptr; 292 provider_context = nullptr;
284 ASSERT_EQ(2UL, ipc_sink()->message_count()); 293 ASSERT_EQ(2UL, ipc_sink()->message_count());
285 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 294 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
286 ipc_sink()->GetMessageAt(0)->type()); 295 ipc_sink()->GetMessageAt(0)->type());
287 EXPECT_EQ(ServiceWorkerHostMsg_DecrementRegistrationRefCount::ID, 296 EXPECT_EQ(ServiceWorkerHostMsg_DecrementRegistrationRefCount::ID,
288 ipc_sink()->GetMessageAt(1)->type()); 297 ipc_sink()->GetMessageAt(1)->type());
289 ipc_sink()->ClearMessages(); 298 ipc_sink()->ClearMessages();
290 299
291 // (3) In the case there is no SWProviderContext but WebSWProviderClient for 300 // (3) In the case there is no SWProviderContext but WebSWProviderClient for
292 // the provider, the new reference should be created and owned by the provider 301 // the provider, the new reference should be created and owned by the provider
293 // client (but the reference is immediately released due to limitation of the 302 // client (but the reference is immediately released due to limitation of the
294 // mock provider client. See the comment on setController() of the mock). 303 // mock provider client. See the comment on setController() of the mock).
295 // In addition, the passed reference should be adopted but immediately 304 // In addition, the passed reference should be adopted but immediately
296 // released because there is no provider context to own it. 305 // released because there is no provider context to own it.
297 std::unique_ptr<MockWebServiceWorkerProviderClientImpl> provider_client( 306 std::unique_ptr<MockWebServiceWorkerProviderClientImpl> provider_client(
298 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher())); 307 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher()));
299 ASSERT_FALSE(provider_client->is_set_controlled_called()); 308 ASSERT_FALSE(provider_client->is_set_controlled_called());
300 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active, 309 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active,
301 should_notify_controllerchange); 310 should_notify_controllerchange,
311 std::set<uint32_t>());
302 EXPECT_TRUE(provider_client->is_set_controlled_called()); 312 EXPECT_TRUE(provider_client->is_set_controlled_called());
303 ASSERT_EQ(3UL, ipc_sink()->message_count()); 313 ASSERT_EQ(3UL, ipc_sink()->message_count());
304 EXPECT_EQ(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID, 314 EXPECT_EQ(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID,
305 ipc_sink()->GetMessageAt(0)->type()); 315 ipc_sink()->GetMessageAt(0)->type());
306 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 316 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
307 ipc_sink()->GetMessageAt(1)->type()); 317 ipc_sink()->GetMessageAt(1)->type());
308 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 318 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
309 ipc_sink()->GetMessageAt(2)->type()); 319 ipc_sink()->GetMessageAt(2)->type());
310 provider_client.reset(); 320 provider_client.reset();
311 ipc_sink()->ClearMessages(); 321 ipc_sink()->ClearMessages();
312 322
313 // (4) In the case there are both SWProviderContext and SWProviderClient for 323 // (4) In the case there are both SWProviderContext and SWProviderClient for
314 // the provider, the passed referecence should be adopted and owned by the 324 // the provider, the passed referecence should be adopted and owned by the
315 // provider context. In addition, the new reference should be created for the 325 // provider context. In addition, the new reference should be created for the
316 // provider client and immediately released due to limitation of the mock 326 // provider client and immediately released due to limitation of the mock
317 // implementation. 327 // implementation.
318 provider_context = new ServiceWorkerProviderContext( 328 provider_context = new ServiceWorkerProviderContext(
319 kProviderId, SERVICE_WORKER_PROVIDER_FOR_WINDOW, thread_safe_sender()); 329 kProviderId, SERVICE_WORKER_PROVIDER_FOR_WINDOW, thread_safe_sender());
320 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs); 330 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs);
321 provider_client.reset( 331 provider_client.reset(
322 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher())); 332 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher()));
323 ASSERT_FALSE(provider_client->is_set_controlled_called()); 333 ASSERT_FALSE(provider_client->is_set_controlled_called());
324 ipc_sink()->ClearMessages(); 334 ipc_sink()->ClearMessages();
325 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active, 335 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, attrs.active,
326 should_notify_controllerchange); 336 should_notify_controllerchange,
337 std::set<uint32_t>());
327 EXPECT_TRUE(provider_client->is_set_controlled_called()); 338 EXPECT_TRUE(provider_client->is_set_controlled_called());
328 ASSERT_EQ(2UL, ipc_sink()->message_count()); 339 ASSERT_EQ(2UL, ipc_sink()->message_count());
329 EXPECT_EQ(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID, 340 EXPECT_EQ(ServiceWorkerHostMsg_IncrementServiceWorkerRefCount::ID,
330 ipc_sink()->GetMessageAt(0)->type()); 341 ipc_sink()->GetMessageAt(0)->type());
331 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 342 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
332 ipc_sink()->GetMessageAt(1)->type()); 343 ipc_sink()->GetMessageAt(1)->type());
333 } 344 }
334 345
335 // Test that clearing the controller by sending a kInvalidServiceWorkerHandle 346 // Test that clearing the controller by sending a kInvalidServiceWorkerHandle
336 // results in the provider context having a null controller. 347 // results in the provider context having a null controller.
337 TEST_F(ServiceWorkerDispatcherTest, OnSetControllerServiceWorker_Null) { 348 TEST_F(ServiceWorkerDispatcherTest, OnSetControllerServiceWorker_Null) {
338 const int kProviderId = 10; 349 const int kProviderId = 10;
339 bool should_notify_controllerchange = true; 350 bool should_notify_controllerchange = true;
340 351
341 ServiceWorkerRegistrationObjectInfo info; 352 ServiceWorkerRegistrationObjectInfo info;
342 ServiceWorkerVersionAttributes attrs; 353 ServiceWorkerVersionAttributes attrs;
343 CreateObjectInfoAndVersionAttributes(&info, &attrs); 354 CreateObjectInfoAndVersionAttributes(&info, &attrs);
344 355
345 std::unique_ptr<MockWebServiceWorkerProviderClientImpl> provider_client( 356 std::unique_ptr<MockWebServiceWorkerProviderClientImpl> provider_client(
346 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher())); 357 new MockWebServiceWorkerProviderClientImpl(kProviderId, dispatcher()));
347 scoped_refptr<ServiceWorkerProviderContext> provider_context( 358 scoped_refptr<ServiceWorkerProviderContext> provider_context(
348 new ServiceWorkerProviderContext(kProviderId, 359 new ServiceWorkerProviderContext(kProviderId,
349 SERVICE_WORKER_PROVIDER_FOR_WINDOW, 360 SERVICE_WORKER_PROVIDER_FOR_WINDOW,
350 thread_safe_sender())); 361 thread_safe_sender()));
351 362
352 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs); 363 OnAssociateRegistration(kDocumentMainThreadId, kProviderId, info, attrs);
353 364
354 // Set the controller to kInvalidServiceWorkerHandle. 365 // Set the controller to kInvalidServiceWorkerHandle.
355 OnSetControllerServiceWorker(kDocumentMainThreadId, kProviderId, 366 OnSetControllerServiceWorker(
356 ServiceWorkerObjectInfo(), 367 kDocumentMainThreadId, kProviderId, ServiceWorkerObjectInfo(),
357 should_notify_controllerchange); 368 should_notify_controllerchange, std::set<uint32_t>());
358 369
359 // Check that it became null. 370 // Check that it became null.
360 EXPECT_EQ(nullptr, provider_context->controller()); 371 EXPECT_EQ(nullptr, provider_context->controller());
361 EXPECT_TRUE(provider_client->is_set_controlled_called()); 372 EXPECT_TRUE(provider_client->is_set_controlled_called());
362 } 373 }
363 374
364 TEST_F(ServiceWorkerDispatcherTest, OnPostMessage) { 375 TEST_F(ServiceWorkerDispatcherTest, OnPostMessage) {
365 const int kProviderId = 10; 376 const int kProviderId = 10;
366 377
367 // Assume that these objects are passed from the browser process and own 378 // Assume that these objects are passed from the browser process and own
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 ipc_sink()->GetMessageAt(0)->type()); 526 ipc_sink()->GetMessageAt(0)->type());
516 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 527 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
517 ipc_sink()->GetMessageAt(1)->type()); 528 ipc_sink()->GetMessageAt(1)->type());
518 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID, 529 EXPECT_EQ(ServiceWorkerHostMsg_DecrementServiceWorkerRefCount::ID,
519 ipc_sink()->GetMessageAt(2)->type()); 530 ipc_sink()->GetMessageAt(2)->type());
520 EXPECT_EQ(ServiceWorkerHostMsg_DecrementRegistrationRefCount::ID, 531 EXPECT_EQ(ServiceWorkerHostMsg_DecrementRegistrationRefCount::ID,
521 ipc_sink()->GetMessageAt(3)->type()); 532 ipc_sink()->GetMessageAt(3)->type());
522 } 533 }
523 534
524 } // namespace content 535 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698