OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserv
ed. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2009, 2010 Apple Inc. All rights reserv
ed. |
5 * | 5 * |
6 * This library is free software; you can redistribute it and/or | 6 * This library is free software; you can redistribute it and/or |
7 * modify it under the terms of the GNU Library General Public | 7 * modify it under the terms of the GNU Library General Public |
8 * License as published by the Free Software Foundation; either | 8 * License as published by the Free Software Foundation; either |
9 * version 2 of the License, or (at your option) any later version. | 9 * version 2 of the License, or (at your option) any later version. |
10 * | 10 * |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
174 m_pendingTask->clearLoader(); | 174 m_pendingTask->clearLoader(); |
175 #endif | 175 #endif |
176 | 176 |
177 #if ENABLE(OILPAN) | 177 #if ENABLE(OILPAN) |
178 for (const auto& client : m_clients) | 178 for (const auto& client : m_clients) |
179 willRemoveClient(*client); | 179 willRemoveClient(*client); |
180 #endif | 180 #endif |
181 | 181 |
182 if (m_image) { | 182 if (m_image) { |
183 m_image->removeClient(this); | 183 m_image->removeClient(this); |
| 184 m_image->removeObserver(this); |
184 m_image = nullptr; | 185 m_image = nullptr; |
185 } | 186 } |
186 | 187 |
187 #if !ENABLE(OILPAN) | 188 #if !ENABLE(OILPAN) |
188 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); | 189 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); |
189 if (m_hasPendingLoadEvent) | 190 if (m_hasPendingLoadEvent) |
190 loadEventSender().cancelEvent(this); | 191 loadEventSender().cancelEvent(this); |
191 | 192 |
192 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; | 193 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; |
193 if (m_hasPendingErrorEvent) | 194 if (m_hasPendingErrorEvent) |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
237 m_image = newImage; | 238 m_image = newImage; |
238 if (m_hasPendingLoadEvent) { | 239 if (m_hasPendingLoadEvent) { |
239 loadEventSender().cancelEvent(this); | 240 loadEventSender().cancelEvent(this); |
240 m_hasPendingLoadEvent = false; | 241 m_hasPendingLoadEvent = false; |
241 } | 242 } |
242 if (m_hasPendingErrorEvent) { | 243 if (m_hasPendingErrorEvent) { |
243 errorEventSender().cancelEvent(this); | 244 errorEventSender().cancelEvent(this); |
244 m_hasPendingErrorEvent = false; | 245 m_hasPendingErrorEvent = false; |
245 } | 246 } |
246 m_imageComplete = true; | 247 m_imageComplete = true; |
247 if (newImage) | 248 if (newImage) { |
248 newImage->addClient(this); | 249 newImage->addClient(this); |
249 if (oldImage) | 250 newImage->addObserver(this); |
| 251 } |
| 252 if (oldImage) { |
250 oldImage->removeClient(this); | 253 oldImage->removeClient(this); |
| 254 oldImage->removeObserver(this); |
| 255 } |
251 } | 256 } |
252 | 257 |
253 if (LayoutImageResource* imageResource = layoutImageResource()) | 258 if (LayoutImageResource* imageResource = layoutImageResource()) |
254 imageResource->resetAnimation(); | 259 imageResource->resetAnimation(); |
255 } | 260 } |
256 | 261 |
257 static void configureRequest(FetchRequest& request, ImageLoader::BypassMainWorld
Behavior bypassBehavior, Element& element, const ClientHintsPreferences& clientH
intsPreferences) | 262 static void configureRequest(FetchRequest& request, ImageLoader::BypassMainWorld
Behavior bypassBehavior, Element& element, const ClientHintsPreferences& clientH
intsPreferences) |
258 { | 263 { |
259 if (bypassBehavior == ImageLoader::BypassMainWorldCSP) | 264 if (bypassBehavior == ImageLoader::BypassMainWorldCSP) |
260 request.setContentSecurityCheck(DoNotCheckContentSecurityPolicy); | 265 request.setContentSecurityCheck(DoNotCheckContentSecurityPolicy); |
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
383 m_hasPendingErrorEvent = false; | 388 m_hasPendingErrorEvent = false; |
384 } | 389 } |
385 | 390 |
386 m_image = newImage; | 391 m_image = newImage; |
387 m_hasPendingLoadEvent = newImage; | 392 m_hasPendingLoadEvent = newImage; |
388 m_imageComplete = !newImage; | 393 m_imageComplete = !newImage; |
389 | 394 |
390 updateLayoutObject(); | 395 updateLayoutObject(); |
391 // If newImage exists and is cached, addClient() will result in the load
event | 396 // If newImage exists and is cached, addClient() will result in the load
event |
392 // being queued to fire. Ensure this happens after beforeload is dispatc
hed. | 397 // being queued to fire. Ensure this happens after beforeload is dispatc
hed. |
393 if (newImage) | 398 if (newImage) { |
394 newImage->addClient(this); | 399 newImage->addClient(this); |
395 | 400 newImage->addObserver(this); |
396 if (oldImage) | 401 } |
| 402 if (oldImage) { |
397 oldImage->removeClient(this); | 403 oldImage->removeClient(this); |
| 404 oldImage->removeObserver(this); |
| 405 } |
398 } | 406 } |
399 | 407 |
400 if (LayoutImageResource* imageResource = layoutImageResource()) | 408 if (LayoutImageResource* imageResource = layoutImageResource()) |
401 imageResource->resetAnimation(); | 409 imageResource->resetAnimation(); |
402 | 410 |
403 // Only consider updating the protection ref-count of the Element immediatel
y before returning | 411 // Only consider updating the protection ref-count of the Element immediatel
y before returning |
404 // from this function as doing so might result in the destruction of this Im
ageLoader. | 412 // from this function as doing so might result in the destruction of this Im
ageLoader. |
405 updatedHasPendingEvent(); | 413 updatedHasPendingEvent(); |
406 } | 414 } |
407 | 415 |
(...skipping 17 matching lines...) Expand all Loading... |
425 | 433 |
426 KURL url = imageSourceToKURL(imageSourceURL); | 434 KURL url = imageSourceToKURL(imageSourceURL); |
427 if (shouldLoadImmediately(url)) { | 435 if (shouldLoadImmediately(url)) { |
428 doUpdateFromElement(DoNotBypassMainWorldCSP, updateBehavior, referrerPol
icy); | 436 doUpdateFromElement(DoNotBypassMainWorldCSP, updateBehavior, referrerPol
icy); |
429 return; | 437 return; |
430 } | 438 } |
431 // Allow the idiom "img.src=''; img.src='.." to clear down the image before | 439 // Allow the idiom "img.src=''; img.src='.." to clear down the image before |
432 // an asynchronous load completes. | 440 // an asynchronous load completes. |
433 if (imageSourceURL.isEmpty()) { | 441 if (imageSourceURL.isEmpty()) { |
434 ImageResource* image = m_image.get(); | 442 ImageResource* image = m_image.get(); |
435 if (image) | 443 if (image) { |
436 image->removeClient(this); | 444 image->removeClient(this); |
| 445 image->removeObserver(this); |
| 446 } |
437 m_image = nullptr; | 447 m_image = nullptr; |
438 } | 448 } |
439 | 449 |
440 // Don't load images for inactive documents. We don't want to slow down the | 450 // Don't load images for inactive documents. We don't want to slow down the |
441 // raw HTML parsing case by loading images we don't intend to display. | 451 // raw HTML parsing case by loading images we don't intend to display. |
442 Document& document = m_element->document(); | 452 Document& document = m_element->document(); |
443 if (document.isActive()) | 453 if (document.isActive()) |
444 enqueueImageLoadingMicroTask(updateBehavior, referrerPolicy); | 454 enqueueImageLoadingMicroTask(updateBehavior, referrerPolicy); |
445 } | 455 } |
446 | 456 |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
631 void ImageLoader::willRemoveClient(ImageLoaderClient& client) | 641 void ImageLoader::willRemoveClient(ImageLoaderClient& client) |
632 { | 642 { |
633 if (client.requestsHighLiveResourceCachePriority()) { | 643 if (client.requestsHighLiveResourceCachePriority()) { |
634 ASSERT(m_highPriorityClientCount); | 644 ASSERT(m_highPriorityClientCount); |
635 m_highPriorityClientCount--; | 645 m_highPriorityClientCount--; |
636 if (m_image && !m_highPriorityClientCount) | 646 if (m_image && !m_highPriorityClientCount) |
637 memoryCache()->updateDecodedResource(m_image.get(), UpdateForPropert
yChange, MemoryCacheLiveResourcePriorityLow); | 647 memoryCache()->updateDecodedResource(m_image.get(), UpdateForPropert
yChange, MemoryCacheLiveResourcePriorityLow); |
638 } | 648 } |
639 } | 649 } |
640 | 650 |
641 bool ImageLoader::getImageAnimationPolicy(ImageResource*, ImageAnimationPolicy&
policy) | 651 bool ImageLoader::getImageAnimationPolicy(ImageAnimationPolicy& policy) |
642 { | 652 { |
643 if (!element()->document().settings()) | 653 if (!element()->document().settings()) |
644 return false; | 654 return false; |
645 | 655 |
646 policy = element()->document().settings()->imageAnimationPolicy(); | 656 policy = element()->document().settings()->imageAnimationPolicy(); |
647 return true; | 657 return true; |
648 } | 658 } |
649 | 659 |
650 void ImageLoader::dispatchPendingLoadEvents() | 660 void ImageLoader::dispatchPendingLoadEvents() |
651 { | 661 { |
(...skipping 15 matching lines...) Expand all Loading... |
667 | 677 |
668 void ImageLoader::sourceImageChanged() | 678 void ImageLoader::sourceImageChanged() |
669 { | 679 { |
670 for (auto& client : m_clients) { | 680 for (auto& client : m_clients) { |
671 ImageLoaderClient* handle = client; | 681 ImageLoaderClient* handle = client; |
672 handle->notifyImageSourceChanged(); | 682 handle->notifyImageSourceChanged(); |
673 } | 683 } |
674 } | 684 } |
675 | 685 |
676 } // namespace blink | 686 } // namespace blink |
OLD | NEW |