| Index: Source/core/dom/ProcessingInstruction.cpp
|
| diff --git a/Source/core/dom/ProcessingInstruction.cpp b/Source/core/dom/ProcessingInstruction.cpp
|
| index 2a6eced3750e5638964983dacaa21606591b50e1..1459449179d1f40f08a7bb9da07274463f9812cd 100644
|
| --- a/Source/core/dom/ProcessingInstruction.cpp
|
| +++ b/Source/core/dom/ProcessingInstruction.cpp
|
| @@ -32,6 +32,7 @@
|
| #include "core/fetch/FetchRequest.h"
|
| #include "core/fetch/ResourceFetcher.h"
|
| #include "core/fetch/XSLStyleSheetResource.h"
|
| +#include "core/xml/DocumentXSLT.h"
|
| #include "core/xml/XSLStyleSheet.h"
|
| #include "core/xml/parser/XMLDocumentParser.h" // for parseAttributes()
|
|
|
| @@ -45,6 +46,7 @@ inline ProcessingInstruction::ProcessingInstruction(Document& document, const St
|
| , m_createdByParser(false)
|
| , m_isCSS(false)
|
| , m_isXSL(false)
|
| + , m_listenerForXSLT(nullptr)
|
| {
|
| }
|
|
|
| @@ -62,12 +64,8 @@ ProcessingInstruction::~ProcessingInstruction()
|
| // FIXME: ProcessingInstruction should not be in document here.
|
| // However, if we add ASSERT(!inDocument()), fast/xsl/xslt-entity.xml
|
| // crashes. We need to investigate ProcessingInstruction lifetime.
|
| - if (inDocument()) {
|
| - if (m_isCSS)
|
| - document().styleEngine()->removeStyleSheetCandidateNode(this);
|
| - else if (m_isXSL)
|
| - document().styleEngine()->removeXSLStyleSheet(this);
|
| - }
|
| + if (inDocument() && m_isCSS)
|
| + document().styleEngine()->removeStyleSheetCandidateNode(this);
|
| #endif
|
| }
|
|
|
| @@ -139,7 +137,7 @@ void ProcessingInstruction::process(const String& href, const String& charset)
|
| // We need to make a synthetic XSLStyleSheet that is embedded.
|
| // It needs to be able to kick off import/include loads that
|
| // can hang off some parent sheet.
|
| - if (m_isXSL) {
|
| + if (m_isXSL && RuntimeEnabledFeatures::xsltEnabled()) {
|
| KURL finalURL(ParsedURLString, m_localHref);
|
| m_sheet = XSLStyleSheet::createEmbedded(this, finalURL);
|
| m_loading = false;
|
| @@ -154,7 +152,8 @@ void ProcessingInstruction::process(const String& href, const String& charset)
|
| ResourcePtr<StyleSheetResource> resource;
|
| FetchRequest request(ResourceRequest(document().completeURL(href)), FetchInitiatorTypeNames::processinginstruction);
|
| if (m_isXSL) {
|
| - resource = document().fetcher()->fetchXSLStyleSheet(request);
|
| + if (RuntimeEnabledFeatures::xsltEnabled())
|
| + resource = document().fetcher()->fetchXSLStyleSheet(request);
|
| } else {
|
| request.setCharset(charset.isEmpty() ? document().charset() : charset);
|
| resource = document().fetcher()->fetchCSSStyleSheet(request);
|
| @@ -162,7 +161,8 @@ void ProcessingInstruction::process(const String& href, const String& charset)
|
|
|
| if (resource) {
|
| m_loading = true;
|
| - document().styleEngine()->addPendingSheet();
|
| + if (!m_isXSL)
|
| + document().styleEngine()->addPendingSheet();
|
| setResource(resource);
|
| }
|
| }
|
| @@ -179,7 +179,8 @@ bool ProcessingInstruction::isLoading() const
|
| bool ProcessingInstruction::sheetLoaded()
|
| {
|
| if (!isLoading()) {
|
| - document().styleEngine()->removePendingSheet(this);
|
| + if (!DocumentXSLT::sheetLoaded(document(), this))
|
| + document().styleEngine()->removePendingSheet(this);
|
| return true;
|
| }
|
| return false;
|
| @@ -258,10 +259,8 @@ Node::InsertionNotificationRequest ProcessingInstruction::insertedInto(Container
|
| String href;
|
| String charset;
|
| bool isValid = checkStyleSheet(href, charset);
|
| - if (m_isCSS)
|
| + if (!DocumentXSLT::processingInstructionInsertedIntoDocument(document(), this))
|
| document().styleEngine()->addStyleSheetCandidateNode(this, m_createdByParser);
|
| - else if (m_isXSL)
|
| - document().styleEngine()->addXSLStyleSheet(this, m_createdByParser);
|
| if (isValid)
|
| process(href, charset);
|
| return InsertionDone;
|
| @@ -273,11 +272,10 @@ void ProcessingInstruction::removedFrom(ContainerNode* insertionPoint)
|
| if (!insertionPoint->inDocument())
|
| return;
|
|
|
| - if (m_isCSS)
|
| + if (!DocumentXSLT::processingInstructionRemovedFromDocument(document(), this))
|
| document().styleEngine()->removeStyleSheetCandidateNode(this);
|
| - else if (m_isXSL)
|
| - document().styleEngine()->removeXSLStyleSheet(this);
|
|
|
| + // No need to remove XSLStyleSheet from StyleEngine.
|
| RefPtrWillBeRawPtr<StyleSheet> removedSheet = m_sheet;
|
|
|
| if (m_sheet) {
|
|
|