| Index: Source/modules/serviceworkers/Request.cpp
 | 
| diff --git a/Source/modules/serviceworkers/Request.cpp b/Source/modules/serviceworkers/Request.cpp
 | 
| deleted file mode 100644
 | 
| index 5a6a7dca1042717d1166ca2d1928bfe51f81fac6..0000000000000000000000000000000000000000
 | 
| --- a/Source/modules/serviceworkers/Request.cpp
 | 
| +++ /dev/null
 | 
| @@ -1,403 +0,0 @@
 | 
| -// Copyright 2014 The Chromium Authors. All rights reserved.
 | 
| -// Use of this source code is governed by a BSD-style license that can be
 | 
| -// found in the LICENSE file.
 | 
| -
 | 
| -#include "config.h"
 | 
| -#include "Request.h"
 | 
| -
 | 
| -#include "bindings/core/v8/Dictionary.h"
 | 
| -#include "core/dom/Document.h"
 | 
| -#include "core/dom/ExecutionContext.h"
 | 
| -#include "core/fetch/FetchUtils.h"
 | 
| -#include "core/fetch/ResourceLoaderOptions.h"
 | 
| -#include "core/loader/ThreadableLoader.h"
 | 
| -#include "modules/serviceworkers/FetchManager.h"
 | 
| -#include "modules/serviceworkers/RequestInit.h"
 | 
| -#include "platform/network/HTTPParsers.h"
 | 
| -#include "platform/network/ResourceRequest.h"
 | 
| -#include "platform/weborigin/Referrer.h"
 | 
| -#include "public/platform/WebServiceWorkerRequest.h"
 | 
| -#include "public/platform/WebURLRequest.h"
 | 
| -
 | 
| -namespace blink {
 | 
| -
 | 
| -FetchRequestData* createCopyOfFetchRequestDataForFetch(ExecutionContext* context, const FetchRequestData* original)
 | 
| -{
 | 
| -    FetchRequestData* request = FetchRequestData::create();
 | 
| -    request->setURL(original->url());
 | 
| -    request->setMethod(original->method());
 | 
| -    request->setHeaderList(original->headerList()->createCopy());
 | 
| -    request->setUnsafeRequestFlag(true);
 | 
| -    request->setBlobDataHandle(original->blobDataHandle());
 | 
| -    // FIXME: Set client.
 | 
| -    request->setOrigin(SecurityOrigin::create(context->url()));
 | 
| -    // FIXME: Set ForceOriginHeaderFlag.
 | 
| -    request->setSameOriginDataURLFlag(true);
 | 
| -    request->mutableReferrer()->setClient();
 | 
| -    request->setContext(WebURLRequest::RequestContextFetch);
 | 
| -    request->setMode(original->mode());
 | 
| -    request->setCredentials(original->credentials());
 | 
| -    // FIXME: Set cache mode.
 | 
| -    return request;
 | 
| -}
 | 
| -
 | 
| -Request* Request::createRequestWithRequestOrString(ExecutionContext* context, Request* inputRequest, const String& inputString, const RequestInit& init, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    // "1. If input is a Request object, run these substeps:"
 | 
| -    if (inputRequest) {
 | 
| -        // "1. If input's used flag is set, throw a TypeError."
 | 
| -        if (inputRequest->bodyUsed()) {
 | 
| -            exceptionState.throwTypeError("Cannot construct a Request with a Request object that has already been used.");
 | 
| -            return 0;
 | 
| -        }
 | 
| -        // "2. Set input's used flag."
 | 
| -        inputRequest->setBodyUsed();
 | 
| -    }
 | 
| -
 | 
| -    // "2. Let |request| be |input|'s associated request, if |input| is a
 | 
| -    // Request object, and a new request otherwise."
 | 
| -    // "3. Set |request| to a new request whose url is |request|'s url, method
 | 
| -    // is |request|'s method, header list is a copy of |request|'s header list,
 | 
| -    // unsafe request flag is set, body is |request|'s body, client is entry
 | 
| -    // settings object, origin is entry settings object's origin, force Origin
 | 
| -    // header flag is set, same-origin data URL flag is set, referrer is client,
 | 
| -    // context is fetch, mode is |request|'s mode, credentials mode is
 | 
| -    // |request|'s credentials mode, and cache mode is |request|'s cache mode."
 | 
| -    FetchRequestData* request = createCopyOfFetchRequestDataForFetch(context, inputRequest ? inputRequest->request() : FetchRequestData::create());
 | 
| -
 | 
| -    // "4. Let |fallbackMode| be null."
 | 
| -    // "5. Let |fallbackCredentials| be null."
 | 
| -    // "6. Let |fallbackCache| be null."
 | 
| -    // We don't use fallback values. We set these flags directly in below.
 | 
| -
 | 
| -    // "7. If |input| is a string, run these substeps:"
 | 
| -    if (!inputRequest) {
 | 
| -        // "1. Let |parsedURL| be the result of parsing |input| with entry
 | 
| -        // settings object's API base URL."
 | 
| -        KURL parsedURL = context->completeURL(inputString);
 | 
| -        // "2. If |parsedURL| is failure, throw a TypeError."
 | 
| -        if (!parsedURL.isValid()) {
 | 
| -            exceptionState.throwTypeError("Failed to parse URL from " + inputString);
 | 
| -            return 0;
 | 
| -        }
 | 
| -        // "3. Set |request|'s url to |parsedURL|."
 | 
| -        request->setURL(parsedURL);
 | 
| -        // "4. Set |fallbackMode| to CORS."
 | 
| -        // "5. Set |fallbackCredentials| to omit."
 | 
| -        // "6. Set |fallbackCache| to default."
 | 
| -        // We don't use fallback values. We set these flags directly in below.
 | 
| -    }
 | 
| -
 | 
| -    // "8. Let |mode| be |init|'s mode member if it is present, and
 | 
| -    // |fallbackMode| otherwise."
 | 
| -    // "9. If |mode| is non-null, set |request|'s mode to |mode|."
 | 
| -    if (init.mode == "same-origin") {
 | 
| -        request->setMode(WebURLRequest::FetchRequestModeSameOrigin);
 | 
| -    } else if (init.mode == "no-cors") {
 | 
| -        request->setMode(WebURLRequest::FetchRequestModeNoCORS);
 | 
| -    } else if (init.mode == "cors") {
 | 
| -        request->setMode(WebURLRequest::FetchRequestModeCORS);
 | 
| -    } else {
 | 
| -        if (!inputRequest)
 | 
| -            request->setMode(WebURLRequest::FetchRequestModeCORS);
 | 
| -    }
 | 
| -
 | 
| -    // "10. Let |credentials| be |init|'s credentials member if it is present,
 | 
| -    // and |fallbackCredentials| otherwise."
 | 
| -    // "11. If |credentials| is non-null, set |request|'s credentials mode to
 | 
| -    // |credentials|.
 | 
| -    if (init.credentials == "omit") {
 | 
| -        request->setCredentials(WebURLRequest::FetchCredentialsModeOmit);
 | 
| -    } else if (init.credentials == "same-origin") {
 | 
| -        request->setCredentials(WebURLRequest::FetchCredentialsModeSameOrigin);
 | 
| -    } else if (init.credentials == "include") {
 | 
| -        request->setCredentials(WebURLRequest::FetchCredentialsModeInclude);
 | 
| -    } else {
 | 
| -        if (!inputRequest)
 | 
| -            request->setCredentials(WebURLRequest::FetchCredentialsModeOmit);
 | 
| -    }
 | 
| -
 | 
| -    // FIXME: "12. Let |cache| be |init|'s cache member if it is present, and
 | 
| -    // |fallbackCache| otherwise."
 | 
| -    // FIXME: "13. If |cache| is non-null, set |request|'s cache mode to
 | 
| -    // |cache|."
 | 
| -
 | 
| -    // "14. If |init|'s method member is present, let |method| be it and run
 | 
| -    // these substeps:"
 | 
| -    if (!init.method.isEmpty()) {
 | 
| -        // "1. If |method| is not a method or method is a forbidden method,
 | 
| -        // throw a TypeError."
 | 
| -        if (!isValidHTTPToken(init.method)) {
 | 
| -            exceptionState.throwTypeError("'" + init.method + "' is not a valid HTTP method.");
 | 
| -            return 0;
 | 
| -        }
 | 
| -        if (FetchUtils::isForbiddenMethod(init.method)) {
 | 
| -            exceptionState.throwTypeError("'" + init.method + "' HTTP method is unsupported.");
 | 
| -            return 0;
 | 
| -        }
 | 
| -        // "2. Normalize |method|."
 | 
| -        // "3. Set |request|'s method to |method|."
 | 
| -        request->setMethod(FetchUtils::normalizeMethod(AtomicString(init.method)));
 | 
| -    }
 | 
| -    // "15. Let |r| be a new Request object associated with |request|, and a new
 | 
| -    // Headers object."
 | 
| -    Request* r = Request::create(context, request);
 | 
| -    // "16. Let |headers| be a copy of |r|'s Headers object."
 | 
| -    // "17. If |init|'s headers member is present, set |headers| to |init|'s
 | 
| -    // headers member."
 | 
| -    // We don't create a copy of r's Headers object when init's headers member
 | 
| -    // is present.
 | 
| -    Headers* headers = 0;
 | 
| -    if (!init.headers && init.headersDictionary.isUndefinedOrNull()) {
 | 
| -        headers = r->headers()->createCopy();
 | 
| -    }
 | 
| -    // "18. Empty |r|'s request's header list."
 | 
| -    r->clearHeaderList();
 | 
| -    // "19. If |r|'s request's mode is no CORS, run these substeps:
 | 
| -    if (r->request()->mode() == WebURLRequest::FetchRequestModeNoCORS) {
 | 
| -        // "1. If |r|'s request's method is not a simple method, throw a
 | 
| -        // TypeError."
 | 
| -        if (!FetchUtils::isSimpleMethod(r->request()->method())) {
 | 
| -            exceptionState.throwTypeError("'" + r->request()->method() + "' is unsupported in no-cors mode.");
 | 
| -            return 0;
 | 
| -        }
 | 
| -        // "Set |r|'s Headers object's guard to |request-no-CORS|.
 | 
| -        r->headers()->setGuard(Headers::RequestNoCORSGuard);
 | 
| -    }
 | 
| -    // "20. Fill |r|'s Headers object with |headers|. Rethrow any exceptions."
 | 
| -    if (init.headers) {
 | 
| -        ASSERT(init.headersDictionary.isUndefinedOrNull());
 | 
| -        r->headers()->fillWith(init.headers.get(), exceptionState);
 | 
| -    } else if (!init.headersDictionary.isUndefinedOrNull()) {
 | 
| -        r->headers()->fillWith(init.headersDictionary, exceptionState);
 | 
| -    } else {
 | 
| -        ASSERT(headers);
 | 
| -        r->headers()->fillWith(headers, exceptionState);
 | 
| -    }
 | 
| -    if (exceptionState.hadException())
 | 
| -        return 0;
 | 
| -
 | 
| -    // "21. If |init|'s body member is present, run these substeps:"
 | 
| -    if (init.bodyBlobHandle) {
 | 
| -        // "1. Let |stream| and |Content-Type| be the result of extracting
 | 
| -        // |init|'s body member."
 | 
| -        // "2. Set |r|'s request's body to |stream|."
 | 
| -        // "3.If |Content-Type| is non-null and |r|'s request's header list
 | 
| -        //  contains no header named `Content-Type`, append
 | 
| -        // `Content-Type`/|Content-Type| to |r|'s Headers object. Rethrow any
 | 
| -        // exception."
 | 
| -        r->setBodyBlobHandle(init.bodyBlobHandle);
 | 
| -        if (!init.bodyBlobHandle->type().isEmpty() && !r->headers()->has("Content-Type", exceptionState)) {
 | 
| -            r->headers()->append("Content-Type", init.bodyBlobHandle->type(), exceptionState);
 | 
| -        }
 | 
| -        if (exceptionState.hadException())
 | 
| -            return 0;
 | 
| -    }
 | 
| -    // "22. Set |r|'s MIME type to the result of extracting a MIME type from
 | 
| -    // |r|'s request's header list."
 | 
| -    // FIXME: We don't have MIME type in Request object yet.
 | 
| -
 | 
| -    // "23. Return |r|."
 | 
| -    return r;
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, const RequestInfo& input, const Dictionary& init, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    ASSERT(!input.isNull());
 | 
| -    if (input.isUSVString())
 | 
| -        return create(context, input.getAsUSVString(), init, exceptionState);
 | 
| -    return create(context, input.getAsRequest(), init, exceptionState);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, const String& input, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    return create(context, input, Dictionary(), exceptionState);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, const String& input, const Dictionary& init, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    return createRequestWithRequestOrString(context, 0, input, RequestInit(context, init, exceptionState), exceptionState);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, Request* input, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    return create(context, input, Dictionary(), exceptionState);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, Request* input, const Dictionary& init, ExceptionState& exceptionState)
 | 
| -{
 | 
| -    return createRequestWithRequestOrString(context, input, String(), RequestInit(context, init, exceptionState), exceptionState);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, FetchRequestData* request)
 | 
| -{
 | 
| -    Request* r = new Request(context, request);
 | 
| -    r->suspendIfNeeded();
 | 
| -    return r;
 | 
| -}
 | 
| -
 | 
| -Request::Request(ExecutionContext* context, FetchRequestData* request)
 | 
| -    : Body(context)
 | 
| -    , m_request(request)
 | 
| -    , m_headers(Headers::create(m_request->headerList()))
 | 
| -{
 | 
| -    m_headers->setGuard(Headers::RequestGuard);
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(ExecutionContext* context, const WebServiceWorkerRequest& webRequest)
 | 
| -{
 | 
| -    Request* r = new Request(context, webRequest);
 | 
| -    r->suspendIfNeeded();
 | 
| -    return r;
 | 
| -}
 | 
| -
 | 
| -Request* Request::create(const Request& copyFrom)
 | 
| -{
 | 
| -    Request* r = new Request(copyFrom);
 | 
| -    r->suspendIfNeeded();
 | 
| -    return r;
 | 
| -}
 | 
| -
 | 
| -Request::Request(ExecutionContext* context, const WebServiceWorkerRequest& webRequest)
 | 
| -    : Body(context)
 | 
| -    , m_request(FetchRequestData::create(webRequest))
 | 
| -    , m_headers(Headers::create(m_request->headerList()))
 | 
| -{
 | 
| -    m_headers->setGuard(Headers::RequestGuard);
 | 
| -}
 | 
| -
 | 
| -Request::Request(const Request& copy_from)
 | 
| -    : Body(copy_from)
 | 
| -    , m_request(copy_from.m_request->createCopy())
 | 
| -    , m_headers(Headers::create(m_request->headerList()))
 | 
| -{
 | 
| -}
 | 
| -
 | 
| -
 | 
| -String Request::method() const
 | 
| -{
 | 
| -    // "The method attribute's getter must return request's method."
 | 
| -    return m_request->method();
 | 
| -}
 | 
| -
 | 
| -String Request::url() const
 | 
| -{
 | 
| -    // The url attribute's getter must return request's url, serialized with the exclude fragment flag set.
 | 
| -    if (!m_request->url().hasFragmentIdentifier())
 | 
| -        return m_request->url();
 | 
| -    KURL url(m_request->url());
 | 
| -    url.removeFragmentIdentifier();
 | 
| -    return url;
 | 
| -}
 | 
| -
 | 
| -String Request::referrer() const
 | 
| -{
 | 
| -    // "The referrer attribute's getter must return the empty string if
 | 
| -    // request's referrer is no referrer, "about:client" if request's referrer
 | 
| -    // is client and request's referrer, serialized, otherwise."
 | 
| -    if (m_request->referrer().isNoReferrer())
 | 
| -        return String();
 | 
| -    if (m_request->referrer().isClient())
 | 
| -        return String("about:client");
 | 
| -    return m_request->referrer().referrer().referrer;
 | 
| -}
 | 
| -
 | 
| -String Request::mode() const
 | 
| -{
 | 
| -    // "The mode attribute's getter must return the value corresponding to the
 | 
| -    // first matching statement, switching on request's mode:"
 | 
| -    switch (m_request->mode()) {
 | 
| -    case WebURLRequest::FetchRequestModeSameOrigin:
 | 
| -        return "same-origin";
 | 
| -    case WebURLRequest::FetchRequestModeNoCORS:
 | 
| -        return "no-cors";
 | 
| -    case WebURLRequest::FetchRequestModeCORS:
 | 
| -    case WebURLRequest::FetchRequestModeCORSWithForcedPreflight:
 | 
| -        return "cors";
 | 
| -    }
 | 
| -    ASSERT_NOT_REACHED();
 | 
| -    return "";
 | 
| -}
 | 
| -
 | 
| -String Request::credentials() const
 | 
| -{
 | 
| -    // "The credentials attribute's getter must return the value corresponding
 | 
| -    // to the first matching statement, switching on request's credentials
 | 
| -    // mode:"
 | 
| -    switch (m_request->credentials()) {
 | 
| -    case WebURLRequest::FetchCredentialsModeOmit:
 | 
| -        return "omit";
 | 
| -    case WebURLRequest::FetchCredentialsModeSameOrigin:
 | 
| -        return "same-origin";
 | 
| -    case WebURLRequest::FetchCredentialsModeInclude:
 | 
| -        return "include";
 | 
| -    }
 | 
| -    ASSERT_NOT_REACHED();
 | 
| -    return "";
 | 
| -}
 | 
| -
 | 
| -Request* Request::clone(ExceptionState& exceptionState) const
 | 
| -{
 | 
| -    if (bodyUsed()) {
 | 
| -        exceptionState.throwTypeError("Request body is already used");
 | 
| -        return nullptr;
 | 
| -    }
 | 
| -    if (streamAccessed()) {
 | 
| -        // FIXME: Support clone() of the stream accessed Request.
 | 
| -        exceptionState.throwTypeError("clone() of the Request which .body is accessed is not supported.");
 | 
| -        return nullptr;
 | 
| -    }
 | 
| -    return Request::create(*this);
 | 
| -}
 | 
| -
 | 
| -void Request::populateWebServiceWorkerRequest(WebServiceWorkerRequest& webRequest) const
 | 
| -{
 | 
| -    webRequest.setMethod(method());
 | 
| -    webRequest.setURL(m_request->url());
 | 
| -
 | 
| -    const FetchHeaderList* headerList = m_headers->headerList();
 | 
| -    for (size_t i = 0, size = headerList->size(); i < size; ++i) {
 | 
| -        const FetchHeaderList::Header& header = headerList->entry(i);
 | 
| -        webRequest.appendHeader(header.first, header.second);
 | 
| -    }
 | 
| -
 | 
| -    webRequest.setReferrer(m_request->referrer().referrer().referrer, static_cast<WebReferrerPolicy>(m_request->referrer().referrer().referrerPolicy));
 | 
| -    // FIXME: How can we set isReload properly? What is the correct place to load it in to the Request object? We should investigate the right way
 | 
| -    // to plumb this information in to here.
 | 
| -}
 | 
| -
 | 
| -void Request::setBodyBlobHandle(PassRefPtr<BlobDataHandle> blobDataHandle)
 | 
| -{
 | 
| -    m_request->setBlobDataHandle(blobDataHandle);
 | 
| -}
 | 
| -
 | 
| -void Request::clearHeaderList()
 | 
| -{
 | 
| -    m_request->headerList()->clearList();
 | 
| -}
 | 
| -
 | 
| -PassRefPtr<BlobDataHandle> Request::blobDataHandle() const
 | 
| -{
 | 
| -    return m_request->blobDataHandle();
 | 
| -}
 | 
| -
 | 
| -BodyStreamBuffer* Request::buffer() const
 | 
| -{
 | 
| -    return nullptr;
 | 
| -}
 | 
| -
 | 
| -String Request::contentTypeForBuffer() const
 | 
| -{
 | 
| -    // We don't support BodyStreamBuffer for Request yet.
 | 
| -    ASSERT_NOT_REACHED();
 | 
| -    return String();
 | 
| -}
 | 
| -
 | 
| -void Request::trace(Visitor* visitor)
 | 
| -{
 | 
| -    Body::trace(visitor);
 | 
| -    visitor->trace(m_request);
 | 
| -    visitor->trace(m_headers);
 | 
| -}
 | 
| -
 | 
| -} // namespace blink
 | 
| 
 |