| Index: extensions/renderer/request_sender.cc
|
| diff --git a/extensions/renderer/request_sender.cc b/extensions/renderer/request_sender.cc
|
| index 6f3cf51a8f100760cc8f712290a164fcee5b1a19..ef6c04ff44c5274040bfcfee4bd3fa7b84380aaf 100644
|
| --- a/extensions/renderer/request_sender.cc
|
| +++ b/extensions/renderer/request_sender.cc
|
| @@ -78,11 +78,18 @@ void RequestSender::StartRequest(Source* source,
|
| if (!context)
|
| return;
|
|
|
| + bool for_service_worker =
|
| + context->context_type() == Feature::SERVICE_WORKER_CONTEXT;
|
| // Get the current RenderFrame so that we can send a routed IPC message from
|
| // the correct source.
|
| + // Note that |render_frame| would be nullptr for Service Workers. Service
|
| + // Workers use control IPC instead.
|
| content::RenderFrame* render_frame = context->GetRenderFrame();
|
| - if (!render_frame)
|
| + if (!for_service_worker && !render_frame) {
|
| + // It is important to early exit here for non Service Worker contexts so
|
| + // that we do not create orphaned PendingRequests below.
|
| return;
|
| + }
|
|
|
| // TODO(koz): See if we can make this a CHECK.
|
| if (!context->HasAccessOrThrowError(name))
|
| @@ -105,6 +112,17 @@ void RequestSender::StartRequest(Source* source,
|
| params.has_callback = has_callback;
|
| params.user_gesture =
|
| blink::WebUserGestureIndicator::isProcessingUserGesture();
|
| +
|
| + // Set Service Worker specific params to default values.
|
| + params.worker_thread_id = -1;
|
| + params.embedded_worker_id = -1;
|
| +
|
| + SendRequest(render_frame, for_io_thread, params);
|
| +}
|
| +
|
| +void RequestSender::SendRequest(content::RenderFrame* render_frame,
|
| + bool for_io_thread,
|
| + ExtensionHostMsg_Request_Params& params) {
|
| if (for_io_thread) {
|
| render_frame->Send(new ExtensionHostMsg_RequestForIOThread(
|
| render_frame->GetRoutingID(), params));
|
|
|