OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2011 Google, Inc. All rights reserved. | 2 * Copyright (C) 2011 Google, Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions | 5 * modification, are permitted provided that the following conditions |
6 * are met: | 6 * are met: |
7 * 1. Redistributions of source code must retain the above copyright | 7 * 1. Redistributions of source code must retain the above copyright |
8 * notice, this list of conditions and the following disclaimer. | 8 * notice, this list of conditions and the following disclaimer. |
9 * 2. Redistributions in binary form must reproduce the above copyright | 9 * 2. Redistributions in binary form must reproduce the above copyright |
10 * notice, this list of conditions and the following disclaimer in the | 10 * notice, this list of conditions and the following disclaimer in the |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 return false; | 234 return false; |
235 if (isSchemeOnly()) | 235 if (isSchemeOnly()) |
236 return true; | 236 return true; |
237 return hostMatches(url) && portMatches(url) && pathMatches(url); | 237 return hostMatches(url) && portMatches(url) && pathMatches(url); |
238 } | 238 } |
239 | 239 |
240 private: | 240 private: |
241 bool schemeMatches(const KURL& url) const | 241 bool schemeMatches(const KURL& url) const |
242 { | 242 { |
243 if (m_scheme.isEmpty()) { | 243 if (m_scheme.isEmpty()) { |
244 String protectedResourceScheme(m_policy->securityOrigin()->protocol(
)); | 244 String protectedResourceScheme(m_policy->url().protocol()); |
245 if (equalIgnoringCase("http", protectedResourceScheme)) | 245 if (equalIgnoringCase("http", protectedResourceScheme)) |
246 return url.protocolIs("http") || url.protocolIs("https"); | 246 return url.protocolIs("http") || url.protocolIs("https"); |
247 return equalIgnoringCase(url.protocol(), protectedResourceScheme); | 247 return equalIgnoringCase(url.protocol(), protectedResourceScheme); |
248 } | 248 } |
249 return equalIgnoringCase(url.protocol(), m_scheme); | 249 return equalIgnoringCase(url.protocol(), m_scheme); |
250 } | 250 } |
251 | 251 |
252 bool hostMatches(const KURL& url) const | 252 bool hostMatches(const KURL& url) const |
253 { | 253 { |
254 const String& host = url.host(); | 254 const String& host = url.host(); |
(...skipping 453 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
708 if (position != end) | 708 if (position != end) |
709 return false; | 709 return false; |
710 | 710 |
711 bool ok; | 711 bool ok; |
712 port = charactersToIntStrict(begin, end - begin, &ok); | 712 port = charactersToIntStrict(begin, end - begin, &ok); |
713 return ok; | 713 return ok; |
714 } | 714 } |
715 | 715 |
716 void CSPSourceList::addSourceSelf() | 716 void CSPSourceList::addSourceSelf() |
717 { | 717 { |
718 m_list.append(CSPSource(m_policy, m_policy->securityOrigin()->protocol(), m_
policy->securityOrigin()->host(), m_policy->securityOrigin()->port(), String(),
false, false)); | 718 if (Document* document = m_policy->document()) { |
| 719 // srcdoc documents should use their parent document's URL as 'self', so
walk the chain. |
| 720 Frame* frame = document->frame(); |
| 721 while (frame->document()->isSrcdocDocument() && frame->tree().parent()) |
| 722 frame = frame->tree().parent(); |
| 723 document = frame->document(); |
| 724 m_list.append(CSPSource(m_policy, document->url().protocol(), document->
url().host(), document->url().port(), String(), false, false)); |
| 725 } else { |
| 726 m_list.append(CSPSource(m_policy, m_policy->url().protocol(), m_policy->
url().host(), m_policy->url().port(), String(), false, false)); |
| 727 } |
719 } | 728 } |
720 | 729 |
721 void CSPSourceList::addSourceStar() | 730 void CSPSourceList::addSourceStar() |
722 { | 731 { |
723 m_allowStar = true; | 732 m_allowStar = true; |
724 } | 733 } |
725 | 734 |
726 void CSPSourceList::addSourceUnsafeInline() | 735 void CSPSourceList::addSourceUnsafeInline() |
727 { | 736 { |
728 m_allowInline = true; | 737 m_allowInline = true; |
(...skipping 1577 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2306 // Collisions have no security impact, so we can save space by storing only
the string's hash rather than the whole report. | 2315 // Collisions have no security impact, so we can save space by storing only
the string's hash rather than the whole report. |
2307 return !m_violationReportsSent.contains(report.impl()->hash()); | 2316 return !m_violationReportsSent.contains(report.impl()->hash()); |
2308 } | 2317 } |
2309 | 2318 |
2310 void ContentSecurityPolicy::didSendViolationReport(const String& report) | 2319 void ContentSecurityPolicy::didSendViolationReport(const String& report) |
2311 { | 2320 { |
2312 m_violationReportsSent.add(report.impl()->hash()); | 2321 m_violationReportsSent.add(report.impl()->hash()); |
2313 } | 2322 } |
2314 | 2323 |
2315 } // namespace WebCore | 2324 } // namespace WebCore |
OLD | NEW |