| 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 18 matching lines...) Expand all Loading... |
| 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" | 36 #include "core/fetch/FontResource.h" |
| 37 #include "core/fetch/ImageResource.h" | 37 #include "core/fetch/ImageResource.h" |
| 38 #include "core/fetch/MemoryCache.h" | 38 #include "core/fetch/MemoryCache.h" |
| 39 #include "core/fetch/MockFetchContext.h" |
| 39 #include "core/fetch/MockResourceClients.h" | 40 #include "core/fetch/MockResourceClients.h" |
| 40 #include "core/fetch/RawResource.h" | 41 #include "core/fetch/RawResource.h" |
| 41 #include "core/fetch/ResourceLoader.h" | 42 #include "core/fetch/ResourceLoader.h" |
| 42 #include "platform/WebTaskRunner.h" | 43 #include "platform/WebTaskRunner.h" |
| 43 #include "platform/exported/WrappedResourceResponse.h" | 44 #include "platform/exported/WrappedResourceResponse.h" |
| 44 #include "platform/heap/Handle.h" | 45 #include "platform/heap/Handle.h" |
| 45 #include "platform/heap/HeapAllocator.h" | 46 #include "platform/heap/HeapAllocator.h" |
| 46 #include "platform/heap/Member.h" | 47 #include "platform/heap/Member.h" |
| 47 #include "platform/network/ResourceRequest.h" | 48 #include "platform/network/ResourceRequest.h" |
| 48 #include "platform/network/ResourceTimingInfo.h" | 49 #include "platform/network/ResourceTimingInfo.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 59 #include "wtf/Vector.h" | 60 #include "wtf/Vector.h" |
| 60 #include <memory> | 61 #include <memory> |
| 61 | 62 |
| 62 namespace blink { | 63 namespace blink { |
| 63 | 64 |
| 64 namespace { | 65 namespace { |
| 65 const char testImageFilename[] = "white-1x1.png"; | 66 const char testImageFilename[] = "white-1x1.png"; |
| 66 const int testImageSize = 103; // size of web/tests/data/white-1x1.png | 67 const int testImageSize = 103; // size of web/tests/data/white-1x1.png |
| 67 } | 68 } |
| 68 | 69 |
| 69 class ResourceFetcherTestMockFetchContext : public FetchContext { | |
| 70 public: | |
| 71 static ResourceFetcherTestMockFetchContext* create() { | |
| 72 return new ResourceFetcherTestMockFetchContext; | |
| 73 } | |
| 74 | |
| 75 virtual ~ResourceFetcherTestMockFetchContext() {} | |
| 76 | |
| 77 bool allowImage(bool imagesEnabled, const KURL&) const override { | |
| 78 return true; | |
| 79 } | |
| 80 bool canRequest(Resource::Type, | |
| 81 const ResourceRequest&, | |
| 82 const KURL&, | |
| 83 const ResourceLoaderOptions&, | |
| 84 bool forPreload, | |
| 85 FetchRequest::OriginRestriction) const override { | |
| 86 return true; | |
| 87 } | |
| 88 bool shouldLoadNewResource(Resource::Type) const override { return true; } | |
| 89 WebTaskRunner* loadingTaskRunner() const override { return m_runner.get(); } | |
| 90 | |
| 91 void setCachePolicy(CachePolicy policy) { m_policy = policy; } | |
| 92 CachePolicy getCachePolicy() const override { return m_policy; } | |
| 93 void setLoadComplete(bool complete) { m_complete = complete; } | |
| 94 bool isLoadComplete() const override { return m_complete; } | |
| 95 | |
| 96 void addResourceTiming( | |
| 97 const ResourceTimingInfo& resourceTimingInfo) override { | |
| 98 m_transferSize = resourceTimingInfo.transferSize(); | |
| 99 } | |
| 100 long long getTransferSize() const { return m_transferSize; } | |
| 101 | |
| 102 private: | |
| 103 ResourceFetcherTestMockFetchContext() | |
| 104 : m_policy(CachePolicyVerify), | |
| 105 m_runner(wrapUnique(new scheduler::FakeWebTaskRunner)), | |
| 106 m_complete(false), | |
| 107 m_transferSize(-1) {} | |
| 108 | |
| 109 CachePolicy m_policy; | |
| 110 std::unique_ptr<scheduler::FakeWebTaskRunner> m_runner; | |
| 111 bool m_complete; | |
| 112 long long m_transferSize; | |
| 113 }; | |
| 114 | |
| 115 class ResourceFetcherTest : public ::testing::Test {}; | 70 class ResourceFetcherTest : public ::testing::Test {}; |
| 116 | 71 |
| 117 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { | 72 TEST_F(ResourceFetcherTest, StartLoadAfterFrameDetach) { |
| 118 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); | 73 KURL secureURL(ParsedURLString, "https://secureorigin.test/image.png"); |
| 119 // Try to request a url. The request should fail, and a resource in an error | 74 // Try to request a url. The request should fail, and a resource in an error |
| 120 // state should be returned, and no resource should be present in the cache. | 75 // state should be returned, and no resource should be present in the cache. |
| 121 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); | 76 ResourceFetcher* fetcher = ResourceFetcher::create(nullptr); |
| 122 ResourceRequest resourceRequest(secureURL); | 77 ResourceRequest resourceRequest(secureURL); |
| 123 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 78 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 124 FetchRequest fetchRequest = | 79 FetchRequest fetchRequest = |
| 125 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 80 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 126 Resource* resource = RawResource::fetch(fetchRequest, fetcher); | 81 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 127 ASSERT_TRUE(resource); | 82 ASSERT_TRUE(resource); |
| 128 EXPECT_TRUE(resource->errorOccurred()); | 83 EXPECT_TRUE(resource->errorOccurred()); |
| 129 EXPECT_TRUE(resource->resourceError().isAccessCheck()); | 84 EXPECT_TRUE(resource->resourceError().isAccessCheck()); |
| 130 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); | 85 EXPECT_FALSE(memoryCache()->resourceForURL(secureURL)); |
| 131 | 86 |
| 132 // Start by calling startLoad() directly, rather than via requestResource(). | 87 // Start by calling startLoad() directly, rather than via requestResource(). |
| 133 // This shouldn't crash. | 88 // This shouldn't crash. |
| 134 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw)); | 89 fetcher->startLoad(RawResource::create(secureURL, Resource::Raw)); |
| 135 } | 90 } |
| 136 | 91 |
| 137 TEST_F(ResourceFetcherTest, UseExistingResource) { | 92 TEST_F(ResourceFetcherTest, UseExistingResource) { |
| 138 ResourceFetcher* fetcher = | 93 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 139 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 94 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 140 | 95 |
| 141 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 96 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 142 ResourceResponse response; | 97 ResourceResponse response; |
| 143 response.setURL(url); | 98 response.setURL(url); |
| 144 response.setHTTPStatusCode(200); | 99 response.setHTTPStatusCode(200); |
| 145 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 100 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 146 URLTestHelpers::registerMockedURLLoadWithCustomResponse( | 101 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 147 url, testImageFilename, WebString::fromUTF8(""), | 102 url, testImageFilename, WebString::fromUTF8(""), |
| 148 WrappedResourceResponse(response)); | 103 WrappedResourceResponse(response)); |
| 149 | 104 |
| (...skipping 15 matching lines...) Expand all Loading... |
| 165 memoryCache()->add(resource); | 120 memoryCache()->add(resource); |
| 166 ResourceResponse response; | 121 ResourceResponse response; |
| 167 response.setURL(url); | 122 response.setURL(url); |
| 168 response.setHTTPStatusCode(200); | 123 response.setHTTPStatusCode(200); |
| 169 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 124 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 170 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 125 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 171 resource->responseReceived(response, nullptr); | 126 resource->responseReceived(response, nullptr); |
| 172 resource->finish(); | 127 resource->finish(); |
| 173 ASSERT_TRUE(resource->hasVaryHeader()); | 128 ASSERT_TRUE(resource->hasVaryHeader()); |
| 174 | 129 |
| 175 ResourceFetcher* fetcher = | 130 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 176 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 131 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 177 ResourceRequest resourceRequest(url); | 132 ResourceRequest resourceRequest(url); |
| 178 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 133 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 179 FetchRequest fetchRequest = | 134 FetchRequest fetchRequest = |
| 180 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 135 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 181 Platform::current()->getURLLoaderMockFactory()->registerURL( | 136 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 182 url, WebURLResponse(), ""); | 137 url, WebURLResponse(), ""); |
| 183 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); | 138 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 184 EXPECT_NE(resource, newResource); | 139 EXPECT_NE(resource, newResource); |
| 185 newResource->loader()->cancel(); | 140 newResource->loader()->cancel(); |
| 186 memoryCache()->remove(newResource); | 141 memoryCache()->remove(newResource); |
| 187 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 142 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 188 | 143 |
| 189 memoryCache()->remove(resource); | 144 memoryCache()->remove(resource); |
| 190 } | 145 } |
| 191 | 146 |
| 192 TEST_F(ResourceFetcherTest, VaryOnBack) { | 147 TEST_F(ResourceFetcherTest, VaryOnBack) { |
| 193 ResourceFetcherTestMockFetchContext* context = | 148 MockFetchContext* context = |
| 194 ResourceFetcherTestMockFetchContext::create(); | 149 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource); |
| 195 context->setCachePolicy(CachePolicyHistoryBuffer); | 150 context->setCachePolicy(CachePolicyHistoryBuffer); |
| 196 ResourceFetcher* fetcher = ResourceFetcher::create(context); | 151 ResourceFetcher* fetcher = ResourceFetcher::create(context); |
| 197 | 152 |
| 198 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 153 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 199 Resource* resource = RawResource::create(url, Resource::Raw); | 154 Resource* resource = RawResource::create(url, Resource::Raw); |
| 200 memoryCache()->add(resource); | 155 memoryCache()->add(resource); |
| 201 ResourceResponse response; | 156 ResourceResponse response; |
| 202 response.setURL(url); | 157 response.setURL(url); |
| 203 response.setHTTPStatusCode(200); | 158 response.setHTTPStatusCode(200); |
| 204 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 159 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 205 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 160 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 206 resource->responseReceived(response, nullptr); | 161 resource->responseReceived(response, nullptr); |
| 207 resource->finish(); | 162 resource->finish(); |
| 208 ASSERT_TRUE(resource->hasVaryHeader()); | 163 ASSERT_TRUE(resource->hasVaryHeader()); |
| 209 | 164 |
| 210 ResourceRequest resourceRequest(url); | 165 ResourceRequest resourceRequest(url); |
| 211 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 166 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 212 FetchRequest fetchRequest = | 167 FetchRequest fetchRequest = |
| 213 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 168 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 214 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); | 169 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 215 EXPECT_EQ(resource, newResource); | 170 EXPECT_EQ(resource, newResource); |
| 216 | 171 |
| 217 memoryCache()->remove(newResource); | 172 memoryCache()->remove(newResource); |
| 218 } | 173 } |
| 219 | 174 |
| 220 TEST_F(ResourceFetcherTest, VaryImage) { | 175 TEST_F(ResourceFetcherTest, VaryImage) { |
| 221 ResourceFetcher* fetcher = | 176 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 222 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 177 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 223 | 178 |
| 224 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 179 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 225 ResourceResponse response; | 180 ResourceResponse response; |
| 226 response.setURL(url); | 181 response.setURL(url); |
| 227 response.setHTTPStatusCode(200); | 182 response.setHTTPStatusCode(200); |
| 228 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 183 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 229 response.setHTTPHeaderField(HTTPNames::Vary, "*"); | 184 response.setHTTPHeaderField(HTTPNames::Vary, "*"); |
| 230 URLTestHelpers::registerMockedURLLoadWithCustomResponse( | 185 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 231 url, testImageFilename, WebString::fromUTF8(""), | 186 url, testImageFilename, WebString::fromUTF8(""), |
| 232 WrappedResourceResponse(response)); | 187 WrappedResourceResponse(response)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 249 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, | 204 : public GarbageCollectedFinalized<RequestSameResourceOnComplete>, |
| 250 public RawResourceClient { | 205 public RawResourceClient { |
| 251 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); | 206 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); |
| 252 | 207 |
| 253 public: | 208 public: |
| 254 explicit RequestSameResourceOnComplete(Resource* resource) | 209 explicit RequestSameResourceOnComplete(Resource* resource) |
| 255 : m_resource(resource), m_notifyFinishedCalled(false) {} | 210 : m_resource(resource), m_notifyFinishedCalled(false) {} |
| 256 | 211 |
| 257 void notifyFinished(Resource* resource) override { | 212 void notifyFinished(Resource* resource) override { |
| 258 EXPECT_EQ(m_resource, resource); | 213 EXPECT_EQ(m_resource, resource); |
| 259 ResourceFetcherTestMockFetchContext* context = | 214 MockFetchContext* context = |
| 260 ResourceFetcherTestMockFetchContext::create(); | 215 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource); |
| 261 context->setCachePolicy(CachePolicyRevalidate); | 216 context->setCachePolicy(CachePolicyRevalidate); |
| 262 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); | 217 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); |
| 263 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); | 218 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); |
| 264 Resource* resource2 = ImageResource::fetch(fetchRequest2, fetcher2); | 219 Resource* resource2 = ImageResource::fetch(fetchRequest2, fetcher2); |
| 265 EXPECT_EQ(m_resource, resource2); | 220 EXPECT_EQ(m_resource, resource2); |
| 266 m_notifyFinishedCalled = true; | 221 m_notifyFinishedCalled = true; |
| 267 } | 222 } |
| 268 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } | 223 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } |
| 269 | 224 |
| 270 DEFINE_INLINE_TRACE() { | 225 DEFINE_INLINE_TRACE() { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 282 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { | 237 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) { |
| 283 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 238 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 284 ResourceResponse response; | 239 ResourceResponse response; |
| 285 response.setURL(url); | 240 response.setURL(url); |
| 286 response.setHTTPStatusCode(200); | 241 response.setHTTPStatusCode(200); |
| 287 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); | 242 response.setHTTPHeaderField(HTTPNames::Cache_Control, "max-age=3600"); |
| 288 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); | 243 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); |
| 289 URLTestHelpers::registerMockedURLLoadWithCustomResponse( | 244 URLTestHelpers::registerMockedURLLoadWithCustomResponse( |
| 290 url, testImageFilename, WebString::fromUTF8(""), | 245 url, testImageFilename, WebString::fromUTF8(""), |
| 291 WrappedResourceResponse(response)); | 246 WrappedResourceResponse(response)); |
| 292 ResourceFetcher* fetcher1 = | 247 ResourceFetcher* fetcher1 = ResourceFetcher::create( |
| 293 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 248 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 294 ResourceRequest request1(url); | 249 ResourceRequest request1(url); |
| 295 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); | 250 request1.setHTTPHeaderField(HTTPNames::Cache_Control, "no-cache"); |
| 296 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); | 251 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); |
| 297 Resource* resource1 = ImageResource::fetch(fetchRequest1, fetcher1); | 252 Resource* resource1 = ImageResource::fetch(fetchRequest1, fetcher1); |
| 298 Persistent<RequestSameResourceOnComplete> client = | 253 Persistent<RequestSameResourceOnComplete> client = |
| 299 new RequestSameResourceOnComplete(resource1); | 254 new RequestSameResourceOnComplete(resource1); |
| 300 resource1->addClient(client); | 255 resource1->addClient(client); |
| 301 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 256 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 302 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 257 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 303 EXPECT_TRUE(client->notifyFinishedCalled()); | 258 EXPECT_TRUE(client->notifyFinishedCalled()); |
| 304 resource1->removeClient(client); | 259 resource1->removeClient(client); |
| 305 memoryCache()->remove(resource1); | 260 memoryCache()->remove(resource1); |
| 306 } | 261 } |
| 307 | 262 |
| 308 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) { | 263 TEST_F(ResourceFetcherTest, RevalidateDeferedResourceFromTwoInitiators) { |
| 309 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff"); | 264 KURL url(ParsedURLString, "http://127.0.0.1:8000/font.woff"); |
| 310 ResourceResponse response; | 265 ResourceResponse response; |
| 311 response.setURL(url); | 266 response.setURL(url); |
| 312 response.setHTTPStatusCode(200); | 267 response.setHTTPStatusCode(200); |
| 313 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); | 268 response.setHTTPHeaderField(HTTPNames::ETag, "1234567890"); |
| 314 Platform::current()->getURLLoaderMockFactory()->registerURL( | 269 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 315 url, WrappedResourceResponse(response), ""); | 270 url, WrappedResourceResponse(response), ""); |
| 316 | 271 |
| 317 ResourceFetcherTestMockFetchContext* context = | 272 MockFetchContext* context = |
| 318 ResourceFetcherTestMockFetchContext::create(); | 273 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource); |
| 319 ResourceFetcher* fetcher = ResourceFetcher::create(context); | 274 ResourceFetcher* fetcher = ResourceFetcher::create(context); |
| 320 | 275 |
| 321 // Fetch to cache a resource. | 276 // Fetch to cache a resource. |
| 322 ResourceRequest request1(url); | 277 ResourceRequest request1(url); |
| 323 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); | 278 FetchRequest fetchRequest1 = FetchRequest(request1, FetchInitiatorInfo()); |
| 324 Resource* resource1 = FontResource::fetch(fetchRequest1, fetcher); | 279 Resource* resource1 = FontResource::fetch(fetchRequest1, fetcher); |
| 325 ASSERT_TRUE(resource1); | 280 ASSERT_TRUE(resource1); |
| 326 fetcher->startLoad(resource1); | 281 fetcher->startLoad(resource1); |
| 327 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 282 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 328 EXPECT_TRUE(resource1->isLoaded()); | 283 EXPECT_TRUE(resource1->isLoaded()); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 356 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 311 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 357 EXPECT_TRUE(resource3->isLoaded()); | 312 EXPECT_TRUE(resource3->isLoaded()); |
| 358 EXPECT_FALSE(resource3->errorOccurred()); | 313 EXPECT_FALSE(resource3->errorOccurred()); |
| 359 EXPECT_TRUE(resource2->isLoaded()); | 314 EXPECT_TRUE(resource2->isLoaded()); |
| 360 EXPECT_FALSE(resource2->errorOccurred()); | 315 EXPECT_FALSE(resource2->errorOccurred()); |
| 361 | 316 |
| 362 memoryCache()->remove(resource1); | 317 memoryCache()->remove(resource1); |
| 363 } | 318 } |
| 364 | 319 |
| 365 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { | 320 TEST_F(ResourceFetcherTest, DontReuseMediaDataUrl) { |
| 366 ResourceFetcher* fetcher = | 321 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 367 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 322 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 368 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); | 323 ResourceRequest request(KURL(ParsedURLString, "data:text/html,foo")); |
| 369 request.setRequestContext(WebURLRequest::RequestContextVideo); | 324 request.setRequestContext(WebURLRequest::RequestContextVideo); |
| 370 ResourceLoaderOptions options; | 325 ResourceLoaderOptions options; |
| 371 options.dataBufferingPolicy = DoNotBufferData; | 326 options.dataBufferingPolicy = DoNotBufferData; |
| 372 FetchRequest fetchRequest = | 327 FetchRequest fetchRequest = |
| 373 FetchRequest(request, FetchInitiatorTypeNames::internal, options); | 328 FetchRequest(request, FetchInitiatorTypeNames::internal, options); |
| 374 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher); | 329 Resource* resource1 = RawResource::fetchMedia(fetchRequest, fetcher); |
| 375 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher); | 330 Resource* resource2 = RawResource::fetchMedia(fetchRequest, fetcher); |
| 376 EXPECT_NE(resource1, resource2); | 331 EXPECT_NE(resource1, resource2); |
| 377 memoryCache()->remove(resource2); | 332 memoryCache()->remove(resource2); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 421 | 376 |
| 422 // Regression test for http://crbug.com/594072. | 377 // Regression test for http://crbug.com/594072. |
| 423 // This emulates a modal dialog triggering a nested run loop inside | 378 // This emulates a modal dialog triggering a nested run loop inside |
| 424 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its | 379 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its |
| 425 // WebURLLoader before notifying its clients, a nested run loop may send a | 380 // WebURLLoader before notifying its clients, a nested run loop may send a |
| 426 // network response, leading to an invalid state transition in ResourceLoader. | 381 // network response, leading to an invalid state transition in ResourceLoader. |
| 427 TEST_F(ResourceFetcherTest, ResponseOnCancel) { | 382 TEST_F(ResourceFetcherTest, ResponseOnCancel) { |
| 428 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 383 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 429 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 384 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 430 | 385 |
| 431 ResourceFetcher* fetcher = | 386 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 432 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 387 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 433 ResourceRequest resourceRequest(url); | 388 ResourceRequest resourceRequest(url); |
| 434 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 389 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 435 FetchRequest fetchRequest = | 390 FetchRequest fetchRequest = |
| 436 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 391 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 437 Resource* resource = RawResource::fetch(fetchRequest, fetcher); | 392 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 438 Persistent<ServeRequestsOnCompleteClient> client = | 393 Persistent<ServeRequestsOnCompleteClient> client = |
| 439 new ServeRequestsOnCompleteClient(); | 394 new ServeRequestsOnCompleteClient(); |
| 440 resource->addClient(client); | 395 resource->addClient(client); |
| 441 resource->loader()->cancel(); | 396 resource->loader()->cancel(); |
| 442 resource->removeClient(client); | 397 resource->removeClient(client); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 463 redirectURL, redirectResponse, ""); | 418 redirectURL, redirectResponse, ""); |
| 464 } | 419 } |
| 465 | 420 |
| 466 void registerFinalResource(const WebString& url) { | 421 void registerFinalResource(const WebString& url) { |
| 467 KURL finalURL(ParsedURLString, url); | 422 KURL finalURL(ParsedURLString, url); |
| 468 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename); | 423 URLTestHelpers::registerMockedURLLoad(finalURL, testImageFilename); |
| 469 } | 424 } |
| 470 | 425 |
| 471 void request(const WebString& url) { | 426 void request(const WebString& url) { |
| 472 DCHECK(!m_context); | 427 DCHECK(!m_context); |
| 473 m_context = ResourceFetcherTestMockFetchContext::create(); | 428 m_context = |
| 429 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource); |
| 474 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); | 430 ResourceFetcher* fetcher = ResourceFetcher::create(m_context); |
| 475 ResourceRequest resourceRequest(url); | 431 ResourceRequest resourceRequest(url); |
| 476 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 432 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 477 FetchRequest fetchRequest = | 433 FetchRequest fetchRequest = |
| 478 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 434 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 479 RawResource::fetch(fetchRequest, fetcher); | 435 RawResource::fetch(fetchRequest, fetcher); |
| 480 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 436 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 481 } | 437 } |
| 482 | 438 |
| 483 void cleanUp() { | 439 void cleanUp() { |
| 484 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); | 440 Platform::current()->getURLLoaderMockFactory()->unregisterAllURLs(); |
| 485 memoryCache()->evictResources(); | 441 memoryCache()->evictResources(); |
| 486 } | 442 } |
| 487 | 443 |
| 488 ResourceFetcherTestMockFetchContext* context() const { return m_context; } | 444 MockFetchContext* context() const { return m_context; } |
| 489 | 445 |
| 490 private: | 446 private: |
| 491 Member<ResourceFetcherTestMockFetchContext> m_context; | 447 Member<MockFetchContext> m_context; |
| 492 }; | 448 }; |
| 493 | 449 |
| 494 TEST_F(ResourceFetcherTest, SameOriginRedirect) { | 450 TEST_F(ResourceFetcherTest, SameOriginRedirect) { |
| 495 const char redirectURL[] = "http://127.0.0.1:8000/redirect.html"; | 451 const char redirectURL[] = "http://127.0.0.1:8000/redirect.html"; |
| 496 const char finalURL[] = "http://127.0.0.1:8000/final.html"; | 452 const char finalURL[] = "http://127.0.0.1:8000/final.html"; |
| 497 ScopedMockRedirectRequester requester; | 453 ScopedMockRedirectRequester requester; |
| 498 requester.registerRedirect(redirectURL, finalURL); | 454 requester.registerRedirect(redirectURL, finalURL); |
| 499 requester.registerFinalResource(finalURL); | 455 requester.registerFinalResource(finalURL); |
| 500 requester.request(redirectURL); | 456 requester.request(redirectURL); |
| 501 | 457 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 526 requester.registerFinalResource(finalURL); | 482 requester.registerFinalResource(finalURL); |
| 527 requester.request(redirectURL1); | 483 requester.request(redirectURL1); |
| 528 | 484 |
| 529 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); | 485 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); |
| 530 } | 486 } |
| 531 | 487 |
| 532 TEST_F(ResourceFetcherTest, SynchronousRequest) { | 488 TEST_F(ResourceFetcherTest, SynchronousRequest) { |
| 533 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 489 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 534 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 490 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 535 | 491 |
| 536 ResourceFetcher* fetcher = | 492 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 537 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 493 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 538 ResourceRequest resourceRequest(url); | 494 ResourceRequest resourceRequest(url); |
| 539 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 495 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 540 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo()); | 496 FetchRequest fetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 541 fetchRequest.makeSynchronous(); | 497 fetchRequest.makeSynchronous(); |
| 542 Resource* resource = RawResource::fetch(fetchRequest, fetcher); | 498 Resource* resource = RawResource::fetch(fetchRequest, fetcher); |
| 543 EXPECT_TRUE(resource->isLoaded()); | 499 EXPECT_TRUE(resource->isLoaded()); |
| 544 EXPECT_EQ(ResourceLoadPriorityHighest, | 500 EXPECT_EQ(ResourceLoadPriorityHighest, |
| 545 resource->resourceRequest().priority()); | 501 resource->resourceRequest().priority()); |
| 546 | 502 |
| 547 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 503 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 548 memoryCache()->remove(resource); | 504 memoryCache()->remove(resource); |
| 549 } | 505 } |
| 550 | 506 |
| 551 TEST_F(ResourceFetcherTest, PreloadImageTwice) { | 507 TEST_F(ResourceFetcherTest, PreloadImageTwice) { |
| 552 ResourceFetcher* fetcher = | 508 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 553 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 509 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 554 | 510 |
| 555 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 511 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 556 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 512 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 557 | 513 |
| 558 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 514 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 559 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); | 515 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 560 ASSERT_TRUE(resource); | 516 ASSERT_TRUE(resource); |
| 561 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 517 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| 562 fetcher->preloadStarted(resource); | 518 fetcher->preloadStarted(resource); |
| 563 | 519 |
| 564 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 520 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
| 565 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); | 521 Resource* newResource = ImageResource::fetch(fetchRequest, fetcher); |
| 566 EXPECT_EQ(resource, newResource); | 522 EXPECT_EQ(resource, newResource); |
| 567 fetcher->preloadStarted(resource); | 523 fetcher->preloadStarted(resource); |
| 568 | 524 |
| 569 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); | 525 fetcher->clearPreloads(ResourceFetcher::ClearAllPreloads); |
| 570 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 526 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 571 EXPECT_FALSE(memoryCache()->contains(resource)); | 527 EXPECT_FALSE(memoryCache()->contains(resource)); |
| 572 EXPECT_FALSE(resource->isPreloaded()); | 528 EXPECT_FALSE(resource->isPreloaded()); |
| 573 } | 529 } |
| 574 | 530 |
| 575 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) { | 531 TEST_F(ResourceFetcherTest, LinkPreloadImageAndUse) { |
| 576 ResourceFetcher* fetcher = | 532 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 577 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 533 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 578 | 534 |
| 579 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 535 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 580 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 536 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 581 | 537 |
| 582 // Link preload preload scanner | 538 // Link preload preload scanner |
| 583 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 539 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 584 fetchRequestOriginal.setLinkPreload(true); | 540 fetchRequestOriginal.setLinkPreload(true); |
| 585 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); | 541 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 586 ASSERT_TRUE(resource); | 542 ASSERT_TRUE(resource); |
| 587 EXPECT_TRUE(resource->isLinkPreload()); | 543 EXPECT_TRUE(resource->isLinkPreload()); |
| (...skipping 17 matching lines...) Expand all Loading... |
| 605 EXPECT_FALSE(resource->isLinkPreload()); | 561 EXPECT_FALSE(resource->isLinkPreload()); |
| 606 | 562 |
| 607 // DCL reached | 563 // DCL reached |
| 608 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); | 564 fetcher->clearPreloads(ResourceFetcher::ClearSpeculativeMarkupPreloads); |
| 609 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 565 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 610 EXPECT_TRUE(memoryCache()->contains(resource)); | 566 EXPECT_TRUE(memoryCache()->contains(resource)); |
| 611 EXPECT_FALSE(resource->isPreloaded()); | 567 EXPECT_FALSE(resource->isPreloaded()); |
| 612 } | 568 } |
| 613 | 569 |
| 614 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) { | 570 TEST_F(ResourceFetcherTest, LinkPreloadImageMultipleFetchersAndUse) { |
| 615 ResourceFetcher* fetcher = | 571 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 616 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 572 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 617 ResourceFetcher* fetcher2 = | 573 ResourceFetcher* fetcher2 = ResourceFetcher::create( |
| 618 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 574 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 619 | 575 |
| 620 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); | 576 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.png"); |
| 621 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); | 577 URLTestHelpers::registerMockedURLLoad(url, testImageFilename, "image/png"); |
| 622 | 578 |
| 623 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); | 579 FetchRequest fetchRequestOriginal = FetchRequest(url, FetchInitiatorInfo()); |
| 624 fetchRequestOriginal.setLinkPreload(true); | 580 fetchRequestOriginal.setLinkPreload(true); |
| 625 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); | 581 Resource* resource = ImageResource::fetch(fetchRequestOriginal, fetcher); |
| 626 ASSERT_TRUE(resource); | 582 ASSERT_TRUE(resource); |
| 627 EXPECT_TRUE(resource->isLinkPreload()); | 583 EXPECT_TRUE(resource->isLinkPreload()); |
| 628 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); | 584 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequests(); |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 694 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); | 650 KURL url(ParsedURLString, "http://127.0.0.1:8000/foo.html"); |
| 695 Resource* resource = RawResource::create(url, Resource::Raw); | 651 Resource* resource = RawResource::create(url, Resource::Raw); |
| 696 memoryCache()->add(resource); | 652 memoryCache()->add(resource); |
| 697 ResourceResponse response; | 653 ResourceResponse response; |
| 698 response.setURL(url); | 654 response.setURL(url); |
| 699 response.setHTTPStatusCode(304); | 655 response.setHTTPStatusCode(304); |
| 700 response.setHTTPHeaderField("etag", "1234567890"); | 656 response.setHTTPHeaderField("etag", "1234567890"); |
| 701 resource->responseReceived(response, nullptr); | 657 resource->responseReceived(response, nullptr); |
| 702 resource->finish(); | 658 resource->finish(); |
| 703 | 659 |
| 704 ResourceFetcher* fetcher = | 660 ResourceFetcher* fetcher = ResourceFetcher::create( |
| 705 ResourceFetcher::create(ResourceFetcherTestMockFetchContext::create()); | 661 MockFetchContext::create(MockFetchContext::kShouldLoadNewResource)); |
| 706 ResourceRequest resourceRequest(url); | 662 ResourceRequest resourceRequest(url); |
| 707 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); | 663 resourceRequest.setRequestContext(WebURLRequest::RequestContextInternal); |
| 708 FetchRequest fetchRequest = | 664 FetchRequest fetchRequest = |
| 709 FetchRequest(resourceRequest, FetchInitiatorInfo()); | 665 FetchRequest(resourceRequest, FetchInitiatorInfo()); |
| 710 Platform::current()->getURLLoaderMockFactory()->registerURL( | 666 Platform::current()->getURLLoaderMockFactory()->registerURL( |
| 711 url, WebURLResponse(), ""); | 667 url, WebURLResponse(), ""); |
| 712 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); | 668 Resource* newResource = RawResource::fetch(fetchRequest, fetcher); |
| 713 fetcher->stopFetching(); | 669 fetcher->stopFetching(); |
| 714 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 670 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
| 715 | 671 |
| 716 EXPECT_NE(resource, newResource); | 672 EXPECT_NE(resource, newResource); |
| 717 } | 673 } |
| 718 | 674 |
| 719 } // namespace blink | 675 } // namespace blink |
| OLD | NEW |