Index: content/browser/service_worker/embedded_worker_instance.cc |
diff --git a/content/browser/service_worker/embedded_worker_instance.cc b/content/browser/service_worker/embedded_worker_instance.cc |
index 1e78b20545b3cc5244ac2099cd7d5179a9716d06..0f7e5303406f20b2d3999c061a538e385a3d7bcc 100644 |
--- a/content/browser/service_worker/embedded_worker_instance.cc |
+++ b/content/browser/service_worker/embedded_worker_instance.cc |
@@ -21,10 +21,12 @@ |
#include "content/common/service_worker/embedded_worker_settings.h" |
#include "content/common/service_worker/embedded_worker_setup.mojom.h" |
#include "content/common/service_worker/service_worker_types.h" |
+#include "content/common/service_worker/service_worker_utils.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/content_browser_client.h" |
#include "content/public/browser/render_process_host.h" |
#include "content/public/common/child_process_host.h" |
+#include "content/public/common/content_switches.h" |
#include "ipc/ipc_message.h" |
#include "services/shell/public/cpp/interface_provider.h" |
#include "services/shell/public/cpp/interface_registry.h" |
@@ -69,7 +71,7 @@ void NotifyWorkerVersionDoomedOnUI(int worker_process_id, int worker_route_id) { |
worker_process_id, worker_route_id); |
} |
-void RegisterToWorkerDevToolsManagerOnUI( |
+void RegisterToWorkerDevToolsManagerAndBindInterfaceOnUI( |
falken
2016/09/07 05:01:41
These are now two pretty unrelated tasks. Maybe ju
shimazu
2016/09/12 06:28:19
Done.
|
int process_id, |
const ServiceWorkerContextCore* service_worker_context, |
const base::WeakPtr<ServiceWorkerContextCore>& service_worker_context_weak, |
@@ -77,6 +79,7 @@ void RegisterToWorkerDevToolsManagerOnUI( |
const GURL& url, |
const GURL& scope, |
bool is_installed, |
+ mojom::EmbeddedWorkerInstanceClientRequest request, |
const base::Callback<void(int worker_devtools_agent_route_id, |
bool wait_for_debugger)>& callback) { |
DCHECK_CURRENTLY_ON(BrowserThread::UI); |
@@ -92,6 +95,7 @@ void RegisterToWorkerDevToolsManagerOnUI( |
service_worker_context, service_worker_context_weak, |
service_worker_version_id, url, scope), |
is_installed); |
+ rph->GetRemoteInterfaces()->GetInterface(std::move(request)); |
} |
BrowserThread::PostTask( |
BrowserThread::IO, |
@@ -211,8 +215,11 @@ class EmbeddedWorkerInstance::StartTask { |
public: |
enum class ProcessAllocationState { NOT_ALLOCATED, ALLOCATING, ALLOCATED }; |
- StartTask(EmbeddedWorkerInstance* instance, const GURL& script_url) |
+ StartTask(EmbeddedWorkerInstance* instance, |
+ const GURL& script_url, |
+ mojom::EmbeddedWorkerInstanceClientRequest request) |
: instance_(instance), |
+ request_(std::move(request)), |
state_(ProcessAllocationState::NOT_ALLOCATED), |
is_installed_(false), |
started_during_browser_startup_(false), |
@@ -342,15 +349,18 @@ class EmbeddedWorkerInstance::StartTask { |
GURL script_url(params->script_url); |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
- base::Bind(RegisterToWorkerDevToolsManagerOnUI, process_id, |
- instance_->context_.get(), instance_->context_, |
- service_worker_version_id, script_url, scope, is_installed_, |
- base::Bind(&StartTask::OnRegisteredToDevToolsManager, |
- weak_factory_.GetWeakPtr(), base::Passed(¶ms), |
- is_new_process))); |
- } |
- |
- void OnRegisteredToDevToolsManager( |
+ base::Bind( |
+ RegisterToWorkerDevToolsManagerAndBindInterfaceOnUI, process_id, |
+ instance_->context_.get(), instance_->context_, |
+ service_worker_version_id, script_url, scope, is_installed_, |
+ base::Passed(&request_), |
+ base::Bind( |
+ &StartTask::OnRegisteredToDevToolsManagerAndBoundInterface, |
+ weak_factory_.GetWeakPtr(), base::Passed(¶ms), |
+ is_new_process))); |
+ } |
+ |
+ void OnRegisteredToDevToolsManagerAndBoundInterface( |
std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params, |
bool is_new_process, |
int worker_devtools_agent_route_id, |
@@ -366,7 +376,11 @@ class EmbeddedWorkerInstance::StartTask { |
params->worker_devtools_agent_route_id = worker_devtools_agent_route_id; |
params->wait_for_debugger = wait_for_debugger; |
- SendStartWorker(std::move(params)); |
+ |
+ if (ServiceWorkerUtils::IsMojoForServiceWorkerEnabled()) |
+ instance_->SendMojoStartWorker(std::move(params)); |
+ else |
+ SendStartWorker(std::move(params)); |
} |
void SendStartWorker( |
@@ -392,6 +406,7 @@ class EmbeddedWorkerInstance::StartTask { |
// |instance_| must outlive |this|. |
EmbeddedWorkerInstance* instance_; |
+ mojom::EmbeddedWorkerInstanceClientRequest request_; |
StatusCallback start_callback_; |
ProcessAllocationState state_; |
@@ -445,7 +460,11 @@ void EmbeddedWorkerInstance::Start( |
params->wait_for_debugger = false; |
params->settings.v8_cache_options = GetV8CacheOptions(); |
- inflight_start_task_.reset(new StartTask(this, params->script_url)); |
+ mojom::EmbeddedWorkerInstanceClientRequest request = |
+ GetProxy(&instance_client_); |
falken
2016/09/07 05:01:41
Where is GetProxy from? should this be mojo::GetPr
shimazu
2016/09/12 06:28:19
Done.
|
+ |
+ inflight_start_task_.reset( |
+ new StartTask(this, params->script_url, std::move(request))); |
inflight_start_task_->Start(std::move(params), callback); |
} |
@@ -565,6 +584,33 @@ void EmbeddedWorkerInstance::OnRegisteredToDevToolsManager( |
} |
} |
+void EmbeddedWorkerInstance::SendMojoStartWorker( |
+ std::unique_ptr<EmbeddedWorkerMsg_StartWorker_Params> params) { |
+ auto mojo_params = mojom::EmbeddedWorkerStartWorkerParams::New(); |
dcheng
2016/09/07 07:51:09
It might be slightly simpler to just declare Embed
shimazu
2016/09/12 06:28:19
Done.
|
+ mojo_params->embedded_worker_id = params->embedded_worker_id; |
+ mojo_params->service_worker_version_id = params->service_worker_version_id; |
+ mojo_params->scope = params->scope; |
+ mojo_params->script_url = params->script_url; |
+ mojo_params->worker_devtools_agent_route_id = |
+ params->worker_devtools_agent_route_id; |
+ mojo_params->pause_after_download = params->pause_after_download; |
+ mojo_params->wait_for_debugger = params->wait_for_debugger; |
+ mojo_params->is_installed = params->is_installed; |
+ |
+ mojo_params->settings = mojom::EmbeddedWorkerSettings::New(); |
+ mojo_params->settings->data_saver_enabled = |
+ params->settings.data_saver_enabled; |
+ mojo_params->settings->v8_cache_options = |
+ static_cast<mojom::V8CacheOptions>(params->settings.v8_cache_options); |
+ |
+ instance_client_->StartWorker(std::move(mojo_params)); |
+ registry_->AddWorker(process_id(), embedded_worker_id()); |
falken
2016/09/07 05:01:41
The registry already holds all workers, even ones
shimazu
2016/09/12 06:28:19
Done.
|
+ TRACE_EVENT_ASYNC_STEP_PAST1("ServiceWorker", "EmbeddedWorkerInstance::Start", |
+ this, "SendStartWorker", "Status", "mojo"); |
+ OnStartWorkerMessageSent(); |
+ return; |
+} |
+ |
void EmbeddedWorkerInstance::OnStartWorkerMessageSent() { |
if (!step_time_.is_null()) { |
base::TimeDelta duration = UpdateStepTime(); |