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

Side by Side Diff: third_party/WebKit/Source/core/html/HTMLImageElement.cpp

Issue 2469873002: [ImageResource 4] Split ImageResource into Resource and Image parts (Closed)
Patch Set: fix Created 4 years 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, 2008, 2010 Apple Inc. All rights 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2010 Apple Inc. All rights
5 * reserved. 5 * reserved.
6 * Copyright (C) 2010 Google Inc. All rights reserved. 6 * Copyright (C) 2010 Google Inc. All rights reserved.
7 * 7 *
8 * This library is free software; you can redistribute it and/or 8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 10 * License as published by the Free Software Foundation; either
(...skipping 15 matching lines...) Expand all
26 #include "bindings/core/v8/ScriptEventListener.h" 26 #include "bindings/core/v8/ScriptEventListener.h"
27 #include "core/CSSPropertyNames.h" 27 #include "core/CSSPropertyNames.h"
28 #include "core/HTMLNames.h" 28 #include "core/HTMLNames.h"
29 #include "core/MediaTypeNames.h" 29 #include "core/MediaTypeNames.h"
30 #include "core/css/MediaQueryMatcher.h" 30 #include "core/css/MediaQueryMatcher.h"
31 #include "core/css/MediaValuesDynamic.h" 31 #include "core/css/MediaValuesDynamic.h"
32 #include "core/css/parser/SizesAttributeParser.h" 32 #include "core/css/parser/SizesAttributeParser.h"
33 #include "core/dom/Attribute.h" 33 #include "core/dom/Attribute.h"
34 #include "core/dom/NodeTraversal.h" 34 #include "core/dom/NodeTraversal.h"
35 #include "core/dom/shadow/ShadowRoot.h" 35 #include "core/dom/shadow/ShadowRoot.h"
36 #include "core/fetch/ImageResource.h" 36 #include "core/fetch/ImageResourceContent.h"
37 #include "core/frame/Deprecation.h" 37 #include "core/frame/Deprecation.h"
38 #include "core/frame/ImageBitmap.h" 38 #include "core/frame/ImageBitmap.h"
39 #include "core/frame/LocalDOMWindow.h" 39 #include "core/frame/LocalDOMWindow.h"
40 #include "core/html/HTMLAnchorElement.h" 40 #include "core/html/HTMLAnchorElement.h"
41 #include "core/html/HTMLCanvasElement.h" 41 #include "core/html/HTMLCanvasElement.h"
42 #include "core/html/HTMLFormElement.h" 42 #include "core/html/HTMLFormElement.h"
43 #include "core/html/HTMLImageFallbackHelper.h" 43 #include "core/html/HTMLImageFallbackHelper.h"
44 #include "core/html/HTMLPictureElement.h" 44 #include "core/html/HTMLPictureElement.h"
45 #include "core/html/HTMLSourceElement.h" 45 #include "core/html/HTMLSourceElement.h"
46 #include "core/html/parser/HTMLParserIdioms.h" 46 #include "core/html/parser/HTMLParserIdioms.h"
(...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 360
361 void HTMLImageElement::attachLayoutTree(const AttachContext& context) { 361 void HTMLImageElement::attachLayoutTree(const AttachContext& context) {
362 HTMLElement::attachLayoutTree(context); 362 HTMLElement::attachLayoutTree(context);
363 363
364 if (layoutObject() && layoutObject()->isImage()) { 364 if (layoutObject() && layoutObject()->isImage()) {
365 LayoutImage* layoutImage = toLayoutImage(layoutObject()); 365 LayoutImage* layoutImage = toLayoutImage(layoutObject());
366 LayoutImageResource* layoutImageResource = layoutImage->imageResource(); 366 LayoutImageResource* layoutImageResource = layoutImage->imageResource();
367 if (m_isFallbackImage) { 367 if (m_isFallbackImage) {
368 float deviceScaleFactor = blink::deviceScaleFactor(layoutImage->frame()); 368 float deviceScaleFactor = blink::deviceScaleFactor(layoutImage->frame());
369 std::pair<Image*, float> brokenImageAndImageScaleFactor = 369 std::pair<Image*, float> brokenImageAndImageScaleFactor =
370 ImageResource::brokenImage(deviceScaleFactor); 370 ImageResourceContent::brokenImage(deviceScaleFactor);
371 ImageResource* newImageResource = 371 ImageResourceContent* newImageResource =
372 ImageResource::create(brokenImageAndImageScaleFactor.first); 372 ImageResourceContent::create(brokenImageAndImageScaleFactor.first);
373 layoutImage->imageResource()->setImageResource(newImageResource); 373 layoutImage->imageResource()->setImageResource(newImageResource);
374 } 374 }
375 if (layoutImageResource->hasImage()) 375 if (layoutImageResource->hasImage())
376 return; 376 return;
377 377
378 if (!imageLoader().image() && !layoutImageResource->cachedImage()) 378 if (!imageLoader().image() && !layoutImageResource->cachedImage())
379 return; 379 return;
380 layoutImageResource->setImageResource(imageLoader().image()); 380 layoutImageResource->setImageResource(imageLoader().image());
381 } 381 }
382 } 382 }
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 } 481 }
482 482
483 unsigned HTMLImageElement::naturalWidth() const { 483 unsigned HTMLImageElement::naturalWidth() const {
484 if (!imageLoader().image()) 484 if (!imageLoader().image())
485 return 0; 485 return 0;
486 486
487 return imageLoader() 487 return imageLoader()
488 .image() 488 .image()
489 ->imageSize(LayoutObject::shouldRespectImageOrientation(layoutObject()), 489 ->imageSize(LayoutObject::shouldRespectImageOrientation(layoutObject()),
490 m_imageDevicePixelRatio, 490 m_imageDevicePixelRatio,
491 ImageResource::IntrinsicCorrectedToDPR) 491 ImageResourceContent::IntrinsicCorrectedToDPR)
492 .width() 492 .width()
493 .toUnsigned(); 493 .toUnsigned();
494 } 494 }
495 495
496 unsigned HTMLImageElement::naturalHeight() const { 496 unsigned HTMLImageElement::naturalHeight() const {
497 if (!imageLoader().image()) 497 if (!imageLoader().image())
498 return 0; 498 return 0;
499 499
500 return imageLoader() 500 return imageLoader()
501 .image() 501 .image()
502 ->imageSize(LayoutObject::shouldRespectImageOrientation(layoutObject()), 502 ->imageSize(LayoutObject::shouldRespectImageOrientation(layoutObject()),
503 m_imageDevicePixelRatio, 503 m_imageDevicePixelRatio,
504 ImageResource::IntrinsicCorrectedToDPR) 504 ImageResourceContent::IntrinsicCorrectedToDPR)
505 .height() 505 .height()
506 .toUnsigned(); 506 .toUnsigned();
507 } 507 }
508 508
509 const String& HTMLImageElement::currentSrc() const { 509 const String& HTMLImageElement::currentSrc() const {
510 // http://www.whatwg.org/specs/web-apps/current-work/multipage/edits.html#dom- img-currentsrc 510 // http://www.whatwg.org/specs/web-apps/current-work/multipage/edits.html#dom- img-currentsrc
511 // The currentSrc IDL attribute must return the img element's current 511 // The currentSrc IDL attribute must return the img element's current
512 // request's current URL. 512 // request's current URL.
513 513
514 // Return the picked URL string in case of load error. 514 // Return the picked URL string in case of load error.
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 *status = NormalSourceImageStatus; 648 *status = NormalSourceImageStatus;
649 return sourceImage->imageForDefaultFrame(); 649 return sourceImage->imageForDefaultFrame();
650 } 650 }
651 651
652 bool HTMLImageElement::isSVGSource() const { 652 bool HTMLImageElement::isSVGSource() const {
653 return cachedImage() && cachedImage()->getImage()->isSVGImage(); 653 return cachedImage() && cachedImage()->getImage()->isSVGImage();
654 } 654 }
655 655
656 bool HTMLImageElement::wouldTaintOrigin( 656 bool HTMLImageElement::wouldTaintOrigin(
657 SecurityOrigin* destinationSecurityOrigin) const { 657 SecurityOrigin* destinationSecurityOrigin) const {
658 ImageResource* image = cachedImage(); 658 ImageResourceContent* image = cachedImage();
659 if (!image) 659 if (!image)
660 return false; 660 return false;
661 return !image->isAccessAllowed(destinationSecurityOrigin); 661 return !image->isAccessAllowed(destinationSecurityOrigin);
662 } 662 }
663 663
664 FloatSize HTMLImageElement::elementSize( 664 FloatSize HTMLImageElement::elementSize(
665 const FloatSize& defaultObjectSize) const { 665 const FloatSize& defaultObjectSize) const {
666 ImageResource* image = cachedImage(); 666 ImageResourceContent* image = cachedImage();
667 if (!image) 667 if (!image)
668 return FloatSize(); 668 return FloatSize();
669 669
670 if (image->getImage() && image->getImage()->isSVGImage()) 670 if (image->getImage() && image->getImage()->isSVGImage())
671 return toSVGImage(cachedImage()->getImage()) 671 return toSVGImage(cachedImage()->getImage())
672 ->concreteObjectSize(defaultObjectSize); 672 ->concreteObjectSize(defaultObjectSize);
673 673
674 return FloatSize(image->imageSize( 674 return FloatSize(image->imageSize(
675 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f)); 675 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f));
676 } 676 }
677 677
678 FloatSize HTMLImageElement::defaultDestinationSize( 678 FloatSize HTMLImageElement::defaultDestinationSize(
679 const FloatSize& defaultObjectSize) const { 679 const FloatSize& defaultObjectSize) const {
680 ImageResource* image = cachedImage(); 680 ImageResourceContent* image = cachedImage();
681 if (!image) 681 if (!image)
682 return FloatSize(); 682 return FloatSize();
683 683
684 if (image->getImage() && image->getImage()->isSVGImage()) 684 if (image->getImage() && image->getImage()->isSVGImage())
685 return toSVGImage(cachedImage()->getImage()) 685 return toSVGImage(cachedImage()->getImage())
686 ->concreteObjectSize(defaultObjectSize); 686 ->concreteObjectSize(defaultObjectSize);
687 687
688 LayoutSize size; 688 LayoutSize size;
689 size = image->imageSize( 689 size = image->imageSize(
690 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f); 690 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f);
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
781 !imageHasLoaded && imageLoader().hasPendingActivity() && 781 !imageHasLoaded && imageLoader().hasPendingActivity() &&
782 !imageLoader().hasPendingError() && !imageSourceURL().isEmpty(); 782 !imageLoader().hasPendingError() && !imageSourceURL().isEmpty();
783 bool imageHasImage = 783 bool imageHasImage =
784 imageLoader().image() && imageLoader().image()->hasImage(); 784 imageLoader().image() && imageLoader().image()->hasImage();
785 bool imageIsDocument = imageLoader().isLoadingImageDocument() && 785 bool imageIsDocument = imageLoader().isLoadingImageDocument() &&
786 imageLoader().image() && 786 imageLoader().image() &&
787 !imageLoader().image()->errorOccurred(); 787 !imageLoader().image()->errorOccurred();
788 788
789 // Icky special case for deferred images: 789 // Icky special case for deferred images:
790 // A deferred image is not loading, does have pending activity, does not 790 // A deferred image is not loading, does have pending activity, does not
791 // have an error, but it does have an ImageResource associated 791 // have an error, but it does have an ImageResourceContent associated
792 // with it, so imageHasLoaded will be true even though the image hasn't 792 // with it, so imageHasLoaded will be true even though the image hasn't
793 // actually loaded. Fixing the definition of imageHasLoaded isn't 793 // actually loaded. Fixing the definition of imageHasLoaded isn't
794 // sufficient, because a deferred image does have pending activity, does not 794 // sufficient, because a deferred image does have pending activity, does not
795 // have a pending error, and does have a source URL, so if imageHasLoaded 795 // have a pending error, and does have a source URL, so if imageHasLoaded
796 // was correct, imageStillLoading would become wrong. 796 // was correct, imageStillLoading would become wrong.
797 // 797 //
798 // Instead of dealing with that, there's a separate check that the 798 // Instead of dealing with that, there's a separate check that the
799 // ImageResource has non-null image data associated with it, which isn't 799 // ImageResourceContent has non-null image data associated with it, which
800 // folded into imageHasLoaded above. 800 // isn't folded into imageHasLoaded above.
801 if ((imageHasLoaded && imageHasImage) || imageStillLoading || imageIsDocument) 801 if ((imageHasLoaded && imageHasImage) || imageStillLoading || imageIsDocument)
802 ensurePrimaryContent(); 802 ensurePrimaryContent();
803 else 803 else
804 ensureFallbackContent(); 804 ensureFallbackContent();
805 } 805 }
806 806
807 const KURL& HTMLImageElement::sourceURL() const { 807 const KURL& HTMLImageElement::sourceURL() const {
808 return cachedImage()->response().url(); 808 return cachedImage()->response().url();
809 } 809 }
810 810
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
875 int HTMLImageElement::sourceHeight() { 875 int HTMLImageElement::sourceHeight() {
876 SourceImageStatus status; 876 SourceImageStatus status;
877 FloatSize defaultObjectSize(width(), height()); 877 FloatSize defaultObjectSize(width(), height());
878 RefPtr<Image> image = getSourceImageForCanvas( 878 RefPtr<Image> image = getSourceImageForCanvas(
879 &status, PreferNoAcceleration, SnapshotReasonCopyToWebGLTexture, 879 &status, PreferNoAcceleration, SnapshotReasonCopyToWebGLTexture,
880 defaultObjectSize); 880 defaultObjectSize);
881 return image->height(); 881 return image->height();
882 } 882 }
883 883
884 IntSize HTMLImageElement::bitmapSourceSize() const { 884 IntSize HTMLImageElement::bitmapSourceSize() const {
885 ImageResource* image = cachedImage(); 885 ImageResourceContent* image = cachedImage();
886 if (!image) 886 if (!image)
887 return IntSize(); 887 return IntSize();
888 LayoutSize lSize = image->imageSize( 888 LayoutSize lSize = image->imageSize(
889 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f); 889 LayoutObject::shouldRespectImageOrientation(layoutObject()), 1.0f);
890 DCHECK(lSize.fraction().isZero()); 890 DCHECK(lSize.fraction().isZero());
891 return IntSize(lSize.width().toInt(), lSize.height().toInt()); 891 return IntSize(lSize.width().toInt(), lSize.height().toInt());
892 } 892 }
893 893
894 } // namespace blink 894 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698