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 7#include "bindings/core/v8/ExceptionState.h" 8#include "bindings/core/v8/ScriptState.h" 9#include "core/dom/Document.h" 10#include "core/frame/Frame.h" 11#include "core/testing/DummyPageHolder.h" 12#include "modules/serviceworkers/Response.h" 13#include "modules/serviceworkers/FetchResponseData.h" 14#include "public/platform/WebServiceWorkerResponse.h" 15#include <gtest/gtest.h> 16 17namespace blink { 18namespace { 19 20class ServiceWorkerResponseTest : public ::testing::Test { 21public: 22 ServiceWorkerResponseTest() 23 : m_page(DummyPageHolder::create(IntSize(1, 1))) { } 24 25 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->document().frame()); } 26 ExecutionContext* executionContext() { return scriptState()->executionContext(); } 27 28private: 29 OwnPtr<DummyPageHolder> m_page; 30}; 31 32 33TEST_F(ServiceWorkerResponseTest, FromFetchResponseData) 34{ 35 const KURL url(ParsedURLString, "http://www.response.com"); 36 37 FetchResponseData* fetchResponseData = FetchResponseData::create(); 38 fetchResponseData->setURL(url); 39 40 Response* response = Response::create(executionContext(), fetchResponseData); 41 ASSERT(response); 42 EXPECT_EQ(url, response->url()); 43} 44 45TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponse) 46{ 47 const KURL url(ParsedURLString, "http://www.webresponse.com/"); 48 const unsigned short status = 200; 49 const String statusText = "the best status text"; 50 struct { const char* key; const char* value; } headers[] = { {"X-Foo", "bar"}, {"X-Quux", "foop"}, {0, 0} }; 51 52 WebServiceWorkerResponse webResponse; 53 webResponse.setURL(url); 54 webResponse.setStatus(status); 55 webResponse.setStatusText(statusText); 56 for (int i = 0; headers[i].key; ++i) 57 webResponse.setHeader(WebString::fromUTF8(headers[i].key), WebString::fromUTF8(headers[i].value)); 58 59 Response* response = Response::create(executionContext(), webResponse); 60 ASSERT(response); 61 EXPECT_EQ(url, response->url()); 62 EXPECT_EQ(status, response->status()); 63 EXPECT_EQ(statusText, response->statusText()); 64 65 Headers* responseHeaders = response->headers(); 66 67 WTF::HashMap<String, String> headersMap; 68 for (int i = 0; headers[i].key; ++i) 69 headersMap.add(headers[i].key, headers[i].value); 70 EXPECT_EQ(headersMap.size(), responseHeaders->size()); 71 for (WTF::HashMap<String, String>::iterator iter = headersMap.begin(); iter != headersMap.end(); ++iter) { 72 TrackExceptionState exceptionState; 73 EXPECT_EQ(iter->value, responseHeaders->get(iter->key, exceptionState)); 74 EXPECT_FALSE(exceptionState.hadException()); 75 } 76} 77 78} // namespace 79} // namespace blink 80