1 /* 2 * Copyright (C) 2007, 2008 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 COMPUTER, INC. ``AS IS'' AND ANY 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26 #ifndef CSSFontFaceSrcValue_h 27 #define CSSFontFaceSrcValue_h 28 29 #include "core/css/CSSValue.h" 30 #include "core/fetch/ResourcePtr.h" 31 #include "platform/weborigin/Referrer.h" 32 #include "wtf/PassRefPtr.h" 33 #include "wtf/text/WTFString.h" 34 35 namespace WebCore { 36 37 class FontResource; 38 class Document; 39 class SVGFontFaceElement; 40 41 class CSSFontFaceSrcValue : public CSSValue { 42 public: 43 static PassRefPtrWillBeRawPtr<CSSFontFaceSrcValue> create(const String& resource) 44 { 45 return adoptRefWillBeNoop(new CSSFontFaceSrcValue(resource, false)); 46 } 47 static PassRefPtrWillBeRawPtr<CSSFontFaceSrcValue> createLocal(const String& resource) 48 { 49 return adoptRefWillBeNoop(new CSSFontFaceSrcValue(resource, true)); 50 } 51 52 const String& resource() const { return m_resource; } 53 const String& format() const { return m_format; } 54 bool isLocal() const { return m_isLocal; } 55 56 void setFormat(const String& format) { m_format = format; } 57 void setReferrer(const Referrer& referrer) { m_referrer = referrer; } 58 59 bool isSupportedFormat() const; 60 61 #if ENABLE(SVG_FONTS) 62 bool isSVGFontFaceSrc() const; 63 64 SVGFontFaceElement* svgFontFaceElement() const { return m_svgFontFaceElement; } 65 void setSVGFontFaceElement(SVGFontFaceElement* element) { m_svgFontFaceElement = element; } 66 #endif 67 68 String customCSSText() const; 69 70 bool hasFailedOrCanceledSubresources() const; 71 72 FontResource* fetch(Document*); 73 74 bool equals(const CSSFontFaceSrcValue&) const; 75 76 void traceAfterDispatch(Visitor* visitor) { CSSValue::traceAfterDispatch(visitor); } 77 78 private: 79 CSSFontFaceSrcValue(const String& resource, bool local) 80 : CSSValue(FontFaceSrcClass) 81 , m_resource(resource) 82 , m_isLocal(local) 83 #if ENABLE(SVG_FONTS) 84 , m_svgFontFaceElement(0) 85 #endif 86 { 87 } 88 89 void restoreCachedResourceIfNeeded(Document*); 90 bool shouldSetCrossOriginAccessControl(const KURL& resource, SecurityOrigin*); 91 92 String m_resource; 93 String m_format; 94 Referrer m_referrer; 95 bool m_isLocal; 96 97 ResourcePtr<FontResource> m_fetched; 98 99 #if ENABLE(SVG_FONTS) 100 SVGFontFaceElement* m_svgFontFaceElement; 101 #endif 102 }; 103 104 DEFINE_CSS_VALUE_TYPE_CASTS(CSSFontFaceSrcValue, isFontFaceSrcValue()); 105 106 } 107 108 #endif 109