Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(10)

Side by Side Diff: third_party/WebKit/Source/core/fetch/ResourceFetcherTest.cpp

Issue 2399473002: Remove Resource::create() to ensure proper subclasses of Resource are created (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/fetch/Resource.h ('k') | third_party/WebKit/Source/core/fetch/ResourceTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698