1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "config.h" 6 #include "Response.h" 7 8 #include "bindings/v8/Dictionary.h" 9 #include "core/fileapi/Blob.h" 10 #include "modules/serviceworkers/ResponseInit.h" 11 #include "platform/NotImplemented.h" 12 #include "public/platform/WebServiceWorkerResponse.h" 13 14 namespace WebCore { 15 16 PassRefPtr<Response> Response::create(Blob* body, const Dictionary& responseInit) 17 { 18 RefPtr<BlobDataHandle> blobDataHandle = body ? body->blobDataHandle() : nullptr; 19 20 // FIXME: Maybe append or override content-length and content-type headers using the blob. The spec will clarify what to do: 21 // https://github.com/slightlyoff/ServiceWorker/issues/192 22 return adoptRef(new Response(blobDataHandle.release(), ResponseInit(responseInit))); 23 } 24 25 PassRefPtr<HeaderMap> Response::headers() const 26 { 27 // FIXME: Implement. Spec will eventually whitelist allowable headers. 28 return m_headers; 29 } 30 31 void Response::populateWebServiceWorkerResponse(blink::WebServiceWorkerResponse& response) 32 { 33 response.setStatus(status()); 34 response.setStatusText(statusText()); 35 response.setHeaders(m_headers->headerMap()); 36 response.setBlobDataHandle(m_blobDataHandle); 37 } 38 39 Response::Response(PassRefPtr<BlobDataHandle> blobDataHandle, const ResponseInit& responseInit) 40 : m_status(responseInit.status) 41 , m_statusText(responseInit.statusText) 42 , m_headers(responseInit.headers) 43 , m_blobDataHandle(blobDataHandle) 44 { 45 ScriptWrappable::init(this); 46 47 if (!m_headers) 48 m_headers = HeaderMap::create(); 49 } 50 51 } // namespace WebCore 52