Chromium Code Reviews| Index: extensions/renderer/request_sender.cc |
| diff --git a/extensions/renderer/request_sender.cc b/extensions/renderer/request_sender.cc |
| index 6f3cf51a8f100760cc8f712290a164fcee5b1a19..dcf873ab267de20ad2773c5a014f90c0411f84e5 100644 |
| --- a/extensions/renderer/request_sender.cc |
| +++ b/extensions/renderer/request_sender.cc |
| @@ -78,11 +78,19 @@ 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 |
| + // RenderFrame cannot be found PendingRequest below. |
|
Devlin
2016/04/14 22:34:52
this comment needs to be reworded
lazyboy
2016/04/15 00:57:47
Done.
|
| return; |
| + } |
| // TODO(koz): See if we can make this a CHECK. |
| if (!context->HasAccessOrThrowError(name)) |
| @@ -105,6 +113,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)); |