LCOV - code coverage report
Current view: top level - layout/style - ImageLoader.h (source / functions) Hit Total Coverage
Test: output.info Lines: 5 6 83.3 %
Date: 2017-07-14 16:53:18 Functions: 1 2 50.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* This Source Code Form is subject to the terms of the Mozilla Public
       2             :  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
       3             :  * You can obtain one at http://mozilla.org/MPL/2.0/. */
       4             : 
       5             : // A class that handles style system image loads (other image loads are handled
       6             : // by the nodes in the content tree).
       7             : 
       8             : #ifndef mozilla_css_ImageLoader_h___
       9             : #define mozilla_css_ImageLoader_h___
      10             : 
      11             : #include "nsClassHashtable.h"
      12             : #include "nsHashKeys.h"
      13             : #include "nsTArray.h"
      14             : #include "imgIRequest.h"
      15             : #include "imgIOnloadBlocker.h"
      16             : #include "imgINotificationObserver.h"
      17             : #include "mozilla/Attributes.h"
      18             : 
      19             : class imgIContainer;
      20             : class nsIFrame;
      21             : class nsIDocument;
      22             : class nsPresContext;
      23             : class nsIURI;
      24             : class nsIPrincipal;
      25             : 
      26             : namespace mozilla {
      27             : namespace css {
      28             : 
      29             : struct ImageValue;
      30             : 
      31             : class ImageLoader final : public imgINotificationObserver,
      32             :                           public imgIOnloadBlocker
      33             : {
      34             : public:
      35             :   typedef mozilla::css::ImageValue Image;
      36             : 
      37          55 :   explicit ImageLoader(nsIDocument* aDocument)
      38          55 :   : mDocument(aDocument),
      39          55 :     mInClone(false)
      40             :   {
      41          55 :     MOZ_ASSERT(mDocument);
      42          55 :   }
      43             : 
      44             :   NS_DECL_ISUPPORTS
      45             :   NS_DECL_IMGIONLOADBLOCKER
      46             :   NS_DECL_IMGINOTIFICATIONOBSERVER
      47             : 
      48             :   void DropDocumentReference();
      49             : 
      50             :   void MaybeRegisterCSSImage(Image* aImage);
      51             :   void DeregisterCSSImage(Image* aImage);
      52             : 
      53             :   void AssociateRequestToFrame(imgIRequest* aRequest,
      54             :                                nsIFrame* aFrame);
      55             : 
      56             :   void DisassociateRequestFromFrame(imgIRequest* aRequest,
      57             :                                     nsIFrame* aFrame);
      58             : 
      59             :   void DropRequestsForFrame(nsIFrame* aFrame);
      60             : 
      61             :   void SetAnimationMode(uint16_t aMode);
      62             : 
      63             :   // The prescontext for this ImageLoader's document. We need it to be passed
      64             :   // in because this can be called during presentation destruction after the
      65             :   // presshell pointer on the document has been cleared.
      66             :   void ClearFrames(nsPresContext* aPresContext);
      67             : 
      68             :   void LoadImage(nsIURI* aURI, nsIPrincipal* aPrincipal, nsIURI* aReferrer,
      69             :                  Image* aCSSValue);
      70             : 
      71             :   void DestroyRequest(imgIRequest* aRequest);
      72             : 
      73             :   void FlushUseCounters();
      74             : 
      75             : private:
      76           0 :   ~ImageLoader() {}
      77             : 
      78             :   // We need to be able to look up the frames associated with a request (for
      79             :   // delivering notifications) and the requests associated with a frame (when
      80             :   // the frame goes away). Thus we maintain hashtables going both ways.  These
      81             :   // should always be in sync.
      82             : 
      83             :   typedef nsTArray<nsIFrame*> FrameSet;
      84             :   typedef nsTArray<nsCOMPtr<imgIRequest> > RequestSet;
      85             :   typedef nsTHashtable<nsPtrHashKey<Image> > ImageHashSet;
      86             :   typedef nsClassHashtable<nsISupportsHashKey,
      87             :                            FrameSet> RequestToFrameMap;
      88             :   typedef nsClassHashtable<nsPtrHashKey<nsIFrame>,
      89             :                            RequestSet> FrameToRequestMap;
      90             : 
      91             :   void AddImage(Image* aCSSImage);
      92             :   void RemoveImage(Image* aCSSImage);
      93             : 
      94             :   nsPresContext* GetPresContext();
      95             : 
      96             :   void DoRedraw(FrameSet* aFrameSet, bool aForcePaint);
      97             : 
      98             :   nsresult OnSizeAvailable(imgIRequest* aRequest, imgIContainer* aImage);
      99             :   nsresult OnFrameComplete(imgIRequest* aRequest);
     100             :   nsresult OnImageIsAnimated(imgIRequest* aRequest);
     101             :   nsresult OnFrameUpdate(imgIRequest* aRequest);
     102             : 
     103             :   // Helpers for DropRequestsForFrame / DisassociateRequestFromFrame above.
     104             :   void RemoveRequestToFrameMapping(imgIRequest* aRequest, nsIFrame* aFrame);
     105             :   void RemoveFrameToRequestMapping(imgIRequest* aRequest, nsIFrame* aFrame);
     106             : 
     107             :   // A map of imgIRequests to the nsIFrames that are using them.
     108             :   RequestToFrameMap mRequestToFrameMap;
     109             : 
     110             :   // A map of nsIFrames to the imgIRequests they use.
     111             :   FrameToRequestMap mFrameToRequestMap;
     112             : 
     113             :   // A weak pointer to our document. Nulled out by DropDocumentReference.
     114             :   nsIDocument* mDocument;
     115             : 
     116             :   // The set of all nsCSSValue::Images (whether they're associated a frame or
     117             :   // not).  We'll need this when we go away to remove any requests associated
     118             :   // with our document from those Images.
     119             :   ImageHashSet mImages;
     120             : 
     121             :   // Are we cloning?  If so, ignore any notifications we get.
     122             :   bool mInClone;
     123             : };
     124             : 
     125             : } // namespace css
     126             : } // namespace mozilla
     127             : 
     128             : #endif /* mozilla_css_ImageLoader_h___ */

Generated by: LCOV version 1.13