OLD | NEW |
---|---|
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 reserv ed. |
6 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> | 6 * Copyright (C) 2008 Nikolas Zimmermann <zimmermann@kde.org> |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
275 } | 275 } |
276 | 276 |
277 if (m_cachedScript) { | 277 if (m_cachedScript) { |
278 return true; | 278 return true; |
279 } | 279 } |
280 | 280 |
281 dispatchErrorEvent(); | 281 dispatchErrorEvent(); |
282 return false; | 282 return false; |
283 } | 283 } |
284 | 284 |
285 bool isHTMLScriptElement(Element* element) | |
286 { | |
287 return element->isHTMLElement() && element->hasTagName(HTMLNames::scriptTag) ; | |
288 } | |
289 | |
285 void ScriptElement::executeScript(const ScriptSourceCode& sourceCode) | 290 void ScriptElement::executeScript(const ScriptSourceCode& sourceCode) |
286 { | 291 { |
287 ASSERT(m_alreadyStarted); | 292 ASSERT(m_alreadyStarted); |
288 | 293 |
289 if (sourceCode.isEmpty()) | 294 if (sourceCode.isEmpty()) |
290 return; | 295 return; |
291 | 296 |
292 RefPtr<Document> document = m_element->document(); | 297 RefPtr<Document> document = m_element->document(); |
293 Frame* frame = document->frame(); | 298 Frame* frame = document->frame(); |
294 | 299 |
295 bool shouldBypassMainWorldContentSecurityPolicy = (frame && frame->script()- >shouldBypassMainWorldContentSecurityPolicy()); | 300 bool shouldBypassMainWorldContentSecurityPolicy = (frame && frame->script()- >shouldBypassMainWorldContentSecurityPolicy()); |
296 if (!shouldBypassMainWorldContentSecurityPolicy && !document->contentSecurit yPolicy()->allowScriptNonce(m_element->fastGetAttribute(HTMLNames::nonceAttr), d ocument->url(), m_startLineNumber)) | 301 if (!shouldBypassMainWorldContentSecurityPolicy && !document->contentSecurit yPolicy()->allowScriptNonce(m_element->fastGetAttribute(HTMLNames::nonceAttr), d ocument->url(), m_startLineNumber)) |
297 return; | 302 return; |
298 | 303 |
299 if (!m_isExternalScript && (!shouldBypassMainWorldContentSecurityPolicy && ! document->contentSecurityPolicy()->allowInlineScript(document->url(), m_startLin eNumber))) | 304 if (!m_isExternalScript && (!shouldBypassMainWorldContentSecurityPolicy && ! document->contentSecurityPolicy()->allowInlineScript(document->url(), m_startLin eNumber))) |
300 return; | 305 return; |
301 | 306 |
302 if (m_isExternalScript && m_cachedScript && !m_cachedScript->mimeTypeAllowed ByNosniff()) { | 307 if (m_isExternalScript && m_cachedScript && !m_cachedScript->mimeTypeAllowed ByNosniff()) { |
303 document->addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "R efused to execute script from '" + m_cachedScript->url().elidedString() + "' bec ause its MIME type ('" + m_cachedScript->mimeType() + "') is not executable, and strict MIME type checking is enabled."); | 308 document->addConsoleMessage(SecurityMessageSource, ErrorMessageLevel, "R efused to execute script from '" + m_cachedScript->url().elidedString() + "' bec ause its MIME type ('" + m_cachedScript->mimeType() + "') is not executable, and strict MIME type checking is enabled."); |
304 return; | 309 return; |
305 } | 310 } |
306 | 311 |
307 if (frame) { | 312 if (frame) { |
308 { | 313 { |
309 IgnoreDestructiveWriteCountIncrementer ignoreDesctructiveWriteCountI ncrementer(m_isExternalScript ? document.get() : 0); | 314 IgnoreDestructiveWriteCountIncrementer ignoreDesctructiveWriteCountI ncrementer(m_isExternalScript ? document.get() : 0); |
315 | |
316 if (isHTMLScriptElement(m_element)) | |
317 document->setCurrentScript(static_cast<HTMLScriptElement*>(m_ele ment)); | |
318 | |
310 // Create a script from the script element node, using the script | 319 // Create a script from the script element node, using the script |
311 // block's source and the script block's type. | 320 // block's source and the script block's type. |
312 // Note: This is where the script is compiled and actually executed. | 321 // Note: This is where the script is compiled and actually executed. |
313 frame->script()->evaluate(sourceCode); | 322 frame->script()->evaluate(sourceCode); |
323 | |
324 document->setCurrentScript(0); | |
esprehn
2013/05/14 22:50:09
I think you want to check that document->currentSc
| |
314 } | 325 } |
315 } | 326 } |
316 } | 327 } |
317 | 328 |
318 void ScriptElement::stopLoadRequest() | 329 void ScriptElement::stopLoadRequest() |
319 { | 330 { |
320 if (m_cachedScript) { | 331 if (m_cachedScript) { |
321 if (!m_willBeParserExecuted) | 332 if (!m_willBeParserExecuted) |
322 m_cachedScript->removeClient(this); | 333 m_cachedScript->removeClient(this); |
323 m_cachedScript = 0; | 334 m_cachedScript = 0; |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
410 } | 421 } |
411 | 422 |
412 if (firstTextNode && !foundMultipleTextNodes) | 423 if (firstTextNode && !foundMultipleTextNodes) |
413 return firstTextNode->data(); | 424 return firstTextNode->data(); |
414 | 425 |
415 return content.toString(); | 426 return content.toString(); |
416 } | 427 } |
417 | 428 |
418 ScriptElement* toScriptElementIfPossible(Element* element) | 429 ScriptElement* toScriptElementIfPossible(Element* element) |
419 { | 430 { |
420 if (element->isHTMLElement() && element->hasTagName(HTMLNames::scriptTag)) | 431 if (isHTMLScriptElement(element)) |
421 return static_cast<HTMLScriptElement*>(element); | 432 return static_cast<HTMLScriptElement*>(element); |
422 | 433 |
423 #if ENABLE(SVG) | 434 #if ENABLE(SVG) |
424 if (element->isSVGElement() && element->hasTagName(SVGNames::scriptTag)) | 435 if (element->isSVGElement() && element->hasTagName(SVGNames::scriptTag)) |
425 return static_cast<SVGScriptElement*>(element); | 436 return static_cast<SVGScriptElement*>(element); |
426 #endif | 437 #endif |
427 | 438 |
428 return 0; | 439 return 0; |
429 } | 440 } |
430 | 441 |
431 } | 442 } |
OLD | NEW |