OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "core/xml/DocumentXSLT.h" | 5 #include "core/xml/DocumentXSLT.h" |
6 | 6 |
7 #include "bindings/core/v8/DOMWrapperWorld.h" | 7 #include "bindings/core/v8/DOMWrapperWorld.h" |
8 #include "bindings/core/v8/ScriptState.h" | 8 #include "bindings/core/v8/ScriptState.h" |
9 #include "bindings/core/v8/V8AbstractEventListener.h" | 9 #include "bindings/core/v8/V8AbstractEventListener.h" |
10 #include "bindings/core/v8/V8Binding.h" | 10 #include "bindings/core/v8/V8Binding.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 return new DOMContentLoadedListener(scriptState, pi); | 28 return new DOMContentLoadedListener(scriptState, pi); |
29 } | 29 } |
30 | 30 |
31 bool operator==(const EventListener&) const override | 31 bool operator==(const EventListener&) const override |
32 { | 32 { |
33 return true; | 33 return true; |
34 } | 34 } |
35 | 35 |
36 virtual void handleEvent(ScriptState* scriptState, Event* event) | 36 virtual void handleEvent(ScriptState* scriptState, Event* event) |
37 { | 37 { |
38 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 38 DCHECK(RuntimeEnabledFeatures::xsltEnabled()); |
39 ASSERT(event->type() == "DOMContentLoaded"); | 39 DCHECK_EQ(event->type(), "DOMContentLoaded"); |
40 ScriptState::Scope scope(scriptState); | 40 ScriptState::Scope scope(scriptState); |
41 | 41 |
42 Document& document = *toDocument(scriptState->getExecutionContext()); | 42 Document& document = *toDocument(scriptState->getExecutionContext()); |
43 ASSERT(!document.parsing()); | 43 DCHECK(!document.parsing()); |
44 | 44 |
45 // Processing instruction (XML documents only). | 45 // Processing instruction (XML documents only). |
46 // We don't support linking to embedded CSS stylesheets, | 46 // We don't support linking to embedded CSS stylesheets, |
47 // see <https://bugs.webkit.org/show_bug.cgi?id=49281> for discussion. | 47 // see <https://bugs.webkit.org/show_bug.cgi?id=49281> for discussion. |
48 // Don't apply XSL transforms to already transformed documents. | 48 // Don't apply XSL transforms to already transformed documents. |
49 if (DocumentXSLT::hasTransformSourceDocument(document)) | 49 if (DocumentXSLT::hasTransformSourceDocument(document)) |
50 return; | 50 return; |
51 | 51 |
52 ProcessingInstruction* pi = DocumentXSLT::findXSLStyleSheet(document); | 52 ProcessingInstruction* pi = DocumentXSLT::findXSLStyleSheet(document); |
53 if (!pi || pi != m_processingInstruction || pi->isLoading()) | 53 if (!pi || pi != m_processingInstruction || pi->isLoading()) |
(...skipping 20 matching lines...) Expand all Loading... |
74 | 74 |
75 private: | 75 private: |
76 DOMContentLoadedListener(ScriptState* scriptState, ProcessingInstruction* pi
) | 76 DOMContentLoadedListener(ScriptState* scriptState, ProcessingInstruction* pi
) |
77 : V8AbstractEventListener(false, scriptState->world(), scriptState->isol
ate()) | 77 : V8AbstractEventListener(false, scriptState->world(), scriptState->isol
ate()) |
78 , m_processingInstruction(pi) | 78 , m_processingInstruction(pi) |
79 { | 79 { |
80 } | 80 } |
81 | 81 |
82 virtual v8::Local<v8::Value> callListenerFunction(ScriptState*, v8::Local<v8
::Value>, Event*) | 82 virtual v8::Local<v8::Value> callListenerFunction(ScriptState*, v8::Local<v8
::Value>, Event*) |
83 { | 83 { |
84 ASSERT_NOT_REACHED(); | 84 NOTREACHED(); |
85 return v8::Local<v8::Value>(); | 85 return v8::Local<v8::Value>(); |
86 } | 86 } |
87 | 87 |
88 // If this event listener is attached to a ProcessingInstruction, keep a | 88 // If this event listener is attached to a ProcessingInstruction, keep a |
89 // weak reference back to it. That ProcessingInstruction is responsible for | 89 // weak reference back to it. That ProcessingInstruction is responsible for |
90 // detaching itself and clear out the reference. | 90 // detaching itself and clear out the reference. |
91 Member<ProcessingInstruction> m_processingInstruction; | 91 Member<ProcessingInstruction> m_processingInstruction; |
92 }; | 92 }; |
93 | 93 |
94 DocumentXSLT::DocumentXSLT() | 94 DocumentXSLT::DocumentXSLT() |
95 : m_transformSourceDocument(nullptr) | 95 : m_transformSourceDocument(nullptr) |
96 { | 96 { |
97 } | 97 } |
98 | 98 |
99 void DocumentXSLT::applyXSLTransform(Document& document, ProcessingInstruction*
pi) | 99 void DocumentXSLT::applyXSLTransform(Document& document, ProcessingInstruction*
pi) |
100 { | 100 { |
101 ASSERT(!pi->isLoading()); | 101 DCHECK(!pi->isLoading()); |
102 UseCounter::count(document, UseCounter::XSLProcessingInstruction); | 102 UseCounter::count(document, UseCounter::XSLProcessingInstruction); |
103 XSLTProcessor* processor = XSLTProcessor::create(document); | 103 XSLTProcessor* processor = XSLTProcessor::create(document); |
104 processor->setXSLStyleSheet(toXSLStyleSheet(pi->sheet())); | 104 processor->setXSLStyleSheet(toXSLStyleSheet(pi->sheet())); |
105 String resultMIMEType; | 105 String resultMIMEType; |
106 String newSource; | 106 String newSource; |
107 String resultEncoding; | 107 String resultEncoding; |
108 document.setParsingState(Document::Parsing); | 108 document.setParsingState(Document::Parsing); |
109 if (!processor->transformToString(&document, resultMIMEType, newSource, resu
ltEncoding)) { | 109 if (!processor->transformToString(&document, resultMIMEType, newSource, resu
ltEncoding)) { |
110 document.setParsingState(Document::FinishedParsing); | 110 document.setParsingState(Document::FinishedParsing); |
111 return; | 111 return; |
(...skipping 24 matching lines...) Expand all Loading... |
136 return false; | 136 return false; |
137 | 137 |
138 if (!RuntimeEnabledFeatures::xsltEnabled() || !document.frame()) | 138 if (!RuntimeEnabledFeatures::xsltEnabled() || !document.frame()) |
139 return true; | 139 return true; |
140 | 140 |
141 ScriptState* scriptState = ScriptState::forMainWorld(document.frame()); | 141 ScriptState* scriptState = ScriptState::forMainWorld(document.frame()); |
142 if (!scriptState) | 142 if (!scriptState) |
143 return false; | 143 return false; |
144 DOMContentLoadedListener* listener = DOMContentLoadedListener::create(script
State, pi); | 144 DOMContentLoadedListener* listener = DOMContentLoadedListener::create(script
State, pi); |
145 document.addEventListener(EventTypeNames::DOMContentLoaded, listener, false)
; | 145 document.addEventListener(EventTypeNames::DOMContentLoaded, listener, false)
; |
146 ASSERT(!pi->eventListenerForXSLT()); | 146 DCHECK(!pi->eventListenerForXSLT()); |
147 pi->setEventListenerForXSLT(listener); | 147 pi->setEventListenerForXSLT(listener); |
148 return true; | 148 return true; |
149 } | 149 } |
150 | 150 |
151 bool DocumentXSLT::processingInstructionRemovedFromDocument(Document& document,
ProcessingInstruction* pi) | 151 bool DocumentXSLT::processingInstructionRemovedFromDocument(Document& document,
ProcessingInstruction* pi) |
152 { | 152 { |
153 if (!pi->isXSL()) | 153 if (!pi->isXSL()) |
154 return false; | 154 return false; |
155 | 155 |
156 if (!pi->eventListenerForXSLT()) | 156 if (!pi->eventListenerForXSLT()) |
157 return true; | 157 return true; |
158 | 158 |
159 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 159 DCHECK(RuntimeEnabledFeatures::xsltEnabled()); |
160 document.removeEventListener(EventTypeNames::DOMContentLoaded, pi->eventList
enerForXSLT(), false); | 160 document.removeEventListener(EventTypeNames::DOMContentLoaded, pi->eventList
enerForXSLT(), false); |
161 pi->clearEventListenerForXSLT(); | 161 pi->clearEventListenerForXSLT(); |
162 return true; | 162 return true; |
163 } | 163 } |
164 | 164 |
165 bool DocumentXSLT::sheetLoaded(Document& document, ProcessingInstruction* pi) | 165 bool DocumentXSLT::sheetLoaded(Document& document, ProcessingInstruction* pi) |
166 { | 166 { |
167 if (!pi->isXSL()) | 167 if (!pi->isXSL()) |
168 return false; | 168 return false; |
169 | 169 |
(...skipping 26 matching lines...) Expand all Loading... |
196 return *supplement; | 196 return *supplement; |
197 } | 197 } |
198 | 198 |
199 DEFINE_TRACE(DocumentXSLT) | 199 DEFINE_TRACE(DocumentXSLT) |
200 { | 200 { |
201 visitor->trace(m_transformSourceDocument); | 201 visitor->trace(m_transformSourceDocument); |
202 Supplement<Document>::trace(visitor); | 202 Supplement<Document>::trace(visitor); |
203 } | 203 } |
204 | 204 |
205 } // namespace blink | 205 } // namespace blink |
OLD | NEW |