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

Side by Side Diff: Source/core/loader/ImageLoader.cpp

Issue 20473002: Update RenderImage when the image src is cleared (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Test case is modified, and slight change, review needed Created 7 years, 4 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) 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 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 void ImageLoader::updateFromElement() 142 void ImageLoader::updateFromElement()
143 { 143 {
144 // If we're not making renderers for the page, then don't load images. We d on't want to slow 144 // If we're not making renderers for the page, then don't load images. We d on't want to slow
145 // down the raw HTML parsing case by loading images we don't intend to displ ay. 145 // down the raw HTML parsing case by loading images we don't intend to displ ay.
146 Document* document = m_element->document(); 146 Document* document = m_element->document();
147 if (!document->renderer()) 147 if (!document->renderer())
148 return; 148 return;
149 149
150 AtomicString attr = m_element->imageSourceURL(); 150 AtomicString attr = m_element->imageSourceURL();
151 151
152 if (attr == m_failedLoadURL) 152 if (!m_failedLoadURL.isEmpty() && attr == m_failedLoadURL)
153 return; 153 return;
154 154
155 // Do not load any image if the 'src' attribute is missing or if it is 155 // Do not load any image if the 'src' attribute is missing or if it is
156 // an empty string. 156 // an empty string.
157 ResourcePtr<CachedImage> newImage = 0; 157 ResourcePtr<CachedImage> newImage = 0;
158 if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { 158 if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) {
159 FetchRequest request(ResourceRequest(document->completeURL(sourceURI(att r))), element()->localName()); 159 FetchRequest request(ResourceRequest(document->completeURL(sourceURI(att r))), element()->localName());
160 160
161 String crossOriginMode = m_element->fastGetAttribute(HTMLNames::crossori ginAttr); 161 String crossOriginMode = m_element->fastGetAttribute(HTMLNames::crossori ginAttr);
162 if (!crossOriginMode.isNull()) { 162 if (!crossOriginMode.isNull()) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 dispatchPendingBeforeLoadEvent(); 222 dispatchPendingBeforeLoadEvent();
223 else 223 else
224 beforeLoadEventSender().dispatchEventSoon(this); 224 beforeLoadEventSender().dispatchEventSoon(this);
225 } else 225 } else
226 updateRenderer(); 226 updateRenderer();
227 227
228 // If newImage is cached, addClient() will result in the load event 228 // If newImage is cached, addClient() will result in the load event
229 // being queued to fire. Ensure this happens after beforeload is 229 // being queued to fire. Ensure this happens after beforeload is
230 // dispatched. 230 // dispatched.
231 newImage->addClient(this); 231 newImage->addClient(this);
232 } else {
233 updateRenderer();
232 } 234 }
235
233 if (oldImage) 236 if (oldImage)
234 oldImage->removeClient(this); 237 oldImage->removeClient(this);
235 } 238 }
236 239
237 if (RenderImageResource* imageResource = renderImageResource()) 240 if (RenderImageResource* imageResource = renderImageResource())
238 imageResource->resetAnimation(); 241 imageResource->resetAnimation();
239 242
240 // Only consider updating the protection ref-count of the Element immediatel y before returning 243 // Only consider updating the protection ref-count of the Element immediatel y before returning
241 // from this function as doing so might result in the destruction of this Im ageLoader. 244 // from this function as doing so might result in the destruction of this Im ageLoader.
242 updatedHasPendingEvent(); 245 updatedHasPendingEvent();
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 clearFailedLoadURL(); 446 clearFailedLoadURL();
444 setImage(0); 447 setImage(0);
445 } 448 }
446 449
447 inline void ImageLoader::clearFailedLoadURL() 450 inline void ImageLoader::clearFailedLoadURL()
448 { 451 {
449 m_failedLoadURL = AtomicString(); 452 m_failedLoadURL = AtomicString();
450 } 453 }
451 454
452 } 455 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698