| OLD | NEW |
| 1 /* | 1 /* |
| 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) | 2 Copyright (C) 1998 Lars Knoll (knoll@mpi-hd.mpg.de) |
| 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) | 3 Copyright (C) 2001 Dirk Mueller (mueller@kde.org) |
| 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) | 4 Copyright (C) 2002 Waldo Bastian (bastian@kde.org) |
| 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. | 5 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Apple Inc. All
rights reserved. |
| 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ | 6 Copyright (C) 2009 Torch Mobile Inc. http://www.torchmobile.com/ |
| 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 479 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 490 if (!securityOrigin && document()) | 490 if (!securityOrigin && document()) |
| 491 securityOrigin = document()->securityOrigin(); | 491 securityOrigin = document()->securityOrigin(); |
| 492 | 492 |
| 493 if (securityOrigin && !securityOrigin->canDisplay(url)) { | 493 if (securityOrigin && !securityOrigin->canDisplay(url)) { |
| 494 if (!forPreload) | 494 if (!forPreload) |
| 495 context().reportLocalLoadFailed(url); | 495 context().reportLocalLoadFailed(url); |
| 496 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource URL was not a
llowed by SecurityOrigin::canDisplay"); | 496 WTF_LOG(ResourceLoading, "ResourceFetcher::requestResource URL was not a
llowed by SecurityOrigin::canDisplay"); |
| 497 return 0; | 497 return 0; |
| 498 } | 498 } |
| 499 | 499 |
| 500 // FIXME: Convert this to check the isolated world's Content Security Policy
once webkit.org/b/104520 is solved. | |
| 501 bool shouldBypassMainWorldContentSecurityPolicy = (frame() && frame()->scrip
t().shouldBypassMainWorldContentSecurityPolicy()) || (options.contentSecurityPol
icyOption == DoNotCheckContentSecurityPolicy); | |
| 502 | |
| 503 // Some types of resources can be loaded only from the same origin. Other | 500 // Some types of resources can be loaded only from the same origin. Other |
| 504 // types of resources, like Images, Scripts, and CSS, can be loaded from | 501 // types of resources, like Images, Scripts, and CSS, can be loaded from |
| 505 // any URL. | 502 // any URL. |
| 506 switch (type) { | 503 switch (type) { |
| 507 case Resource::MainResource: | 504 case Resource::MainResource: |
| 508 case Resource::Image: | 505 case Resource::Image: |
| 509 case Resource::CSSStyleSheet: | 506 case Resource::CSSStyleSheet: |
| 510 case Resource::Script: | 507 case Resource::Script: |
| 511 case Resource::Font: | 508 case Resource::Font: |
| 512 case Resource::Raw: | 509 case Resource::Raw: |
| (...skipping 12 matching lines...) Expand all Loading... |
| 525 case Resource::XSLStyleSheet: | 522 case Resource::XSLStyleSheet: |
| 526 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 523 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
| 527 case Resource::SVGDocument: | 524 case Resource::SVGDocument: |
| 528 if (!securityOrigin->canRequest(url)) { | 525 if (!securityOrigin->canRequest(url)) { |
| 529 printAccessDeniedMessage(url); | 526 printAccessDeniedMessage(url); |
| 530 return false; | 527 return false; |
| 531 } | 528 } |
| 532 break; | 529 break; |
| 533 } | 530 } |
| 534 | 531 |
| 532 // FIXME: Convert this to check the isolated world's Content Security Policy
once webkit.org/b/104520 is solved. |
| 533 bool shouldBypassMainWorldCSP = (frame() && frame()->script().shouldBypassMa
inWorldCSP()) || (options.contentSecurityPolicyOption == DoNotCheckContentSecuri
tyPolicy); |
| 534 |
| 535 // Don't send CSP messages for preloads, we might never actually display tho
se items. | 535 // Don't send CSP messages for preloads, we might never actually display tho
se items. |
| 536 ContentSecurityPolicy::ReportingStatus cspReporting = forPreload ? | 536 ContentSecurityPolicy::ReportingStatus cspReporting = forPreload ? |
| 537 ContentSecurityPolicy::SuppressReport : ContentSecurityPolicy::SendRepor
t; | 537 ContentSecurityPolicy::SuppressReport : ContentSecurityPolicy::SendRepor
t; |
| 538 | 538 |
| 539 // m_document can be null, but not in any of the cases where csp is actually
used below. |
| 540 // ImageResourceTest.MultipartImage crashes w/o the m_document null check. |
| 541 // I believe it's the Resource::Raw case. |
| 542 const ContentSecurityPolicy* csp = m_document ? m_document->contentSecurityP
olicy() : nullptr; |
| 543 |
| 544 // FIXME: This would be cleaner if moved this switch into an allowFromSource
() |
| 545 // helper on this object which took a Resource::Type, then this block would |
| 546 // collapse to about 10 lines for handling Raw and Script special cases. |
| 539 switch (type) { | 547 switch (type) { |
| 540 case Resource::XSLStyleSheet: | 548 case Resource::XSLStyleSheet: |
| 541 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); | 549 ASSERT(RuntimeEnabledFeatures::xsltEnabled()); |
| 542 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url, cspReporting)) | 550 if (!shouldBypassMainWorldCSP && !csp->allowScriptFromSource(url, cspRep
orting)) |
| 543 return false; | 551 return false; |
| 544 break; | 552 break; |
| 545 case Resource::Script: | 553 case Resource::Script: |
| 546 case Resource::ImportResource: | 554 case Resource::ImportResource: |
| 547 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowScriptFromSource(url, cspReporting)) | 555 if (!shouldBypassMainWorldCSP && !csp->allowScriptFromSource(url, cspRep
orting)) |
| 548 return false; | 556 return false; |
| 549 | 557 |
| 550 if (frame()) { | 558 if (frame()) { |
| 551 Settings* settings = frame()->settings(); | 559 Settings* settings = frame()->settings(); |
| 552 if (!frame()->loader().client()->allowScriptFromSource(!settings ||
settings->scriptEnabled(), url)) { | 560 if (!frame()->loader().client()->allowScriptFromSource(!settings ||
settings->scriptEnabled(), url)) { |
| 553 frame()->loader().client()->didNotAllowScript(); | 561 frame()->loader().client()->didNotAllowScript(); |
| 554 return false; | 562 return false; |
| 555 } | 563 } |
| 556 } | 564 } |
| 557 break; | 565 break; |
| 558 case Resource::CSSStyleSheet: | 566 case Resource::CSSStyleSheet: |
| 559 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowStyleFromSource(url, cspReporting)) | 567 if (!shouldBypassMainWorldCSP && !csp->allowStyleFromSource(url, cspRepo
rting)) |
| 560 return false; | 568 return false; |
| 561 break; | 569 break; |
| 562 case Resource::SVGDocument: | 570 case Resource::SVGDocument: |
| 563 case Resource::Image: | 571 case Resource::Image: |
| 564 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowImageFromSource(url, cspReporting)) | 572 if (!shouldBypassMainWorldCSP && !csp->allowImageFromSource(url, cspRepo
rting)) |
| 565 return false; | 573 return false; |
| 566 break; | 574 break; |
| 567 case Resource::Font: { | 575 case Resource::Font: { |
| 568 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowFontFromSource(url, cspReporting)) | 576 if (!shouldBypassMainWorldCSP && !csp->allowFontFromSource(url, cspRepor
ting)) |
| 569 return false; | 577 return false; |
| 570 break; | 578 break; |
| 571 } | 579 } |
| 572 case Resource::MainResource: | 580 case Resource::MainResource: |
| 573 case Resource::Raw: | 581 case Resource::Raw: |
| 574 case Resource::LinkPrefetch: | 582 case Resource::LinkPrefetch: |
| 575 case Resource::LinkSubresource: | 583 case Resource::LinkSubresource: |
| 576 break; | 584 break; |
| 577 case Resource::Media: | 585 case Resource::Media: |
| 578 case Resource::TextTrack: | 586 case Resource::TextTrack: |
| 579 if (!shouldBypassMainWorldContentSecurityPolicy && !m_document->contentS
ecurityPolicy()->allowMediaFromSource(url, cspReporting)) | 587 if (!shouldBypassMainWorldCSP && !csp->allowMediaFromSource(url, cspRepo
rting)) |
| 580 return false; | 588 return false; |
| 581 | 589 |
| 582 if (frame()) { | 590 if (frame()) { |
| 583 if (!frame()->loader().client()->allowMedia(url)) | 591 if (!frame()->loader().client()->allowMedia(url)) |
| 584 return false; | 592 return false; |
| 585 } | 593 } |
| 586 break; | 594 break; |
| 587 } | 595 } |
| 588 | 596 |
| 589 // SVG Images have unique security rules that prevent all subresource reques
ts | 597 // SVG Images have unique security rules that prevent all subresource reques
ts |
| (...skipping 900 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1490 } | 1498 } |
| 1491 } | 1499 } |
| 1492 | 1500 |
| 1493 void ResourceFetcher::trace(Visitor* visitor) | 1501 void ResourceFetcher::trace(Visitor* visitor) |
| 1494 { | 1502 { |
| 1495 visitor->trace(m_document); | 1503 visitor->trace(m_document); |
| 1496 ResourceLoaderHost::trace(visitor); | 1504 ResourceLoaderHost::trace(visitor); |
| 1497 } | 1505 } |
| 1498 | 1506 |
| 1499 } | 1507 } |
| OLD | NEW |