Chromium Code Reviews| 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 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 344 if (resource && !resource->mimeTypeAllowedByNosniff()) { | 344 if (resource && !resource->mimeTypeAllowedByNosniff()) { |
| 345 contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMe ssageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->u rl().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable, and strict MIME type checking is enabled.")); | 345 contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMe ssageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->u rl().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable, and strict MIME type checking is enabled.")); |
| 346 return; | 346 return; |
| 347 } | 347 } |
| 348 | 348 |
| 349 if (resource && resource->mimeType().lower().startsWith("image/")) { | 349 if (resource && resource->mimeType().lower().startsWith("image/")) { |
| 350 contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMe ssageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->u rl().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable.")); | 350 contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMe ssageSource, ErrorMessageLevel, "Refused to execute script from '" + resource->u rl().elidedString() + "' because its MIME type ('" + resource->mimeType() + "') is not executable.")); |
| 351 UseCounter::count(frame, UseCounter::BlockedSniffingImageToScript); | 351 UseCounter::count(frame, UseCounter::BlockedSniffingImageToScript); |
| 352 return; | 352 return; |
| 353 } | 353 } |
| 354 | |
| 355 if (!SubresourceIntegrity::CheckSubresourceIntegrity(*m_element, sourceC ode.source(), sourceCode.resource()->url(), sourceCode.resource()->mimeType())) | |
| 356 return; | |
| 357 } | 354 } |
| 358 | 355 |
| 359 // FIXME: Can this be moved earlier in the function? | 356 // FIXME: Can this be moved earlier in the function? |
| 360 // Why are we ever attempting to execute scripts without a frame? | 357 // Why are we ever attempting to execute scripts without a frame? |
| 361 if (!frame) | 358 if (!frame) |
| 362 return; | 359 return; |
| 363 | 360 |
| 364 const bool isImportedScript = contextDocument != elementDocument; | 361 const bool isImportedScript = contextDocument != elementDocument; |
| 365 // http://www.whatwg.org/specs/web-apps/current-work/#execute-the-script-blo ck step 2.3 | 362 // http://www.whatwg.org/specs/web-apps/current-work/#execute-the-script-blo ck step 2.3 |
| 366 // with additional support for HTML imports. | 363 // with additional support for HTML imports. |
| 367 IgnoreDestructiveWriteCountIncrementer ignoreDestructiveWriteCountIncremente r(m_isExternalScript || isImportedScript ? contextDocument.get() : 0); | 364 IgnoreDestructiveWriteCountIncrementer ignoreDestructiveWriteCountIncremente r(m_isExternalScript || isImportedScript ? contextDocument.get() : 0); |
| 368 | 365 |
| 369 if (isHTMLScriptLoader(m_element)) | 366 if (isHTMLScriptLoader(m_element)) |
| 370 contextDocument->pushCurrentScript(toHTMLScriptElement(m_element)); | 367 contextDocument->pushCurrentScript(toHTMLScriptElement(m_element)); |
| 371 | 368 |
| 372 AccessControlStatus corsCheck = NotSharableCrossOrigin; | 369 AccessControlStatus corsCheck = NotSharableCrossOrigin; |
| 373 if (!m_isExternalScript || (sourceCode.resource() && sourceCode.resource()-> passesAccessControlCheck(&m_element->document(), m_element->document().securityO rigin()))) | 370 if (!m_isExternalScript || (sourceCode.resource() && sourceCode.resource()-> passesAccessControlCheck(&m_element->document(), m_element->document().securityO rigin()))) |
| 374 corsCheck = SharableCrossOrigin; | 371 corsCheck = SharableCrossOrigin; |
| 375 | 372 |
| 373 if (m_isExternalScript) { | |
| 374 bool canRequest = m_element->document().securityOrigin()->canRequest(sou rceCode.resource()->resourceRequest().url()); | |
| 375 if (!canRequest && corsCheck == NotSharableCrossOrigin && m_element->fas tHasAttribute(HTMLNames::integrityAttr)) { | |
| 376 contextDocument->addConsoleMessage(ConsoleMessage::create(SecurityMe ssageSource, ErrorMessageLevel, "Cannot enforce integrity on non-CORS enabled re source.")); | |
|
Mike West
2015/02/26 08:44:52
So we continue loading the resource if the CORS ch
jww
2015/03/06 02:16:42
You're right, I misread the algorithm (as you poin
| |
| 377 } else if ((canRequest || corsCheck == SharableCrossOrigin) && !Subresou rceIntegrity::CheckSubresourceIntegrity(*m_element, sourceCode.source(), sourceC ode.resource()->url(), sourceCode.resource()->mimeType())) { | |
| 378 return; | |
| 379 } | |
| 380 } | |
| 381 | |
| 376 // Create a script from the script element node, using the script | 382 // Create a script from the script element node, using the script |
| 377 // block's source and the script block's type. | 383 // block's source and the script block's type. |
| 378 // Note: This is where the script is compiled and actually executed. | 384 // Note: This is where the script is compiled and actually executed. |
| 379 frame->script().executeScriptInMainWorld(sourceCode, corsCheck, compilationF inishTime); | 385 frame->script().executeScriptInMainWorld(sourceCode, corsCheck, compilationF inishTime); |
| 380 | 386 |
| 381 if (isHTMLScriptLoader(m_element)) { | 387 if (isHTMLScriptLoader(m_element)) { |
| 382 ASSERT(contextDocument->currentScript() == m_element); | 388 ASSERT(contextDocument->currentScript() == m_element); |
| 383 contextDocument->popCurrentScript(); | 389 contextDocument->popCurrentScript(); |
| 384 } | 390 } |
| 385 } | 391 } |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 474 if (isHTMLScriptLoader(element)) | 480 if (isHTMLScriptLoader(element)) |
| 475 return toHTMLScriptElement(element)->loader(); | 481 return toHTMLScriptElement(element)->loader(); |
| 476 | 482 |
| 477 if (isSVGScriptLoader(element)) | 483 if (isSVGScriptLoader(element)) |
| 478 return toSVGScriptElement(element)->loader(); | 484 return toSVGScriptElement(element)->loader(); |
| 479 | 485 |
| 480 return 0; | 486 return 0; |
| 481 } | 487 } |
| 482 | 488 |
| 483 } // namespace blink | 489 } // namespace blink |
| OLD | NEW |