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 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
153 | 153 |
154 // Do not load any image if the 'src' attribute is missing or if it is | 154 // Do not load any image if the 'src' attribute is missing or if it is |
155 // an empty string. | 155 // an empty string. |
156 ResourcePtr<ImageResource> newImage = 0; | 156 ResourcePtr<ImageResource> newImage = 0; |
157 if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { | 157 if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { |
158 FetchRequest request(ResourceRequest(document.completeURL(sourceURI(attr
))), element()->localName()); | 158 FetchRequest request(ResourceRequest(document.completeURL(sourceURI(attr
))), element()->localName()); |
159 | 159 |
160 AtomicString crossOriginMode = m_element->fastGetAttribute(HTMLNames::cr
ossoriginAttr); | 160 AtomicString crossOriginMode = m_element->fastGetAttribute(HTMLNames::cr
ossoriginAttr); |
161 if (!crossOriginMode.isNull()) { | 161 if (!crossOriginMode.isNull()) { |
162 StoredCredentials allowCredentials = equalIgnoringCase(crossOriginMo
de, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials; | 162 StoredCredentials allowCredentials = equalIgnoringCase(crossOriginMo
de, "use-credentials") ? AllowStoredCredentials : DoNotAllowStoredCredentials; |
163 updateRequestForAccessControl(request.mutableResourceRequest(), docu
ment.securityOrigin(), allowCredentials); | 163 request.setCrossOriginAccessControl(document.securityOrigin(), allow
Credentials); |
164 } | 164 } |
165 | 165 |
166 if (m_loadManually) { | 166 if (m_loadManually) { |
167 bool autoLoadOtherImages = document.fetcher()->autoLoadImages(); | 167 bool autoLoadOtherImages = document.fetcher()->autoLoadImages(); |
168 document.fetcher()->setAutoLoadImages(false); | 168 document.fetcher()->setAutoLoadImages(false); |
169 newImage = new ImageResource(request.resourceRequest()); | 169 newImage = new ImageResource(request.resourceRequest()); |
170 newImage->setLoading(true); | 170 newImage->setLoading(true); |
171 document.fetcher()->m_documentResources.set(newImage->url(), newImag
e.get()); | 171 document.fetcher()->m_documentResources.set(newImage->url(), newImag
e.get()); |
172 document.fetcher()->setAutoLoadImages(autoLoadOtherImages); | 172 document.fetcher()->setAutoLoadImages(autoLoadOtherImages); |
173 } else { | 173 } else { |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 ASSERT(m_failedLoadURL.isEmpty()); | 257 ASSERT(m_failedLoadURL.isEmpty()); |
258 ASSERT(resource == m_image.get()); | 258 ASSERT(resource == m_image.get()); |
259 | 259 |
260 m_imageComplete = true; | 260 m_imageComplete = true; |
261 if (!hasPendingBeforeLoadEvent()) | 261 if (!hasPendingBeforeLoadEvent()) |
262 updateRenderer(); | 262 updateRenderer(); |
263 | 263 |
264 if (!m_hasPendingLoadEvent) | 264 if (!m_hasPendingLoadEvent) |
265 return; | 265 return; |
266 | 266 |
267 if (m_element->fastHasAttribute(HTMLNames::crossoriginAttr) | 267 if (resource->errorOccurred()) { |
268 && !m_element->document().securityOrigin()->canRequest(image()->response
().url()) | 268 loadEventSender().cancelEvent(this); |
269 && !resource->passesAccessControlCheck(m_element->document().securityOri
gin())) { | 269 m_hasPendingLoadEvent = false; |
270 | |
271 setImageWithoutConsideringPendingLoadEvent(0); | |
272 | 270 |
273 m_hasPendingErrorEvent = true; | 271 m_hasPendingErrorEvent = true; |
274 errorEventSender().dispatchEventSoon(this); | 272 errorEventSender().dispatchEventSoon(this); |
275 | 273 |
276 DEFINE_STATIC_LOCAL(String, consoleMessage, ("Cross-origin image load de
nied by Cross-Origin Resource Sharing policy.")); | |
277 m_element->document().addConsoleMessage(SecurityMessageSource, ErrorMess
ageLevel, consoleMessage); | |
278 | |
279 ASSERT(!m_hasPendingLoadEvent); | |
280 | |
281 // Only consider updating the protection ref-count of the Element immedi
ately before returning | 274 // Only consider updating the protection ref-count of the Element immedi
ately before returning |
282 // from this function as doing so might result in the destruction of thi
s ImageLoader. | 275 // from this function as doing so might result in the destruction of thi
s ImageLoader. |
283 updatedHasPendingEvent(); | 276 updatedHasPendingEvent(); |
284 return; | 277 return; |
285 } | 278 } |
286 | |
287 if (resource->wasCanceled()) { | 279 if (resource->wasCanceled()) { |
288 m_hasPendingLoadEvent = false; | 280 m_hasPendingLoadEvent = false; |
289 // Only consider updating the protection ref-count of the Element immedi
ately before returning | 281 // Only consider updating the protection ref-count of the Element immedi
ately before returning |
290 // from this function as doing so might result in the destruction of thi
s ImageLoader. | 282 // from this function as doing so might result in the destruction of thi
s ImageLoader. |
291 updatedHasPendingEvent(); | 283 updatedHasPendingEvent(); |
292 return; | 284 return; |
293 } | 285 } |
294 if (resource->errorOccurred()) { | |
295 loadEventSender().cancelEvent(this); | |
296 m_hasPendingLoadEvent = false; | |
297 | |
298 m_hasPendingErrorEvent = true; | |
299 errorEventSender().dispatchEventSoon(this); | |
300 | |
301 // Only consider updating the protection ref-count of the Element immedi
ately before returning | |
302 // from this function as doing so might result in the destruction of thi
s ImageLoader. | |
303 updatedHasPendingEvent(); | |
304 return; | |
305 } | |
306 loadEventSender().dispatchEventSoon(this); | 286 loadEventSender().dispatchEventSoon(this); |
307 } | 287 } |
308 | 288 |
309 RenderImageResource* ImageLoader::renderImageResource() | 289 RenderImageResource* ImageLoader::renderImageResource() |
310 { | 290 { |
311 RenderObject* renderer = m_element->renderer(); | 291 RenderObject* renderer = m_element->renderer(); |
312 | 292 |
313 if (!renderer) | 293 if (!renderer) |
314 return 0; | 294 return 0; |
315 | 295 |
(...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
486 handle->notifyImageSourceChanged(); | 466 handle->notifyImageSourceChanged(); |
487 } | 467 } |
488 } | 468 } |
489 | 469 |
490 inline void ImageLoader::clearFailedLoadURL() | 470 inline void ImageLoader::clearFailedLoadURL() |
491 { | 471 { |
492 m_failedLoadURL = AtomicString(); | 472 m_failedLoadURL = AtomicString(); |
493 } | 473 } |
494 | 474 |
495 } | 475 } |
OLD | NEW |