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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
135 RawPtrWillBeWeakPersistent<ImageLoader> m_loader; | 135 RawPtrWillBeWeakPersistent<ImageLoader> m_loader; |
136 BypassMainWorldBehavior m_shouldBypassMainWorldCSP; | 136 BypassMainWorldBehavior m_shouldBypassMainWorldCSP; |
137 UpdateFromElementBehavior m_updateBehavior; | 137 UpdateFromElementBehavior m_updateBehavior; |
138 RefPtr<ScriptState> m_scriptState; | 138 RefPtr<ScriptState> m_scriptState; |
139 WeakPtrFactory<Task> m_weakFactory; | 139 WeakPtrFactory<Task> m_weakFactory; |
140 ReferrerPolicy m_referrerPolicy; | 140 ReferrerPolicy m_referrerPolicy; |
141 }; | 141 }; |
142 | 142 |
143 ImageLoader::ImageLoader(Element* element) | 143 ImageLoader::ImageLoader(Element* element) |
144 : m_element(element) | 144 : m_element(element) |
145 , m_image(0) | |
146 , m_derefElementTimer(this, &ImageLoader::timerFired) | 145 , m_derefElementTimer(this, &ImageLoader::timerFired) |
147 , m_hasPendingLoadEvent(false) | 146 , m_hasPendingLoadEvent(false) |
148 , m_hasPendingErrorEvent(false) | 147 , m_hasPendingErrorEvent(false) |
149 , m_imageComplete(true) | 148 , m_imageComplete(true) |
150 , m_loadingImageDocument(false) | 149 , m_loadingImageDocument(false) |
151 , m_elementIsProtected(false) | 150 , m_elementIsProtected(false) |
152 , m_suppressErrorEvents(false) | 151 , m_suppressErrorEvents(false) |
153 , m_highPriorityClientCount(0) | 152 , m_highPriorityClientCount(0) |
154 { | 153 { |
155 WTF_LOG(Timers, "new ImageLoader %p", this); | 154 WTF_LOG(Timers, "new ImageLoader %p", this); |
(...skipping 17 matching lines...) Expand all Loading... |
173 #if !ENABLE(OILPAN) | 172 #if !ENABLE(OILPAN) |
174 if (m_pendingTask) | 173 if (m_pendingTask) |
175 m_pendingTask->clearLoader(); | 174 m_pendingTask->clearLoader(); |
176 #endif | 175 #endif |
177 | 176 |
178 #if ENABLE(OILPAN) | 177 #if ENABLE(OILPAN) |
179 for (const auto& client : m_clients) | 178 for (const auto& client : m_clients) |
180 willRemoveClient(*client); | 179 willRemoveClient(*client); |
181 #endif | 180 #endif |
182 | 181 |
183 if (m_image) | 182 if (m_image) { |
184 m_image->removeClient(this); | 183 m_image->removeClient(this); |
| 184 m_image = nullptr; |
| 185 } |
185 | 186 |
186 #if !ENABLE(OILPAN) | 187 #if !ENABLE(OILPAN) |
187 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); | 188 ASSERT(m_hasPendingLoadEvent || !loadEventSender().hasPendingEvents(this)); |
188 if (m_hasPendingLoadEvent) | 189 if (m_hasPendingLoadEvent) |
189 loadEventSender().cancelEvent(this); | 190 loadEventSender().cancelEvent(this); |
190 | 191 |
191 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; | 192 ASSERT(m_hasPendingErrorEvent || !errorEventSender().hasPendingEvents(this))
; |
192 if (m_hasPendingErrorEvent) | 193 if (m_hasPendingErrorEvent) |
193 errorEventSender().cancelEvent(this); | 194 errorEventSender().cancelEvent(this); |
194 #endif | 195 #endif |
195 } | 196 } |
196 | 197 |
197 #if ENABLE(OILPAN) | 198 #if ENABLE(OILPAN) |
198 void ImageLoader::clearWeakMembers(Visitor* visitor) | 199 void ImageLoader::clearWeakMembers(Visitor* visitor) |
199 { | 200 { |
200 Vector<UntracedMember<ImageLoaderClient>> deadClients; | 201 Vector<UntracedMember<ImageLoaderClient>> deadClients; |
201 for (const auto& client : m_clients) { | 202 for (const auto& client : m_clients) { |
202 if (!Heap::isHeapObjectAlive(client)) { | 203 if (!Heap::isHeapObjectAlive(client)) { |
203 willRemoveClient(*client); | 204 willRemoveClient(*client); |
204 deadClients.append(client); | 205 deadClients.append(client); |
205 } | 206 } |
206 } | 207 } |
207 for (unsigned i = 0; i < deadClients.size(); ++i) | 208 for (unsigned i = 0; i < deadClients.size(); ++i) |
208 m_clients.remove(deadClients[i]); | 209 m_clients.remove(deadClients[i]); |
209 } | 210 } |
210 #endif | 211 #endif |
211 | 212 |
212 DEFINE_TRACE(ImageLoader) | 213 DEFINE_TRACE(ImageLoader) |
213 { | 214 { |
| 215 visitor->trace(m_image); |
214 visitor->trace(m_element); | 216 visitor->trace(m_element); |
215 #if ENABLE(OILPAN) | 217 #if ENABLE(OILPAN) |
216 visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMe
mbers>(this); | 218 visitor->template registerWeakMembers<ImageLoader, &ImageLoader::clearWeakMe
mbers>(this); |
217 #endif | 219 #endif |
218 } | 220 } |
219 | 221 |
220 void ImageLoader::setImage(ImageResource* newImage) | 222 void ImageLoader::setImage(ImageResource* newImage) |
221 { | 223 { |
222 setImageWithoutConsideringPendingLoadEvent(newImage); | 224 setImageWithoutConsideringPendingLoadEvent(newImage); |
223 | 225 |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 // Make sure to only decrement the count when we exit this function | 305 // Make sure to only decrement the count when we exit this function |
304 OwnPtr<IncrementLoadEventDelayCount> loadDelayCounter; | 306 OwnPtr<IncrementLoadEventDelayCount> loadDelayCounter; |
305 loadDelayCounter.swap(m_loadDelayCounter); | 307 loadDelayCounter.swap(m_loadDelayCounter); |
306 | 308 |
307 Document& document = m_element->document(); | 309 Document& document = m_element->document(); |
308 if (!document.isActive()) | 310 if (!document.isActive()) |
309 return; | 311 return; |
310 | 312 |
311 AtomicString imageSourceURL = m_element->imageSourceURL(); | 313 AtomicString imageSourceURL = m_element->imageSourceURL(); |
312 KURL url = imageSourceToKURL(imageSourceURL); | 314 KURL url = imageSourceToKURL(imageSourceURL); |
313 ResourcePtr<ImageResource> newImage = 0; | 315 RefPtrWillBeRawPtr<ImageResource> newImage = nullptr; |
314 RefPtrWillBeRawPtr<Element> protectElement(m_element.get()); | 316 RefPtrWillBeRawPtr<Element> protectElement(m_element.get()); |
315 if (!url.isNull()) { | 317 if (!url.isNull()) { |
316 // Unlike raw <img>, we block mixed content inside of <picture> or <img
srcset>. | 318 // Unlike raw <img>, we block mixed content inside of <picture> or <img
srcset>. |
317 ResourceLoaderOptions resourceLoaderOptions = ResourceFetcher::defaultRe
sourceOptions(); | 319 ResourceLoaderOptions resourceLoaderOptions = ResourceFetcher::defaultRe
sourceOptions(); |
318 ResourceRequest resourceRequest(url); | 320 ResourceRequest resourceRequest(url); |
319 resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsM
odeSameOrigin); | 321 resourceRequest.setFetchCredentialsMode(WebURLRequest::FetchCredentialsM
odeSameOrigin); |
320 if (updateBehavior == UpdateForcedReload) { | 322 if (updateBehavior == UpdateForcedReload) { |
321 resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadByp
assingCache); | 323 resourceRequest.setCachePolicy(ResourceRequestCachePolicy::ReloadByp
assingCache); |
322 resourceRequest.setLoFiState(WebURLRequest::LoFiOff); | 324 resourceRequest.setLoFiState(WebURLRequest::LoFiOff); |
323 // ImageLoader defers the load of images when in an ImageDocument. | 325 // ImageLoader defers the load of images when in an ImageDocument. |
(...skipping 29 matching lines...) Expand all Loading... |
353 clearFailedLoadURL(); | 355 clearFailedLoadURL(); |
354 } | 356 } |
355 } else { | 357 } else { |
356 if (!imageSourceURL.isNull()) { | 358 if (!imageSourceURL.isNull()) { |
357 // Fire an error event if the url string is not empty, but the KURL
is. | 359 // Fire an error event if the url string is not empty, but the KURL
is. |
358 dispatchErrorEvent(); | 360 dispatchErrorEvent(); |
359 } | 361 } |
360 noImageResourceToLoad(); | 362 noImageResourceToLoad(); |
361 } | 363 } |
362 | 364 |
363 ImageResource* oldImage = m_image.get(); | 365 RefPtrWillBeRawPtr<ImageResource> oldImage = m_image.get(); |
364 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el
ement->layoutObject()->isImage() && newImage == oldImage) { | 366 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el
ement->layoutObject()->isImage() && newImage == oldImage) { |
365 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); | 367 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); |
366 } else { | 368 } else { |
367 if (newImage != oldImage) | 369 if (newImage != oldImage) |
368 sourceImageChanged(); | 370 sourceImageChanged(); |
369 | 371 |
370 if (m_hasPendingLoadEvent) { | 372 if (m_hasPendingLoadEvent) { |
371 loadEventSender().cancelEvent(this); | 373 loadEventSender().cancelEvent(this); |
372 m_hasPendingLoadEvent = false; | 374 m_hasPendingLoadEvent = false; |
373 } | 375 } |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 | 682 |
681 void ImageLoader::sourceImageChanged() | 683 void ImageLoader::sourceImageChanged() |
682 { | 684 { |
683 for (auto& client : m_clients) { | 685 for (auto& client : m_clients) { |
684 ImageLoaderClient* handle = client; | 686 ImageLoaderClient* handle = client; |
685 handle->notifyImageSourceChanged(); | 687 handle->notifyImageSourceChanged(); |
686 } | 688 } |
687 } | 689 } |
688 | 690 |
689 } // namespace blink | 691 } // namespace blink |
OLD | NEW |