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 17 matching lines...) Expand all Loading... |
28 #include "core/dom/IncrementLoadEventDelayCount.h" | 28 #include "core/dom/IncrementLoadEventDelayCount.h" |
29 #include "core/dom/Microtask.h" | 29 #include "core/dom/Microtask.h" |
30 #include "core/events/Event.h" | 30 #include "core/events/Event.h" |
31 #include "core/events/EventSender.h" | 31 #include "core/events/EventSender.h" |
32 #include "core/fetch/FetchRequest.h" | 32 #include "core/fetch/FetchRequest.h" |
33 #include "core/fetch/MemoryCache.h" | 33 #include "core/fetch/MemoryCache.h" |
34 #include "core/fetch/ResourceFetcher.h" | 34 #include "core/fetch/ResourceFetcher.h" |
35 #include "core/frame/LocalFrame.h" | 35 #include "core/frame/LocalFrame.h" |
36 #include "core/html/HTMLImageElement.h" | 36 #include "core/html/HTMLImageElement.h" |
37 #include "core/html/parser/HTMLParserIdioms.h" | 37 #include "core/html/parser/HTMLParserIdioms.h" |
| 38 #include "core/layout/LayoutImage.h" |
38 #include "core/layout/LayoutVideo.h" | 39 #include "core/layout/LayoutVideo.h" |
39 #include "core/rendering/RenderImage.h" | |
40 #include "core/rendering/svg/RenderSVGImage.h" | 40 #include "core/rendering/svg/RenderSVGImage.h" |
41 #include "platform/Logging.h" | 41 #include "platform/Logging.h" |
42 #include "platform/weborigin/SecurityOrigin.h" | 42 #include "platform/weborigin/SecurityOrigin.h" |
43 #include "public/platform/WebURLRequest.h" | 43 #include "public/platform/WebURLRequest.h" |
44 | 44 |
45 namespace blink { | 45 namespace blink { |
46 | 46 |
47 static ImageEventSender& loadEventSender() | 47 static ImageEventSender& loadEventSender() |
48 { | 48 { |
49 DEFINE_STATIC_LOCAL(ImageEventSender, sender, (EventTypeNames::load)); | 49 DEFINE_STATIC_LOCAL(ImageEventSender, sender, (EventTypeNames::load)); |
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
173 errorEventSender().cancelEvent(this); | 173 errorEventSender().cancelEvent(this); |
174 m_hasPendingErrorEvent = false; | 174 m_hasPendingErrorEvent = false; |
175 } | 175 } |
176 m_imageComplete = true; | 176 m_imageComplete = true; |
177 if (newImage) | 177 if (newImage) |
178 newImage->addClient(this); | 178 newImage->addClient(this); |
179 if (oldImage) | 179 if (oldImage) |
180 oldImage->removeClient(this); | 180 oldImage->removeClient(this); |
181 } | 181 } |
182 | 182 |
183 if (RenderImageResource* imageResource = renderImageResource()) | 183 if (LayoutImageResource* imageResource = layoutImageResource()) |
184 imageResource->resetAnimation(); | 184 imageResource->resetAnimation(); |
185 } | 185 } |
186 | 186 |
187 static void configureRequest(FetchRequest& request, ImageLoader::BypassMainWorld
Behavior bypassBehavior, Element& element) | 187 static void configureRequest(FetchRequest& request, ImageLoader::BypassMainWorld
Behavior bypassBehavior, Element& element) |
188 { | 188 { |
189 if (bypassBehavior == ImageLoader::BypassMainWorldCSP) | 189 if (bypassBehavior == ImageLoader::BypassMainWorldCSP) |
190 request.setContentSecurityCheck(DoNotCheckContentSecurityPolicy); | 190 request.setContentSecurityCheck(DoNotCheckContentSecurityPolicy); |
191 | 191 |
192 AtomicString crossOriginMode = element.fastGetAttribute(HTMLNames::crossorig
inAttr); | 192 AtomicString crossOriginMode = element.fastGetAttribute(HTMLNames::crossorig
inAttr); |
193 if (!crossOriginMode.isNull()) | 193 if (!crossOriginMode.isNull()) |
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
307 | 307 |
308 updateRenderer(); | 308 updateRenderer(); |
309 // If newImage exists and is cached, addClient() will result in the load
event | 309 // If newImage exists and is cached, addClient() will result in the load
event |
310 // being queued to fire. Ensure this happens after beforeload is dispatc
hed. | 310 // being queued to fire. Ensure this happens after beforeload is dispatc
hed. |
311 if (newImage) | 311 if (newImage) |
312 newImage->addClient(this); | 312 newImage->addClient(this); |
313 | 313 |
314 if (oldImage) | 314 if (oldImage) |
315 oldImage->removeClient(this); | 315 oldImage->removeClient(this); |
316 } else if (updateBehavior == UpdateSizeChanged && m_element->renderer() && m
_element->renderer()->isImage()) { | 316 } else if (updateBehavior == UpdateSizeChanged && m_element->renderer() && m
_element->renderer()->isImage()) { |
317 toRenderImage(m_element->renderer())->intrinsicSizeChanged(); | 317 toLayoutImage(m_element->renderer())->intrinsicSizeChanged(); |
318 } | 318 } |
319 | 319 |
320 if (RenderImageResource* imageResource = renderImageResource()) | 320 if (LayoutImageResource* imageResource = layoutImageResource()) |
321 imageResource->resetAnimation(); | 321 imageResource->resetAnimation(); |
322 | 322 |
323 // Only consider updating the protection ref-count of the Element immediatel
y before returning | 323 // Only consider updating the protection ref-count of the Element immediatel
y before returning |
324 // from this function as doing so might result in the destruction of this Im
ageLoader. | 324 // from this function as doing so might result in the destruction of this Im
ageLoader. |
325 updatedHasPendingEvent(); | 325 updatedHasPendingEvent(); |
326 } | 326 } |
327 | 327 |
328 void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior) | 328 void ImageLoader::updateFromElement(UpdateFromElementBehavior updateBehavior) |
329 { | 329 { |
330 AtomicString imageSourceURL = m_element->imageSourceURL(); | 330 AtomicString imageSourceURL = m_element->imageSourceURL(); |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 if (resource->wasCanceled()) { | 419 if (resource->wasCanceled()) { |
420 m_hasPendingLoadEvent = false; | 420 m_hasPendingLoadEvent = false; |
421 // Only consider updating the protection ref-count of the Element immedi
ately before returning | 421 // Only consider updating the protection ref-count of the Element immedi
ately before returning |
422 // from this function as doing so might result in the destruction of thi
s ImageLoader. | 422 // from this function as doing so might result in the destruction of thi
s ImageLoader. |
423 updatedHasPendingEvent(); | 423 updatedHasPendingEvent(); |
424 return; | 424 return; |
425 } | 425 } |
426 loadEventSender().dispatchEventSoon(this); | 426 loadEventSender().dispatchEventSoon(this); |
427 } | 427 } |
428 | 428 |
429 RenderImageResource* ImageLoader::renderImageResource() | 429 LayoutImageResource* ImageLoader::layoutImageResource() |
430 { | 430 { |
431 LayoutObject* renderer = m_element->renderer(); | 431 LayoutObject* renderer = m_element->renderer(); |
432 | 432 |
433 if (!renderer) | 433 if (!renderer) |
434 return 0; | 434 return 0; |
435 | 435 |
436 // We don't return style generated image because it doesn't belong to the Im
ageLoader. | 436 // We don't return style generated image because it doesn't belong to the Im
ageLoader. |
437 // See <https://bugs.webkit.org/show_bug.cgi?id=42840> | 437 // See <https://bugs.webkit.org/show_bug.cgi?id=42840> |
438 if (renderer->isImage() && !static_cast<RenderImage*>(renderer)->isGenerated
Content()) | 438 if (renderer->isImage() && !static_cast<LayoutImage*>(renderer)->isGenerated
Content()) |
439 return toRenderImage(renderer)->imageResource(); | 439 return toLayoutImage(renderer)->imageResource(); |
440 | 440 |
441 if (renderer->isSVGImage()) | 441 if (renderer->isSVGImage()) |
442 return toRenderSVGImage(renderer)->imageResource(); | 442 return toRenderSVGImage(renderer)->imageResource(); |
443 | 443 |
444 if (renderer->isVideo()) | 444 if (renderer->isVideo()) |
445 return toLayoutVideo(renderer)->imageResource(); | 445 return toLayoutVideo(renderer)->imageResource(); |
446 | 446 |
447 return 0; | 447 return 0; |
448 } | 448 } |
449 | 449 |
450 void ImageLoader::updateRenderer() | 450 void ImageLoader::updateRenderer() |
451 { | 451 { |
452 RenderImageResource* imageResource = renderImageResource(); | 452 LayoutImageResource* imageResource = layoutImageResource(); |
453 | 453 |
454 if (!imageResource) | 454 if (!imageResource) |
455 return; | 455 return; |
456 | 456 |
457 // Only update the renderer if it doesn't have an image or if what we have | 457 // Only update the renderer if it doesn't have an image or if what we have |
458 // is a complete image. This prevents flickering in the case where a dynami
c | 458 // is a complete image. This prevents flickering in the case where a dynami
c |
459 // change is happening between two images. | 459 // change is happening between two images. |
460 ImageResource* cachedImage = imageResource->cachedImage(); | 460 ImageResource* cachedImage = imageResource->cachedImage(); |
461 if (m_image != cachedImage && (m_imageComplete || !cachedImage)) | 461 if (m_image != cachedImage && (m_imageComplete || !cachedImage)) |
462 imageResource->setImageResource(m_image.get()); | 462 imageResource->setImageResource(m_image.get()); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
589 #endif | 589 #endif |
590 } | 590 } |
591 | 591 |
592 #if ENABLE(OILPAN) | 592 #if ENABLE(OILPAN) |
593 ImageLoader::ImageLoaderClientRemover::~ImageLoaderClientRemover() | 593 ImageLoader::ImageLoaderClientRemover::~ImageLoaderClientRemover() |
594 { | 594 { |
595 m_loader.willRemoveClient(m_client); | 595 m_loader.willRemoveClient(m_client); |
596 } | 596 } |
597 #endif | 597 #endif |
598 } | 598 } |
OLD | NEW |