Bug 1326738 - Check for user-disabled images as well as broken images to determine if the broken icon should be displayed. r?tnikkel draft
authorMasatoshi Kimura <VYV03354@nifty.ne.jp>
Fri, 02 Jun 2017 23:19:48 +0900
changeset 588294 d321da5a63edfd18e50009c7537709303cb4b022
parent 588293 97ef84179c8d2de5931d4a7e8c3999f66ee3b077
child 631530 99de59cfa2d5543f9b167a930b3e62f1784858bd
push id61987
push userVYV03354@nifty.ne.jp
push dateFri, 02 Jun 2017 14:20:46 +0000
reviewerstnikkel
bugs1326738
milestone55.0a1
Bug 1326738 - Check for user-disabled images as well as broken images to determine if the broken icon should be displayed. r?tnikkel MozReview-Commit-ID: CseLBP8aI75
layout/generic/nsImageFrame.cpp
--- a/layout/generic/nsImageFrame.cpp
+++ b/layout/generic/nsImageFrame.cpp
@@ -795,32 +795,39 @@ nsImageFrame::EnsureIntrinsicSizeAndRati
 
     if (mImage) {
       UpdateIntrinsicSize(mImage);
       UpdateIntrinsicRatio(mImage);
     } else {
       // image request is null or image size not known, probably an
       // invalid image specified
       if (!(GetStateBits() & NS_FRAME_GENERATED_CONTENT)) {
-        bool imageBroken = false;
+        bool imageInvalid = false;
         // check for broken images. valid null images (eg. img src="") are
         // not considered broken because they have no image requests
         nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(mContent);
         if (imageLoader) {
           nsCOMPtr<imgIRequest> currentRequest;
           imageLoader->GetRequest(nsIImageLoadingContent::CURRENT_REQUEST,
                                   getter_AddRefs(currentRequest));
-          uint32_t imageStatus;
-          imageBroken =
-            currentRequest &&
-            NS_SUCCEEDED(currentRequest->GetImageStatus(&imageStatus)) &&
-            (imageStatus & imgIRequest::STATUS_ERROR);
+          if (currentRequest) {
+            uint32_t imageStatus;
+            imageInvalid =
+              NS_SUCCEEDED(currentRequest->GetImageStatus(&imageStatus)) &&
+              (imageStatus & imgIRequest::STATUS_ERROR);
+          } else {
+            // check if images are user-disabled (or blocked for other
+            // reasons)
+            int16_t imageBlockingStatus;
+            imageLoader->GetImageBlockingStatus(&imageBlockingStatus);
+            imageInvalid = imageBlockingStatus != nsIContentPolicy::ACCEPT;
+          }
         }
         // invalid image specified. make the image big enough for the "broken" icon
-        if (imageBroken) {
+        if (imageInvalid) {
           nscoord edgeLengthToUse =
             nsPresContext::CSSPixelsToAppUnits(
               ICON_SIZE + (2 * (ICON_PADDING + ALT_BORDER_WIDTH)));
           mIntrinsicSize.width.SetCoordValue(edgeLengthToUse);
           mIntrinsicSize.height.SetCoordValue(edgeLengthToUse);
           mIntrinsicRatio.SizeTo(1, 1);
         }
       }