2011-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach Content Security Policy how to parse source-list
        https://bugs.webkit.org/show_bug.cgi?id=54799

        Test a variety of source-list parsing cases.  There's a bunch more
        cases we could be testing.  We'll add more over time.

        * http/tests/security/contentSecurityPolicy/source-list-parsing-expected.txt: Added.
        * http/tests/security/contentSecurityPolicy/source-list-parsing.html: Added.
2011-03-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach Content Security Policy how to parse source-list
        https://bugs.webkit.org/show_bug.cgi?id=54799

        This patch is larger than I would like, but I wasn't sure how to make
        it any smaller while still being reasonably testable.  I've left out
        some features (such as host wildcarding and 'self') so I can add them
        in later patches with tests.

        Test: http/tests/security/contentSecurityPolicy/source-list-parsing.html

        * bindings/ScriptControllerBase.cpp:
        * dom/ScriptElement.cpp:
        * html/parser/HTMLDocumentParser.cpp:
        * loader/FrameLoader.cpp:
            - Add include explicitly now that we're not spamming the include
              everywhere.
        * dom/Document.cpp:
        (WebCore::Document::initSecurityContext):
            - We need to pass the SecurityOrigin object to
              ContentSecurityPolicy so that it can resolve implicit parts of
              source patterns, such as the scheme.
        * dom/Document.h:
            - Forward declare ContentSecurityPolicy rather than including the
              header.  Technically this could be a separate change, but I was
              getting annoyed at the world re-builds.
        * page/ContentSecurityPolicy.cpp:
        (WebCore::skipExactly):
        (WebCore::skipUtil):
        (WebCore::skipWhile):
            - Clean up these parser helper functions.  We might consider moving
              them to a more general location.  They're very helpful for
              writing secure HTTP header parsers.
        (WebCore::CSPSource::CSPSource):
            - New class to represent one source in a source-list.
        (WebCore::CSPSource::matches):
        (WebCore::CSPSource::schemeMatches):
        (WebCore::CSPSource::hostMatches):
        (WebCore::CSPSource::portMatches):
        (WebCore::CSPSource::isSchemeOnly):
            - Currently we represent scheme-only sources using with an empty
              m_host.  Another approach I considered was using another bool,
              but that seemed slighly messier.
        (WebCore::CSPSourceList::CSPSourceList):
            - CSPSourceList doesn't need to ref SecurityOrigin because
              CSPSourceList is owned by ContentSecurityPolicy, which holds a
              ref.
        (WebCore::CSPSourceList::parse):
        (WebCore::CSPSourceList::matches):
        (WebCore::CSPSourceList::parseSource):
        (WebCore::CSPSourceList::parseScheme):
        (WebCore::CSPSourceList::parseHost):
        (WebCore::CSPSourceList::parsePort):
            - A basic "segment and recurse" parser.  This parser causes us to
              take more branches than we need, but I don't think we need to
              squeeze every last ouch of performance out of this parser.  This
              approach is more simple than some of the other approaches I
              tried.
        (WebCore::CSPSourceList::addSourceSelf):
        (WebCore::CSPDirective::CSPDirective):
        (WebCore::CSPDirective::allows):
        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
        (WebCore::ContentSecurityPolicy::parse):
        (WebCore::ContentSecurityPolicy::parseDirective):
        (WebCore::ContentSecurityPolicy::addDirective):
            - I couldn't resist re-writing this parser to use the helper
              functions and to match the style of the source-list parser.
        * page/ContentSecurityPolicy.h:
        (WebCore::ContentSecurityPolicy::create):
            - Accept a SecurityOrigin context object.

git-svn-id: http://svn.webkit.org/repository/webkit/trunk@82028 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/dom/ScriptElement.cpp b/Source/WebCore/dom/ScriptElement.cpp
index b4d3670..e36827f 100644
--- a/Source/WebCore/dom/ScriptElement.cpp
+++ b/Source/WebCore/dom/ScriptElement.cpp
@@ -26,6 +26,7 @@
 
 #include "CachedScript.h"
 #include "CachedResourceLoader.h"
+#include "ContentSecurityPolicy.h"
 #include "Document.h"
 #include "DocumentParser.h"
 #include "Frame.h"