| 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     void* buffer = response->internalBodyBuffer(); | 
| 158     if (checkResponseBodyStreamBuffer) { | 151     if (checkResponseBodyStreamBuffer) { | 
| 159         EXPECT_EQ(response->bufferForTest(), buffer); | 152         EXPECT_EQ(response->bodyBuffer(), buffer); | 
| 160     } else { | 153     } else { | 
| 161         EXPECT_FALSE(response->bufferForTest()); | 154         EXPECT_FALSE(response->bodyBuffer()->hasBody()); | 
| 162     } | 155     } | 
| 163 | 156 | 
| 164     TrackExceptionState exceptionState; | 157     TrackExceptionState exceptionState; | 
| 165     Response* clonedResponse = response->clone(exceptionState); | 158     Response* clonedResponse = response->clone(exceptionState); | 
| 166     EXPECT_FALSE(exceptionState.hadException()); | 159     EXPECT_FALSE(exceptionState.hadException()); | 
| 167 | 160 | 
| 168     EXPECT_TRUE(response->internalBufferForTest()); | 161     EXPECT_TRUE(response->internalBodyBuffer()); | 
| 169     EXPECT_TRUE(clonedResponse->internalBufferForTest()); | 162     EXPECT_TRUE(clonedResponse->internalBodyBuffer()); | 
| 170     EXPECT_NE(response->internalBufferForTest(), buffer); | 163     EXPECT_NE(response->internalBodyBuffer(), buffer); | 
| 171     EXPECT_NE(clonedResponse->internalBufferForTest(), buffer); | 164     EXPECT_NE(clonedResponse->internalBodyBuffer(), buffer); | 
| 172     EXPECT_NE(response->internalBufferForTest(), clonedResponse->internalBufferF
     orTest()); | 165     EXPECT_NE(response->internalBodyBuffer(), clonedResponse->internalBodyBuffer
     ()); | 
| 173     if (checkResponseBodyStreamBuffer) { | 166     if (checkResponseBodyStreamBuffer) { | 
| 174         EXPECT_EQ(response->bufferForTest(), response->internalBufferForTest()); | 167         EXPECT_EQ(response->bodyBuffer(), response->internalBodyBuffer()); | 
| 175         EXPECT_EQ(clonedResponse->bufferForTest(), clonedResponse->internalBuffe
     rForTest()); | 168         EXPECT_EQ(clonedResponse->bodyBuffer(), clonedResponse->internalBodyBuff
     er()); | 
| 176     } else { | 169     } else { | 
| 177         EXPECT_FALSE(response->bufferForTest()); | 170         EXPECT_FALSE(response->bodyBuffer()->hasBody()); | 
| 178         EXPECT_FALSE(clonedResponse->bufferForTest()); | 171         EXPECT_FALSE(clonedResponse->bodyBuffer()->hasBody()); | 
| 179     } | 172     } | 
| 180     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 173     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 181     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 174     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 182     EXPECT_CALL(*client1, didFetchDataLoadedString(String("Hello, world"))); | 175     EXPECT_CALL(*client1, didFetchDataLoadedString(String("Hello, world"))); | 
| 183     EXPECT_CALL(*client2, didFetchDataLoadedString(String("Hello, world"))); | 176     EXPECT_CALL(*client2, didFetchDataLoadedString(String("Hello, world"))); | 
| 184 | 177 | 
| 185     loadInternalBufferAsString(response, client1); | 178     response->internalBodyBuffer()->startLoading(response->executionContext(), F
     etchDataLoader::createLoaderAsString(), client1); | 
| 186     loadInternalBufferAsString(clonedResponse, client2); | 179     clonedResponse->internalBodyBuffer()->startLoading(response->executionContex
     t(), FetchDataLoader::createLoaderAsString(), client2); | 
| 187     blink::testing::runPendingTasks(); | 180     blink::testing::runPendingTasks(); | 
| 188 } | 181 } | 
| 189 | 182 | 
| 190 BodyStreamBuffer* createHelloWorldBuffer() | 183 BodyStreamBuffer* createHelloWorldBuffer() | 
| 191 { | 184 { | 
| 192     using Command = DataConsumerHandleTestUtil::Command; | 185     using Command = DataConsumerHandleTestUtil::Command; | 
| 193     OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTe
     stUtil::ReplayingHandle::create()); | 186     OwnPtr<DataConsumerHandleTestUtil::ReplayingHandle> src(DataConsumerHandleTe
     stUtil::ReplayingHandle::create()); | 
| 194     src->add(Command(Command::Data, "Hello, ")); | 187     src->add(Command(Command::Data, "Hello, ")); | 
| 195     src->add(Command(Command::Data, "world")); | 188     src->add(Command(Command::Data, "world")); | 
| 196     src->add(Command(Command::Done)); | 189     src->add(Command(Command::Done)); | 
| 197     return BodyStreamBuffer::create(createFetchDataConsumerHandleFromWebHandle(s
     rc.release())); | 190     return new BodyStreamBuffer(createFetchDataConsumerHandleFromWebHandle(src.r
     elease())); | 
| 198 } | 191 } | 
| 199 | 192 | 
| 200 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) | 193 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneDefault) | 
| 201 { | 194 { | 
| 202     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 195     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 203     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 196     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 204     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 197     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 205     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 198     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 206     EXPECT_EQ(response->internalBufferForTest(), buffer); | 199     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 207     checkResponseStream(response, true); | 200     checkResponseStream(response, true); | 
| 208 } | 201 } | 
| 209 | 202 | 
| 210 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) | 203 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneBasic) | 
| 211 { | 204 { | 
| 212     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 205     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 213     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 206     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 214     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 207     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 215     fetchResponseData = fetchResponseData->createBasicFilteredResponse(); | 208     fetchResponseData = fetchResponseData->createBasicFilteredResponse(); | 
| 216     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 209     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 217     EXPECT_EQ(response->internalBufferForTest(), buffer); | 210     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 218     checkResponseStream(response, true); | 211     checkResponseStream(response, true); | 
| 219 } | 212 } | 
| 220 | 213 | 
| 221 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) | 214 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneCORS) | 
| 222 { | 215 { | 
| 223     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 216     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 224     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 217     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 225     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 218     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 226     fetchResponseData = fetchResponseData->createCORSFilteredResponse(); | 219     fetchResponseData = fetchResponseData->createCORSFilteredResponse(); | 
| 227     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 220     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 228     EXPECT_EQ(response->internalBufferForTest(), buffer); | 221     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 229     checkResponseStream(response, true); | 222     checkResponseStream(response, true); | 
| 230 } | 223 } | 
| 231 | 224 | 
| 232 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) | 225 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneOpaque) | 
| 233 { | 226 { | 
| 234     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 227     BodyStreamBuffer* buffer = createHelloWorldBuffer(); | 
| 235     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 228     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 236     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 229     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 237     fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); | 230     fetchResponseData = fetchResponseData->createOpaqueFilteredResponse(); | 
| 238     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 231     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 239     EXPECT_EQ(response->internalBufferForTest(), buffer); | 232     EXPECT_EQ(response->internalBodyBuffer(), buffer); | 
| 240     checkResponseStream(response, false); | 233     checkResponseStream(response, false); | 
| 241 } | 234 } | 
| 242 | 235 | 
| 243 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneError) | 236 TEST_F(ServiceWorkerResponseTest, BodyStreamBufferCloneError) | 
| 244 { | 237 { | 
| 245     BodyStreamBuffer* buffer = BodyStreamBuffer::create(createFetchDataConsumerH
     andleFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 238     BodyStreamBuffer* buffer = new BodyStreamBuffer(createFetchDataConsumerHandl
     eFromWebHandle(createUnexpectedErrorDataConsumerHandle())); | 
| 246     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 239     FetchResponseData* fetchResponseData = FetchResponseData::createWithBuffer(b
     uffer); | 
| 247     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 240     fetchResponseData->setURL(KURL(ParsedURLString, "http://www.response.com")); | 
| 248     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 241     Response* response = Response::create(executionContext(), fetchResponseData)
     ; | 
| 249     TrackExceptionState exceptionState; | 242     TrackExceptionState exceptionState; | 
| 250     Response* clonedResponse = response->clone(exceptionState); | 243     Response* clonedResponse = response->clone(exceptionState); | 
| 251     EXPECT_FALSE(exceptionState.hadException()); | 244     EXPECT_FALSE(exceptionState.hadException()); | 
| 252 | 245 | 
| 253     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 246     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client1 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 254     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 247     DataConsumerHandleTestUtil::MockFetchDataLoaderClient* client2 = new DataCon
     sumerHandleTestUtil::MockFetchDataLoaderClient(); | 
| 255     EXPECT_CALL(*client1, didFetchDataLoadFailed()); | 248     EXPECT_CALL(*client1, didFetchDataLoadFailed()); | 
| 256     EXPECT_CALL(*client2, didFetchDataLoadFailed()); | 249     EXPECT_CALL(*client2, didFetchDataLoadFailed()); | 
| 257 | 250 | 
| 258     loadInternalBufferAsString(response, client1); | 251     response->internalBodyBuffer()->startLoading(response->executionContext(), F
     etchDataLoader::createLoaderAsString(), client1); | 
| 259     loadInternalBufferAsString(clonedResponse, client2); | 252     clonedResponse->internalBodyBuffer()->startLoading(response->executionContex
     t(), FetchDataLoader::createLoaderAsString(), client2); | 
| 260     blink::testing::runPendingTasks(); | 253     blink::testing::runPendingTasks(); | 
| 261 } | 254 } | 
| 262 | 255 | 
| 263 } // namespace | 256 } // namespace | 
| 264 } // namespace blink | 257 } // namespace blink | 
| OLD | NEW | 
|---|