15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2011 Google, Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * documentation and/or other materials provided with the distribution. 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef ContentSecurityPolicy_h 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define ContentSecurityPolicy_h 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 29197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch#include "bindings/core/v8/ScriptState.h" 305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)#include "core/dom/ExecutionContext.h" 31c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)#include "core/frame/ConsoleTypes.h" 32d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "platform/network/ContentSecurityPolicyParsers.h" 331e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/network/HTTPParsers.h" 3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "platform/weborigin/ReferrerPolicy.h" 353c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/HashSet.h" 36591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/PassOwnPtr.h" 37d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/PassRefPtr.h" 38d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "wtf/RefCounted.h" 39591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/Vector.h" 403c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch#include "wtf/text/StringHash.h" 41591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/TextPosition.h" 42591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch#include "wtf/text/WTFString.h" 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)namespace WTF { 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class OrdinalNumber; 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 48c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 50f5e4ad553afbc08dd2e729bb77e937a9a94d5827Torne (Richard Coles)class ContentSecurityPolicyResponseHeaders; 517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass ConsoleMessage; 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class CSPDirectiveList; 537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciclass CSPSource; 54197021e6b966cfb06891637935ef33fff06433d1Ben Murdochclass Document; 55521d96ec04ace82590870fb04353ec4f82bb150fTorne (Richard Coles)class KURL; 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)class SecurityOrigin; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef int SandboxFlags; 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)typedef Vector<OwnPtr<CSPDirectiveList> > CSPDirectiveListVector; 607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tuccitypedef WillBePersistentHeapVector<RefPtrWillBeMember<ConsoleMessage> > ConsoleMessageVector; 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 62d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)class ContentSecurityPolicy : public RefCounted<ContentSecurityPolicy> { 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) WTF_MAKE_FAST_ALLOCATED; 645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public: 65d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // CSP 1.0 Directives 66d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ConnectSrc[]; 67d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char DefaultSrc[]; 68d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char FontSrc[]; 69d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char FrameSrc[]; 70d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ImgSrc[]; 71d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char MediaSrc[]; 72d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ObjectSrc[]; 73d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ReportURI[]; 74d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char Sandbox[]; 75d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ScriptSrc[]; 76d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char StyleSrc[]; 77d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 78d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) // CSP 1.1 Directives 79d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char BaseURI[]; 80d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ChildSrc[]; 81d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char FormAction[]; 82d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char FrameAncestors[]; 83d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char PluginTypes[]; 84d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char ReflectedXSS[]; 85d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static const char Referrer[]; 86d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci enum ReportingStatus { 887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SendReport, 897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SuppressReport 907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }; 917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci static PassRefPtr<ContentSecurityPolicy> create() 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return adoptRef(new ContentSecurityPolicy()); 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ~ContentSecurityPolicy(); 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void bindToExecutionContext(ExecutionContext*); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void copyStateFrom(const ContentSecurityPolicy*); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 10102772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch void didReceiveHeaders(const ContentSecurityPolicyResponseHeaders&); 102d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void didReceiveHeader(const String&, ContentSecurityPolicyHeaderType, ContentSecurityPolicyHeaderSource); 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // These functions are wrong because they assume that there is only one header. 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) // FIXME: Replace them with functions that return vectors. 1065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) const String& deprecatedHeader() const; 107d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) ContentSecurityPolicyHeaderType deprecatedHeaderType() const; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowJavaScriptURLs(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowInlineEventHandlers(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const; 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowInlineScript(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const; 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowInlineStyle(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const; 113d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) bool allowEval(ScriptState* = 0, ReportingStatus = SendReport) const; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowPluginType(const String& type, const String& typeAttribute, const KURL&, ReportingStatus = SendReport) const; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowScriptFromSource(const KURL&, ReportingStatus = SendReport) const; 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowObjectFromSource(const KURL&, ReportingStatus = SendReport) const; 1185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowChildFrameFromSource(const KURL&, ReportingStatus = SendReport) const; 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowImageFromSource(const KURL&, ReportingStatus = SendReport) const; 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowStyleFromSource(const KURL&, ReportingStatus = SendReport) const; 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowFontFromSource(const KURL&, ReportingStatus = SendReport) const; 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowMediaFromSource(const KURL&, ReportingStatus = SendReport) const; 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowConnectToSource(const KURL&, ReportingStatus = SendReport) const; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool allowFormAction(const KURL&, ReportingStatus = SendReport) const; 12553e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles) bool allowBaseURI(const KURL&, ReportingStatus = SendReport) const; 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool allowAncestors(LocalFrame*, const KURL&, ReportingStatus = SendReport) const; 12709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool allowChildContextFromSource(const KURL&, ReportingStatus = SendReport) const; 12809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool allowWorkerContextFromSource(const KURL&, ReportingStatus = SendReport) const; 12909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 130f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // The nonce and hash allow functions are guaranteed to not have any side 131f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // effects, including reporting. 132197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // Nonce/Hash functions check all policies relating to use of a script/style 133197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // with the given nonce/hash and return true all CSP policies allow it. 134197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // If these return true, callers can then process the content or 135197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // issue a load and be safe disabling any further CSP checks. 136197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool allowScriptWithNonce(const String& nonce) const; 137197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool allowStyleWithNonce(const String& nonce) const; 138197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool allowScriptWithHash(const String& source) const; 139197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch bool allowStyleWithHash(const String& source) const; 140f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 141d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void usesScriptHashAlgorithms(uint8_t ContentSecurityPolicyHashAlgorithm); 142d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void usesStyleHashAlgorithms(uint8_t ContentSecurityPolicyHashAlgorithm); 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ReflectedXSSDisposition reflectedXSSDisposition() const; 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 14609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) ReferrerPolicy referrerPolicy() const; 14709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) bool didSetReferrerPolicy() const; 14809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void setOverrideAllowInlineStyle(bool); 1507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void setOverrideURLForSelf(const KURL&); 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool isActive() const; 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // If a frame is passed in, the message will be logged to its active document's console. 1557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Otherwise, the message will be logged to this object's |m_executionContext|. 1567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void logToConsole(PassRefPtrWillBeRawPtr<ConsoleMessage>, LocalFrame* = 0); 1577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportDirectiveAsSourceExpression(const String& directiveName, const String& sourceExpression); 1597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportDuplicateDirective(const String&); 1607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidDirectiveValueCharacter(const String& directiveName, const String& value); 1617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidPathCharacter(const String& directiveName, const String& value, const char); 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidPluginTypes(const String&); 1637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidSandboxFlags(const String&); 1647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidSourceExpression(const String& directiveName, const String& source); 1657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidReflectedXSS(const String&); 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportMissingReportURI(const String&); 1677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportUnsupportedDirective(const String&); 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidInReportOnly(const String&); 1697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportInvalidReferrer(const String&); 1707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportReportOnlyInMeta(const String&); 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportMetaOutsideHead(const String&); 1727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1737242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // If a frame is passed in, the report will be sent using it as a context. If no frame is 1747242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // passed in, the report will be sent via this object's |m_executionContext| (or dropped 1757242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // on the floor if no such context is available). 1767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void reportViolation(const String& directiveText, const String& effectiveDirective, const String& consoleMessage, const KURL& blockedURL, const Vector<String>& reportEndpoints, const String& header, LocalFrame* = 0); 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) void reportBlockedScriptExecutionToInspector(const String& directiveText) const; 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 180f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) const KURL url() const; 1817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void enforceSandboxFlags(SandboxFlags); 1825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) String evalDisabledErrorMessage() const; 1835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool urlMatchesSelf(const KURL&) const; 1857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci bool protocolMatchesSelf(const KURL&) const; 1867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) bool experimentalFeaturesEnabled() const; 188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1891e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) static bool shouldBypassMainWorld(ExecutionContext*); 190e52495584422c5edb5b2944981473a2e208da323Torne (Richard Coles) 191d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) static bool isDirectiveName(const String&); 192d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private: 1947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ContentSecurityPolicy(); 1957242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 1967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void applyPolicySideEffectsToExecutionContext(); 1975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 198197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch Document* document() const; 1997242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SecurityOrigin* securityOrigin() const; 2007242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci KURL completeURL(const String&) const; 201197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 2027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci void logToConsole(const String& message, MessageLevel = ErrorMessageLevel); 203d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) void addPolicyFromHeaderValue(const String&, ContentSecurityPolicyHeaderType, ContentSecurityPolicyHeaderSource); 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2053c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch bool shouldSendViolationReport(const String&) const; 2063c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch void didSendViolationReport(const String&); 2073c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 2085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) ExecutionContext* m_executionContext; 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) bool m_overrideInlineStyleAllowed; 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) CSPDirectiveListVector m_policies; 2117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ConsoleMessageVector m_consoleMessages; 2123c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch 2133c9e4aeaee9f9b0a9a814da07bcb33319c7ea363Ben Murdoch HashSet<unsigned, AlreadyHashed> m_violationReportsSent; 214f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) 215f79f16f17ddc4f842d7b7a38603e280e94be826aTorne (Richard Coles) // We put the hash functions used on the policy object so that we only need 21609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // to calculate a hash once and then distribute it to all of the directives 21709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) // for validation. 21809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uint8_t m_scriptHashAlgorithmsUsed; 21909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) uint8_t m_styleHashAlgorithmsUsed; 2207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // State flags used to configure the environment after parsing a policy. 2227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci SandboxFlags m_sandboxMask; 2237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci ReferrerPolicy m_referrerPolicy; 2247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci String m_disableEvalErrorMessage; 2257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci OwnPtr<CSPSource> m_selfSource; 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif 232