Home | History | Annotate | Download | only in css
      1 /*
      2  * Copyright (C) 2012 Apple Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions
      6  * are met:
      7  * 1. Redistributions of source code must retain the above copyright
      8  *    notice, this list of conditions and the following disclaimer.
      9  * 2. Redistributions in binary form must reproduce the above copyright
     10  *    notice, this list of conditions and the following disclaimer in the
     11  *    documentation and/or other materials provided with the distribution.
     12  *
     13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
     14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
     17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
     23  * THE POSSIBILITY OF SUCH DAMAGE.
     24  */
     25 
     26 #ifndef CSSImageSetValue_h
     27 #define CSSImageSetValue_h
     28 
     29 #include "core/css/CSSValueList.h"
     30 #include "core/fetch/ResourceFetcher.h"
     31 #include "platform/weborigin/Referrer.h"
     32 
     33 namespace blink {
     34 
     35 class ResourceFetcher;
     36 class StyleFetchedImageSet;
     37 class StyleImage;
     38 
     39 class CSSImageSetValue : public CSSValueList {
     40 public:
     41 
     42     static PassRefPtrWillBeRawPtr<CSSImageSetValue> create()
     43     {
     44         return adoptRefWillBeNoop(new CSSImageSetValue());
     45     }
     46     ~CSSImageSetValue();
     47 
     48     StyleFetchedImageSet* cachedImageSet(ResourceFetcher*, float deviceScaleFactor, const ResourceLoaderOptions&);
     49     StyleFetchedImageSet* cachedImageSet(ResourceFetcher*, float deviceScaleFactor);
     50 
     51     // Returns a StyleFetchedImageSet if the best fit image has been cached already, otherwise a StylePendingImage.
     52     StyleImage* cachedOrPendingImageSet(float);
     53 
     54     String customCSSText() const;
     55 
     56     bool isPending() const { return !m_accessedBestFitImage; }
     57 
     58     struct ImageWithScale {
     59         String imageURL;
     60         Referrer referrer;
     61         float scaleFactor;
     62     };
     63 
     64     bool hasFailedOrCanceledSubresources() const;
     65 
     66     PassRefPtrWillBeRawPtr<CSSImageSetValue> cloneForCSSOM() const;
     67 
     68     void traceAfterDispatch(Visitor* visitor) { CSSValueList::traceAfterDispatch(visitor); }
     69 
     70 protected:
     71     ImageWithScale bestImageForScaleFactor();
     72 
     73 private:
     74     CSSImageSetValue();
     75     explicit CSSImageSetValue(const CSSImageSetValue& cloneFrom);
     76 
     77     void fillImageSet();
     78     static inline bool compareByScaleFactor(ImageWithScale first, ImageWithScale second) { return first.scaleFactor < second.scaleFactor; }
     79 
     80     RefPtr<StyleImage> m_imageSet;
     81     bool m_accessedBestFitImage;
     82 
     83     // This represents the scale factor that we used to find the best fit image. It does not necessarily
     84     // correspond to the scale factor of the best fit image.
     85     float m_scaleFactor;
     86 
     87     Vector<ImageWithScale> m_imagesInSet;
     88 };
     89 
     90 DEFINE_CSS_VALUE_TYPE_CASTS(CSSImageSetValue, isImageSetValue());
     91 
     92 } // namespace blink
     93 
     94 #endif // CSSImageSetValue_h
     95