Chromium Code Reviews| Index: Source/core/xml/XSLImportRule.cpp |
| diff --git a/Source/core/xml/XSLImportRule.cpp b/Source/core/xml/XSLImportRule.cpp |
| index e8d38a07c9c94dd9d3d429e9c6b773d507bd0749..8d775ac5f792fa2ec1371957f2922d72157592e8 100644 |
| --- a/Source/core/xml/XSLImportRule.cpp |
| +++ b/Source/core/xml/XSLImportRule.cpp |
| @@ -27,13 +27,14 @@ |
| #include "core/fetch/FetchRequest.h" |
| #include "core/fetch/ResourceFetcher.h" |
| #include "core/fetch/XSLStyleSheetResource.h" |
| +#include "core/html/parser/TextResourceDecoder.h" |
| +#include "platform/SharedBuffer.h" |
| namespace blink { |
| XSLImportRule::XSLImportRule(XSLStyleSheet* parent, const String& href) |
| : m_parentStyleSheet(parent) |
| , m_strHref(href) |
| - , m_resource(0) |
| , m_loading(false) |
| { |
| } |
| @@ -44,9 +45,6 @@ XSLImportRule::~XSLImportRule() |
| if (m_styleSheet) |
| m_styleSheet->setParentStyleSheet(0); |
| #endif |
| - |
| - if (m_resource) |
| - m_resource->removeClient(this); |
| } |
| void XSLImportRule::setXSLStyleSheet(const String& href, const KURL& baseURL, const String& sheet) |
| @@ -99,18 +97,19 @@ void XSLImportRule::loadSheet() |
| return; |
| } |
| - FetchRequest request(ResourceRequest(fetcher->document()->completeURL(absHref)), FetchInitiatorTypeNames::xml); |
| - m_resource = fetcher->fetchXSLStyleSheet(request); |
| - |
| - if (m_resource) { |
| - m_resource->addClient(this); |
| - |
| - // If the imported sheet is in the cache, then setXSLStyleSheet gets |
| - // called, and the sheet even gets parsed (via parseString). In this |
| - // case we have loaded (even if our subresources haven't), so if we have |
| - // a stylesheet after checking the cache, then we've clearly loaded. |
| - if (!m_styleSheet) |
| - m_loading = true; |
| + ResourceLoaderOptions fetchOptions(ResourceFetcher::defaultResourceOptions()); |
| + FetchRequest request(ResourceRequest(fetcher->document()->completeURL(absHref)), FetchInitiatorTypeNames::xml, fetchOptions); |
| + request.setOriginRestriction(FetchRequest::RestrictToSameOrigin); |
| + ResourcePtr<Resource> resource = fetcher->fetchSynchronously(request); |
| + if (!resource) |
| + return; |
| + |
| + ASSERT(!m_styleSheet); |
| + if (SharedBuffer* data = resource->resourceBuffer()) { |
| + OwnPtr<TextResourceDecoder> decoder = TextResourceDecoder::create("text/xsl", request.charset()); |
| + String text = decoder->decode(data->data(), resource->encodedSize()); |
| + text = text + decoder->flush(); |
|
abarth-chromium
2014/09/06 23:13:51
You should just use the UTF-8 encoding directly.
tasak
2014/09/08 04:22:03
I see. Done.
|
| + setXSLStyleSheet(absHref, parentSheet->baseURL(), text); |
| } |
| } |