Home | History | Annotate | Download | only in css
      1 /*
      2  * Copyright (C) 2011 Adobe Systems Incorporated. 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  *
      8  * 1. Redistributions of source code must retain the above
      9  *    copyright notice, this list of conditions and the following
     10  *    disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above
     12  *    copyright notice, this list of conditions and the following
     13  *    disclaimer in the documentation and/or other materials
     14  *    provided with the distribution.
     15  *
     16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AS IS AND ANY
     17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
     20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
     21  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
     25  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
     26  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
     27  * SUCH DAMAGE.
     28  */
     29 
     30 #include "config.h"
     31 
     32 #include "core/css/CSSShaderValue.h"
     33 
     34 #include "FetchInitiatorTypeNames.h"
     35 #include "core/css/CSSParser.h"
     36 #include "core/dom/Document.h"
     37 #include "core/fetch/FetchRequest.h"
     38 #include "core/fetch/ResourceFetcher.h"
     39 #include "core/rendering/style/StyleFetchedShader.h"
     40 #include "core/rendering/style/StylePendingShader.h"
     41 #include "wtf/text/StringBuilder.h"
     42 
     43 namespace WebCore {
     44 
     45 CSSShaderValue::CSSShaderValue(const String& url)
     46     : CSSValue(CSSShaderClass)
     47     , m_url(url)
     48     , m_accessedShader(false)
     49 {
     50 }
     51 
     52 CSSShaderValue::~CSSShaderValue()
     53 {
     54 }
     55 
     56 KURL CSSShaderValue::completeURL(ResourceFetcher* loader) const
     57 {
     58     return loader->document()->completeURL(m_url);
     59 }
     60 
     61 StyleFetchedShader* CSSShaderValue::resource(ResourceFetcher* loader)
     62 {
     63     ASSERT(loader);
     64 
     65     if (!m_accessedShader) {
     66         m_accessedShader = true;
     67 
     68         FetchRequest request(ResourceRequest(completeURL(loader)), FetchInitiatorTypeNames::css);
     69         if (ResourcePtr<ShaderResource> resource = loader->fetchShader(request))
     70             m_shader = StyleFetchedShader::create(resource.get());
     71     }
     72 
     73     return (m_shader && m_shader->isShaderResource()) ? static_cast<StyleFetchedShader*>(m_shader.get()) : 0;
     74 }
     75 
     76 StyleShader* CSSShaderValue::cachedOrPendingShader()
     77 {
     78     if (!m_shader)
     79         m_shader = StylePendingShader::create(this);
     80 
     81     return m_shader.get();
     82 }
     83 
     84 String CSSShaderValue::customCSSText() const
     85 {
     86     StringBuilder result;
     87     result.appendLiteral("url(");
     88     result.append(quoteCSSURLIfNeeded(m_url));
     89     result.append(')');
     90     if (!m_format.isEmpty()) {
     91         result.appendLiteral(" format('");
     92         result.append(m_format);
     93         result.appendLiteral("')");
     94     }
     95     return result.toString();
     96 }
     97 
     98 bool CSSShaderValue::equals(const CSSShaderValue& other) const
     99 {
    100     return m_url == other.m_url;
    101 }
    102 
    103 } // namespace WebCore
    104 
    105