Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(175)

Side by Side Diff: third_party/WebKit/Source/core/dom/ScriptLoader.cpp

Issue 2390543002: Reflow comments in core/dom/. (Closed)
Patch Set: Reformat comments in core/dom/. Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) 3 * (C) 1999 Antti Koivisto (koivisto@kde.org)
4 * (C) 2001 Dirk Mueller (mueller@kde.org) 4 * (C) 2001 Dirk Mueller (mueller@kde.org)
5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserv ed. 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights
6 * reserved.
6 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
7 * 8 *
8 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either 11 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version. 12 * version 2 of the License, or (at your option) any later version.
12 * 13 *
13 * This library is distributed in the hope that it will be useful, 14 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
123 124
124 void ScriptLoader::detach() { 125 void ScriptLoader::detach() {
125 if (!m_pendingScript) 126 if (!m_pendingScript)
126 return; 127 return;
127 m_pendingScript->dispose(); 128 m_pendingScript->dispose();
128 m_pendingScript = nullptr; 129 m_pendingScript = nullptr;
129 } 130 }
130 131
131 // Helper function. Must take a lowercase language as input. 132 // Helper function. Must take a lowercase language as input.
132 static bool isLegacySupportedJavaScriptLanguage(const String& language) { 133 static bool isLegacySupportedJavaScriptLanguage(const String& language) {
133 // Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only javascript1.1 - javascript1.3. 134 // Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only
135 // javascript1.1 - javascript1.3.
134 // Mozilla 1.8 and WinIE 7 both accept javascript and livescript. 136 // Mozilla 1.8 and WinIE 7 both accept javascript and livescript.
135 // WinIE 7 accepts ecmascript and jscript, but Mozilla 1.8 doesn't. 137 // WinIE 7 accepts ecmascript and jscript, but Mozilla 1.8 doesn't.
136 // Neither Mozilla 1.8 nor WinIE 7 accept leading or trailing whitespace. 138 // Neither Mozilla 1.8 nor WinIE 7 accept leading or trailing whitespace.
137 // We want to accept all the values that either of these browsers accept, but not other values. 139 // We want to accept all the values that either of these browsers accept, but
140 // not other values.
138 141
139 // FIXME: This function is not HTML5 compliant. These belong in the MIME regis try as "text/javascript<version>" entries. 142 // FIXME: This function is not HTML5 compliant. These belong in the MIME
143 // registry as "text/javascript<version>" entries.
140 DCHECK_EQ(language, language.lower()); 144 DCHECK_EQ(language, language.lower());
141 return language == "javascript" || language == "javascript1.0" || 145 return language == "javascript" || language == "javascript1.0" ||
142 language == "javascript1.1" || language == "javascript1.2" || 146 language == "javascript1.1" || language == "javascript1.2" ||
143 language == "javascript1.3" || language == "javascript1.4" || 147 language == "javascript1.3" || language == "javascript1.4" ||
144 language == "javascript1.5" || language == "javascript1.6" || 148 language == "javascript1.5" || language == "javascript1.6" ||
145 language == "javascript1.7" || language == "livescript" || 149 language == "javascript1.7" || language == "livescript" ||
146 language == "ecmascript" || language == "jscript"; 150 language == "ecmascript" || language == "jscript";
147 } 151 }
148 152
149 void ScriptLoader::dispatchErrorEvent() { 153 void ScriptLoader::dispatchErrorEvent() {
150 m_element->dispatchEvent(Event::create(EventTypeNames::error)); 154 m_element->dispatchEvent(Event::create(EventTypeNames::error));
151 } 155 }
152 156
153 void ScriptLoader::dispatchLoadEvent() { 157 void ScriptLoader::dispatchLoadEvent() {
154 if (ScriptLoaderClient* client = this->client()) 158 if (ScriptLoaderClient* client = this->client())
155 client->dispatchLoadEvent(); 159 client->dispatchLoadEvent();
156 setHaveFiredLoadEvent(true); 160 setHaveFiredLoadEvent(true);
157 } 161 }
158 162
159 bool ScriptLoader::isValidScriptTypeAndLanguage( 163 bool ScriptLoader::isValidScriptTypeAndLanguage(
160 const String& type, 164 const String& type,
161 const String& language, 165 const String& language,
162 LegacyTypeSupport supportLegacyTypes) { 166 LegacyTypeSupport supportLegacyTypes) {
163 // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used here to maintain backwards compatibility with existing layout tests. The specif ic violations are: 167 // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used
164 // - Allowing type=javascript. type= should only support MIME types, such as t ext/javascript. 168 // here to maintain backwards compatibility with existing layout tests. The
165 // - Allowing a different set of languages for language= and type=. language= supports Javascript 1.1 and 1.4-1.6, but type= does not. 169 // specific violations are:
170 // - Allowing type=javascript. type= should only support MIME types, such as
171 // text/javascript.
172 // - Allowing a different set of languages for language= and type=. language=
173 // supports Javascript 1.1 and 1.4-1.6, but type= does not.
166 if (type.isEmpty()) { 174 if (type.isEmpty()) {
167 String lowerLanguage = language.lower(); 175 String lowerLanguage = language.lower();
168 return language.isEmpty() // assume text/javascript. 176 return language.isEmpty() // assume text/javascript.
169 || MIMETypeRegistry::isSupportedJavaScriptMIMEType("text/" + 177 || MIMETypeRegistry::isSupportedJavaScriptMIMEType("text/" +
170 lowerLanguage) || 178 lowerLanguage) ||
171 isLegacySupportedJavaScriptLanguage(lowerLanguage); 179 isLegacySupportedJavaScriptLanguage(lowerLanguage);
172 } else if (RuntimeEnabledFeatures::moduleScriptsEnabled() && 180 } else if (RuntimeEnabledFeatures::moduleScriptsEnabled() &&
173 type == "module") { 181 type == "module") {
174 return true; 182 return true;
175 } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType( 183 } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(
(...skipping 25 matching lines...) Expand all
201 if (m_parserInserted) { 209 if (m_parserInserted) {
202 wasParserInserted = true; 210 wasParserInserted = true;
203 m_parserInserted = false; 211 m_parserInserted = false;
204 } else { 212 } else {
205 wasParserInserted = false; 213 wasParserInserted = false;
206 } 214 }
207 215
208 if (wasParserInserted && !client->asyncAttributeValue()) 216 if (wasParserInserted && !client->asyncAttributeValue())
209 m_forceAsync = true; 217 m_forceAsync = true;
210 218
211 // FIXME: HTML5 spec says we should check that all children are either comment s or empty text nodes. 219 // FIXME: HTML5 spec says we should check that all children are either
220 // comments or empty text nodes.
212 if (!client->hasSourceAttribute() && !m_element->hasChildren()) 221 if (!client->hasSourceAttribute() && !m_element->hasChildren())
213 return false; 222 return false;
214 223
215 if (!m_element->isConnected()) 224 if (!m_element->isConnected())
216 return false; 225 return false;
217 226
218 if (!isScriptTypeSupported(supportLegacyTypes)) 227 if (!isScriptTypeSupported(supportLegacyTypes))
219 return false; 228 return false;
220 229
221 if (wasParserInserted) { 230 if (wasParserInserted) {
222 m_parserInserted = true; 231 m_parserInserted = true;
223 m_forceAsync = false; 232 m_forceAsync = false;
224 } 233 }
225 234
226 m_alreadyStarted = true; 235 m_alreadyStarted = true;
227 236
228 // FIXME: If script is parser inserted, verify it's still in the original docu ment. 237 // FIXME: If script is parser inserted, verify it's still in the original
238 // document.
229 Document& elementDocument = m_element->document(); 239 Document& elementDocument = m_element->document();
230 Document* contextDocument = elementDocument.contextDocument(); 240 Document* contextDocument = elementDocument.contextDocument();
231 241
232 if (!contextDocument || !contextDocument->allowExecutingScripts(m_element)) 242 if (!contextDocument || !contextDocument->allowExecutingScripts(m_element))
233 return false; 243 return false;
234 244
235 if (!isScriptForEventSupported()) 245 if (!isScriptForEventSupported())
236 return false; 246 return false;
237 247
238 if (!client->charsetAttributeValue().isEmpty()) 248 if (!client->charsetAttributeValue().isEmpty())
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 ResourceRequest(elementDocument->completeURL(sourceUrl)), 338 ResourceRequest(elementDocument->completeURL(sourceUrl)),
329 m_element->localName()); 339 m_element->localName());
330 340
331 CrossOriginAttributeValue crossOrigin = crossOriginAttributeValue( 341 CrossOriginAttributeValue crossOrigin = crossOriginAttributeValue(
332 m_element->fastGetAttribute(HTMLNames::crossoriginAttr)); 342 m_element->fastGetAttribute(HTMLNames::crossoriginAttr));
333 if (crossOrigin != CrossOriginAttributeNotSet) 343 if (crossOrigin != CrossOriginAttributeNotSet)
334 request.setCrossOriginAccessControl(elementDocument->getSecurityOrigin(), 344 request.setCrossOriginAccessControl(elementDocument->getSecurityOrigin(),
335 crossOrigin); 345 crossOrigin);
336 request.setCharset(scriptCharset()); 346 request.setCharset(scriptCharset());
337 347
338 // Skip fetch-related CSP checks if dynamically injected script is whitelist ed and this script is not parser-inserted. 348 // Skip fetch-related CSP checks if dynamically injected script is
349 // whitelisted and this script is not parser-inserted.
339 bool scriptPassesCSPDynamic = 350 bool scriptPassesCSPDynamic =
340 (!isParserInserted() && 351 (!isParserInserted() &&
341 elementDocument->contentSecurityPolicy()->allowDynamic()); 352 elementDocument->contentSecurityPolicy()->allowDynamic());
342 353
343 if (ContentSecurityPolicy::isNonceableElement(m_element.get())) 354 if (ContentSecurityPolicy::isNonceableElement(m_element.get()))
344 request.setContentSecurityPolicyNonce( 355 request.setContentSecurityPolicyNonce(
345 m_element->fastGetAttribute(HTMLNames::nonceAttr)); 356 m_element->fastGetAttribute(HTMLNames::nonceAttr));
346 357
347 if (scriptPassesCSPDynamic) { 358 if (scriptPassesCSPDynamic) {
348 UseCounter::count(elementDocument->frame(), 359 UseCounter::count(elementDocument->frame(),
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 accessControlStatus = OpaqueResource; 533 accessControlStatus = OpaqueResource;
523 else 534 else
524 accessControlStatus = SharableCrossOrigin; 535 accessControlStatus = SharableCrossOrigin;
525 } else if (sourceCode.resource()->passesAccessControlCheck( 536 } else if (sourceCode.resource()->passesAccessControlCheck(
526 m_element->document().getSecurityOrigin())) { 537 m_element->document().getSecurityOrigin())) {
527 accessControlStatus = SharableCrossOrigin; 538 accessControlStatus = SharableCrossOrigin;
528 } 539 }
529 } 540 }
530 541
531 const bool isImportedScript = contextDocument != elementDocument; 542 const bool isImportedScript = contextDocument != elementDocument;
532 // http://www.whatwg.org/specs/web-apps/current-work/#execute-the-script-block step 2.3 543 // http://www.whatwg.org/specs/web-apps/current-work/#execute-the-script-block
533 // with additional support for HTML imports. 544 // step 2.3 with additional support for HTML imports.
534 IgnoreDestructiveWriteCountIncrementer ignoreDestructiveWriteCountIncrementer( 545 IgnoreDestructiveWriteCountIncrementer ignoreDestructiveWriteCountIncrementer(
535 m_isExternalScript || isImportedScript ? contextDocument : 0); 546 m_isExternalScript || isImportedScript ? contextDocument : 0);
536 547
537 if (isHTMLScriptLoader(m_element) || isSVGScriptLoader(m_element)) 548 if (isHTMLScriptLoader(m_element) || isSVGScriptLoader(m_element))
538 contextDocument->pushCurrentScript(m_element); 549 contextDocument->pushCurrentScript(m_element);
539 550
540 // Create a script from the script element node, using the script 551 // Create a script from the script element node, using the script
541 // block's source and the script block's type. 552 // block's source and the script block's type.
542 // Note: This is where the script is compiled and actually executed. 553 // Note: This is where the script is compiled and actually executed.
543 frame->script().executeScriptInMainWorld(sourceCode, accessControlStatus); 554 frame->script().executeScriptInMainWorld(sourceCode, accessControlStatus);
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
642 if (isHTMLScriptLoader(element)) 653 if (isHTMLScriptLoader(element))
643 return toHTMLScriptElement(element)->loader(); 654 return toHTMLScriptElement(element)->loader();
644 655
645 if (isSVGScriptLoader(element)) 656 if (isSVGScriptLoader(element))
646 return toSVGScriptElement(element)->loader(); 657 return toSVGScriptElement(element)->loader();
647 658
648 return 0; 659 return 0;
649 } 660 }
650 661
651 } // namespace blink 662 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/Source/core/dom/ScriptLoader.h ('k') | third_party/WebKit/Source/core/dom/ScriptRunnerTest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698