| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2013, Google Inc. All rights reserved. | 2 * Copyright (c) 2013, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 15 matching lines...) Expand all Loading... |
| 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 29 */ | 29 */ |
| 30 | 30 |
| 31 #include "core/fetch/ResourceFetcher.h" | 31 #include "core/fetch/ResourceFetcher.h" |
| 32 | 32 |
| 33 #include "core/fetch/FetchInitiatorInfo.h" | 33 #include "core/fetch/FetchInitiatorInfo.h" |
| 34 #include "core/fetch/FetchInitiatorTypeNames.h" | 34 #include "core/fetch/FetchInitiatorTypeNames.h" |
| 35 #include "core/fetch/FetchRequest.h" | 35 #include "core/fetch/FetchRequest.h" |
| 36 #include "core/fetch/FontResource.h" |
| 37 #include "core/fetch/ImageResource.h" |
| 36 #include "core/fetch/MemoryCache.h" | 38 #include "core/fetch/MemoryCache.h" |
| 37 #include "core/fetch/MockResourceClients.h" | 39 #include "core/fetch/MockResourceClients.h" |
| 38 #include "core/fetch/RawResource.h" | 40 #include "core/fetch/RawResource.h" |
| 39 #include "core/fetch/ResourceLoader.h" | 41 #include "core/fetch/ResourceLoader.h" |
| 40 #include "platform/exported/WrappedResourceResponse.h" | 42 #include "platform/exported/WrappedResourceResponse.h" |
| 41 #include "platform/heap/Handle.h" | 43 #include "platform/heap/Handle.h" |
| 42 #include "platform/heap/HeapAllocator.h" | 44 #include "platform/heap/HeapAllocator.h" |
| 43 #include "platform/heap/Member.h" | 45 #include "platform/heap/Member.h" |
| 44 #include "platform/network/ResourceRequest.h" | 46 #include "platform/network/ResourceRequest.h" |
| 45 #include "platform/network/ResourceTimingInfo.h" | 47 #include "platform/network/ResourceTimingInfo.h" |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 105 m_transferSize(-1) {} | 107 m_transferSize(-1) {} |
| 106 | 108 |
| 107 CachePolicy m_policy; | 109 CachePolicy m_policy; |
| 108 std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner; | 110 std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner; |
| 109 bool m_complete; | 111 bool m_complete; |
| 110 long long m_transferSize; | 112 long long m_transferSize; |
| 111 }; | 113 }; |
| 112 | 114 |
| 113 class ResourceFetcherTest : public ::testing::Test {}; | 115 class ResourceFetcherTest : public ::testing::Test {}; |
| 114 | 116 |
| 115 class TestResourceFactory : public ResourceFactory { | |
| 116 public: | |
| 117 explicit TestResourceFactory(Resource::Type type = Resource::Raw) | |
| 118 : ResourceFactory(type) {} | |
| 119 | |
| 120 Resource* create(const ResourceRequest& request, | |
| 121 const ResourceLoaderOptions& options, | |
| 122 const String& charset) const override { | |
| 123 return Resource::create(request, type(), options); | |
| 124 } | |
| 125 }; | |
| 126 | |
| 127 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { | 117 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { |
| 128 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); | 118 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); |
| 129 // Try to request a url. The request should fail, and a resource in an error | 119 // Try to request a url. The request should fail, and a resource in an error |
| 130 // state should be returned, and no resource should be present in the cache. | 120 // state should be returned, and no resource should be present in the cache. |
| 131 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); | 121 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); |
| 122 ResourceRequest resourceRequest(secureURL); |
| 123 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 132 FetchRequest fetchRequest = | 124 FetchRequest fetchRequest = |
| 133 FetchRequest(ResourceRequest(secureURL), FetchInitiatorInfo()); | 125 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 134 Resource* resource = | 126 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 135 fetcher->requestResource(fetchRequest, TestResourceFactory()); | |
| 136 ASSERT_TRUE(resource); | 127 ASSERT_TRUE(resource); |
| 137 EXPECT_TRUE(resource->errorOccurred()); | 128 EXPECT_TRUE(resource->errorOccurred()); |
| 138 EXPECT_TRUE(resource->resourceError().isAccessCheck()); | 129 EXPECT_TRUE(resource->resourceError().isAccessCheck()); |
| 139 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); | 130 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); |
| 140 | 131 |
| 141 // Start by calling startLoad() directly, rather than via requestResource(). | 132 // Start by calling startLoad() directly, rather than via requestResource(). |
| 142 // This shouldn't crash. | 133 // This shouldn't crash. |
| 143 fetcher->startLoad(Resource::create(secureURL, Resource::Raw)); | 134 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw)); |
| 144 } | 135 } |
| 145 | 136 |
| 146 TEST_F(ResourceFetcherTest, UseExistingResource) { | 137 TEST_F(ResourceFetcherTest, UseExistingResource) { |
| 147 ResourceFetcher* fetcher = | 138 ResourceFetcher* fetcher = |
| 148 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 139 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 149 | 140 |
| 150 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 141 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 151 Resource* resource = Resource::create(url, Resource::Image); | |
| 152 memoryCache()->add(resource); | |
| 153 ResourceResponse response; | 142 ResourceResponse response; |
| 154 response.setURL(url); | 143 response.setURL(url); |
| 155 response.setHTTPStatusCode(200); | 144 response.setHTTPStatusCode(200); |
| 156 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 145 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 157 resource->responseReceived(response, nullptr); | 146 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 158 resource->finish(); | 147 url, testImageFilename, WebString::fromUTF8(""), |
| 148 WrappedResourceResponse(response)); |
| 159 | 149 |
| 160 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 150 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 161 Resource* newResource = fetcher->requestResource( | 151 Resource* resource = ImageResource::fetch(fetchRequest, fetcher); |
| 162 fetchRequest, TestResourceFactory(Resource::Image)); | 152 ASSERT_TRUE(resource); |
| 153 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 154 EXPECT_TRUE(resource->isLoaded()); |
| 155 EXPECT_TRUE(memoryCache()->contains(resource)); |
| 156 |
| 157 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 163 EXPECT_EQ(resource, newResource); | 158 EXPECT_EQ(resource, newResource); |
| 164 memoryCache()->remove(resource); | 159 memoryCache()->remove(resource); |
| 165 } | 160 } |
| 166 | 161 |
| 167 TEST_F(ResourceFetcherTest, Vary) { | 162 TEST_F(ResourceFetcherTest, Vary) { |
| 168 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 163 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 169 Resource* resource = Resource::create(url, Resource::Raw); | 164 Resource* resource = RawResource::create(url, Resource::Raw); |
| 170 memoryCache()->add(resource); | 165 memoryCache()->add(resource); |
| 171 ResourceResponse response; | 166 ResourceResponse response; |
| 172 response.setURL(url); | 167 response.setURL(url); |
| 173 response.setHTTPStatusCode(200); | 168 response.setHTTPStatusCode(200); |
| 174 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 169 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 175 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 170 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 176 resource->responseReceived(response, nullptr); | 171 resource->responseReceived(response, nullptr); |
| 177 resource->finish(); | 172 resource->finish(); |
| 178 ASSERT_TRUE(resource->hasVaryHeader()); | 173 ASSERT_TRUE(resource->hasVaryHeader()); |
| 179 | 174 |
| 180 ResourceFetcher* fetcher = | 175 ResourceFetcher* fetcher = |
| 181 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 176 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 182 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 177 ResourceRequest resourceRequest(url); |
| 178 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 179 FetchRequest fetchRequest = |
| 180 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 183 Platform::current()->getURLLoaderMockFactory()->registerURL( | 181 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 184 url, WebURLResponse(), ""); | 182 url, WebURLResponse(), ""); |
| 185 Resource* newResource = | 183 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 186 fetcher->requestResource(fetchRequest, TestResourceFactory()); | |
| 187 EXPECT_NE(resource, newResource); | 184 EXPECT_NE(resource, newResource); |
| 188 newResource->loader()->cancel(); | 185 newResource->loader()->cancel(); |
| 189 memoryCache()->remove(newResource); | 186 memoryCache()->remove(newResource); |
| 190 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 187 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 191 | 188 |
| 192 memoryCache()->remove(resource); | 189 memoryCache()->remove(resource); |
| 193 } | 190 } |
| 194 | 191 |
| 195 TEST_F(ResourceFetcherTest, VaryOnBack) { | 192 TEST_F(ResourceFetcherTest, VaryOnBack) { |
| 196 ResourceFetcherTestMockFetchContext* context = | 193 ResourceFetcherTestMockFetchContext* context = |
| 197 ResourceFetcherTestMockFetchContext::create(); | 194 ResourceFetcherTestMockFetchContext::create(); |
| 198 context->setCachePolicy(CachePolicyHistoryBuffer); | 195 context->setCachePolicy(CachePolicyHistoryBuffer); |
| 199 ResourceFetcher* fetcher = ResourceFetcher::create(context); | 196 ResourceFetcher* fetcher = ResourceFetcher::create(context); |
| 200 | 197 |
| 201 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 198 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 202 Resource* resource = Resource::create(url, Resource::Raw); | 199 Resource* resource = RawResource::create(url, Resource::Raw); |
| 203 memoryCache()->add(resource); | 200 memoryCache()->add(resource); |
| 204 ResourceResponse response; | 201 ResourceResponse response; |
| 205 response.setURL(url); | 202 response.setURL(url); |
| 206 response.setHTTPStatusCode(200); | 203 response.setHTTPStatusCode(200); |
| 207 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 204 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 208 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 205 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 209 resource->responseReceived(response, nullptr); | 206 resource->responseReceived(response, nullptr); |
| 210 resource->finish(); | 207 resource->finish(); |
| 211 ASSERT_TRUE(resource->hasVaryHeader()); | 208 ASSERT_TRUE(resource->hasVaryHeader()); |
| 212 | 209 |
| 213 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 210 ResourceRequest resourceRequest(url); |
| 214 Resource* newResource = | 211 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 215 fetcher->requestResource(fetchRequest, TestResourceFactory()); | 212 FetchRequest fetchRequest = |
| 213 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 214 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 216 EXPECT_EQ(resource, newResource); | 215 EXPECT_EQ(resource, newResource); |
| 217 | 216 |
| 218 memoryCache()->remove(newResource); | 217 memoryCache()->remove(newResource); |
| 219 } | 218 } |
| 220 | 219 |
| 221 TEST_F(ResourceFetcherTest, VaryImage) { | 220 TEST_F(ResourceFetcherTest, VaryImage) { |
| 222 ResourceFetcher* fetcher = | 221 ResourceFetcher* fetcher = |
| 223 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 222 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 224 | 223 |
| 225 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 224 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 226 ResourceResponse response; | 225 ResourceResponse response; |
| 227 response.setURL(url); | 226 response.setURL(url); |
| 228 response.setHTTPStatusCode(200); | 227 response.setHTTPStatusCode(200); |
| 229 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 228 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 230 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 229 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 231 URLTestHelpers::registerMockedURLLoadWithCustomResponse( | 230 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 232 url, testImageFilename, WebString::fromUTF8(""), | 231 url, testImageFilename, WebString::fromUTF8(""), |
| 233 WrappedResourceResponse(response)); | 232 WrappedResourceResponse(response)); |
| 234 | 233 |
| 235 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 234 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 236 Resource* resource = fetcher->requestResource( | 235 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 237 fetchRequestOriginal, TestResourceFactory(Resource::Image)); | |
| 238 ASSERT_TRUE(resource); | 236 ASSERT_TRUE(resource); |
| 239 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 237 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 240 ASSERT_TRUE(resource->hasVaryHeader()); | 238 ASSERT_TRUE(resource->hasVaryHeader()); |
| 241 | 239 |
| 242 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 240 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 243 Resource* newResource = fetcher->requestResource( | 241 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 244 fetchRequest, TestResourceFactory(Resource::Image)); | |
| 245 EXPECT_EQ(resource, newResource); | 242 EXPECT_EQ(resource, newResource); |
| 246 | 243 |
| 247 memoryCache()->remove(newResource); | 244 memoryCache()->remove(newResource); |
| 248 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 245 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 249 } | 246 } |
| 250 | 247 |
| 251 class RequestSameResourceOnComplete | 248 class RequestSameResourceOnComplete |
| 252 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, | 249 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, |
| 253 public RawResourceClient { | 250 public RawResourceClient { |
| 254 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); | 251 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); |
| 255 | 252 |
| 256 public: | 253 public: |
| 257 explicit RequestSameResourceOnComplete(Resource* resource) | 254 explicit RequestSameResourceOnComplete(Resource* resource) |
| 258 : m_resource(resource), m_notifyFinishedCalled(false) {} | 255 : m_resource(resource), m_notifyFinishedCalled(false) {} |
| 259 | 256 |
| 260 void notifyFinished(Resource* resource) override { | 257 void notifyFinished(Resource* resource) override { |
| 261 EXPECT_EQ(m_resource, resource); | 258 EXPECT_EQ(m_resource, resource); |
| 262 ResourceFetcherTestMockFetchContext* context = | 259 ResourceFetcherTestMockFetchContext* context = |
| 263 ResourceFetcherTestMockFetchContext::create(); | 260 ResourceFetcherTestMockFetchContext::create(); |
| 264 context->setCachePolicy(CachePolicyRevalidate); | 261 context->setCachePolicy(CachePolicyRevalidate); |
| 265 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); | 262 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); |
| 266 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); | 263 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); |
| 267 Resource* resource2 = fetcher2->requestResource( | 264 Resource* resource2 = ImageResource::fetch(fetchRequest2, fetcher2); |
| 268 fetchRequest2, TestResourceFactory(Resource::Image)); | |
| 269 EXPECT_EQ(m_resource, resource2); | 265 EXPECT_EQ(m_resource, resource2); |
| 270 m_notifyFinishedCalled = true; | 266 m_notifyFinishedCalled = true; |
| 271 } | 267 } |
| 272 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } | 268 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } |
| 273 | 269 |
| 274 DEFINE_INLINE_TRACE() { | 270 DEFINE_INLINE_TRACE() { |
| 275 visitor->trace(m_resource); | 271 visitor->trace(m_resource); |
| 276 RawResourceClient::trace(visitor); | 272 RawResourceClient::trace(visitor); |
| 277 } | 273 } |
| 278 | 274 |
| 279 String debugName() const override { return "RequestSameResourceOnComplete"; } | 275 String debugName() const override { return "RequestSameResourceOnComplete"; } |
| 280 | 276 |
| 281 private: | 277 private: |
| 282 Member<Resource> m_resource; | 278 Member<Resource> m_resource; |
| 283 bool m_notifyFinishedCalled; | 279 bool m_notifyFinishedCalled; |
| 284 }; | 280 }; |
| 285 | 281 |
| 286 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { | 282 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { |
| 287 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 283 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 288 ResourceResponse response; | 284 ResourceResponse response; |
| 289 response.setURL(url); | 285 response.setURL(url); |
| 290 response.setHTTPStatusCode(200); | 286 response.setHTTPStatusCode(200); |
| 291 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 287 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 292 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); | 288 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); |
| 293 Platform::current()->getURLLoaderMockFactory()->registerURL( | 289 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 294 url, WrappedResourceResponse(response), ""); | 290 url, testImageFilename, WebString::fromUTF8(""), |
| 295 | 291 WrappedResourceResponse(response)); |
| 296 ResourceFetcher* fetcher1 = | 292 ResourceFetcher* fetcher1 = |
| 297 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 293 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 298 ResourceRequest request1(url); | 294 ResourceRequest request1(url); |
| 299 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); | 295 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); |
| 300 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); | 296 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); |
| 301 Resource* resource1 = fetcher1->requestResource( | 297 Resource* resource1 = ImageResource::fetch(fetchRequest1, fetcher1); |
| 302 fetchRequest1, TestResourceFactory(Resource::Image)); | |
| 303 Persistent<RequestSameResourceOnComplete> client = | 298 Persistent<RequestSameResourceOnComplete> client = |
| 304 new RequestSameResourceOnComplete(resource1); | 299 new RequestSameResourceOnComplete(resource1); |
| 305 resource1->addClient(client); | 300 resource1->addClient(client); |
| 306 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 301 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 307 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 302 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 308 EXPECT_TRUE(client->notifyFinishedCalled()); | 303 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 309 resource1->removeClient(client); | 304 resource1->removeClient(client); |
| 310 memoryCache()->remove(resource1); | 305 memoryCache()->remove(resource1); |
| 311 } | 306 } |
| 312 | 307 |
| 313 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) { | 308 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) { |
| 314 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff"); | 309 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff"); |
| 315 ResourceResponse response; | 310 ResourceResponse response; |
| 316 response.setURL(url); | 311 response.setURL(url); |
| 317 response.setHTTPStatusCode(200); | 312 response.setHTTPStatusCode(200); |
| 318 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); | 313 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); |
| 319 Platform::current()->getURLLoaderMockFactory()->registerURL( | 314 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 320 url, WrappedResourceResponse(response), ""); | 315 url, WrappedResourceResponse(response), ""); |
| 321 | 316 |
| 322 ResourceFetcherTestMockFetchContext* context = | 317 ResourceFetcherTestMockFetchContext* context = |
| 323 ResourceFetcherTestMockFetchContext::create(); | 318 ResourceFetcherTestMockFetchContext::create(); |
| 324 ResourceFetcher* fetcher = ResourceFetcher::create(context); | 319 ResourceFetcher* fetcher = ResourceFetcher::create(context); |
| 325 | 320 |
| 326 // Fetch to cache a resource. | 321 // Fetch to cache a resource. |
| 327 ResourceRequest request1(url); | 322 ResourceRequest request1(url); |
| 328 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); | 323 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); |
| 329 Resource* resource1 = fetcher->requestResource( | 324 Resource* resource1 = FontResource::fetch(fetchRequest1, fetcher); |
| 330 fetchRequest1, TestResourceFactory(Resource::Font)); | |
| 331 ASSERT_TRUE(resource1); | 325 ASSERT_TRUE(resource1); |
| 332 fetcher->startLoad(resource1); | 326 fetcher->startLoad(resource1); |
| 333 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 327 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 334 EXPECT_TRUE(resource1->isLoaded()); | 328 EXPECT_TRUE(resource1->isLoaded()); |
| 335 EXPECT_FALSE(resource1->errorOccurred()); | 329 EXPECT_FALSE(resource1->errorOccurred()); |
| 336 | 330 |
| 337 // Set the context as it is on reloads. | 331 // Set the context as it is on reloads. |
| 338 context->setLoadComplete(true); | 332 context->setLoadComplete(true); |
| 339 context->setCachePolicy(CachePolicyRevalidate); | 333 context->setCachePolicy(CachePolicyRevalidate); |
| 340 | 334 |
| 341 // Revalidate the resource. | 335 // Revalidate the resource. |
| 342 ResourceRequest request2(url); | 336 ResourceRequest request2(url); |
| 343 FetchRequest fetchRequest2 = FetchRequest(request2, FetchInitiatorInfo()); | 337 FetchRequest fetchRequest2 = FetchRequest(request2, FetchInitiatorInfo()); |
| 344 Resource* resource2 = fetcher->requestResource( | 338 Resource* resource2 = FontResource::fetch(fetchRequest2, fetcher); |
| 345 fetchRequest2, TestResourceFactory(Resource::Font)); | |
| 346 ASSERT_TRUE(resource2); | 339 ASSERT_TRUE(resource2); |
| 347 EXPECT_EQ(resource1, resource2); | 340 EXPECT_EQ(resource1, resource2); |
| 348 EXPECT_TRUE(resource2->isCacheValidator()); | 341 EXPECT_TRUE(resource2->isCacheValidator()); |
| 349 EXPECT_TRUE(resource2->stillNeedsLoad()); | 342 EXPECT_TRUE(resource2->stillNeedsLoad()); |
| 350 | 343 |
| 351 // Fetch the same resource again before actual load operation starts. | 344 // Fetch the same resource again before actual load operation starts. |
| 352 ResourceRequest request3(url); | 345 ResourceRequest request3(url); |
| 353 FetchRequest fetchRequest3 = FetchRequest(request3, FetchInitiatorInfo()); | 346 FetchRequest fetchRequest3 = FetchRequest(request3, FetchInitiatorInfo()); |
| 354 Resource* resource3 = fetcher->requestResource( | 347 Resource* resource3 = FontResource::fetch(fetchRequest3, fetcher); |
| 355 fetchRequest3, TestResourceFactory(Resource::Font)); | |
| 356 ASSERT_TRUE(resource3); | 348 ASSERT_TRUE(resource3); |
| 357 EXPECT_EQ(resource2, resource3); | 349 EXPECT_EQ(resource2, resource3); |
| 358 EXPECT_TRUE(resource3->isCacheValidator()); | 350 EXPECT_TRUE(resource3->isCacheValidator()); |
| 359 EXPECT_TRUE(resource3->stillNeedsLoad()); | 351 EXPECT_TRUE(resource3->stillNeedsLoad()); |
| 360 | 352 |
| 361 // startLoad() can be called from any initiator. Here, call it from the | 353 // startLoad() can be called from any initiator. Here, call it from the |
| 362 // latter. | 354 // latter. |
| 363 fetcher->startLoad(resource3); | 355 fetcher->startLoad(resource3); |
| 364 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 356 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 365 EXPECT_TRUE(resource3->isLoaded()); | 357 EXPECT_TRUE(resource3->isLoaded()); |
| 366 EXPECT_FALSE(resource3->errorOccurred()); | 358 EXPECT_FALSE(resource3->errorOccurred()); |
| 367 EXPECT_TRUE(resource2->isLoaded()); | 359 EXPECT_TRUE(resource2->isLoaded()); |
| 368 EXPECT_FALSE(resource2->errorOccurred()); | 360 EXPECT_FALSE(resource2->errorOccurred()); |
| 369 | 361 |
| 370 memoryCache()->remove(resource1); | 362 memoryCache()->remove(resource1); |
| 371 } | 363 } |
| 372 | 364 |
| 373 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { | 365 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { |
| 374 ResourceFetcher* fetcher = | 366 ResourceFetcher* fetcher = |
| 375 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 367 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 376 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); | 368 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); |
| 369 request.setRequestContext(WebURLRequest::RequestContextVideo); |
| 377 ResourceLoaderOptions options; | 370 ResourceLoaderOptions options; |
| 378 options.dataBufferingPolicy = DoNotBufferData; | 371 options.dataBufferingPolicy = DoNotBufferData; |
| 379 FetchRequest fetchRequest = | 372 FetchRequest fetchRequest = |
| 380 FetchRequest(request, FetchInitiatorTypeNames::internal, options); | 373 FetchRequest(request, FetchInitiatorTypeNames::internal, options); |
| 381 Resource* resource1 = fetcher->requestResource( | 374 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher); |
| 382 fetchRequest, TestResourceFactory(Resource::Media)); | 375 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher); |
| 383 Resource* resource2 = fetcher->requestResource( | |
| 384 fetchRequest, TestResourceFactory(Resource::Media)); | |
| 385 EXPECT_NE(resource1, resource2); | 376 EXPECT_NE(resource1, resource2); |
| 386 memoryCache()->remove(resource2); | 377 memoryCache()->remove(resource2); |
| 387 } | 378 } |
| 388 | 379 |
| 389 class ServeRequestsOnCompleteClient final | 380 class ServeRequestsOnCompleteClient final |
| 390 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>, | 381 : public GarbageCollectedFinalized<ServeRequestsOnCompleteClient>, |
| 391 public RawResourceClient { | 382 public RawResourceClient { |
| 392 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient); | 383 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient); |
| 393 | 384 |
| 394 public: | 385 public: |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 432 // This emulates a modal dialog triggering a nested run loop inside | 423 // This emulates a modal dialog triggering a nested run loop inside |
| 433 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its | 424 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its |
| 434 // WebURLLoader before notifying its clients, a nested run loop may send a | 425 // WebURLLoader before notifying its clients, a nested run loop may send a |
| 435 // network response, leading to an invalid state transition in ResourceLoader. | 426 // network response, leading to an invalid state transition in ResourceLoader. |
| 436 TEST_F(ResourceFetcherTest, ResponseOnCancel) { | 427 TEST_F(ResourceFetcherTest, ResponseOnCancel) { |
| 437 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 428 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 438 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 429 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 439 | 430 |
| 440 ResourceFetcher* fetcher = | 431 ResourceFetcher* fetcher = |
| 441 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 432 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 442 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 433 ResourceRequest resourceRequest(url); |
| 443 Resource* resource = fetcher->requestResource( | 434 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 444 fetchRequest, TestResourceFactory(Resource::Raw)); | 435 FetchRequest fetchRequest = |
| 436 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 437 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 445 Persistent<ServeRequestsOnCompleteClient> client = | 438 Persistent<ServeRequestsOnCompleteClient> client = |
| 446 new ServeRequestsOnCompleteClient(); | 439 new ServeRequestsOnCompleteClient(); |
| 447 resource->addClient(client); | 440 resource->addClient(client); |
| 448 resource->loader()->cancel(); | 441 resource->loader()->cancel(); |
| 449 resource->removeClient(client); | 442 resource->removeClient(client); |
| 450 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 443 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 451 } | 444 } |
| 452 | 445 |
| 453 class ScopedMockRedirectRequester { | 446 class ScopedMockRedirectRequester { |
| 454 STACK_ALLOCATED(); | 447 STACK_ALLOCATED(); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 472 | 465 |
| 473 void registerFinalResource(const WebString& url) { | 466 void registerFinalResource(const WebString& url) { |
| 474 KURL finalURL(ParsedURLString, url); | 467 KURL finalURL(ParsedURLString, url); |
| 475 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename); | 468 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename); |
| 476 } | 469 } |
| 477 | 470 |
| 478 void request(const WebString& url) { | 471 void request(const WebString& url) { |
| 479 DCHECK(!m_context); | 472 DCHECK(!m_context); |
| 480 m_context = ResourceFetcherTestMockFetchContext::create(); | 473 m_context = ResourceFetcherTestMockFetchContext::create(); |
| 481 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); | 474 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); |
| 475 ResourceRequest resourceRequest(url); |
| 476 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 482 FetchRequest fetchRequest = | 477 FetchRequest fetchRequest = |
| 483 FetchRequest(ResourceRequest(url), FetchInitiatorInfo()); | 478 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 484 fetcher->requestResource(fetchRequest, TestResourceFactory()); | 479 RawResource::fetch(fetchRequest, fetcher); |
| 485 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 480 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 486 } | 481 } |
| 487 | 482 |
| 488 void cleanUp() { | 483 void cleanUp() { |
| 489 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); | 484 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 490 memoryCache()->evictResources(); | 485 memoryCache()->evictResources(); |
| 491 } | 486 } |
| 492 | 487 |
| 493 ResourceFetcherTestMockFetchContext* context() const { return m_context; } | 488 ResourceFetcherTestMockFetchContext* context() const { return m_context; } |
| 494 | 489 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 533 | 528 |
| 534 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); | 529 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); |
| 535 } | 530 } |
| 536 | 531 |
| 537 TEST_F(ResourceFetcherTest, SynchronousRequest) { | 532 TEST_F(ResourceFetcherTest, SynchronousRequest) { |
| 538 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 533 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 539 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 534 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 540 | 535 |
| 541 ResourceFetcher* fetcher = | 536 ResourceFetcher* fetcher = |
| 542 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 537 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 543 FetchRequest request(url, FetchInitiatorInfo()); | 538 ResourceRequest resourceRequest(url); |
| 544 request.makeSynchronous(); | 539 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 545 Resource* resource = fetcher->requestResource(request, TestResourceFactory()); | 540 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 541 fetchRequest.makeSynchronous(); |
| 542 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 546 EXPECT_TRUE(resource->isLoaded()); | 543 EXPECT_TRUE(resource->isLoaded()); |
| 547 EXPECT_EQ(ResourceLoadPriorityHighest, | 544 EXPECT_EQ(ResourceLoadPriorityHighest, |
| 548 resource->resourceRequest().priority()); | 545 resource->resourceRequest().priority()); |
| 549 | 546 |
| 550 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 547 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 551 memoryCache()->remove(resource); | 548 memoryCache()->remove(resource); |
| 552 } | 549 } |
| 553 | 550 |
| 554 TEST_F(ResourceFetcherTest, PreloadImageTwice) { | 551 TEST_F(ResourceFetcherTest, PreloadImageTwice) { |
| 555 ResourceFetcher* fetcher = | 552 ResourceFetcher* fetcher = |
| 556 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 553 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 557 | 554 |
| 558 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 555 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 559 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 556 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 560 | 557 |
| 561 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 558 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 562 Resource* resource = fetcher->requestResource( | 559 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 563 fetchRequestOriginal, TestResourceFactory(Resource::Image)); | |
| 564 ASSERT_TRUE(resource); | 560 ASSERT_TRUE(resource); |
| 565 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 561 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 566 fetcher->preloadStarted(resource); | 562 fetcher->preloadStarted(resource); |
| 567 | 563 |
| 568 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 564 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 569 Resource* newResource = fetcher->requestResource( | 565 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 570 fetchRequest, TestResourceFactory(Resource::Image)); | |
| 571 EXPECT_EQ(resource, newResource); | 566 EXPECT_EQ(resource, newResource); |
| 572 fetcher->preloadStarted(resource); | 567 fetcher->preloadStarted(resource); |
| 573 | 568 |
| 574 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); | 569 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); |
| 575 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 570 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 576 EXPECT_FALSE(memoryCache()->contains(resource)); | 571 EXPECT_FALSE(memoryCache()->contains(resource)); |
| 577 EXPECT_FALSE(resource->isPreloaded()); | 572 EXPECT_FALSE(resource->isPreloaded()); |
| 578 } | 573 } |
| 579 | 574 |
| 580 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) { | 575 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) { |
| 581 ResourceFetcher* fetcher = | 576 ResourceFetcher* fetcher = |
| 582 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 577 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 583 | 578 |
| 584 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 579 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 585 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 580 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 586 | 581 |
| 587 // Link preload preload scanner | 582 // Link preload preload scanner |
| 588 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 583 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 589 fetchRequestOriginal.setLinkPreload(true); | 584 fetchRequestOriginal.setLinkPreload(true); |
| 590 Resource* resource = fetcher->requestResource( | 585 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 591 fetchRequestOriginal, TestResourceFactory(Resource::Image)); | |
| 592 ASSERT_TRUE(resource); | 586 ASSERT_TRUE(resource); |
| 593 EXPECT_TRUE(resource->isLinkPreload()); | 587 EXPECT_TRUE(resource->isLinkPreload()); |
| 594 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 588 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 595 fetcher->preloadStarted(resource); | 589 fetcher->preloadStarted(resource); |
| 596 | 590 |
| 597 // Image preload scanner | 591 // Image preload scanner |
| 598 FetchRequest fetchRequestPreloadScanner = | 592 FetchRequest fetchRequestPreloadScanner = |
| 599 FetchRequest(url, FetchInitiatorInfo()); | 593 FetchRequest(url, FetchInitiatorInfo()); |
| 600 Resource* imgPreloadScannerResource = fetcher->requestResource( | 594 Resource* imgPreloadScannerResource = |
| 601 fetchRequestPreloadScanner, TestResourceFactory(Resource::Image)); | 595 ImageResource::fetch(fetchRequestPreloadScanner, fetcher); |
| 602 EXPECT_EQ(resource, imgPreloadScannerResource); | 596 EXPECT_EQ(resource, imgPreloadScannerResource); |
| 603 EXPECT_FALSE(resource->isLinkPreload()); | 597 EXPECT_FALSE(resource->isLinkPreload()); |
| 604 fetcher->preloadStarted(resource); | 598 fetcher->preloadStarted(resource); |
| 605 | 599 |
| 606 // Image created by parser | 600 // Image created by parser |
| 607 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 601 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 608 Resource* newResource = fetcher->requestResource( | 602 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 609 fetchRequest, TestResourceFactory(Resource::Image)); | |
| 610 Persistent<MockResourceClient> client = new MockResourceClient(newResource); | 603 Persistent<MockResourceClient> client = new MockResourceClient(newResource); |
| 611 EXPECT_EQ(resource, newResource); | 604 EXPECT_EQ(resource, newResource); |
| 612 EXPECT_FALSE(resource->isLinkPreload()); | 605 EXPECT_FALSE(resource->isLinkPreload()); |
| 613 | 606 |
| 614 // DCL reached | 607 // DCL reached |
| 615 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); | 608 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
| 616 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 609 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 617 EXPECT_TRUE(memoryCache()->contains(resource)); | 610 EXPECT_TRUE(memoryCache()->contains(resource)); |
| 618 EXPECT_FALSE(resource->isPreloaded()); | 611 EXPECT_FALSE(resource->isPreloaded()); |
| 619 } | 612 } |
| 620 | 613 |
| 621 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) { | 614 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) { |
| 622 ResourceFetcher* fetcher = | 615 ResourceFetcher* fetcher = |
| 623 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 616 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 624 ResourceFetcher* fetcher2 = | 617 ResourceFetcher* fetcher2 = |
| 625 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 618 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 626 | 619 |
| 627 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 620 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 628 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 621 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 629 | 622 |
| 630 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 623 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 631 fetchRequestOriginal.setLinkPreload(true); | 624 fetchRequestOriginal.setLinkPreload(true); |
| 632 Resource* resource = fetcher->requestResource( | 625 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 633 fetchRequestOriginal, TestResourceFactory(Resource::Image)); | |
| 634 ASSERT_TRUE(resource); | 626 ASSERT_TRUE(resource); |
| 635 EXPECT_TRUE(resource->isLinkPreload()); | 627 EXPECT_TRUE(resource->isLinkPreload()); |
| 636 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 628 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 637 fetcher->preloadStarted(resource); | 629 fetcher->preloadStarted(resource); |
| 638 | 630 |
| 639 FetchRequest fetchRequestSecond = FetchRequest(url, FetchInitiatorInfo()); | 631 FetchRequest fetchRequestSecond = FetchRequest(url, FetchInitiatorInfo()); |
| 640 fetchRequestSecond.setLinkPreload(true); | 632 fetchRequestSecond.setLinkPreload(true); |
| 641 Resource* secondResource = fetcher2->requestResource( | 633 Resource* secondResource = ImageResource::fetch(fetchRequestSecond, fetcher2); |
| 642 fetchRequestSecond, TestResourceFactory(Resource::Image)); | |
| 643 ASSERT_TRUE(secondResource); | 634 ASSERT_TRUE(secondResource); |
| 644 EXPECT_TRUE(secondResource->isLinkPreload()); | 635 EXPECT_TRUE(secondResource->isLinkPreload()); |
| 645 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 636 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 646 fetcher2->preloadStarted(secondResource); | 637 fetcher2->preloadStarted(secondResource); |
| 647 | 638 |
| 648 // Link rel preload scanner | 639 // Link rel preload scanner |
| 649 FetchRequest fetchRequestLinkPreloadScanner = | 640 FetchRequest fetchRequestLinkPreloadScanner = |
| 650 FetchRequest(url, FetchInitiatorInfo()); | 641 FetchRequest(url, FetchInitiatorInfo()); |
| 651 fetchRequestLinkPreloadScanner.setLinkPreload(true); | 642 fetchRequestLinkPreloadScanner.setLinkPreload(true); |
| 652 Resource* linkPreloadScannerResource = fetcher->requestResource( | 643 Resource* linkPreloadScannerResource = |
| 653 fetchRequestLinkPreloadScanner, TestResourceFactory(Resource::Image)); | 644 ImageResource::fetch(fetchRequestLinkPreloadScanner, fetcher); |
| 654 EXPECT_EQ(resource, linkPreloadScannerResource); | 645 EXPECT_EQ(resource, linkPreloadScannerResource); |
| 655 EXPECT_TRUE(resource->isLinkPreload()); | 646 EXPECT_TRUE(resource->isLinkPreload()); |
| 656 fetcher->preloadStarted(resource); | 647 fetcher->preloadStarted(resource); |
| 657 | 648 |
| 658 // Image preload scanner | 649 // Image preload scanner |
| 659 FetchRequest fetchRequestPreloadScanner = | 650 FetchRequest fetchRequestPreloadScanner = |
| 660 FetchRequest(url, FetchInitiatorInfo()); | 651 FetchRequest(url, FetchInitiatorInfo()); |
| 661 Resource* imgPreloadScannerResource = fetcher->requestResource( | 652 Resource* imgPreloadScannerResource = |
| 662 fetchRequestPreloadScanner, TestResourceFactory(Resource::Image)); | 653 ImageResource::fetch(fetchRequestPreloadScanner, fetcher); |
| 663 EXPECT_EQ(resource, imgPreloadScannerResource); | 654 EXPECT_EQ(resource, imgPreloadScannerResource); |
| 664 EXPECT_FALSE(resource->isLinkPreload()); | 655 EXPECT_FALSE(resource->isLinkPreload()); |
| 665 fetcher->preloadStarted(resource); | 656 fetcher->preloadStarted(resource); |
| 666 | 657 |
| 667 // Image preload scanner on the second fetcher | 658 // Image preload scanner on the second fetcher |
| 668 FetchRequest fetchRequestPreloadScanner2 = | 659 FetchRequest fetchRequestPreloadScanner2 = |
| 669 FetchRequest(url, FetchInitiatorInfo()); | 660 FetchRequest(url, FetchInitiatorInfo()); |
| 670 Resource* imgPreloadScannerResource2 = fetcher2->requestResource( | 661 Resource* imgPreloadScannerResource2 = |
| 671 fetchRequestPreloadScanner2, TestResourceFactory(Resource::Image)); | 662 ImageResource::fetch(fetchRequestPreloadScanner2, fetcher2); |
| 672 EXPECT_EQ(resource, imgPreloadScannerResource2); | 663 EXPECT_EQ(resource, imgPreloadScannerResource2); |
| 673 EXPECT_FALSE(resource->isLinkPreload()); | 664 EXPECT_FALSE(resource->isLinkPreload()); |
| 674 fetcher2->preloadStarted(resource); | 665 fetcher2->preloadStarted(resource); |
| 675 | 666 |
| 676 // Image created by parser | 667 // Image created by parser |
| 677 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 668 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 678 Resource* newResource = fetcher->requestResource( | 669 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 679 fetchRequest, TestResourceFactory(Resource::Image)); | |
| 680 Persistent<MockResourceClient> client = new MockResourceClient(newResource); | 670 Persistent<MockResourceClient> client = new MockResourceClient(newResource); |
| 681 EXPECT_EQ(resource, newResource); | 671 EXPECT_EQ(resource, newResource); |
| 682 EXPECT_FALSE(resource->isLinkPreload()); | 672 EXPECT_FALSE(resource->isLinkPreload()); |
| 683 | 673 |
| 684 // Image created by parser on the second fetcher | 674 // Image created by parser on the second fetcher |
| 685 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo()); | 675 FetchRequest fetchRequest2 = FetchRequest(url, FetchInitiatorInfo()); |
| 686 Resource* newResource2 = fetcher2->requestResource( | 676 Resource* newResource2 = ImageResource::fetch(fetchRequest, fetcher2); |
| 687 fetchRequest, TestResourceFactory(Resource::Image)); | |
| 688 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2); | 677 Persistent<MockResourceClient> client2 = new MockResourceClient(newResource2); |
| 689 EXPECT_EQ(resource, newResource2); | 678 EXPECT_EQ(resource, newResource2); |
| 690 EXPECT_FALSE(resource->isLinkPreload()); | 679 EXPECT_FALSE(resource->isLinkPreload()); |
| 691 // DCL reached on first fetcher | 680 // DCL reached on first fetcher |
| 692 EXPECT_TRUE(resource->isPreloaded()); | 681 EXPECT_TRUE(resource->isPreloaded()); |
| 693 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); | 682 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
| 694 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 683 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 695 EXPECT_TRUE(memoryCache()->contains(resource)); | 684 EXPECT_TRUE(memoryCache()->contains(resource)); |
| 696 EXPECT_TRUE(resource->isPreloaded()); | 685 EXPECT_TRUE(resource->isPreloaded()); |
| 697 | 686 |
| 698 // DCL reached on second fetcher | 687 // DCL reached on second fetcher |
| 699 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); | 688 fetcher2->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
| 700 EXPECT_TRUE(memoryCache()->contains(resource)); | 689 EXPECT_TRUE(memoryCache()->contains(resource)); |
| 701 EXPECT_FALSE(resource->isPreloaded()); | 690 EXPECT_FALSE(resource->isPreloaded()); |
| 702 } | 691 } |
| 703 | 692 |
| 704 TEST_F(ResourceFetcherTest, Revalidate304) { | 693 TEST_F(ResourceFetcherTest, Revalidate304) { |
| 705 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 694 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 706 Resource* resource = Resource::create(url, Resource::Raw); | 695 Resource* resource = RawResource::create(url, Resource::Raw); |
| 707 memoryCache()->add(resource); | 696 memoryCache()->add(resource); |
| 708 ResourceResponse response; | 697 ResourceResponse response; |
| 709 response.setURL(url); | 698 response.setURL(url); |
| 710 response.setHTTPStatusCode(304); | 699 response.setHTTPStatusCode(304); |
| 711 response.setHTTPHeaderField("etag", "1234567890"); | 700 response.setHTTPHeaderField("etag", "1234567890"); |
| 712 resource->responseReceived(response, nullptr); | 701 resource->responseReceived(response, nullptr); |
| 713 resource->finish(); | 702 resource->finish(); |
| 714 | 703 |
| 715 ResourceFetcher* fetcher = | 704 ResourceFetcher* fetcher = |
| 716 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 705 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); |
| 717 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 706 ResourceRequest resourceRequest(url); |
| 707 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 708 FetchRequest fetchRequest = |
| 709 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 718 Platform::current()->getURLLoaderMockFactory()->registerURL( | 710 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 719 url, WebURLResponse(), ""); | 711 url, WebURLResponse(), ""); |
| 720 Resource* newResource = fetcher->requestResource( | 712 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 721 fetchRequest, TestResourceFactory(Resource::Raw)); | |
| 722 fetcher->stopFetching(); | 713 fetcher->stopFetching(); |
| 723 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 714 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 724 | 715 |
| 725 EXPECT_NE(resource, newResource); | 716 EXPECT_NE(resource, newResource); |
| 726 } | 717 } |
| 727 | 718 |
| 728 } // namespace blink | 719 } // namespace blink |
| OLD | NEW |