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

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

Issue 2247073006: Add loadend event when finishing loading image Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix issue of layoutTest Created 4 years, 3 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
« no previous file with comments | « third_party/WebKit/Source/core/loader/ImageLoader.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 if (isHTMLPictureElement(element()->parentNode()) || !element()->fastGet Attribute(HTMLNames::srcsetAttr).isNull()) 290 if (isHTMLPictureElement(element()->parentNode()) || !element()->fastGet Attribute(HTMLNames::srcsetAttr).isNull())
291 resourceRequest.setRequestContext(WebURLRequest::RequestContextImage Set); 291 resourceRequest.setRequestContext(WebURLRequest::RequestContextImage Set);
292 FetchRequest request(resourceRequest, element()->localName(), resourceLo aderOptions); 292 FetchRequest request(resourceRequest, element()->localName(), resourceLo aderOptions);
293 configureRequest(request, bypassBehavior, *m_element, document.clientHin tsPreferences()); 293 configureRequest(request, bypassBehavior, *m_element, document.clientHin tsPreferences());
294 294
295 newImage = ImageResource::fetch(request, document.fetcher()); 295 newImage = ImageResource::fetch(request, document.fetcher());
296 296
297 if (!newImage && !pageIsBeingDismissed(&document)) { 297 if (!newImage && !pageIsBeingDismissed(&document)) {
298 crossSiteOrCSPViolationOccurred(imageSourceURL); 298 crossSiteOrCSPViolationOccurred(imageSourceURL);
299 dispatchErrorEvent(); 299 dispatchErrorEvent();
300 dispatchLoadendEventSoon();
300 } else { 301 } else {
301 clearFailedLoadURL(); 302 clearFailedLoadURL();
302 } 303 }
303 } else { 304 } else {
304 if (!imageSourceURL.isNull()) { 305 if (!imageSourceURL.isNull()) {
305 // Fire an error event if the url string is not empty, but the KURL is. 306 // Fire an error event if the url string is not empty, but the KURL is.
306 dispatchErrorEvent(); 307 dispatchErrorEvent();
308 dispatchLoadendEventSoon();
307 } 309 }
308 noImageResourceToLoad(); 310 noImageResourceToLoad();
309 } 311 }
310 312
311 ImageResource* oldImage = m_image.get(); 313 ImageResource* oldImage = m_image.get();
312 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el ement->layoutObject()->isImage() && newImage == oldImage) { 314 if (updateBehavior == UpdateSizeChanged && m_element->layoutObject() && m_el ement->layoutObject()->isImage() && newImage == oldImage) {
313 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged(); 315 toLayoutImage(m_element->layoutObject())->intrinsicSizeChanged();
314 } else { 316 } else {
315 if (m_hasPendingLoadEvent) { 317 if (m_hasPendingLoadEvent) {
316 loadEventSender().cancelEvent(this); 318 loadEventSender().cancelEvent(this);
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
540 } 542 }
541 543
542 void ImageLoader::timerFired(TimerBase*) 544 void ImageLoader::timerFired(TimerBase*)
543 { 545 {
544 m_keepAlive.clear(); 546 m_keepAlive.clear();
545 } 547 }
546 548
547 void ImageLoader::dispatchPendingEvent(ImageEventSender* eventSender) 549 void ImageLoader::dispatchPendingEvent(ImageEventSender* eventSender)
548 { 550 {
549 RESOURCE_LOADING_DVLOG(1) << "ImageLoader::dispatchPendingEvent " << this; 551 RESOURCE_LOADING_DVLOG(1) << "ImageLoader::dispatchPendingEvent " << this;
550 ASSERT(eventSender == &loadEventSender() || eventSender == &errorEventSender ());
551 const AtomicString& eventType = eventSender->eventType(); 552 const AtomicString& eventType = eventSender->eventType();
552 if (eventType == EventTypeNames::load) 553 if (eventType == EventTypeNames::load)
553 dispatchPendingLoadEvent(); 554 dispatchPendingLoadEvent();
554 if (eventType == EventTypeNames::error) 555 if (eventType == EventTypeNames::error)
555 dispatchPendingErrorEvent(); 556 dispatchPendingErrorEvent();
557 if (eventType == EventTypeNames::loadend)
558 dispatchPendingLoadendEvent();
556 } 559 }
557 560
558 void ImageLoader::dispatchPendingLoadEvent() 561 void ImageLoader::dispatchPendingLoadEvent()
559 { 562 {
560 if (!m_hasPendingLoadEvent) 563 if (!m_hasPendingLoadEvent)
561 return; 564 return;
562 if (!m_image) 565 if (!m_image)
563 return; 566 return;
564 m_hasPendingLoadEvent = false; 567 m_hasPendingLoadEvent = false;
565 if (element()->document().frame()) 568 if (element()->document().frame())
(...skipping 11 matching lines...) Expand all
577 m_hasPendingErrorEvent = false; 580 m_hasPendingErrorEvent = false;
578 581
579 if (element()->document().frame()) 582 if (element()->document().frame())
580 element()->dispatchEvent(Event::create(EventTypeNames::error)); 583 element()->dispatchEvent(Event::create(EventTypeNames::error));
581 584
582 // Only consider updating the protection ref-count of the Element immediatel y before returning 585 // Only consider updating the protection ref-count of the Element immediatel y before returning
583 // from this function as doing so might result in the destruction of this Im ageLoader. 586 // from this function as doing so might result in the destruction of this Im ageLoader.
584 updatedHasPendingEvent(); 587 updatedHasPendingEvent();
585 } 588 }
586 589
590 void ImageLoader::dispatchPendingLoadendEvent()
591 {
592 if (element()->document().frame()) {
593 dispatchLoadendEvent();
594 }
595
596 updatedHasPendingEvent();
597 }
598
587 bool ImageLoader::getImageAnimationPolicy(ImageAnimationPolicy& policy) 599 bool ImageLoader::getImageAnimationPolicy(ImageAnimationPolicy& policy)
588 { 600 {
589 if (!element()->document().settings()) 601 if (!element()->document().settings())
590 return false; 602 return false;
591 603
592 policy = element()->document().settings()->imageAnimationPolicy(); 604 policy = element()->document().settings()->imageAnimationPolicy();
593 return true; 605 return true;
594 } 606 }
595 607
596 void ImageLoader::dispatchPendingLoadEvents() 608 void ImageLoader::dispatchPendingLoadEvents()
597 { 609 {
598 loadEventSender().dispatchPendingEvents(); 610 loadEventSender().dispatchPendingEvents();
599 } 611 }
600 612
601 void ImageLoader::dispatchPendingErrorEvents() 613 void ImageLoader::dispatchPendingErrorEvents()
602 { 614 {
603 errorEventSender().dispatchPendingEvents(); 615 errorEventSender().dispatchPendingEvents();
604 } 616 }
605 617
606 void ImageLoader::elementDidMoveToNewDocument() 618 void ImageLoader::elementDidMoveToNewDocument()
607 { 619 {
608 if (m_loadDelayCounter) 620 if (m_loadDelayCounter)
609 m_loadDelayCounter->documentChanged(m_element->document()); 621 m_loadDelayCounter->documentChanged(m_element->document());
610 clearFailedLoadURL(); 622 clearFailedLoadURL();
611 setImage(0); 623 setImage(0);
612 } 624 }
613 625
614 } // namespace blink 626 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/loader/ImageLoader.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698