OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
| 6 #include "modules/serviceworkers/Response.h" |
6 | 7 |
7 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
8 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" |
9 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" |
10 #include "core/frame/Frame.h" | 11 #include "core/frame/Frame.h" |
11 #include "core/testing/DummyPageHolder.h" | 12 #include "core/testing/DummyPageHolder.h" |
12 #include "modules/serviceworkers/Response.h" | |
13 #include "modules/serviceworkers/FetchResponseData.h" | 13 #include "modules/serviceworkers/FetchResponseData.h" |
14 #include "public/platform/WebServiceWorkerResponse.h" | 14 #include "public/platform/WebServiceWorkerResponse.h" |
15 #include <gtest/gtest.h> | 15 #include <gtest/gtest.h> |
16 | 16 |
17 namespace blink { | 17 namespace blink { |
18 namespace { | 18 namespace { |
19 | 19 |
| 20 PassOwnPtr<WebServiceWorkerResponse> createTestWebServiceWorkerResponse() |
| 21 { |
| 22 const KURL url(ParsedURLString, "http://www.webresponse.com/"); |
| 23 const unsigned short status = 200; |
| 24 const String statusText = "the best status text"; |
| 25 struct { |
| 26 const char* key; |
| 27 const char* value; |
| 28 } headers[] = { { "cache-control", "no-cache" }, { "set-cookie", "foop" }, {
"foo", "bar" }, { 0, 0 } }; |
| 29 |
| 30 OwnPtr<WebServiceWorkerResponse> webResponse = adoptPtr(new WebServiceWorker
Response()); |
| 31 webResponse->setURL(url); |
| 32 webResponse->setStatus(status); |
| 33 webResponse->setStatusText(statusText); |
| 34 webResponse->setResponseType(WebServiceWorkerResponseTypeDefault); |
| 35 for (int i = 0; headers[i].key; ++i) |
| 36 webResponse->setHeader(WebString::fromUTF8(headers[i].key), WebString::f
romUTF8(headers[i].value)); |
| 37 return webResponse.release(); |
| 38 } |
| 39 |
20 class ServiceWorkerResponseTest : public ::testing::Test { | 40 class ServiceWorkerResponseTest : public ::testing::Test { |
21 public: | 41 public: |
22 ServiceWorkerResponseTest() | 42 ServiceWorkerResponseTest() |
23 : m_page(DummyPageHolder::create(IntSize(1, 1))) { } | 43 : m_page(DummyPageHolder::create(IntSize(1, 1))) { } |
24 | 44 |
25 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume
nt().frame()); } | 45 ScriptState* scriptState() { return ScriptState::forMainWorld(m_page->docume
nt().frame()); } |
26 ExecutionContext* executionContext() { return scriptState()->executionContex
t(); } | 46 ExecutionContext* executionContext() { return scriptState()->executionContex
t(); } |
27 | 47 |
28 private: | 48 private: |
29 OwnPtr<DummyPageHolder> m_page; | 49 OwnPtr<DummyPageHolder> m_page; |
30 }; | 50 }; |
31 | 51 |
32 | 52 |
33 TEST_F(ServiceWorkerResponseTest, FromFetchResponseData) | 53 TEST_F(ServiceWorkerResponseTest, FromFetchResponseData) |
34 { | 54 { |
35 const KURL url(ParsedURLString, "http://www.response.com"); | 55 const KURL url(ParsedURLString, "http://www.response.com"); |
36 | 56 |
37 FetchResponseData* fetchResponseData = FetchResponseData::create(); | 57 FetchResponseData* fetchResponseData = FetchResponseData::create(); |
38 fetchResponseData->setURL(url); | 58 fetchResponseData->setURL(url); |
39 | 59 |
40 Response* response = Response::create(executionContext(), fetchResponseData)
; | 60 Response* response = Response::create(executionContext(), fetchResponseData)
; |
41 ASSERT(response); | 61 ASSERT(response); |
42 EXPECT_EQ(url, response->url()); | 62 EXPECT_EQ(url, response->url()); |
43 } | 63 } |
44 | 64 |
45 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponse) | 65 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponse) |
46 { | 66 { |
47 const KURL url(ParsedURLString, "http://www.webresponse.com/"); | 67 OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerRes
ponse(); |
48 const unsigned short status = 200; | 68 Response* response = Response::create(executionContext(), *webResponse); |
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::fr
omUTF8(headers[i].value)); | |
58 | |
59 Response* response = Response::create(executionContext(), webResponse); | |
60 ASSERT(response); | 69 ASSERT(response); |
61 EXPECT_EQ(url, response->url()); | 70 EXPECT_EQ(webResponse->url(), response->url()); |
62 EXPECT_EQ(status, response->status()); | 71 EXPECT_EQ(webResponse->status(), response->status()); |
63 EXPECT_EQ(statusText, response->statusText()); | 72 EXPECT_STREQ(webResponse->statusText().utf8().c_str(), response->statusText(
).utf8().data()); |
64 | 73 |
65 Headers* responseHeaders = response->headers(); | 74 Headers* responseHeaders = response->headers(); |
66 | 75 |
67 WTF::HashMap<String, String> headersMap; | 76 WebVector<WebString> keys = webResponse->getHeaderKeys(); |
68 for (int i = 0; headers[i].key; ++i) | 77 EXPECT_EQ(keys.size(), responseHeaders->headerList()->size()); |
69 headersMap.add(headers[i].key, headers[i].value); | 78 for (size_t i = 0, max = keys.size(); i < max; ++i) { |
70 EXPECT_EQ(headersMap.size(), responseHeaders->headerList()->size()); | 79 WebString key = keys[i]; |
71 for (WTF::HashMap<String, String>::iterator iter = headersMap.begin(); iter
!= headersMap.end(); ++iter) { | |
72 TrackExceptionState exceptionState; | 80 TrackExceptionState exceptionState; |
73 EXPECT_EQ(iter->value, responseHeaders->get(iter->key, exceptionState)); | 81 EXPECT_STREQ(webResponse->getHeader(key).utf8().c_str(), responseHeaders
->get(key, exceptionState).utf8().data()); |
74 EXPECT_FALSE(exceptionState.hadException()); | 82 EXPECT_FALSE(exceptionState.hadException()); |
75 } | 83 } |
76 } | 84 } |
77 | 85 |
| 86 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseDefault) |
| 87 { |
| 88 OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerRes
ponse(); |
| 89 webResponse->setResponseType(WebServiceWorkerResponseTypeDefault); |
| 90 Response* response = Response::create(executionContext(), *webResponse); |
| 91 |
| 92 Headers* responseHeaders = response->headers(); |
| 93 TrackExceptionState exceptionState; |
| 94 EXPECT_STREQ("foop", responseHeaders->get("set-cookie", exceptionState).utf8
().data()); |
| 95 EXPECT_STREQ("bar", responseHeaders->get("foo", exceptionState).utf8().data(
)); |
| 96 EXPECT_STREQ("no-cache", responseHeaders->get("cache-control", exceptionStat
e).utf8().data()); |
| 97 EXPECT_FALSE(exceptionState.hadException()); |
| 98 } |
| 99 |
| 100 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseBasic) |
| 101 { |
| 102 OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerRes
ponse(); |
| 103 webResponse->setResponseType(WebServiceWorkerResponseTypeBasic); |
| 104 Response* response = Response::create(executionContext(), *webResponse); |
| 105 |
| 106 Headers* responseHeaders = response->headers(); |
| 107 TrackExceptionState exceptionState; |
| 108 EXPECT_STREQ("", responseHeaders->get("set-cookie", exceptionState).utf8().d
ata()); |
| 109 EXPECT_STREQ("bar", responseHeaders->get("foo", exceptionState).utf8().data(
)); |
| 110 EXPECT_STREQ("no-cache", responseHeaders->get("cache-control", exceptionStat
e).utf8().data()); |
| 111 EXPECT_FALSE(exceptionState.hadException()); |
| 112 } |
| 113 |
| 114 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseCORS) |
| 115 { |
| 116 OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerRes
ponse(); |
| 117 webResponse->setResponseType(WebServiceWorkerResponseTypeCORS); |
| 118 Response* response = Response::create(executionContext(), *webResponse); |
| 119 |
| 120 Headers* responseHeaders = response->headers(); |
| 121 TrackExceptionState exceptionState; |
| 122 EXPECT_STREQ("", responseHeaders->get("set-cookie", exceptionState).utf8().d
ata()); |
| 123 EXPECT_STREQ("", responseHeaders->get("foo", exceptionState).utf8().data()); |
| 124 EXPECT_STREQ("no-cache", responseHeaders->get("cache-control", exceptionStat
e).utf8().data()); |
| 125 EXPECT_FALSE(exceptionState.hadException()); |
| 126 } |
| 127 |
| 128 TEST_F(ServiceWorkerResponseTest, FromWebServiceWorkerResponseOpaque) |
| 129 { |
| 130 OwnPtr<WebServiceWorkerResponse> webResponse = createTestWebServiceWorkerRes
ponse(); |
| 131 webResponse->setResponseType(WebServiceWorkerResponseTypeOpaque); |
| 132 Response* response = Response::create(executionContext(), *webResponse); |
| 133 |
| 134 Headers* responseHeaders = response->headers(); |
| 135 TrackExceptionState exceptionState; |
| 136 EXPECT_STREQ("", responseHeaders->get("set-cookie", exceptionState).utf8().d
ata()); |
| 137 EXPECT_STREQ("", responseHeaders->get("foo", exceptionState).utf8().data()); |
| 138 EXPECT_STREQ("", responseHeaders->get("cache-control", exceptionState).utf8(
).data()); |
| 139 EXPECT_FALSE(exceptionState.hadException()); |
| 140 } |
| 141 |
78 } // namespace | 142 } // namespace |
79 } // namespace blink | 143 } // namespace blink |
OLD | NEW |