| 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 "content/browser/service_worker/embedded_worker_test_helper.h" |    5 #include "content/browser/service_worker/embedded_worker_test_helper.h" | 
|    6  |    6  | 
|    7 #include <map> |    7 #include <map> | 
|    8 #include <memory> |    8 #include <memory> | 
|    9 #include <string> |    9 #include <string> | 
|   10 #include <utility> |   10 #include <utility> | 
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   66     MockEmbeddedWorkerInstanceClient( |   66     MockEmbeddedWorkerInstanceClient( | 
|   67         base::WeakPtr<EmbeddedWorkerTestHelper> helper) |   67         base::WeakPtr<EmbeddedWorkerTestHelper> helper) | 
|   68     : helper_(helper), binding_(this) {} |   68     : helper_(helper), binding_(this) {} | 
|   69  |   69  | 
|   70 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient:: |   70 EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient:: | 
|   71     ~MockEmbeddedWorkerInstanceClient() {} |   71     ~MockEmbeddedWorkerInstanceClient() {} | 
|   72  |   72  | 
|   73 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker( |   73 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StartWorker( | 
|   74     const EmbeddedWorkerStartParams& params, |   74     const EmbeddedWorkerStartParams& params, | 
|   75     mojom::ServiceWorkerEventDispatcherRequest dispatcher_request, |   75     mojom::ServiceWorkerEventDispatcherRequest dispatcher_request, | 
|   76     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) { |   76     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, | 
 |   77     mojom::ServiceWorkerProviderInfoForStartWorkerPtr provider_info) { | 
|   77   if (!helper_) |   78   if (!helper_) | 
|   78     return; |   79     return; | 
|   79  |   80  | 
|   80   embedded_worker_id_ = params.embedded_worker_id; |   81   embedded_worker_id_ = params.embedded_worker_id; | 
|   81  |   82  | 
|   82   EmbeddedWorkerInstance* worker = |   83   EmbeddedWorkerInstance* worker = | 
|   83       helper_->registry()->GetWorker(params.embedded_worker_id); |   84       helper_->registry()->GetWorker(params.embedded_worker_id); | 
|   84   ASSERT_TRUE(worker); |   85   ASSERT_TRUE(worker); | 
|   85   EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); |   86   EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); | 
|   86  |   87  | 
|   87   helper_->OnStartWorkerStub(params, std::move(dispatcher_request), |   88   helper_->OnStartWorkerStub(params, std::move(dispatcher_request), | 
|   88                              std::move(instance_host)); |   89                              std::move(instance_host), | 
 |   90                              std::move(provider_info)); | 
|   89 } |   91 } | 
|   90  |   92  | 
|   91 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker() { |   93 void EmbeddedWorkerTestHelper::MockEmbeddedWorkerInstanceClient::StopWorker() { | 
|   92   if (!helper_) |   94   if (!helper_) | 
|   93     return; |   95     return; | 
|   94  |   96  | 
|   95   ASSERT_TRUE(embedded_worker_id_); |   97   ASSERT_TRUE(embedded_worker_id_); | 
|   96   EmbeddedWorkerInstance* worker = |   98   EmbeddedWorkerInstance* worker = | 
|   97       helper_->registry()->GetWorker(embedded_worker_id_.value()); |   99       helper_->registry()->GetWorker(embedded_worker_id_.value()); | 
|   98   // |worker| is possible to be null when corresponding EmbeddedWorkerInstance |  100   // |worker| is possible to be null when corresponding EmbeddedWorkerInstance | 
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  283  |  285  | 
|  284 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( |  286 EmbeddedWorkerTestHelper::EmbeddedWorkerTestHelper( | 
|  285     const base::FilePath& user_data_directory) |  287     const base::FilePath& user_data_directory) | 
|  286     : browser_context_(new TestBrowserContext), |  288     : browser_context_(new TestBrowserContext), | 
|  287       render_process_host_(new MockRenderProcessHost(browser_context_.get())), |  289       render_process_host_(new MockRenderProcessHost(browser_context_.get())), | 
|  288       new_render_process_host_( |  290       new_render_process_host_( | 
|  289           new MockRenderProcessHost(browser_context_.get())), |  291           new MockRenderProcessHost(browser_context_.get())), | 
|  290       wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), |  292       wrapper_(new ServiceWorkerContextWrapper(browser_context_.get())), | 
|  291       mock_instance_clients_next_index_(0), |  293       mock_instance_clients_next_index_(0), | 
|  292       next_thread_id_(0), |  294       next_thread_id_(0), | 
|  293       next_provider_id_(1000), |  | 
|  294       mock_render_process_id_(render_process_host_->GetID()), |  295       mock_render_process_id_(render_process_host_->GetID()), | 
|  295       new_mock_render_process_id_(new_render_process_host_->GetID()), |  296       new_mock_render_process_id_(new_render_process_host_->GetID()), | 
|  296       weak_factory_(this) { |  297       weak_factory_(this) { | 
|  297   std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( |  298   std::unique_ptr<MockServiceWorkerDatabaseTaskManager> database_task_manager( | 
|  298       new MockServiceWorkerDatabaseTaskManager( |  299       new MockServiceWorkerDatabaseTaskManager( | 
|  299           base::ThreadTaskRunnerHandle::Get())); |  300           base::ThreadTaskRunnerHandle::Get())); | 
|  300   wrapper_->InitInternal(user_data_directory, std::move(database_task_manager), |  301   wrapper_->InitInternal(user_data_directory, std::move(database_task_manager), | 
|  301                          base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); |  302                          base::ThreadTaskRunnerHandle::Get(), nullptr, nullptr); | 
|  302   wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id()); |  303   wrapper_->process_manager()->SetProcessIdForTest(mock_render_process_id()); | 
|  303   wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id()); |  304   wrapper_->process_manager()->SetNewProcessIdForTest(new_render_process_id()); | 
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  388   return info; |  389   return info; | 
|  389 } |  390 } | 
|  390  |  391  | 
|  391 void EmbeddedWorkerTestHelper::OnStartWorker( |  392 void EmbeddedWorkerTestHelper::OnStartWorker( | 
|  392     int embedded_worker_id, |  393     int embedded_worker_id, | 
|  393     int64_t service_worker_version_id, |  394     int64_t service_worker_version_id, | 
|  394     const GURL& scope, |  395     const GURL& scope, | 
|  395     const GURL& script_url, |  396     const GURL& script_url, | 
|  396     bool pause_after_download, |  397     bool pause_after_download, | 
|  397     mojom::ServiceWorkerEventDispatcherRequest request, |  398     mojom::ServiceWorkerEventDispatcherRequest request, | 
|  398     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) { |  399     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, | 
 |  400     mojom::ServiceWorkerProviderInfoForStartWorkerPtr provider_info) { | 
|  399   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |  401   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); | 
|  400   ASSERT_TRUE(worker); |  402   ASSERT_TRUE(worker); | 
|  401   MockServiceWorkerEventDispatcher::Create(AsWeakPtr(), worker->thread_id(), |  403   MockServiceWorkerEventDispatcher::Create(AsWeakPtr(), worker->thread_id(), | 
|  402                                            std::move(request)); |  404                                            std::move(request)); | 
|  403  |  405  | 
|  404   embedded_worker_id_service_worker_version_id_map_[embedded_worker_id] = |  406   embedded_worker_id_service_worker_version_id_map_[embedded_worker_id] = | 
|  405       service_worker_version_id; |  407       service_worker_version_id; | 
|  406   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id].Bind( |  408   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id].Bind( | 
|  407       std::move(instance_host)); |  409       std::move(instance_host)); | 
 |  410   ServiceWorkerRemoteProviderEndpoint* provider_endpoint = | 
 |  411       &embedded_worker_id_remote_provider_map_[embedded_worker_id]; | 
 |  412   provider_endpoint->BindWithProviderInfo(std::move(provider_info)); | 
|  408  |  413  | 
|  409   SimulateWorkerReadyForInspection(embedded_worker_id); |  414   SimulateWorkerReadyForInspection(embedded_worker_id); | 
|  410   SimulateWorkerScriptCached(embedded_worker_id); |  415   SimulateWorkerScriptCached(embedded_worker_id); | 
|  411   SimulateWorkerScriptLoaded(embedded_worker_id); |  416   SimulateWorkerScriptLoaded(embedded_worker_id); | 
|  412   if (!pause_after_download) |  417   if (!pause_after_download) | 
|  413     OnResumeAfterDownload(embedded_worker_id); |  418     OnResumeAfterDownload(embedded_worker_id); | 
|  414 } |  419 } | 
|  415  |  420  | 
|  416 void EmbeddedWorkerTestHelper::OnResumeAfterDownload(int embedded_worker_id) { |  421 void EmbeddedWorkerTestHelper::OnResumeAfterDownload(int embedded_worker_id) { | 
|  417   SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id, |  422   SimulateWorkerThreadStarted(GetNextThreadId(), embedded_worker_id); | 
|  418                               GetNextProviderId()); |  | 
|  419   SimulateWorkerScriptEvaluated(embedded_worker_id, true /* success */); |  423   SimulateWorkerScriptEvaluated(embedded_worker_id, true /* success */); | 
|  420   SimulateWorkerStarted(embedded_worker_id); |  424   SimulateWorkerStarted(embedded_worker_id); | 
|  421 } |  425 } | 
|  422  |  426  | 
|  423 void EmbeddedWorkerTestHelper::OnStopWorker(int embedded_worker_id) { |  427 void EmbeddedWorkerTestHelper::OnStopWorker(int embedded_worker_id) { | 
|  424   // By default just notify the sender that the worker is stopped. |  428   // By default just notify the sender that the worker is stopped. | 
|  425   SimulateWorkerStopped(embedded_worker_id); |  429   SimulateWorkerStopped(embedded_worker_id); | 
|  426 } |  430 } | 
|  427  |  431  | 
|  428 void EmbeddedWorkerTestHelper::OnActivateEvent( |  432 void EmbeddedWorkerTestHelper::OnActivateEvent( | 
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  569   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |  573   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); | 
|  570   ASSERT_TRUE(worker); |  574   ASSERT_TRUE(worker); | 
|  571   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); |  575   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); | 
|  572   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] |  576   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] | 
|  573       ->OnScriptLoaded(); |  577       ->OnScriptLoaded(); | 
|  574   base::RunLoop().RunUntilIdle(); |  578   base::RunLoop().RunUntilIdle(); | 
|  575 } |  579 } | 
|  576  |  580  | 
|  577 void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted( |  581 void EmbeddedWorkerTestHelper::SimulateWorkerThreadStarted( | 
|  578     int thread_id, |  582     int thread_id, | 
|  579     int embedded_worker_id, |  583     int embedded_worker_id) { | 
|  580     int provider_id) { |  | 
|  581   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |  584   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); | 
|  582   ASSERT_TRUE(worker); |  585   ASSERT_TRUE(worker); | 
|  583   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); |  586   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); | 
|  584  |  | 
|  585   // Prepare a provider host to be used by following OnThreadStarted(). |  | 
|  586   std::unique_ptr<ServiceWorkerProviderHost> host = |  | 
|  587       CreateProviderHostForServiceWorkerContext( |  | 
|  588           worker->process_id(), provider_id, true /* is_parent_frame_secure */, |  | 
|  589           context()->AsWeakPtr(), |  | 
|  590           &embedded_worker_id_remote_provider_map_[embedded_worker_id]); |  | 
|  591   context()->AddProviderHost(std::move(host)); |  | 
|  592  |  | 
|  593   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] |  587   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] | 
|  594       ->OnThreadStarted(thread_id, provider_id); |  588       ->OnThreadStarted(thread_id); | 
|  595   base::RunLoop().RunUntilIdle(); |  589   base::RunLoop().RunUntilIdle(); | 
|  596 } |  590 } | 
|  597  |  591  | 
|  598 void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated( |  592 void EmbeddedWorkerTestHelper::SimulateWorkerScriptEvaluated( | 
|  599     int embedded_worker_id, |  593     int embedded_worker_id, | 
|  600     bool success) { |  594     bool success) { | 
|  601   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |  595   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); | 
|  602   ASSERT_TRUE(worker); |  596   ASSERT_TRUE(worker); | 
|  603   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); |  597   ASSERT_TRUE(embedded_worker_id_instance_host_ptr_map_[embedded_worker_id]); | 
|  604   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] |  598   embedded_worker_id_instance_host_ptr_map_[embedded_worker_id] | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
|  624 } |  618 } | 
|  625  |  619  | 
|  626 void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) { |  620 void EmbeddedWorkerTestHelper::SimulateSend(IPC::Message* message) { | 
|  627   registry()->OnMessageReceived(*message, mock_render_process_id_); |  621   registry()->OnMessageReceived(*message, mock_render_process_id_); | 
|  628   delete message; |  622   delete message; | 
|  629 } |  623 } | 
|  630  |  624  | 
|  631 void EmbeddedWorkerTestHelper::OnStartWorkerStub( |  625 void EmbeddedWorkerTestHelper::OnStartWorkerStub( | 
|  632     const EmbeddedWorkerStartParams& params, |  626     const EmbeddedWorkerStartParams& params, | 
|  633     mojom::ServiceWorkerEventDispatcherRequest request, |  627     mojom::ServiceWorkerEventDispatcherRequest request, | 
|  634     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host) { |  628     mojom::EmbeddedWorkerInstanceHostAssociatedPtrInfo instance_host, | 
 |  629     mojom::ServiceWorkerProviderInfoForStartWorkerPtr provider_info) { | 
|  635   EmbeddedWorkerInstance* worker = |  630   EmbeddedWorkerInstance* worker = | 
|  636       registry()->GetWorker(params.embedded_worker_id); |  631       registry()->GetWorker(params.embedded_worker_id); | 
|  637   ASSERT_TRUE(worker); |  632   ASSERT_TRUE(worker); | 
|  638   EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); |  633   EXPECT_EQ(EmbeddedWorkerStatus::STARTING, worker->status()); | 
|  639   base::ThreadTaskRunnerHandle::Get()->PostTask( |  634   base::ThreadTaskRunnerHandle::Get()->PostTask( | 
|  640       FROM_HERE, |  635       FROM_HERE, | 
|  641       base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, AsWeakPtr(), |  636       base::Bind(&EmbeddedWorkerTestHelper::OnStartWorker, AsWeakPtr(), | 
|  642                  params.embedded_worker_id, params.service_worker_version_id, |  637                  params.embedded_worker_id, params.service_worker_version_id, | 
|  643                  params.scope, params.script_url, params.pause_after_download, |  638                  params.scope, params.script_url, params.pause_after_download, | 
|  644                  base::Passed(&request), base::Passed(&instance_host))); |  639                  base::Passed(&request), base::Passed(&instance_host), | 
 |  640                  base::Passed(&provider_info))); | 
|  645 } |  641 } | 
|  646  |  642  | 
|  647 void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub( |  643 void EmbeddedWorkerTestHelper::OnResumeAfterDownloadStub( | 
|  648     int embedded_worker_id) { |  644     int embedded_worker_id) { | 
|  649   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); |  645   EmbeddedWorkerInstance* worker = registry()->GetWorker(embedded_worker_id); | 
|  650   ASSERT_TRUE(worker); |  646   ASSERT_TRUE(worker); | 
|  651   base::ThreadTaskRunnerHandle::Get()->PostTask( |  647   base::ThreadTaskRunnerHandle::Get()->PostTask( | 
|  652       FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnResumeAfterDownload, |  648       FROM_HERE, base::Bind(&EmbeddedWorkerTestHelper::OnResumeAfterDownload, | 
|  653                             AsWeakPtr(), embedded_worker_id)); |  649                             AsWeakPtr(), embedded_worker_id)); | 
|  654 } |  650 } | 
| (...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  798                  base::Passed(&event_data), base::Passed(&response_callback), |  794                  base::Passed(&event_data), base::Passed(&response_callback), | 
|  799                  base::Passed(&callback))); |  795                  base::Passed(&callback))); | 
|  800 } |  796 } | 
|  801  |  797  | 
|  802 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { |  798 EmbeddedWorkerRegistry* EmbeddedWorkerTestHelper::registry() { | 
|  803   DCHECK(context()); |  799   DCHECK(context()); | 
|  804   return context()->embedded_worker_registry(); |  800   return context()->embedded_worker_registry(); | 
|  805 } |  801 } | 
|  806  |  802  | 
|  807 }  // namespace content |  803 }  // namespace content | 
| OLD | NEW |