| 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/fetch/Response.h" | 6 #include "modules/fetch/Response.h" | 
| 7 | 7 | 
| 8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" | 
| 9 #include "bindings/core/v8/ScriptState.h" | 9 #include "bindings/core/v8/ScriptState.h" | 
| 10 #include "core/dom/Document.h" | 10 #include "core/dom/Document.h" | 
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 138     Response* response = Response::create(executionContext(), *webResponse); | 138     Response* response = Response::create(executionContext(), *webResponse); | 
| 139 | 139 | 
| 140     Headers* responseHeaders = response->headers(); | 140     Headers* responseHeaders = response->headers(); | 
| 141     TrackExceptionState exceptionState; | 141     TrackExceptionState exceptionState; | 
| 142     EXPECT_STREQ("", responseHeaders->get("set-cookie", exceptionState).utf8().d
     ata()); | 142     EXPECT_STREQ("", responseHeaders->get("set-cookie", exceptionState).utf8().d
     ata()); | 
| 143     EXPECT_STREQ("", responseHeaders->get("foo", exceptionState).utf8().data()); | 143     EXPECT_STREQ("", responseHeaders->get("foo", exceptionState).utf8().data()); | 
| 144     EXPECT_STREQ("", responseHeaders->get("cache-control", exceptionState).utf8(
     ).data()); | 144     EXPECT_STREQ("", responseHeaders->get("cache-control", exceptionState).utf8(
     ).data()); | 
| 145     EXPECT_FALSE(exceptionState.hadException()); | 145     EXPECT_FALSE(exceptionState.hadException()); | 
| 146 } | 146 } | 
| 147 | 147 | 
| 148 void loadInternalBufferAsString(Response* response, FetchDataLoader::Client* cli
     ent) |  | 
| 149 { |  | 
| 150     FetchDataLoader* fetchDataLoader = FetchDataLoader::createLoaderAsString(); |  | 
| 151     OwnPtr<DrainingBodyStreamBuffer> buffer = response->createInternalDrainingSt
     ream(); |  | 
| 152     buffer->startLoading(fetchDataLoader, client); |  | 
| 153 } |  | 
| 154 |  | 
| 155 void checkResponseStream(Response* response, bool checkResponseBodyStreamBuffer) | 148 void checkResponseStream(Response* response, bool checkResponseBodyStreamBuffer) | 
| 156 { | 149 { | 
| 157     void* buffer = response->internalBufferForTest(); | 150     if (!response->bodyBuffer()) | 
|  | 151         FAIL() << "bodyBuffer() must not be null."; | 
|  | 152     BodyStreamBuffer* originalInternal = response->internalBodyBuffer(); | 
| 158     if (checkResponseBodyStreamBuffer) { | 153     if (checkResponseBodyStreamBuffer) { | 
| 159         EXPECT_EQ(response->bufferForTest(), buffer); | 154         EXPECT_EQ(response->bodyBuffer(), originalInternal); | 
| 160     } else { | 155     } else { | 
| 161         EXPECT_FALSE(response->bufferForTest()); | 156         EXPECT_FALSE(response->bodyBuffer()->hasBody()); | 
| 162     } | 157     } | 
| 163 | 158 | 
| 164     TrackExceptionState exceptionState; | 159     TrackExceptionState exceptionState; | 
| 165     Response* clonedResponse = response->clone(exceptionState); | 160     Response* clonedResponse = response->clone(exceptionState); | 
| 166     EXPECT_FALSE(exceptionState.hadException()); | 161     EXPECT_FALSE(exceptionState.hadException()); | 
| 167 | 162 | 
| 168     EXPECT_TRUE(response->internalBufferForTest()); | 163     if (!response->internalBodyBuffer()) | 
| 169     EXPECT_TRUE(clonedResponse->internalBufferForTest()); | 164         FAIL() << "internalBodyBuffer() must not be null."; | 
| 170     EXPECT_NE(response->internalBufferForTest(), buffer); | 165     if (!clonedResponse->internalBodyBuffer()) | 
| 171     EXPECT_NE(clonedResponse->internalBufferForTest(), buffer); | 166         FAIL() << "internalBodyBuffer() must not be null."; | 
| 172     EXPECT_NE(response->internalBufferForTest(), clonedResponse->internalBufferF
     orTest()); | 167     EXPECT_TRUE(response->internalBodyBuffer()); | 
|  | 168     EXPECT_TRUE(clonedResponse->internalBodyBuffer()); | 
|  | 169     EXPECT_TRUE(response->internalBodyBuffer()->hasBody()); | 
|  | 170     EXPECT_TRUE(clonedResponse->internalBodyBuffer()->hasBody()); | 
|  | 171     EXPECT_NE(response->internalBodyBuffer(), originalInternal); | 
|  | 172     EXPECT_NE(clonedResponse->internalBodyBuffer(), originalInternal); | 
|  | 173     EXPECT_NE(response->internalBodyBuffer(), clonedResponse->internalBodyBuffer
     ()); | 
| 173     if (checkResponseBodyStreamBuffer) { | 174     if (checkResponseBodyStreamBuffer) { | 
| 174         EXPECT_EQ(response->bufferForTest(), response->internalBufferForTest()); | 175         EXPECT_EQ(response->bodyBuffer(), response->internalBodyBuffer()); | 
| 175         EXPECT_EQ(clonedResponse->bufferForTest(), clonedResponse->internalBuffe
     rForTest()); | 176         EXPECT_EQ(clonedResponse->bodyBuffer(), clonedResponse->internalBodyBuff
     er()); | 
| 176     } else { | 177     } else { | 
| 177         EXPECT_FALSE(response->bufferForTest()); | 178         EXPECT_FALSE(response->bodyBuffer()->hasBody()); | 
| 178         EXPECT_FALSE(clonedResponse->bufferForTest()); | 179         EXPECT_FALSE(clonedResponse->bodyBuffer()->hasBody()); | 
| 179     } | 180     } | 
| 180     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 181     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 181     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 182     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 182     EXPECT_CALL(*client1, didFetchDataLoadedString(String("Hello, world"))); | 183     EXPECT_CALL(*client1, didFetchDataLoadedString(String("Hello, world"))); | 
| 183     EXPECT_CALL(*client2, didFetchDataLoadedString(String("Hello, world"))); | 184     EXPECT_CALL(*client2, didFetchDataLoadedString(String("Hello, world"))); | 
| 184 | 185 | 
| 185     loadInternalBufferAsString(response, client1); | 186     response->internalBodyBuffer()->startLoading(response->executionContext(), F
     etchDataLoader::createLoaderAsString(), client1); | 
| 186     loadInternalBufferAsString(clonedResponse, client2); | 187     clonedResponse->internalBodyBuffer()->startLoading(response->executionContex
     t(), FetchDataLoader::createLoaderAsString(), client2); | 
| 187     blink::testing::runPendingTasks(); | 188     blink::testing::runPendingTasks(); | 
| 188 } | 189 } | 
| 189 | 190 | 
| 190 BodyStreamBuffer* createHelloWorldBuffer() | 191 BodyStreamBuffer* createHelloWorldBuffer() | 
| 191 { | 192 { | 
| 192     using Command = DataConsumerHandleTestUtil::Command; | 193     using Command = DataConsumerHandleTestUtil::Command; | 
| 193     OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTe
     stUtil::ReplayingHandle::create()); | 194     OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTe
     stUtil::ReplayingHandle::create()); | 
| 194     src->add(Command(Command::Data, "Hello, ")); | 195     src->add(Command(Command::Data, "Hello, ")); | 
| 195     src->add(Command(Command::Data, "world")); | 196     src->add(Command(Command::Data, "world")); | 
| 196     src->add(Command(Command::Done)); | 197     src->add(Command(Command::Done)); | 
| 197     return BodyStreamBuffer::create(createFetchDataConsumerHandleFromWebHandle(s
     rc.release())); | 198     return new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(src.r
     elease())); | 
| 198 } | 199 } | 
| 199 | 200 | 
| 200 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) | 201 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) | 
| 201 { | 202 { | 
| 202     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 203     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 203     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 204     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 204     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 205     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 205     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 206     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 206     EXPECT_EQ(response->internalBufferForTest(), buffer); | 207     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 207     checkResponseStream(response, true); | 208     checkResponseStream(response, true); | 
| 208 } | 209 } | 
| 209 | 210 | 
| 210 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) | 211 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) | 
| 211 { | 212 { | 
| 212     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 213     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 213     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 214     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 214     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 215     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 215     fetchResponseData = fetchResponseData->createBasicFilteredResponse(); | 216     fetchResponseData = fetchResponseData->createBasicFilteredResponse(); | 
| 216     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 217     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 217     EXPECT_EQ(response->internalBufferForTest(), buffer); | 218     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 218     checkResponseStream(response, true); | 219     checkResponseStream(response, true); | 
| 219 } | 220 } | 
| 220 | 221 | 
| 221 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) | 222 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) | 
| 222 { | 223 { | 
| 223     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 224     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 224     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 225     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 225     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 226     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 226     fetchResponseData = fetchResponseData->createCORSFilteredResponse(); | 227     fetchResponseData = fetchResponseData->createCORSFilteredResponse(); | 
| 227     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 228     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 228     EXPECT_EQ(response->internalBufferForTest(), buffer); | 229     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 229     checkResponseStream(response, true); | 230     checkResponseStream(response, true); | 
| 230 } | 231 } | 
| 231 | 232 | 
| 232 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) | 233 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) | 
| 233 { | 234 { | 
| 234     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 235     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 235     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 236     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 236     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 237     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 237     fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); | 238     fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); | 
| 238     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 239     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 239     EXPECT_EQ(response->internalBufferForTest(), buffer); | 240     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 240     checkResponseStream(response, false); | 241     checkResponseStream(response, false); | 
| 241 } | 242 } | 
| 242 | 243 | 
| 243 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneError) | 244 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneError) | 
| 244 { | 245 { | 
| 245     BodyStreamBuffer* buffer = BodyStreamBuffer::create(createFetchDataConsumerH
     andleFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 246     BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
     eFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 
| 246     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 247     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 247     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 248     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 248     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 249     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 249     TrackExceptionState exceptionState; | 250     TrackExceptionState exceptionState; | 
| 250     Response* clonedResponse = response->clone(exceptionState); | 251     Response* clonedResponse = response->clone(exceptionState); | 
| 251     EXPECT_FALSE(exceptionState.hadException()); | 252     EXPECT_FALSE(exceptionState.hadException()); | 
| 252 | 253 | 
| 253     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 254     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 254     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 255     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 255     EXPECT_CALL(*client1, didFetchDataLoadFailed()); | 256     EXPECT_CALL(*client1, didFetchDataLoadFailed()); | 
| 256     EXPECT_CALL(*client2, didFetchDataLoadFailed()); | 257     EXPECT_CALL(*client2, didFetchDataLoadFailed()); | 
| 257 | 258 | 
| 258     loadInternalBufferAsString(response, client1); | 259     response->internalBodyBuffer()->startLoading(response->executionContext(), F
     etchDataLoader::createLoaderAsString(), client1); | 
| 259     loadInternalBufferAsString(clonedResponse, client2); | 260     clonedResponse->internalBodyBuffer()->startLoading(response->executionContex
     t(), FetchDataLoader::createLoaderAsString(), client2); | 
| 260     blink::testing::runPendingTasks(); | 261     blink::testing::runPendingTasks(); | 
| 261 } | 262 } | 
| 262 | 263 | 
| 263 } // namespace | 264 } // namespace | 
| 264 } // namespace blink | 265 } // namespace blink | 
| OLD | NEW | 
|---|