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 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 | 231 |
232 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); | 232 FetchRequest fetchRequest = FetchRequest(url, FetchInitiatorInfo()); |
233 Resource* newResource = fetcher->requestResource(fetchRequest, TestResourceF
actory(Resource::Image)); | 233 Resource* newResource = fetcher->requestResource(fetchRequest, TestResourceF
actory(Resource::Image)); |
234 EXPECT_EQ(resource, newResource); | 234 EXPECT_EQ(resource, newResource); |
235 | 235 |
236 memoryCache()->remove(newResource); | 236 memoryCache()->remove(newResource); |
237 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); | 237 Platform::current()->getURLLoaderMockFactory()->unregisterURL(url); |
238 } | 238 } |
239 | 239 |
240 class RequestSameResourceOnComplete : public GarbageCollectedFinalized<RequestSa
meResourceOnComplete>, public RawResourceClient { | 240 class RequestSameResourceOnComplete : public GarbageCollectedFinalized<RequestSa
meResourceOnComplete>, public RawResourceClient { |
| 241 USING_GARBAGE_COLLECTED_MIXIN(RequestSameResourceOnComplete); |
241 public: | 242 public: |
242 explicit RequestSameResourceOnComplete(Resource* resource) | 243 explicit RequestSameResourceOnComplete(Resource* resource) |
243 : m_resource(resource) | 244 : m_resource(resource) |
244 , m_notifyFinishedCalled(false) | 245 , m_notifyFinishedCalled(false) |
245 { | 246 { |
246 } | 247 } |
247 | 248 |
248 void notifyFinished(Resource* resource) override | 249 void notifyFinished(Resource* resource) override |
249 { | 250 { |
250 ASSERT_EQ(m_resource, resource); | 251 ASSERT_EQ(m_resource, resource); |
251 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFe
tchContext::create(); | 252 ResourceFetcherTestMockFetchContext* context = ResourceFetcherTestMockFe
tchContext::create(); |
252 context->setCachePolicy(CachePolicyRevalidate); | 253 context->setCachePolicy(CachePolicyRevalidate); |
253 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); | 254 ResourceFetcher* fetcher2 = ResourceFetcher::create(context); |
254 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); | 255 FetchRequest fetchRequest2(m_resource->url(), FetchInitiatorInfo()); |
255 Resource* resource2 = fetcher2->requestResource(fetchRequest2, TestResou
rceFactory(Resource::Image)); | 256 Resource* resource2 = fetcher2->requestResource(fetchRequest2, TestResou
rceFactory(Resource::Image)); |
256 EXPECT_EQ(m_resource, resource2); | 257 EXPECT_EQ(m_resource, resource2); |
257 m_notifyFinishedCalled = true; | 258 m_notifyFinishedCalled = true; |
258 } | 259 } |
259 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } | 260 bool notifyFinishedCalled() const { return m_notifyFinishedCalled; } |
260 | 261 |
261 DEFINE_INLINE_TRACE() | 262 DEFINE_INLINE_TRACE() |
262 { | 263 { |
263 visitor->trace(m_resource); | 264 visitor->trace(m_resource); |
| 265 RawResourceClient::trace(visitor); |
264 } | 266 } |
265 | 267 |
266 String debugName() const override { return "RequestSameResourceOnComplete";
} | 268 String debugName() const override { return "RequestSameResourceOnComplete";
} |
267 | 269 |
268 private: | 270 private: |
269 Member<Resource> m_resource; | 271 Member<Resource> m_resource; |
270 bool m_notifyFinishedCalled; | 272 bool m_notifyFinishedCalled; |
271 }; | 273 }; |
272 | 274 |
273 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) | 275 TEST_F(ResourceFetcherTest, RevalidateWhileFinishingLoading) |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 ResourceLoaderOptions options; | 358 ResourceLoaderOptions options; |
357 options.dataBufferingPolicy = DoNotBufferData; | 359 options.dataBufferingPolicy = DoNotBufferData; |
358 FetchRequest fetchRequest = FetchRequest(request, FetchInitiatorTypeNames::i
nternal, options); | 360 FetchRequest fetchRequest = FetchRequest(request, FetchInitiatorTypeNames::i
nternal, options); |
359 Resource* resource1 = fetcher->requestResource(fetchRequest, TestResourceFac
tory(Resource::Media)); | 361 Resource* resource1 = fetcher->requestResource(fetchRequest, TestResourceFac
tory(Resource::Media)); |
360 Resource* resource2 = fetcher->requestResource(fetchRequest, TestResourceFac
tory(Resource::Media)); | 362 Resource* resource2 = fetcher->requestResource(fetchRequest, TestResourceFac
tory(Resource::Media)); |
361 EXPECT_NE(resource1, resource2); | 363 EXPECT_NE(resource1, resource2); |
362 memoryCache()->remove(resource2); | 364 memoryCache()->remove(resource2); |
363 } | 365 } |
364 | 366 |
365 class ServeRequestsOnCompleteClient final : public GarbageCollectedFinalized<Ser
veRequestsOnCompleteClient>, public RawResourceClient { | 367 class ServeRequestsOnCompleteClient final : public GarbageCollectedFinalized<Ser
veRequestsOnCompleteClient>, public RawResourceClient { |
| 368 USING_GARBAGE_COLLECTED_MIXIN(ServeRequestsOnCompleteClient); |
366 public: | 369 public: |
367 void notifyFinished(Resource*) override | 370 void notifyFinished(Resource*) override |
368 { | 371 { |
369 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequest
s(); | 372 Platform::current()->getURLLoaderMockFactory()->serveAsynchronousRequest
s(); |
370 } | 373 } |
371 | 374 |
372 // No callbacks should be received except for the notifyFinished() | 375 // No callbacks should be received except for the notifyFinished() |
373 // triggered by ResourceLoader::cancel(). | 376 // triggered by ResourceLoader::cancel(). |
374 void dataSent(Resource*, unsigned long long, unsigned long long) override {
ASSERT_TRUE(false); } | 377 void dataSent(Resource*, unsigned long long, unsigned long long) override {
ASSERT_TRUE(false); } |
375 void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<We
bDataConsumerHandle>) override { ASSERT_TRUE(false); } | 378 void responseReceived(Resource*, const ResourceResponse&, std::unique_ptr<We
bDataConsumerHandle>) override { ASSERT_TRUE(false); } |
376 void setSerializedCachedMetadata(Resource*, const char*, size_t) override {
ASSERT_TRUE(false); } | 379 void setSerializedCachedMetadata(Resource*, const char*, size_t) override {
ASSERT_TRUE(false); } |
377 void dataReceived(Resource*, const char*, size_t) override { ASSERT_TRUE(fal
se); } | 380 void dataReceived(Resource*, const char*, size_t) override { ASSERT_TRUE(fal
se); } |
378 void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&)
override { ASSERT_TRUE(false); } | 381 void redirectReceived(Resource*, ResourceRequest&, const ResourceResponse&)
override { ASSERT_TRUE(false); } |
379 void dataDownloaded(Resource*, int) override { ASSERT_TRUE(false); } | 382 void dataDownloaded(Resource*, int) override { ASSERT_TRUE(false); } |
380 void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) override
{ ASSERT_TRUE(false); } | 383 void didReceiveResourceTiming(Resource*, const ResourceTimingInfo&) override
{ ASSERT_TRUE(false); } |
381 | 384 |
382 DEFINE_INLINE_TRACE() {} | 385 DEFINE_INLINE_TRACE() |
| 386 { |
| 387 RawResourceClient::trace(visitor); |
| 388 } |
383 | 389 |
384 String debugName() const override { return "ServeRequestsOnCompleteClient";
} | 390 String debugName() const override { return "ServeRequestsOnCompleteClient";
} |
385 }; | 391 }; |
386 | 392 |
387 // Regression test for http://crbug.com/594072. | 393 // Regression test for http://crbug.com/594072. |
388 // This emulates a modal dialog triggering a nested run loop inside | 394 // This emulates a modal dialog triggering a nested run loop inside |
389 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its | 395 // ResourceLoader::cancel(). If the ResourceLoader doesn't promptly cancel its |
390 // WebURLLoader before notifying its clients, a nested run loop may send a | 396 // WebURLLoader before notifying its clients, a nested run loop may send a |
391 // network response, leading to an invalid state transition in ResourceLoader. | 397 // network response, leading to an invalid state transition in ResourceLoader. |
392 TEST_F(ResourceFetcherTest, ResponseOnCancel) | 398 TEST_F(ResourceFetcherTest, ResponseOnCancel) |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 requester.registerRedirect(redirectURL1, redirectURL2); | 503 requester.registerRedirect(redirectURL1, redirectURL2); |
498 requester.registerRedirect(redirectURL2, redirectURL3); | 504 requester.registerRedirect(redirectURL2, redirectURL3); |
499 requester.registerRedirect(redirectURL3, finalURL); | 505 requester.registerRedirect(redirectURL3, finalURL); |
500 requester.registerFinalResource(finalURL); | 506 requester.registerFinalResource(finalURL); |
501 requester.request(redirectURL1); | 507 requester.request(redirectURL1); |
502 | 508 |
503 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); | 509 EXPECT_EQ(testImageSize, requester.context()->getTransferSize()); |
504 } | 510 } |
505 | 511 |
506 } // namespace blink | 512 } // namespace blink |
OLD | NEW |