| Index: Source/modules/serviceworkers/RespondWithObserver.cpp
|
| diff --git a/Source/modules/serviceworkers/RespondWithObserver.cpp b/Source/modules/serviceworkers/RespondWithObserver.cpp
|
| index 410d4ccaeed73d326f567c9ef6f1d5d6864972d9..d492a194f255ef24d73574d2183b5633d876849d 100644
|
| --- a/Source/modules/serviceworkers/RespondWithObserver.cpp
|
| +++ b/Source/modules/serviceworkers/RespondWithObserver.cpp
|
| @@ -185,15 +185,15 @@ void RespondWithObserver::responseWasFulfilled(const ScriptValue& value)
|
| return;
|
| }
|
| 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."
|
| + // "If one of the following conditions is true, return a network error:
|
| + // - |response|'s type is |error|.
|
| + // - |request|'s mode is not |no-cors| and response's type is |opaque|.
|
| + // - |request| is a client request and |response|'s type is neither
|
| + // |basic| nor |default|."
|
| 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) {
|
| + if (responseType == FetchResponseData::ErrorType
|
| + || (m_requestMode != WebURLRequest::FetchRequestModeNoCORS && responseType == FetchResponseData::OpaqueType)
|
| + || (m_frameType != WebURLRequest::FrameTypeNone && responseType != FetchResponseData::BasicType && responseType != FetchResponseData::DefaultType)) {
|
| responseWasRejected();
|
| return;
|
| }
|
|
|