<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[163457] trunk/Source/WebCore</title>
</head>
<body>
<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; }
#msg dl a { font-weight: bold}
#msg dl a:link { color:#fc3; }
#msg dl a:active { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/163457">163457</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2014-02-05 10:25:26 -0800 (Wed, 05 Feb 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>CTTE: ImageLoader is always owned by an Element.
<https://webkit.org/b/128254>
- Codify this by making the constructor take Element& or better.
- Make element() return Element&.
- Marked HTMLImageLoader and SVGImageLoader final.
- Made the ImageLoader constructor protected.
Reviewed by Sam Weinig.
* html/HTMLEmbedElement.cpp:
(WebCore::HTMLEmbedElement::parseAttribute):
* html/HTMLImageElement.cpp:
(WebCore::HTMLImageElement::HTMLImageElement):
* html/HTMLImageLoader.cpp:
(WebCore::HTMLImageLoader::HTMLImageLoader):
(WebCore::HTMLImageLoader::dispatchLoadEvent):
(WebCore::HTMLImageLoader::sourceURI):
(WebCore::HTMLImageLoader::notifyFinished):
* html/HTMLImageLoader.h:
* html/HTMLInputElement.cpp:
(WebCore::HTMLInputElement::imageLoader):
* html/HTMLObjectElement.cpp:
(WebCore::HTMLObjectElement::parseAttribute):
* html/HTMLPlugInImageElement.cpp:
(WebCore::HTMLPlugInImageElement::startLoadingImage):
* html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::didAttachRenderers):
(WebCore::HTMLVideoElement::parseAttribute):
* loader/ImageLoader.cpp:
(WebCore::ImageLoader::ImageLoader):
(WebCore::ImageLoader::~ImageLoader):
(WebCore::ImageLoader::updateFromElement):
(WebCore::ImageLoader::notifyFinished):
(WebCore::ImageLoader::renderImageResource):
(WebCore::ImageLoader::updatedHasPendingEvent):
(WebCore::ImageLoader::timerFired):
(WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
(WebCore::ImageLoader::dispatchPendingLoadEvent):
(WebCore::ImageLoader::dispatchPendingErrorEvent):
* loader/ImageLoader.h:
(WebCore::ImageLoader::element):
* svg/SVGImageElement.cpp:
(WebCore::SVGImageElement::SVGImageElement):
* svg/SVGImageLoader.cpp:
(WebCore::SVGImageLoader::SVGImageLoader):
(WebCore::SVGImageLoader::~SVGImageLoader):
(WebCore::SVGImageLoader::dispatchLoadEvent):
(WebCore::SVGImageLoader::sourceURI):
* svg/SVGImageLoader.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLEmbedElementcpp">trunk/Source/WebCore/html/HTMLEmbedElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageElementcpp">trunk/Source/WebCore/html/HTMLImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageLoadercpp">trunk/Source/WebCore/html/HTMLImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLImageLoaderh">trunk/Source/WebCore/html/HTMLImageLoader.h</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLInputElementcpp">trunk/Source/WebCore/html/HTMLInputElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLObjectElementcpp">trunk/Source/WebCore/html/HTMLObjectElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLPlugInImageElementcpp">trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCorehtmlHTMLVideoElementcpp">trunk/Source/WebCore/html/HTMLVideoElement.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderImageLoadercpp">trunk/Source/WebCore/loader/ImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderImageLoaderh">trunk/Source/WebCore/loader/ImageLoader.h</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageElementcpp">trunk/Source/WebCore/svg/SVGImageElement.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageLoadercpp">trunk/Source/WebCore/svg/SVGImageLoader.cpp</a></li>
<li><a href="#trunkSourceWebCoresvgSVGImageLoaderh">trunk/Source/WebCore/svg/SVGImageLoader.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/ChangeLog        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -1,3 +1,56 @@
</span><ins>+2014-02-05 Andreas Kling <akling@apple.com>
+
+ CTTE: ImageLoader is always owned by an Element.
+ <https://webkit.org/b/128254>
+
+ - Codify this by making the constructor take Element& or better.
+ - Make element() return Element&.
+ - Marked HTMLImageLoader and SVGImageLoader final.
+ - Made the ImageLoader constructor protected.
+
+ Reviewed by Sam Weinig.
+
+ * html/HTMLEmbedElement.cpp:
+ (WebCore::HTMLEmbedElement::parseAttribute):
+ * html/HTMLImageElement.cpp:
+ (WebCore::HTMLImageElement::HTMLImageElement):
+ * html/HTMLImageLoader.cpp:
+ (WebCore::HTMLImageLoader::HTMLImageLoader):
+ (WebCore::HTMLImageLoader::dispatchLoadEvent):
+ (WebCore::HTMLImageLoader::sourceURI):
+ (WebCore::HTMLImageLoader::notifyFinished):
+ * html/HTMLImageLoader.h:
+ * html/HTMLInputElement.cpp:
+ (WebCore::HTMLInputElement::imageLoader):
+ * html/HTMLObjectElement.cpp:
+ (WebCore::HTMLObjectElement::parseAttribute):
+ * html/HTMLPlugInImageElement.cpp:
+ (WebCore::HTMLPlugInImageElement::startLoadingImage):
+ * html/HTMLVideoElement.cpp:
+ (WebCore::HTMLVideoElement::didAttachRenderers):
+ (WebCore::HTMLVideoElement::parseAttribute):
+ * loader/ImageLoader.cpp:
+ (WebCore::ImageLoader::ImageLoader):
+ (WebCore::ImageLoader::~ImageLoader):
+ (WebCore::ImageLoader::updateFromElement):
+ (WebCore::ImageLoader::notifyFinished):
+ (WebCore::ImageLoader::renderImageResource):
+ (WebCore::ImageLoader::updatedHasPendingEvent):
+ (WebCore::ImageLoader::timerFired):
+ (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent):
+ (WebCore::ImageLoader::dispatchPendingLoadEvent):
+ (WebCore::ImageLoader::dispatchPendingErrorEvent):
+ * loader/ImageLoader.h:
+ (WebCore::ImageLoader::element):
+ * svg/SVGImageElement.cpp:
+ (WebCore::SVGImageElement::SVGImageElement):
+ * svg/SVGImageLoader.cpp:
+ (WebCore::SVGImageLoader::SVGImageLoader):
+ (WebCore::SVGImageLoader::~SVGImageLoader):
+ (WebCore::SVGImageLoader::dispatchLoadEvent):
+ (WebCore::SVGImageLoader::sourceURI):
+ * svg/SVGImageLoader.h:
+
</ins><span class="cx"> 2014-02-05 Sergio Correia <sergio.correia@openbossa.org>
</span><span class="cx">
</span><span class="cx"> SVG preserveAspectRatio=none is not honored.
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLEmbedElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLEmbedElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLEmbedElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLEmbedElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -108,7 +108,7 @@
</span><span class="cx"> document().updateStyleIfNeeded();
</span><span class="cx"> if (renderer() && isImageType()) {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> m_imageLoader->updateFromElementIgnoringPreviousError();
</span><span class="cx"> }
</span><span class="cx"> } else
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLImageElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -42,7 +42,7 @@
</span><span class="cx">
</span><span class="cx"> HTMLImageElement::HTMLImageElement(const QualifiedName& tagName, Document& document, HTMLFormElement* form)
</span><span class="cx"> : HTMLElement(tagName, document)
</span><del>- , m_imageLoader(this)
</del><ins>+ , m_imageLoader(*this)
</ins><span class="cx"> , m_form(form)
</span><span class="cx"> , m_compositeOperator(CompositeSourceOver)
</span><span class="cx"> , m_imageDevicePixelRatio(1.0f)
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageLoader.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageLoader.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLImageLoader.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -37,8 +37,8 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-HTMLImageLoader::HTMLImageLoader(Element* node)
- : ImageLoader(node)
</del><ins>+HTMLImageLoader::HTMLImageLoader(Element& element)
+ : ImageLoader(element)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -55,13 +55,13 @@
</span><span class="cx"> bool errorOccurred = image()->errorOccurred();
</span><span class="cx"> if (!errorOccurred && image()->response().httpStatusCode() >= 400)
</span><span class="cx"> errorOccurred = isHTMLObjectElement(element()); // An <object> considers a 404 to be an error and should fire onerror.
</span><del>- element()->dispatchEvent(Event::create(errorOccurred ? eventNames().errorEvent : eventNames().loadEvent, false, false));
</del><ins>+ element().dispatchEvent(Event::create(errorOccurred ? eventNames().errorEvent : eventNames().loadEvent, false, false));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String HTMLImageLoader::sourceURI(const AtomicString& attr) const
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(DASHBOARD_SUPPORT)
</span><del>- Settings* settings = element()->document().settings();
</del><ins>+ Settings* settings = element().document().settings();
</ins><span class="cx"> if (settings && settings->usesDashboardBackwardCompatibilityMode() && attr.length() > 7 && attr.startsWith("url(\"") && attr.endsWith("\")"))
</span><span class="cx"> return attr.string().substring(5, attr.length() - 7);
</span><span class="cx"> #endif
</span><span class="lines">@@ -73,20 +73,20 @@
</span><span class="cx"> {
</span><span class="cx"> CachedImage* cachedImage = image();
</span><span class="cx">
</span><del>- RefPtr<Element> element = this->element();
</del><ins>+ Ref<Element> protect(element());
</ins><span class="cx"> ImageLoader::notifyFinished(cachedImage);
</span><span class="cx">
</span><span class="cx"> bool loadError = cachedImage->errorOccurred() || cachedImage->response().httpStatusCode() >= 400;
</span><span class="cx"> if (!loadError) {
</span><del>- if (!element->inDocument()) {
</del><ins>+ if (!element().inDocument()) {
</ins><span class="cx"> JSC::VM* vm = JSDOMWindowBase::commonVM();
</span><span class="cx"> JSC::JSLockHolder lock(vm);
</span><span class="cx"> vm->heap.reportExtraMemoryCost(cachedImage->encodedSize());
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>- if (loadError && isHTMLObjectElement(element.get()))
- toHTMLObjectElement(element.get())->renderFallbackContent();
</del><ins>+ if (loadError && isHTMLObjectElement(element()))
+ toHTMLObjectElement(element()).renderFallbackContent();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLImageLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLImageLoader.h (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLImageLoader.h        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLImageLoader.h        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -27,9 +27,9 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-class HTMLImageLoader : public ImageLoader {
</del><ins>+class HTMLImageLoader final : public ImageLoader {
</ins><span class="cx"> public:
</span><del>- HTMLImageLoader(Element*);
</del><ins>+ explicit HTMLImageLoader(Element&);
</ins><span class="cx"> virtual ~HTMLImageLoader();
</span><span class="cx">
</span><span class="cx"> virtual void dispatchLoadEvent() override;
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLInputElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLInputElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLInputElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLInputElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -142,7 +142,7 @@
</span><span class="cx"> HTMLImageLoader* HTMLInputElement::imageLoader()
</span><span class="cx"> {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> return m_imageLoader.get();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLObjectElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLObjectElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLObjectElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLObjectElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -120,7 +120,7 @@
</span><span class="cx"> setNeedsWidgetUpdate(true);
</span><span class="cx"> if (isImageType()) {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> m_imageLoader->updateFromElementIgnoringPreviousError();
</span><span class="cx"> }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLPlugInImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLPlugInImageElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -329,7 +329,7 @@
</span><span class="cx"> void HTMLPlugInImageElement::startLoadingImage()
</span><span class="cx"> {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> m_imageLoader->updateFromElement();
</span><span class="cx"> }
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCorehtmlHTMLVideoElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/html/HTMLVideoElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/html/HTMLVideoElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/html/HTMLVideoElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -86,7 +86,7 @@
</span><span class="cx"> updateDisplayState();
</span><span class="cx"> if (shouldDisplayPosterImage()) {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> m_imageLoader->updateFromElement();
</span><span class="cx"> if (renderer())
</span><span class="cx"> toRenderImage(renderer())->imageResource().setCachedImage(m_imageLoader->image());
</span><span class="lines">@@ -125,7 +125,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> if (shouldDisplayPosterImage()) {
</span><span class="cx"> if (!m_imageLoader)
</span><del>- m_imageLoader = adoptPtr(new HTMLImageLoader(this));
</del><ins>+ m_imageLoader = adoptPtr(new HTMLImageLoader(*this));
</ins><span class="cx"> m_imageLoader->updateFromElementIgnoringPreviousError();
</span><span class="cx"> } else {
</span><span class="cx"> if (renderer())
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ImageLoader.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ImageLoader.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/loader/ImageLoader.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -53,8 +53,7 @@
</span><span class="cx"> {
</span><span class="cx"> if (!p)
</span><span class="cx"> return;
</span><del>- ASSERT(p->element());
- ValueCheck<WebCore::Element*>::checkConsistency(p->element());
</del><ins>+ ValueCheck<WebCore::Element*>::checkConsistency(&p->element());
</ins><span class="cx"> }
</span><span class="cx"> };
</span><span class="cx">
</span><span class="lines">@@ -87,7 +86,7 @@
</span><span class="cx"> return frame && frame->loader().pageDismissalEventBeingDispatched() != FrameLoader::NoDismissal;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-ImageLoader::ImageLoader(Element* element)
</del><ins>+ImageLoader::ImageLoader(Element& element)
</ins><span class="cx"> : m_element(element)
</span><span class="cx"> , m_image(0)
</span><span class="cx"> , m_derefElementTimer(this, &ImageLoader::timerFired)
</span><span class="lines">@@ -120,7 +119,7 @@
</span><span class="cx"> // If the ImageLoader is being destroyed but it is still protecting its image-loading Element,
</span><span class="cx"> // remove that protection here.
</span><span class="cx"> if (m_elementIsProtected)
</span><del>- m_element->deref();
</del><ins>+ element().deref();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ImageLoader::setImage(CachedImage* newImage)
</span><span class="lines">@@ -165,11 +164,11 @@
</span><span class="cx"> {
</span><span class="cx"> // If we're not making renderers for the page, then don't load images. We don't want to slow
</span><span class="cx"> // down the raw HTML parsing case by loading images we don't intend to display.
</span><del>- Document& document = m_element->document();
</del><ins>+ Document& document = element().document();
</ins><span class="cx"> if (!document.hasLivingRenderTree())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- AtomicString attr = m_element->imageSourceURL();
</del><ins>+ AtomicString attr = element().imageSourceURL();
</ins><span class="cx">
</span><span class="cx"> if (attr == m_failedLoadURL)
</span><span class="cx"> return;
</span><span class="lines">@@ -179,9 +178,9 @@
</span><span class="cx"> CachedResourceHandle<CachedImage> newImage = 0;
</span><span class="cx"> if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) {
</span><span class="cx"> CachedResourceRequest request(ResourceRequest(document.completeURL(sourceURI(attr))));
</span><del>- request.setInitiator(element());
</del><ins>+ request.setInitiator(&element());
</ins><span class="cx">
</span><del>- String crossOriginMode = m_element->fastGetAttribute(HTMLNames::crossoriginAttr);
</del><ins>+ String crossOriginMode = element().fastGetAttribute(HTMLNames::crossoriginAttr);
</ins><span class="cx"> if (!crossOriginMode.isNull()) {
</span><span class="cx"> StoredCredentials allowCredentials = equalIgnoringCase(crossOriginMode, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials;
</span><span class="cx"> updateRequestForAccessControl(request.mutableResourceRequest(), document.securityOrigin(), allowCredentials);
</span><span class="lines">@@ -284,9 +283,9 @@
</span><span class="cx"> if (!m_hasPendingLoadEvent)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- if (m_element->fastHasAttribute(HTMLNames::crossoriginAttr)
- && !m_element->document().securityOrigin()->canRequest(image()->response().url())
- && !resource->passesAccessControlCheck(m_element->document().securityOrigin())) {
</del><ins>+ if (element().fastHasAttribute(HTMLNames::crossoriginAttr)
+ && !element().document().securityOrigin()->canRequest(image()->response().url())
+ && !resource->passesAccessControlCheck(element().document().securityOrigin())) {
</ins><span class="cx">
</span><span class="cx"> setImageWithoutConsideringPendingLoadEvent(0);
</span><span class="cx">
</span><span class="lines">@@ -294,7 +293,7 @@
</span><span class="cx"> errorEventSender().dispatchEventSoon(this);
</span><span class="cx">
</span><span class="cx"> DEFINE_STATIC_LOCAL(String, consoleMessage, (ASCIILiteral("Cross-origin image load denied by Cross-Origin Resource Sharing policy.")));
</span><del>- m_element->document().addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, consoleMessage);
</del><ins>+ element().document().addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, consoleMessage);
</ins><span class="cx">
</span><span class="cx"> ASSERT(!m_hasPendingLoadEvent);
</span><span class="cx">
</span><span class="lines">@@ -317,7 +316,7 @@
</span><span class="cx">
</span><span class="cx"> RenderImageResource* ImageLoader::renderImageResource()
</span><span class="cx"> {
</span><del>- auto renderer = m_element->renderer();
</del><ins>+ auto renderer = element().renderer();
</ins><span class="cx"> if (!renderer)
</span><span class="cx"> return nullptr;
</span><span class="cx">
</span><span class="lines">@@ -367,7 +366,7 @@
</span><span class="cx"> if (m_derefElementTimer.isActive())
</span><span class="cx"> m_derefElementTimer.stop();
</span><span class="cx"> else
</span><del>- m_element->ref();
</del><ins>+ element().ref();
</ins><span class="cx"> } else {
</span><span class="cx"> ASSERT(!m_derefElementTimer.isActive());
</span><span class="cx"> m_derefElementTimer.startOneShot(0);
</span><span class="lines">@@ -376,7 +375,7 @@
</span><span class="cx">
</span><span class="cx"> void ImageLoader::timerFired(Timer<ImageLoader>&)
</span><span class="cx"> {
</span><del>- m_element->deref();
</del><ins>+ element().deref();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void ImageLoader::dispatchPendingEvent(ImageEventSender* eventSender)
</span><span class="lines">@@ -397,10 +396,10 @@
</span><span class="cx"> return;
</span><span class="cx"> if (!m_image)
</span><span class="cx"> return;
</span><del>- if (!m_element->document().hasLivingRenderTree())
</del><ins>+ if (!element().document().hasLivingRenderTree())
</ins><span class="cx"> return;
</span><span class="cx"> m_hasPendingBeforeLoadEvent = false;
</span><del>- if (m_element->dispatchBeforeLoadEvent(m_image->url())) {
</del><ins>+ if (element().dispatchBeforeLoadEvent(m_image->url())) {
</ins><span class="cx"> updateRenderer();
</span><span class="cx"> return;
</span><span class="cx"> }
</span><span class="lines">@@ -412,8 +411,8 @@
</span><span class="cx"> loadEventSender().cancelEvent(this);
</span><span class="cx"> m_hasPendingLoadEvent = false;
</span><span class="cx">
</span><del>- if (isHTMLObjectElement(m_element))
- toHTMLObjectElement(m_element)->renderFallbackContent();
</del><ins>+ if (isHTMLObjectElement(element()))
+ toHTMLObjectElement(element()).renderFallbackContent();
</ins><span class="cx">
</span><span class="cx"> // Only consider updating the protection ref-count of the Element immediately before returning
</span><span class="cx"> // from this function as doing so might result in the destruction of this ImageLoader.
</span><span class="lines">@@ -427,7 +426,7 @@
</span><span class="cx"> if (!m_image)
</span><span class="cx"> return;
</span><span class="cx"> m_hasPendingLoadEvent = false;
</span><del>- if (m_element->document().hasLivingRenderTree())
</del><ins>+ if (element().document().hasLivingRenderTree())
</ins><span class="cx"> dispatchLoadEvent();
</span><span class="cx">
</span><span class="cx"> // Only consider updating the protection ref-count of the Element immediately before returning
</span><span class="lines">@@ -440,8 +439,8 @@
</span><span class="cx"> if (!m_hasPendingErrorEvent)
</span><span class="cx"> return;
</span><span class="cx"> m_hasPendingErrorEvent = false;
</span><del>- if (m_element->document().hasLivingRenderTree())
- m_element->dispatchEvent(Event::create(eventNames().errorEvent, false, false));
</del><ins>+ if (element().document().hasLivingRenderTree())
+ element().dispatchEvent(Event::create(eventNames().errorEvent, false, false));
</ins><span class="cx">
</span><span class="cx"> // Only consider updating the protection ref-count of the Element immediately before returning
</span><span class="cx"> // from this function as doing so might result in the destruction of this ImageLoader.
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderImageLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/ImageLoader.h (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/ImageLoader.h        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/loader/ImageLoader.h        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -39,7 +39,6 @@
</span><span class="cx">
</span><span class="cx"> class ImageLoader : public CachedImageClient {
</span><span class="cx"> public:
</span><del>- explicit ImageLoader(Element*);
</del><span class="cx"> virtual ~ImageLoader();
</span><span class="cx">
</span><span class="cx"> // This function should be called when the element is attached to a document; starts
</span><span class="lines">@@ -52,7 +51,9 @@
</span><span class="cx">
</span><span class="cx"> void elementDidMoveToNewDocument();
</span><span class="cx">
</span><del>- Element* element() const { return m_element; }
</del><ins>+ Element& element() { return m_element; }
+ const Element& element() const { return m_element; }
+
</ins><span class="cx"> bool imageComplete() const { return m_imageComplete; }
</span><span class="cx">
</span><span class="cx"> CachedImage* image() const { return m_image.get(); }
</span><span class="lines">@@ -70,6 +71,7 @@
</span><span class="cx"> static void dispatchPendingErrorEvents();
</span><span class="cx">
</span><span class="cx"> protected:
</span><ins>+ explicit ImageLoader(Element&);
</ins><span class="cx"> virtual void notifyFinished(CachedResource*) override;
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="lines">@@ -90,7 +92,7 @@
</span><span class="cx">
</span><span class="cx"> void timerFired(Timer<ImageLoader>&);
</span><span class="cx">
</span><del>- Element* m_element;
</del><ins>+ Element& m_element;
</ins><span class="cx"> CachedResourceHandle<CachedImage> m_image;
</span><span class="cx"> Timer<ImageLoader> m_derefElementTimer;
</span><span class="cx"> AtomicString m_failedLoadURL;
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageElementcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageElement.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageElement.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/svg/SVGImageElement.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx"> , m_y(LengthModeHeight)
</span><span class="cx"> , m_width(LengthModeWidth)
</span><span class="cx"> , m_height(LengthModeHeight)
</span><del>- , m_imageLoader(this)
</del><ins>+ , m_imageLoader(*this)
</ins><span class="cx"> {
</span><span class="cx"> registerAnimatedPropertiesForSVGImageElement();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageLoadercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageLoader.cpp (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageLoader.cpp        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/svg/SVGImageLoader.cpp        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -25,33 +25,35 @@
</span><span class="cx"> #include "Event.h"
</span><span class="cx"> #include "EventNames.h"
</span><span class="cx"> #include "HTMLParserIdioms.h"
</span><del>-#include "RenderImage.h"
</del><span class="cx"> #include "SVGImageElement.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-SVGImageLoader::SVGImageLoader(SVGImageElement* node)
- : ImageLoader(node)
</del><ins>+SVGImageLoader::SVGImageLoader(SVGImageElement& element)
+ : ImageLoader(element)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+SVGImageLoader::~SVGImageLoader()
+{
+}
+
</ins><span class="cx"> void SVGImageLoader::dispatchLoadEvent()
</span><span class="cx"> {
</span><span class="cx"> if (image()->errorOccurred())
</span><del>- element()->dispatchEvent(Event::create(eventNames().errorEvent, false, false));
</del><ins>+ element().dispatchEvent(Event::create(eventNames().errorEvent, false, false));
</ins><span class="cx"> else {
</span><del>- SVGImageElement* imageElement = toSVGImageElement(element());
- if (imageElement->externalResourcesRequiredBaseValue())
- imageElement->sendSVGLoadEventIfPossible(true);
</del><ins>+ if (toSVGImageElement(element()).externalResourcesRequiredBaseValue())
+ toSVGImageElement(ImageLoader::element()).sendSVGLoadEventIfPossible(true);
</ins><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> String SVGImageLoader::sourceURI(const AtomicString& attribute) const
</span><span class="cx"> {
</span><del>- URL base = element()->baseURI();
</del><ins>+ URL base = element().baseURI();
</ins><span class="cx"> if (base.isValid())
</span><span class="cx"> return URL(base, stripLeadingAndTrailingHTMLSpaces(attribute)).string();
</span><del>- return element()->document().completeURL(stripLeadingAndTrailingHTMLSpaces(attribute));
</del><ins>+ return element().document().completeURL(stripLeadingAndTrailingHTMLSpaces(attribute));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCoresvgSVGImageLoaderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/svg/SVGImageLoader.h (163456 => 163457)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/svg/SVGImageLoader.h        2014-02-05 18:11:33 UTC (rev 163456)
+++ trunk/Source/WebCore/svg/SVGImageLoader.h        2014-02-05 18:25:26 UTC (rev 163457)
</span><span class="lines">@@ -26,9 +26,10 @@
</span><span class="cx">
</span><span class="cx"> class SVGImageElement;
</span><span class="cx">
</span><del>-class SVGImageLoader : public ImageLoader {
</del><ins>+class SVGImageLoader final : public ImageLoader {
</ins><span class="cx"> public:
</span><del>- SVGImageLoader(SVGImageElement*);
</del><ins>+ explicit SVGImageLoader(SVGImageElement&);
+ virtual ~SVGImageLoader();
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> virtual void dispatchLoadEvent() override;
</span></span></pre>
</div>
</div>
</body>
</html>