WebKitCSSShaderValue.cpp [plain text]
#include "config.h"
#if ENABLE(CSS_SHADERS)
#include "WebKitCSSShaderValue.h"
#include "CSSParser.h"
#include "CachedResourceLoader.h"
#include "CachedResourceRequest.h"
#include "CachedResourceRequestInitiators.h"
#include "Document.h"
#include "KURL.h"
#include "StyleCachedShader.h"
#include "StylePendingShader.h"
#include <wtf/text/StringBuilder.h>
namespace WebCore {
WebKitCSSShaderValue::WebKitCSSShaderValue(const String& url)
: CSSValue(WebKitCSSShaderClass)
, m_url(url)
, m_accessedShader(false)
{
}
WebKitCSSShaderValue::~WebKitCSSShaderValue()
{
}
KURL WebKitCSSShaderValue::completeURL(CachedResourceLoader* loader) const
{
return loader->document()->completeURL(m_url);
}
StyleCachedShader* WebKitCSSShaderValue::cachedShader(CachedResourceLoader* loader)
{
ASSERT(loader);
if (!m_accessedShader) {
m_accessedShader = true;
CachedResourceRequest request(ResourceRequest(completeURL(loader)));
request.setInitiator(cachedResourceRequestInitiators().css);
if (CachedResourceHandle<CachedShader> cachedShader = loader->requestShader(request))
m_shader = StyleCachedShader::create(cachedShader.get());
}
return (m_shader && m_shader->isCachedShader()) ? static_cast<StyleCachedShader*>(m_shader.get()) : 0;
}
StyleShader* WebKitCSSShaderValue::cachedOrPendingShader()
{
if (!m_shader)
m_shader = StylePendingShader::create(this);
return m_shader.get();
}
String WebKitCSSShaderValue::customCssText() const
{
StringBuilder result;
result.appendLiteral("url(");
result.append(quoteCSSURLIfNeeded(m_url));
result.append(')');
if (!m_format.isEmpty()) {
result.appendLiteral(" format('");
result.append(m_format);
result.appendLiteral("')");
}
return result.toString();
}
bool WebKitCSSShaderValue::equals(const WebKitCSSShaderValue& other) const
{
return m_url == other.m_url;
}
}
#endif // ENABLE(CSS_SHADERS)