| Index: content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
|
| diff --git a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
|
| index 0c3fdb678eea6b56ab493ca2eba85d61c9dd2b4d..acc89f9fb74b019ba7c0f43519728e407469d84a 100644
|
| --- a/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
|
| +++ b/content/browser/service_worker/service_worker_dispatcher_host_unittest.cc
|
| @@ -50,6 +50,26 @@ void SetUpDummyMessagePort(std::vector<MessagePort>* ports) {
|
| ports->push_back(MessagePort(std::move(pipe.handle0)));
|
| }
|
|
|
| +struct RemoteProviderInfo {
|
| + mojom::ServiceWorkerProviderHostAssociatedPtr host_ptr;
|
| + mojom::ServiceWorkerProviderAssociatedRequest client_request;
|
| +};
|
| +
|
| +RemoteProviderInfo SetupProviderHostInfoPtrs(
|
| + ServiceWorkerProviderHostInfo* host_info) {
|
| + RemoteProviderInfo remote_info;
|
| + mojom::ServiceWorkerProviderAssociatedPtr browser_side_client_ptr;
|
| + remote_info.client_request =
|
| + mojo::MakeIsolatedRequest(&browser_side_client_ptr);
|
| + host_info->host_request = mojo::MakeIsolatedRequest(&remote_info.host_ptr);
|
| + host_info->client_ptr_info = browser_side_client_ptr.PassInterface();
|
| + EXPECT_TRUE(host_info->host_request.is_pending());
|
| + EXPECT_TRUE(host_info->client_ptr_info.is_valid());
|
| + EXPECT_TRUE(remote_info.host_ptr.is_bound());
|
| + EXPECT_TRUE(remote_info.client_request.is_pending());
|
| + return remote_info;
|
| +}
|
| +
|
| } // namespace
|
|
|
| static const int kRenderFrameId = 1;
|
| @@ -509,29 +529,35 @@ TEST_F(ServiceWorkerDispatcherHostTest, ProviderCreatedAndDestroyed) {
|
| const int kProviderId = 1001;
|
| int process_id = helper_->mock_render_process_id();
|
|
|
| - dispatcher_host_->OnProviderCreated(ServiceWorkerProviderHostInfo(
|
| - kProviderId, MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| - true /* is_parent_frame_secure */));
|
| + // Setup ServiceWorkerProviderHostInfo
|
| + ServiceWorkerProviderHostInfo host_info_1(kProviderId, MSG_ROUTING_NONE,
|
| + SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| + true /* is_parent_frame_secure */);
|
| + ServiceWorkerProviderHostInfo host_info_2(kProviderId, MSG_ROUTING_NONE,
|
| + SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| + true /* is_parent_frame_secure */);
|
| + ServiceWorkerProviderHostInfo host_info_3(kProviderId, MSG_ROUTING_NONE,
|
| + SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| + true /* is_parent_frame_secure */);
|
| + RemoteProviderInfo remote_info_1 = SetupProviderHostInfoPtrs(&host_info_1);
|
| + RemoteProviderInfo remote_info_2 = SetupProviderHostInfoPtrs(&host_info_2);
|
| + RemoteProviderInfo remote_info_3 = SetupProviderHostInfoPtrs(&host_info_3);
|
| +
|
| + dispatcher_host_->OnProviderCreated(std::move(host_info_1));
|
| EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId));
|
|
|
| // Two with the same ID should be seen as a bad message.
|
| - dispatcher_host_->OnProviderCreated(ServiceWorkerProviderHostInfo(
|
| - kProviderId, MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| - true /* is_parent_frame_secure */));
|
| + dispatcher_host_->OnProviderCreated(std::move(host_info_2));
|
| EXPECT_EQ(1, dispatcher_host_->bad_messages_received_count_);
|
|
|
| - dispatcher_host_->OnProviderDestroyed(kProviderId);
|
| + // Releasing the interface pointer destroys the counterpart.
|
| + remote_info_1.host_ptr.reset();
|
| + base::RunLoop().RunUntilIdle();
|
| EXPECT_FALSE(context()->GetProviderHost(process_id, kProviderId));
|
|
|
| - // Destroying an ID that does not exist warrants a bad message.
|
| - dispatcher_host_->OnProviderDestroyed(kProviderId);
|
| - EXPECT_EQ(2, dispatcher_host_->bad_messages_received_count_);
|
| -
|
| // Deletion of the dispatcher_host should cause providers for that
|
| // process to get deleted as well.
|
| - dispatcher_host_->OnProviderCreated(ServiceWorkerProviderHostInfo(
|
| - kProviderId, MSG_ROUTING_NONE, SERVICE_WORKER_PROVIDER_FOR_WINDOW,
|
| - true /* is_parent_frame_secure */));
|
| + dispatcher_host_->OnProviderCreated(std::move(host_info_3));
|
| EXPECT_TRUE(context()->GetProviderHost(process_id, kProviderId));
|
| EXPECT_TRUE(dispatcher_host_->HasOneRef());
|
| dispatcher_host_ = nullptr;
|
|
|