Chromium Code Reviews| 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 "modules/fetch/Response.h" | 5 #include "modules/fetch/Response.h" |
| 6 | 6 |
| 7 #include "bindings/core/v8/ExceptionState.h" | 7 #include "bindings/core/v8/ExceptionState.h" |
| 8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
| 9 #include "bindings/core/v8/V8BindingForTesting.h" | 9 #include "bindings/core/v8/V8BindingForTesting.h" |
| 10 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" |
| 11 #include "core/frame/Frame.h" | 11 #include "core/frame/Frame.h" |
| 12 #include "core/testing/DummyPageHolder.h" | 12 #include "core/testing/DummyPageHolder.h" |
| 13 #include "modules/fetch/BodyStreamBuffer.h" | 13 #include "modules/fetch/BodyStreamBuffer.h" |
| 14 #include "modules/fetch/BytesConsumer.h" | 14 #include "modules/fetch/BytesConsumer.h" |
| 15 #include "modules/fetch/BytesConsumerTestUtil.h" | 15 #include "modules/fetch/BytesConsumerTestUtil.h" |
| 16 #include "modules/fetch/DataConsumerHandleTestUtil.h" | 16 #include "modules/fetch/DataConsumerHandleTestUtil.h" |
| 17 #include "modules/fetch/FetchResponseData.h" | 17 #include "modules/fetch/FetchResponseData.h" |
| 18 #include "platform/blob/BlobData.h" | 18 #include "platform/blob/BlobData.h" |
| 19 #include "platform/testing/UnitTestHelpers.h" | 19 #include "platform/testing/UnitTestHelpers.h" |
| 20 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h" | 20 #include "public/platform/modules/serviceworker/WebServiceWorkerResponse.h" |
| 21 #include "testing/gtest/include/gtest/gtest.h" | 21 #include "testing/gtest/include/gtest/gtest.h" |
| 22 #include "wtf/PtrUtil.h" | 22 #include "wtf/PtrUtil.h" |
|
falken
2016/11/30 14:57:38
#include "wtf/Vector.h"?
horo
2016/12/01 07:42:14
Done.
| |
| 23 #include <memory> | 23 #include <memory> |
| 24 | 24 |
| 25 namespace blink { | 25 namespace blink { |
| 26 namespace { | 26 namespace { |
| 27 | 27 |
| 28 std::unique_ptr<WebServiceWorkerResponse> createTestWebServiceWorkerResponse() { | 28 std::unique_ptr<WebServiceWorkerResponse> createTestWebServiceWorkerResponse() { |
| 29 const KURL url(ParsedURLString, "http://www.webresponse.com/"); | 29 const KURL url(ParsedURLString, "http://www.webresponse.com/"); |
| 30 const unsigned short status = 200; | 30 const unsigned short status = 200; |
| 31 const String statusText = "the best status text"; | 31 const String statusText = "the best status text"; |
| 32 struct { | 32 struct { |
| 33 const char* key; | 33 const char* key; |
| 34 const char* value; | 34 const char* value; |
| 35 } headers[] = {{"cache-control", "no-cache"}, | 35 } headers[] = {{"cache-control", "no-cache"}, |
| 36 {"set-cookie", "foop"}, | 36 {"set-cookie", "foop"}, |
| 37 {"foo", "bar"}, | 37 {"foo", "bar"}, |
| 38 {0, 0}}; | 38 {0, 0}}; |
| 39 | 39 std::vector<WebURL> urlList; |
| 40 urlList.push_back(url); | |
| 40 std::unique_ptr<WebServiceWorkerResponse> webResponse = | 41 std::unique_ptr<WebServiceWorkerResponse> webResponse = |
| 41 makeUnique<WebServiceWorkerResponse>(); | 42 makeUnique<WebServiceWorkerResponse>(); |
| 42 webResponse->setURL(url); | 43 webResponse->setURLList(urlList); |
| 43 webResponse->setStatus(status); | 44 webResponse->setStatus(status); |
| 44 webResponse->setStatusText(statusText); | 45 webResponse->setStatusText(statusText); |
| 45 webResponse->setResponseType(WebServiceWorkerResponseTypeDefault); | 46 webResponse->setResponseType(WebServiceWorkerResponseTypeDefault); |
| 46 for (int i = 0; headers[i].key; ++i) | 47 for (int i = 0; headers[i].key; ++i) |
| 47 webResponse->setHeader(WebString::fromUTF8(headers[i].key), | 48 webResponse->setHeader(WebString::fromUTF8(headers[i].key), |
| 48 WebString::fromUTF8(headers[i].value)); | 49 WebString::fromUTF8(headers[i].value)); |
| 49 return webResponse; | 50 return webResponse; |
| 50 } | 51 } |
| 51 | 52 |
| 52 TEST(ServiceWorkerResponseTest, FromFetchResponseData) { | 53 TEST(ServiceWorkerResponseTest, FromFetchResponseData) { |
| 53 std::unique_ptr<DummyPageHolder> page = | 54 std::unique_ptr<DummyPageHolder> page = |
| 54 DummyPageHolder::create(IntSize(1, 1)); | 55 DummyPageHolder::create(IntSize(1, 1)); |
| 55 const KURL url(ParsedURLString, "http://www.response.com"); | 56 const KURL url(ParsedURLString, "http://www.response.com"); |
| 56 | 57 |
| 57 FetchResponseData* fetchResponseData = FetchResponseData::create(); | 58 FetchResponseData* fetchResponseData = FetchResponseData::create(); |
| 58 fetchResponseData->setURL(url); | 59 Vector<KURL> urlList; |
| 59 | 60 urlList.append(url); |
| 61 fetchResponseData->setURLList(urlList); | |
| 60 Response* response = Response::create(&page->document(), fetchResponseData); | 62 Response* response = Response::create(&page->document(), fetchResponseData); |
| 61 ASSERT(response); | 63 ASSERT(response); |
| 62 EXPECT_EQ(url, response->url()); | 64 EXPECT_EQ(url, response->url()); |
| 63 } | 65 } |
| 64 | 66 |
| 65 TEST(ServiceWorkerResponseTest, FromWebServiceWorkerResponse) { | 67 TEST(ServiceWorkerResponseTest, FromWebServiceWorkerResponse) { |
| 66 V8TestingScope scope; | 68 V8TestingScope scope; |
| 67 std::unique_ptr<WebServiceWorkerResponse> webResponse = | 69 std::unique_ptr<WebServiceWorkerResponse> webResponse = |
| 68 createTestWebServiceWorkerResponse(); | 70 createTestWebServiceWorkerResponse(); |
| 69 Response* response = Response::create(scope.getScriptState(), *webResponse); | 71 Response* response = Response::create(scope.getScriptState(), *webResponse); |
| 70 ASSERT(response); | 72 ASSERT(response); |
|
falken
2016/11/30 14:57:38
should we do ASSERT_EQ(1, webResponse->urlList()->
horo
2016/12/01 07:42:14
Done.
| |
| 71 EXPECT_EQ(webResponse->url(), response->url()); | 73 EXPECT_EQ(webResponse->urlList()[0], response->url()); |
| 72 EXPECT_EQ(webResponse->status(), response->status()); | 74 EXPECT_EQ(webResponse->status(), response->status()); |
| 73 EXPECT_STREQ(webResponse->statusText().utf8().c_str(), | 75 EXPECT_STREQ(webResponse->statusText().utf8().c_str(), |
| 74 response->statusText().utf8().data()); | 76 response->statusText().utf8().data()); |
| 75 | 77 |
| 76 Headers* responseHeaders = response->headers(); | 78 Headers* responseHeaders = response->headers(); |
| 77 | 79 |
| 78 WebVector<WebString> keys = webResponse->getHeaderKeys(); | 80 WebVector<WebString> keys = webResponse->getHeaderKeys(); |
| 79 EXPECT_EQ(keys.size(), responseHeaders->headerList()->size()); | 81 EXPECT_EQ(keys.size(), responseHeaders->headerList()->size()); |
| 80 for (size_t i = 0, max = keys.size(); i < max; ++i) { | 82 for (size_t i = 0, max = keys.size(); i < max; ++i) { |
| 81 WebString key = keys[i]; | 83 WebString key = keys[i]; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 216 src->add(Command(Command::Data, "world")); | 218 src->add(Command(Command::Data, "world")); |
| 217 src->add(Command(Command::Done)); | 219 src->add(Command(Command::Done)); |
| 218 return new BodyStreamBuffer(scriptState, src); | 220 return new BodyStreamBuffer(scriptState, src); |
| 219 } | 221 } |
| 220 | 222 |
| 221 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) { | 223 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) { |
| 222 V8TestingScope scope; | 224 V8TestingScope scope; |
| 223 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); | 225 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); |
| 224 FetchResponseData* fetchResponseData = | 226 FetchResponseData* fetchResponseData = |
| 225 FetchResponseData::createWithBuffer(buffer); | 227 FetchResponseData::createWithBuffer(buffer); |
| 226 fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 228 Vector<KURL> urlList; |
| 229 urlList.append(KURL(ParsedURLString, "http://www.response.com")); | |
| 230 fetchResponseData->setURLList(urlList); | |
| 227 Response* response = | 231 Response* response = |
| 228 Response::create(scope.getExecutionContext(), fetchResponseData); | 232 Response::create(scope.getExecutionContext(), fetchResponseData); |
| 229 EXPECT_EQ(response->internalBodyBuffer(), buffer); | 233 EXPECT_EQ(response->internalBodyBuffer(), buffer); |
| 230 checkResponseStream(scope.getScriptState(), response, true); | 234 checkResponseStream(scope.getScriptState(), response, true); |
| 231 } | 235 } |
| 232 | 236 |
| 233 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) { | 237 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) { |
| 234 V8TestingScope scope; | 238 V8TestingScope scope; |
| 235 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); | 239 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); |
| 236 FetchResponseData* fetchResponseData = | 240 FetchResponseData* fetchResponseData = |
| 237 FetchResponseData::createWithBuffer(buffer); | 241 FetchResponseData::createWithBuffer(buffer); |
| 238 fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 242 Vector<KURL> urlList; |
| 243 urlList.append(KURL(ParsedURLString, "http://www.response.com")); | |
| 244 fetchResponseData->setURLList(urlList); | |
| 239 fetchResponseData = fetchResponseData->createBasicFilteredResponse(); | 245 fetchResponseData = fetchResponseData->createBasicFilteredResponse(); |
| 240 Response* response = | 246 Response* response = |
| 241 Response::create(scope.getExecutionContext(), fetchResponseData); | 247 Response::create(scope.getExecutionContext(), fetchResponseData); |
| 242 EXPECT_EQ(response->internalBodyBuffer(), buffer); | 248 EXPECT_EQ(response->internalBodyBuffer(), buffer); |
| 243 checkResponseStream(scope.getScriptState(), response, true); | 249 checkResponseStream(scope.getScriptState(), response, true); |
| 244 } | 250 } |
| 245 | 251 |
| 246 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) { | 252 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) { |
| 247 V8TestingScope scope; | 253 V8TestingScope scope; |
| 248 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); | 254 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); |
| 249 FetchResponseData* fetchResponseData = | 255 FetchResponseData* fetchResponseData = |
| 250 FetchResponseData::createWithBuffer(buffer); | 256 FetchResponseData::createWithBuffer(buffer); |
| 251 fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 257 Vector<KURL> urlList; |
| 258 urlList.append(KURL(ParsedURLString, "http://www.response.com")); | |
| 259 fetchResponseData->setURLList(urlList); | |
| 252 fetchResponseData = fetchResponseData->createCORSFilteredResponse(); | 260 fetchResponseData = fetchResponseData->createCORSFilteredResponse(); |
| 253 Response* response = | 261 Response* response = |
| 254 Response::create(scope.getExecutionContext(), fetchResponseData); | 262 Response::create(scope.getExecutionContext(), fetchResponseData); |
| 255 EXPECT_EQ(response->internalBodyBuffer(), buffer); | 263 EXPECT_EQ(response->internalBodyBuffer(), buffer); |
| 256 checkResponseStream(scope.getScriptState(), response, true); | 264 checkResponseStream(scope.getScriptState(), response, true); |
| 257 } | 265 } |
| 258 | 266 |
| 259 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) { | 267 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) { |
| 260 V8TestingScope scope; | 268 V8TestingScope scope; |
| 261 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); | 269 BodyStreamBuffer* buffer = createHelloWorldBuffer(scope.getScriptState()); |
| 262 FetchResponseData* fetchResponseData = | 270 FetchResponseData* fetchResponseData = |
| 263 FetchResponseData::createWithBuffer(buffer); | 271 FetchResponseData::createWithBuffer(buffer); |
| 264 fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 272 Vector<KURL> urlList; |
| 273 urlList.append(KURL(ParsedURLString, "http://www.response.com")); | |
| 274 fetchResponseData->setURLList(urlList); | |
| 265 fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); | 275 fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); |
| 266 Response* response = | 276 Response* response = |
| 267 Response::create(scope.getExecutionContext(), fetchResponseData); | 277 Response::create(scope.getExecutionContext(), fetchResponseData); |
| 268 EXPECT_EQ(response->internalBodyBuffer(), buffer); | 278 EXPECT_EQ(response->internalBodyBuffer(), buffer); |
| 269 checkResponseStream(scope.getScriptState(), response, false); | 279 checkResponseStream(scope.getScriptState(), response, false); |
| 270 } | 280 } |
| 271 | 281 |
| 272 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneError) { | 282 TEST(ServiceWorkerResponseTest, BodyStreamBufferCloneError) { |
| 273 V8TestingScope scope; | 283 V8TestingScope scope; |
| 274 BodyStreamBuffer* buffer = new BodyStreamBuffer( | 284 BodyStreamBuffer* buffer = new BodyStreamBuffer( |
| 275 scope.getScriptState(), | 285 scope.getScriptState(), |
| 276 BytesConsumer::createErrored(BytesConsumer::Error())); | 286 BytesConsumer::createErrored(BytesConsumer::Error())); |
| 277 FetchResponseData* fetchResponseData = | 287 FetchResponseData* fetchResponseData = |
| 278 FetchResponseData::createWithBuffer(buffer); | 288 FetchResponseData::createWithBuffer(buffer); |
| 279 fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 289 Vector<KURL> urlList; |
| 290 urlList.append(KURL(ParsedURLString, "http://www.response.com")); | |
| 291 fetchResponseData->setURLList(urlList); | |
| 280 Response* response = | 292 Response* response = |
| 281 Response::create(scope.getExecutionContext(), fetchResponseData); | 293 Response::create(scope.getExecutionContext(), fetchResponseData); |
| 282 TrackExceptionState exceptionState; | 294 TrackExceptionState exceptionState; |
| 283 Response* clonedResponse = | 295 Response* clonedResponse = |
| 284 response->clone(scope.getScriptState(), exceptionState); | 296 response->clone(scope.getScriptState(), exceptionState); |
| 285 EXPECT_FALSE(exceptionState.hadException()); | 297 EXPECT_FALSE(exceptionState.hadException()); |
| 286 | 298 |
| 287 BytesConsumerTestUtil::MockFetchDataLoaderClient* client1 = | 299 BytesConsumerTestUtil::MockFetchDataLoaderClient* client1 = |
| 288 new BytesConsumerTestUtil::MockFetchDataLoaderClient(); | 300 new BytesConsumerTestUtil::MockFetchDataLoaderClient(); |
| 289 BytesConsumerTestUtil::MockFetchDataLoaderClient* client2 = | 301 BytesConsumerTestUtil::MockFetchDataLoaderClient* client2 = |
| 290 new BytesConsumerTestUtil::MockFetchDataLoaderClient(); | 302 new BytesConsumerTestUtil::MockFetchDataLoaderClient(); |
| 291 EXPECT_CALL(*client1, didFetchDataLoadFailed()); | 303 EXPECT_CALL(*client1, didFetchDataLoadFailed()); |
| 292 EXPECT_CALL(*client2, didFetchDataLoadFailed()); | 304 EXPECT_CALL(*client2, didFetchDataLoadFailed()); |
| 293 | 305 |
| 294 response->internalBodyBuffer()->startLoading( | 306 response->internalBodyBuffer()->startLoading( |
| 295 FetchDataLoader::createLoaderAsString(), client1); | 307 FetchDataLoader::createLoaderAsString(), client1); |
| 296 clonedResponse->internalBodyBuffer()->startLoading( | 308 clonedResponse->internalBodyBuffer()->startLoading( |
| 297 FetchDataLoader::createLoaderAsString(), client2); | 309 FetchDataLoader::createLoaderAsString(), client2); |
| 298 blink::testing::runPendingTasks(); | 310 blink::testing::runPendingTasks(); |
| 299 } | 311 } |
| 300 | 312 |
| 301 } // namespace | 313 } // namespace |
| 302 } // namespace blink | 314 } // namespace blink |
| OLD | NEW |