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

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

Issue 2806523002: Move isLegacySupportedJavaScriptLanguage() to MIMETypeRegistry (Closed)
Patch Set: Created 3 years, 8 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
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/network/mime/MIMETypeRegistry.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 5 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights
6 * reserved. 6 * reserved.
7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> 7 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org>
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 10 * modify it under the terms of the GNU Library General Public
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 m_nonBlocking = false; 140 m_nonBlocking = false;
141 } 141 }
142 142
143 void ScriptLoader::detachPendingScript() { 143 void ScriptLoader::detachPendingScript() {
144 if (!m_pendingScript) 144 if (!m_pendingScript)
145 return; 145 return;
146 m_pendingScript->dispose(); 146 m_pendingScript->dispose();
147 m_pendingScript = nullptr; 147 m_pendingScript = nullptr;
148 } 148 }
149 149
150 static bool isLegacySupportedJavaScriptLanguage(const String& language) {
151 // Mozilla 1.8 accepts javascript1.0 - javascript1.7, but WinIE 7 accepts only
152 // javascript1.1 - javascript1.3.
153 // Mozilla 1.8 and WinIE 7 both accept javascript and livescript.
154 // WinIE 7 accepts ecmascript and jscript, but Mozilla 1.8 doesn't.
155 // Neither Mozilla 1.8 nor WinIE 7 accept leading or trailing whitespace.
156 // We want to accept all the values that either of these browsers accept, but
157 // not other values.
158
159 // FIXME: This function is not HTML5 compliant. These belong in the MIME
160 // registry as "text/javascript<version>" entries.
161 return equalIgnoringASCIICase(language, "javascript") ||
162 equalIgnoringASCIICase(language, "javascript1.0") ||
163 equalIgnoringASCIICase(language, "javascript1.1") ||
164 equalIgnoringASCIICase(language, "javascript1.2") ||
165 equalIgnoringASCIICase(language, "javascript1.3") ||
166 equalIgnoringASCIICase(language, "javascript1.4") ||
167 equalIgnoringASCIICase(language, "javascript1.5") ||
168 equalIgnoringASCIICase(language, "javascript1.6") ||
169 equalIgnoringASCIICase(language, "javascript1.7") ||
170 equalIgnoringASCIICase(language, "livescript") ||
171 equalIgnoringASCIICase(language, "ecmascript") ||
172 equalIgnoringASCIICase(language, "jscript");
173 }
174
175 void ScriptLoader::dispatchErrorEvent() { 150 void ScriptLoader::dispatchErrorEvent() {
176 m_element->dispatchErrorEvent(); 151 m_element->dispatchErrorEvent();
177 } 152 }
178 153
179 void ScriptLoader::dispatchLoadEvent() { 154 void ScriptLoader::dispatchLoadEvent() {
180 m_element->dispatchLoadEvent(); 155 m_element->dispatchLoadEvent();
181 setHaveFiredLoadEvent(true); 156 setHaveFiredLoadEvent(true);
182 } 157 }
183 158
184 bool ScriptLoader::isValidScriptTypeAndLanguage( 159 bool ScriptLoader::isValidScriptTypeAndLanguage(
185 const String& type, 160 const String& type,
186 const String& language, 161 const String& language,
187 LegacyTypeSupport supportLegacyTypes) { 162 LegacyTypeSupport supportLegacyTypes) {
188 // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used 163 // FIXME: isLegacySupportedJavaScriptLanguage() is not valid HTML5. It is used
189 // here to maintain backwards compatibility with existing layout tests. The 164 // here to maintain backwards compatibility with existing layout tests. The
190 // specific violations are: 165 // specific violations are:
191 // - Allowing type=javascript. type= should only support MIME types, such as 166 // - Allowing type=javascript. type= should only support MIME types, such as
192 // text/javascript. 167 // text/javascript.
193 // - Allowing a different set of languages for language= and type=. language= 168 // - Allowing a different set of languages for language= and type=. language=
194 // supports Javascript 1.1 and 1.4-1.6, but type= does not. 169 // supports Javascript 1.1 and 1.4-1.6, but type= does not.
195 if (type.isEmpty()) { 170 if (type.isEmpty()) {
196 return language.isEmpty() || // assume text/javascript. 171 return language.isEmpty() || // assume text/javascript.
197 MIMETypeRegistry::isSupportedJavaScriptMIMEType("text/" + 172 MIMETypeRegistry::isSupportedJavaScriptMIMEType("text/" +
198 language) || 173 language) ||
199 isLegacySupportedJavaScriptLanguage(language); 174 MIMETypeRegistry::isLegacySupportedJavaScriptLanguage(language);
200 } else if (RuntimeEnabledFeatures::moduleScriptsEnabled() && 175 } else if (RuntimeEnabledFeatures::moduleScriptsEnabled() &&
201 type == "module") { 176 type == "module") {
202 return true; 177 return true;
203 } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType( 178 } else if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(
204 type.stripWhiteSpace()) || 179 type.stripWhiteSpace()) ||
205 (supportLegacyTypes == AllowLegacyTypeInTypeAttribute && 180 (supportLegacyTypes == AllowLegacyTypeInTypeAttribute &&
206 isLegacySupportedJavaScriptLanguage(type))) { 181 MIMETypeRegistry::isLegacySupportedJavaScriptLanguage(type))) {
207 return true; 182 return true;
208 } 183 }
209 184
210 return false; 185 return false;
211 } 186 }
212 187
213 bool ScriptLoader::isScriptTypeSupported( 188 bool ScriptLoader::isScriptTypeSupported(
214 LegacyTypeSupport supportLegacyTypes) const { 189 LegacyTypeSupport supportLegacyTypes) const {
215 return isValidScriptTypeAndLanguage(m_element->typeAttributeValue(), 190 return isValidScriptTypeAndLanguage(m_element->typeAttributeValue(),
216 m_element->languageAttributeValue(), 191 m_element->languageAttributeValue(),
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 587
613 return true; 588 return true;
614 } 589 }
615 590
616 void ScriptLoader::logScriptMIMEType(LocalFrame* frame, 591 void ScriptLoader::logScriptMIMEType(LocalFrame* frame,
617 ScriptResource* resource, 592 ScriptResource* resource,
618 const String& mimeType) { 593 const String& mimeType) {
619 if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType)) 594 if (MIMETypeRegistry::isSupportedJavaScriptMIMEType(mimeType))
620 return; 595 return;
621 bool isText = mimeType.startsWith("text/", TextCaseASCIIInsensitive); 596 bool isText = mimeType.startsWith("text/", TextCaseASCIIInsensitive);
622 if (isText && isLegacySupportedJavaScriptLanguage(mimeType.substring(5))) 597 if (isText && MIMETypeRegistry::isLegacySupportedJavaScriptLanguage(
598 mimeType.substring(5)))
623 return; 599 return;
624 bool isSameOrigin = 600 bool isSameOrigin =
625 m_element->document().getSecurityOrigin()->canRequest(resource->url()); 601 m_element->document().getSecurityOrigin()->canRequest(resource->url());
626 bool isApplication = 602 bool isApplication =
627 !isText && mimeType.startsWith("application/", TextCaseASCIIInsensitive); 603 !isText && mimeType.startsWith("application/", TextCaseASCIIInsensitive);
628 604
629 UseCounter::Feature feature = 605 UseCounter::Feature feature =
630 isSameOrigin 606 isSameOrigin
631 ? (isText ? UseCounter::SameOriginTextScript 607 ? (isText ? UseCounter::SameOriginTextScript
632 : isApplication ? UseCounter::SameOriginApplicationScript 608 : isApplication ? UseCounter::SameOriginApplicationScript
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 // then abort these steps at this point. The script is not executed. 834 // then abort these steps at this point. The script is not executed.
859 return equalIgnoringCase(eventAttribute, "onload") || 835 return equalIgnoringCase(eventAttribute, "onload") ||
860 equalIgnoringCase(eventAttribute, "onload()"); 836 equalIgnoringCase(eventAttribute, "onload()");
861 } 837 }
862 838
863 String ScriptLoader::scriptContent() const { 839 String ScriptLoader::scriptContent() const {
864 return m_element->textFromChildren(); 840 return m_element->textFromChildren();
865 } 841 }
866 842
867 } // namespace blink 843 } // namespace blink
OLDNEW
« no previous file with comments | « no previous file | third_party/WebKit/Source/platform/network/mime/MIMETypeRegistry.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698