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