| Index: third_party/WebKit/Source/core/frame/csp/CSPSourceList.cpp | 
| diff --git a/third_party/WebKit/Source/core/frame/csp/CSPSourceList.cpp b/third_party/WebKit/Source/core/frame/csp/CSPSourceList.cpp | 
| index bf9104f2030dba5dc88bb938c9b87c8b5374bed4..8b215c7ac88d72e785acf186b205515a2191980d 100644 | 
| --- a/third_party/WebKit/Source/core/frame/csp/CSPSourceList.cpp | 
| +++ b/third_party/WebKit/Source/core/frame/csp/CSPSourceList.cpp | 
| @@ -38,6 +38,7 @@ CSPSourceList::CSPSourceList(ContentSecurityPolicy* policy, const String& direct | 
| , m_allowStar(false) | 
| , m_allowInline(false) | 
| , m_allowEval(false) | 
| +    , m_allowDynamic(false) | 
| , m_hashAlgorithmsUsed(0) | 
| { | 
| } | 
| @@ -73,6 +74,11 @@ bool CSPSourceList::allowEval() const | 
| return m_allowEval; | 
| } | 
|  | 
| +bool CSPSourceList::allowDynamic() const | 
| +{ | 
| +    return m_allowDynamic; | 
| +} | 
| + | 
| bool CSPSourceList::allowNonce(const String& nonce) const | 
| { | 
| return !nonce.isNull() && m_nonces.contains(nonce); | 
| @@ -164,6 +170,11 @@ bool CSPSourceList::parseSource(const UChar* begin, const UChar* end, String& sc | 
| return true; | 
| } | 
|  | 
| +    if (equalIgnoringCase("'unsafe-dynamic'", begin, end - begin)) { | 
| +        addSourceUnsafeDynamic(); | 
| +        return true; | 
| +    } | 
| + | 
| String nonce; | 
| if (!parseNonce(begin, end, nonce)) | 
| return false; | 
| @@ -481,6 +492,11 @@ void CSPSourceList::addSourceUnsafeEval() | 
| m_allowEval = true; | 
| } | 
|  | 
| +void CSPSourceList::addSourceUnsafeDynamic() | 
| +{ | 
| +    m_allowDynamic = true; | 
| +} | 
| + | 
| void CSPSourceList::addSourceNonce(const String& nonce) | 
| { | 
| m_nonces.add(nonce); | 
|  |