- v8::Handle<v8::Object> object = v8::Handle<v8::Object>::Cast(value.v8Value());
- sendResponse(V8Response::toNative(object));
+ Response* response = V8Response::toImplWithTypeCheck(toIsolate(executionContext()), value.v8Value());
+ // "If either |response|'s type is |opaque| and |request|'s mode is not
+ // |no CORS| or |response|'s type is |error|, return a network error."
+ const FetchResponseData::Type responseType = response->response()->type();
+ if ((responseType == FetchResponseData::OpaqueType && m_requestMode != WebURLRequest::FetchRequestModeNoCORS) || responseType == FetchResponseData::ErrorType) {
+ responseWasRejected();
+ return;
+ }
+ // Treat the opaque response as a network error for frame loading.
+ if (responseType == FetchResponseData::OpaqueType && m_frameType != WebURLRequest::FrameTypeNone) {
+ responseWasRejected();
+ return;
+ }
+ WebServiceWorkerResponse webResponse;
+ response->populateWebServiceWorkerResponse(webResponse);
+ ServiceWorkerGlobalScopeClient::from(executionContext())->didHandleFetchEvent(m_eventID, webResponse);
+ m_state = Done;