Changeset 130150 in webkit


Ignore:
Timestamp:
Oct 2, 2012, 4:29:33 AM (13 years ago)
Author:
mkwst@chromium.org
Message:

Add call stacks to Content Security Policy checks when relevant.
https://bugs.webkit.org/show_bug.cgi?id=94433

Reviewed by Adam Barth.

Source/WebCore:

Previously, we generated stack traces only for eval-related CSP
violations. As it turns out, we can call createScriptCallStack from
practically anywhere. This patch takes advantage of that to generate
stack traces whenever a warning is logged to the console. If we're in
a JavaScript stack, brilliant: we get a detailed warning. If not, the
stack trace is empty, and we don't pass it into the console logging
method.

This has the advantage of giving us good developer-facing logging for
any and all violations that result from script-based injection of
resources. Yay!

Tests: http/tests/inspector/csp-injected-content-warning-contains-stacktrace.html

http/tests/inspector/csp-inline-warning-contains-stacktrace.html
http/tests/inspector/csp-setInterval-warning-contains-stacktrace.html
http/tests/inspector/csp-setTimeout-warning-contains-stacktrace.html

  • bindings/js/ScheduledAction.cpp:

(WebCore::ScheduledAction::create):

Replacing the generated stack trace with the current script state,
which will enable us to generate the stack trace inside
ContentSecurityPolicy::reportViolation if it's relevant.

  • bindings/v8/ScriptCallStackFactory.cpp:

(WebCore::createScriptCallStackForConsole):
(WebCore):

  • bindings/v8/ScriptCallStackFactory.h:

(WebCore):

Adding a dummy interface to createScriptCallStackForConsole that
allows ScriptState to be passed in, which matches JSC's interface.

  • bindings/v8/custom/V8DOMWindowCustom.cpp:

(WebCore::WindowSetTimeoutImpl):

  • bindings/v8/custom/V8WorkerContextCustom.cpp:

(WebCore::SetTimeoutOrInterval):

Dropping stack trace from call to ContentSecurityPolicy::allowEval.

  • page/ContentSecurityPolicy.cpp:

(CSPDirectiveList):
(WebCore::CSPDirectiveList::reportViolation):
(WebCore::CSPDirectiveList::checkEvalAndReportViolation):
(WebCore::CSPDirectiveList::allowEval):

Piping script state through from CSPDirectiveList::allowEval rather
than a full stack trace.

(WebCore):
(WebCore::isAllowedByAll):
(WebCore::isAllowedByAllWithState):
(WebCore::ContentSecurityPolicy::allowEval):
(WebCore::ContentSecurityPolicy::reportViolation):
(WebCore::ContentSecurityPolicy::logToConsole):

Piping script state through from ContentSecurityPolicy::allowEval
rather than a full stack trace. Now, we can simply generate the
stack trace just before logging it, and only pass it into
addConsoleMessage if it's non-empty.

  • page/ContentSecurityPolicy.h:

(JSC):
(WebCore):

Including 'ScriptState.h' to normalize V8 and JSC's JS state objects.

LayoutTests:

  • http/tests/inspector-enabled/contentSecurityPolicy-blocks-setInterval-expected.txt: Removed.
  • http/tests/inspector-enabled/contentSecurityPolicy-blocks-setInterval.html: Removed.
  • http/tests/inspector-enabled/contentSecurityPolicy-blocks-setTimeout-expected.txt: Removed.
  • http/tests/inspector-enabled/contentSecurityPolicy-blocks-setTimeout.html: Removed.

Moved these tests to http/test/inspector, and rewrote them for consistency.

  • http/tests/inspector/csp-injected-content-warning-contains-stacktrace-expected.txt: Added.
  • http/tests/inspector/csp-injected-content-warning-contains-stacktrace.html: Added.
  • http/tests/inspector/csp-inline-warning-contains-stacktrace-expected.txt: Added.
  • http/tests/inspector/csp-inline-warning-contains-stacktrace.html: Added.
  • http/tests/inspector/csp-setInterval-contains-stacktrace-expected.txt: Added.
  • http/tests/inspector/csp-setInterval-warning-contains-stacktrace.html: Added.
  • http/tests/inspector/csp-setTimeout-warning-contains-stacktrace-expected.txt: Added.
  • http/tests/inspector/csp-setTimeout-warning-contains-stacktrace.html: Added.
  • http/tests/inspector/resources/csp-inline-test.js: Added.

(thisTest):

  • http/tests/inspector/resources/csp-test.js: Added.

(test.addMessage):
(test):

Two new tests for the functionality.

  • platform/chromium/http/tests/inspector/csp-injected-content-warning-contains-stacktrace-expected.txt: Added.
  • platform/chromium/http/tests/inspector/csp-inline-warning-contains-stacktrace-expected.txt: Added.
  • platform/chromium/http/tests/inspector/csp-setInterval-contains-stacktrace-expected.txt: Added.
  • platform/chromium/http/tests/inspector/csp-setTimeout-warning-contains-stacktrace-expected.txt: Added.

The stacktrace looks slightly different under JSC than V8.

Location:
trunk
Files:
14 added
4 deleted
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r130147 r130150  
     12012-10-02  Mike West  <mkwst@chromium.org>
     2
     3        Add call stacks to Content Security Policy checks when relevant.
     4        https://bugs.webkit.org/show_bug.cgi?id=94433
     5
     6        Reviewed by Adam Barth.
     7
     8        * http/tests/inspector-enabled/contentSecurityPolicy-blocks-setInterval-expected.txt: Removed.
     9        * http/tests/inspector-enabled/contentSecurityPolicy-blocks-setInterval.html: Removed.
     10        * http/tests/inspector-enabled/contentSecurityPolicy-blocks-setTimeout-expected.txt: Removed.
     11        * http/tests/inspector-enabled/contentSecurityPolicy-blocks-setTimeout.html: Removed.
     12            Moved these tests to http/test/inspector, and rewrote them for consistency.
     13        * http/tests/inspector/csp-injected-content-warning-contains-stacktrace-expected.txt: Added.
     14        * http/tests/inspector/csp-injected-content-warning-contains-stacktrace.html: Added.
     15        * http/tests/inspector/csp-inline-warning-contains-stacktrace-expected.txt: Added.
     16        * http/tests/inspector/csp-inline-warning-contains-stacktrace.html: Added.
     17        * http/tests/inspector/csp-setInterval-contains-stacktrace-expected.txt: Added.
     18        * http/tests/inspector/csp-setInterval-warning-contains-stacktrace.html: Added.
     19        * http/tests/inspector/csp-setTimeout-warning-contains-stacktrace-expected.txt: Added.
     20        * http/tests/inspector/csp-setTimeout-warning-contains-stacktrace.html: Added.
     21        * http/tests/inspector/resources/csp-inline-test.js: Added.
     22        (thisTest):
     23        * http/tests/inspector/resources/csp-test.js: Added.
     24        (test.addMessage):
     25        (test):
     26            Two new tests for the functionality.
     27        * platform/chromium/http/tests/inspector/csp-injected-content-warning-contains-stacktrace-expected.txt: Added.
     28        * platform/chromium/http/tests/inspector/csp-inline-warning-contains-stacktrace-expected.txt: Added.
     29        * platform/chromium/http/tests/inspector/csp-setInterval-contains-stacktrace-expected.txt: Added.
     30        * platform/chromium/http/tests/inspector/csp-setTimeout-warning-contains-stacktrace-expected.txt: Added.
     31            The stacktrace looks slightly different under JSC than V8.
     32
    1332012-10-02  Yoshifumi Inoue  <yosin@chromium.org>
    234
  • trunk/Source/WebCore/ChangeLog

    r130149 r130150  
     12012-10-02  Mike West  <mkwst@chromium.org>
     2
     3        Add call stacks to Content Security Policy checks when relevant.
     4        https://bugs.webkit.org/show_bug.cgi?id=94433
     5
     6        Reviewed by Adam Barth.
     7
     8        Previously, we generated stack traces only for eval-related CSP
     9        violations. As it turns out, we can call createScriptCallStack from
     10        practically anywhere. This patch takes advantage of that to generate
     11        stack traces whenever a warning is logged to the console. If we're in
     12        a JavaScript stack, brilliant: we get a detailed warning. If not, the
     13        stack trace is empty, and we don't pass it into the console logging
     14        method.
     15
     16        This has the advantage of giving us good developer-facing logging for
     17        any and all violations that result from script-based injection of
     18        resources. Yay!
     19
     20        Tests: http/tests/inspector/csp-injected-content-warning-contains-stacktrace.html
     21               http/tests/inspector/csp-inline-warning-contains-stacktrace.html
     22               http/tests/inspector/csp-setInterval-warning-contains-stacktrace.html
     23               http/tests/inspector/csp-setTimeout-warning-contains-stacktrace.html
     24
     25        * bindings/js/ScheduledAction.cpp:
     26        (WebCore::ScheduledAction::create):
     27            Replacing the generated stack trace with the current script state,
     28            which will enable us to generate the stack trace inside
     29            ContentSecurityPolicy::reportViolation if it's relevant.
     30        * bindings/v8/ScriptCallStackFactory.cpp:
     31        (WebCore::createScriptCallStackForConsole):
     32        (WebCore):
     33        * bindings/v8/ScriptCallStackFactory.h:
     34        (WebCore):
     35            Adding a dummy interface to createScriptCallStackForConsole that
     36            allows ScriptState to be passed in, which matches JSC's interface.
     37        * bindings/v8/custom/V8DOMWindowCustom.cpp:
     38        (WebCore::WindowSetTimeoutImpl):
     39        * bindings/v8/custom/V8WorkerContextCustom.cpp:
     40        (WebCore::SetTimeoutOrInterval):
     41            Dropping stack trace from call to ContentSecurityPolicy::allowEval.
     42        * page/ContentSecurityPolicy.cpp:
     43        (CSPDirectiveList):
     44        (WebCore::CSPDirectiveList::reportViolation):
     45        (WebCore::CSPDirectiveList::checkEvalAndReportViolation):
     46        (WebCore::CSPDirectiveList::allowEval):
     47            Piping script state through from CSPDirectiveList::allowEval rather
     48            than a full stack trace.
     49        (WebCore):
     50        (WebCore::isAllowedByAll):
     51        (WebCore::isAllowedByAllWithState):
     52        (WebCore::ContentSecurityPolicy::allowEval):
     53        (WebCore::ContentSecurityPolicy::reportViolation):
     54        (WebCore::ContentSecurityPolicy::logToConsole):
     55            Piping script state through from ContentSecurityPolicy::allowEval
     56            rather than a full stack trace. Now, we can simply generate the
     57            stack trace just before logging it, and only pass it into
     58            addConsoleMessage if it's non-empty.
     59        * page/ContentSecurityPolicy.h:
     60        (JSC):
     61        (WebCore):
     62            Including 'ScriptState.h' to normalize V8 and JSC's JS state objects.
     63
    1642012-10-02  Pavel Feldman  <pfeldman@chromium.org>
    265
  • trunk/Source/WebCore/bindings/js/ScheduledAction.cpp

    r130021 r130150  
    5656    CallData callData;
    5757    if (getCallData(v, callData) == CallTypeNone) {
    58         RefPtr<ScriptCallStack> callStack(createScriptCallStackForConsole(exec));
    59         if (policy && !policy->allowEval(callStack.release()))
     58        if (policy && !policy->allowEval(exec))
    6059            return nullptr;
    6160        String string = v.toString(exec)->value(exec);
  • trunk/Source/WebCore/bindings/v8/ScriptCallStackFactory.cpp

    r130021 r130150  
    117117}
    118118
     119PassRefPtr<ScriptCallStack> createScriptCallStackForConsole(ScriptState* /* state */)
     120{
     121    return createScriptCallStackForConsole();
     122}
     123
    119124PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount)
    120125{
  • trunk/Source/WebCore/bindings/v8/ScriptCallStackFactory.h

    r130021 r130150  
    5252PassRefPtr<ScriptArguments> createScriptArguments(const v8::Arguments& v8arguments, unsigned skipArgumentCount);
    5353
     54// This is just an alias to 'createScriptCallStackForConsole();' for compat with JSC.
     55PassRefPtr<ScriptCallStack> createScriptCallStackForConsole(ScriptState*);
     56
    5457} // namespace WebCore
    5558
  • trunk/Source/WebCore/bindings/v8/custom/V8DOMWindowCustom.cpp

    r130021 r130150  
    129129        id = DOMTimer::install(scriptContext, action.release(), timeout, singleShot);
    130130    } else {
    131         RefPtr<ScriptCallStack> callStack(createScriptCallStackForConsole());
    132         if (imp->document() && !imp->document()->contentSecurityPolicy()->allowEval(callStack.release()))
     131        if (imp->document() && !imp->document()->contentSecurityPolicy()->allowEval())
    133132            return v8Integer(0, args.GetIsolate());
    134133        ASSERT(imp->frame());
  • trunk/Source/WebCore/bindings/v8/custom/V8WorkerContextCustom.cpp

    r130021 r130150  
    6868    if (function->IsString()) {
    6969        if (ContentSecurityPolicy* policy = workerContext->contentSecurityPolicy()) {
    70             RefPtr<ScriptCallStack> callStack = createScriptCallStackForConsole();
    71             if (!policy->allowEval(callStack.release()))
     70            if (!policy->allowEval())
    7271                return v8Integer(0, args.GetIsolate());
    7372        }
  • trunk/Source/WebCore/page/ContentSecurityPolicy.cpp

    r129572 r130150  
    4040#include "SchemeRegistry.h"
    4141#include "ScriptCallStack.h"
     42#include "ScriptCallStackFactory.h"
     43#include "ScriptState.h"
    4244#include "SecurityOrigin.h"
    4345#include "TextEncoding.h"
     
    737739    bool allowInlineScript(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus) const;
    738740    bool allowInlineStyle(const String& contextURL, const WTF::OrdinalNumber& contextLine, ContentSecurityPolicy::ReportingStatus) const;
    739     bool allowEval(PassRefPtr<ScriptCallStack>, ContentSecurityPolicy::ReportingStatus) const;
     741    bool allowEval(ScriptState*, ContentSecurityPolicy::ReportingStatus) const;
    740742    bool allowScriptNonce(const String& nonce, const String& contextURL, const WTF::OrdinalNumber& contextLine, const KURL&) const;
    741743    bool allowPluginType(const String& type, const String& typeAttribute, const KURL&, ContentSecurityPolicy::ReportingStatus) const;
     
    770772
    771773    SourceListDirective* operativeDirective(SourceListDirective*) const;
    772     void reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL = KURL(), const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), PassRefPtr<ScriptCallStack> = 0) const;
     774    void reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL = KURL(), const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), ScriptState* = 0) const;
    773775
    774776    bool checkEval(SourceListDirective*) const;
     
    780782    void setEvalDisabledErrorMessage(const String& errorMessage) { m_evalDisabledErrorMessage = errorMessage; }
    781783
    782     bool checkEvalAndReportViolation(SourceListDirective*, const String& consoleMessage, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), PassRefPtr<ScriptCallStack> = 0) const;
     784    bool checkEvalAndReportViolation(SourceListDirective*, const String& consoleMessage, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), ScriptState* = 0) const;
    783785    bool checkInlineAndReportViolation(SourceListDirective*, const String& consoleMessage, const String& contextURL, const WTF::OrdinalNumber& contextLine, bool isScript) const;
    784786    bool checkNonceAndReportViolation(NonceDirective*, const String& nonce, const String& consoleMessage, const String& contextURL, const WTF::OrdinalNumber& contextLine) const;
     
    844846}
    845847
    846 void CSPDirectiveList::reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const String& contextURL, const WTF::OrdinalNumber& contextLine, PassRefPtr<ScriptCallStack> callStack) const
     848void CSPDirectiveList::reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const String& contextURL, const WTF::OrdinalNumber& contextLine, ScriptState* state) const
    847849{
    848850    String message = m_reportOnly ? "[Report Only] " + consoleMessage : consoleMessage;
    849     m_policy->reportViolation(directiveText, message, blockedURL, m_reportURIs, m_header, contextURL, contextLine, callStack);
     851    m_policy->reportViolation(directiveText, message, blockedURL, m_reportURIs, m_header, contextURL, contextLine, state);
    850852}
    851853
     
    884886}
    885887
    886 bool CSPDirectiveList::checkEvalAndReportViolation(SourceListDirective* directive, const String& consoleMessage, const String& contextURL, const WTF::OrdinalNumber& contextLine, PassRefPtr<ScriptCallStack> callStack) const
     888bool CSPDirectiveList::checkEvalAndReportViolation(SourceListDirective* directive, const String& consoleMessage, const String& contextURL, const WTF::OrdinalNumber& contextLine, ScriptState* state) const
    887889{
    888890    if (checkEval(directive))
     
    893895        suffix = " Note that 'script-src' was not explicitly set, so 'default-src' is used as a fallback.";
    894896
    895     reportViolation(directive->text(), consoleMessage + "\"" + directive->text() + "\"." + suffix + "\n", KURL(), contextURL, contextLine, callStack);
     897    reportViolation(directive->text(), consoleMessage + "\"" + directive->text() + "\"." + suffix + "\n", KURL(), contextURL, contextLine, state);
    896898    if (!m_reportOnly) {
    897899        m_policy->reportBlockedScriptExecutionToInspector(directive->text());
     
    10001002}
    10011003
    1002 bool CSPDirectiveList::allowEval(PassRefPtr<ScriptCallStack> callStack, ContentSecurityPolicy::ReportingStatus reportingStatus) const
     1004bool CSPDirectiveList::allowEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const
    10031005{
    10041006    DEFINE_STATIC_LOCAL(String, consoleMessage, (ASCIILiteral("Refused to evaluate script because it violates the following Content Security Policy directive: ")));
    10051007    return reportingStatus == ContentSecurityPolicy::SendReport ?
    1006         checkEvalAndReportViolation(operativeDirective(m_scriptSrc.get()), consoleMessage, String(), WTF::OrdinalNumber::beforeFirst(), callStack) :
     1008        checkEvalAndReportViolation(operativeDirective(m_scriptSrc.get()), consoleMessage, String(), WTF::OrdinalNumber::beforeFirst(), state) :
    10071009        checkEval(operativeDirective(m_scriptSrc.get()));
    10081010}
     
    13461348}
    13471349
    1348 template<bool (CSPDirectiveList::*allowed)(PassRefPtr<ScriptCallStack>, ContentSecurityPolicy::ReportingStatus) const>
    1349 bool isAllowedByAllWithCallStack(const CSPDirectiveListVector& policies, PassRefPtr<ScriptCallStack> callStack, ContentSecurityPolicy::ReportingStatus reportingStatus)
     1350template<bool (CSPDirectiveList::*allowed)(ContentSecurityPolicy::ReportingStatus) const>
     1351bool isAllowedByAll(const CSPDirectiveListVector& policies, ContentSecurityPolicy::ReportingStatus reportingStatus)
    13501352{
    13511353    for (size_t i = 0; i < policies.size(); ++i) {
    1352         if (!(policies[i].get()->*allowed)(callStack, reportingStatus))
     1354        if (!(policies[i].get()->*allowed)(reportingStatus))
     1355            return false;
     1356    }
     1357    return true;
     1358}
     1359
     1360template<bool (CSPDirectiveList::*allowed)(ScriptState* state, ContentSecurityPolicy::ReportingStatus) const>
     1361bool isAllowedByAllWithState(const CSPDirectiveListVector& policies, ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus)
     1362{
     1363    for (size_t i = 0; i < policies.size(); ++i) {
     1364        if (!(policies[i].get()->*allowed)(state, reportingStatus))
    13531365            return false;
    13541366    }
     
    14111423}
    14121424
    1413 bool ContentSecurityPolicy::allowEval(PassRefPtr<ScriptCallStack> callStack, ContentSecurityPolicy::ReportingStatus reportingStatus) const
    1414 {
    1415     return isAllowedByAllWithCallStack<&CSPDirectiveList::allowEval>(m_policies, callStack, reportingStatus);
     1425bool ContentSecurityPolicy::allowEval(ScriptState* state, ContentSecurityPolicy::ReportingStatus reportingStatus) const
     1426{
     1427    return isAllowedByAllWithState<&CSPDirectiveList::allowEval>(m_policies, state, reportingStatus);
    14161428}
    14171429
     
    15151527}
    15161528
    1517 void ContentSecurityPolicy::reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const Vector<KURL>& reportURIs, const String& header, const String& contextURL, const WTF::OrdinalNumber& contextLine, PassRefPtr<ScriptCallStack> callStack) const
    1518 {
    1519     logToConsole(consoleMessage, contextURL, contextLine, callStack);
     1529void ContentSecurityPolicy::reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const Vector<KURL>& reportURIs, const String& header, const String& contextURL, const WTF::OrdinalNumber& contextLine, ScriptState* state) const
     1530{
     1531    logToConsole(consoleMessage, contextURL, contextLine, state);
    15201532
    15211533    if (reportURIs.isEmpty())
     
    16131625}
    16141626
    1615 void ContentSecurityPolicy::logToConsole(const String& message, const String& contextURL, const WTF::OrdinalNumber& contextLine, PassRefPtr<ScriptCallStack> callStack) const
    1616 {
     1627void ContentSecurityPolicy::logToConsole(const String& message, const String& contextURL, const WTF::OrdinalNumber& contextLine, ScriptState* state) const
     1628{
     1629    RefPtr<ScriptCallStack> callStack;
     1630    if (InspectorInstrumentation::consoleAgentEnabled(m_scriptExecutionContext)) {
     1631        if (state)
     1632            callStack = createScriptCallStackForConsole(state);
     1633        else
     1634            callStack = createScriptCallStack(ScriptCallStack::maxCallStackSizeToCapture, true);
     1635        if (callStack && !callStack->size())
     1636            callStack = 0;
     1637    }
    16171638    m_scriptExecutionContext->addConsoleMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, message, contextURL, contextLine.oneBasedInt(), callStack);
    16181639}
  • trunk/Source/WebCore/page/ContentSecurityPolicy.h

    r129525 r130150  
    2828
    2929#include "KURL.h"
     30#include "ScriptState.h"
    3031#include <wtf/PassOwnPtr.h>
    3132#include <wtf/RefCounted.h>
     
    4142
    4243class CSPDirectiveList;
    43 class ScriptCallStack;
    4444class DOMStringList;
    4545class ScriptExecutionContext;
     
    8181    bool allowInlineScript(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const;
    8282    bool allowInlineStyle(const String& contextURL, const WTF::OrdinalNumber& contextLine, ReportingStatus = SendReport) const;
    83     bool allowEval(PassRefPtr<ScriptCallStack>, ReportingStatus = SendReport) const;
     83    bool allowEval(ScriptState* = 0, ReportingStatus = SendReport) const;
    8484    bool allowScriptNonce(const String& nonce, const String& contextURL, const WTF::OrdinalNumber& contextLine, const KURL& = KURL()) const;
    8585    bool allowPluginType(const String& type, const String& typeAttribute, const KURL&, ReportingStatus = SendReport) const;
     
    107107    void reportInvalidSourceExpression(const String& directiveName, const String& source) const;
    108108    void reportUnrecognizedDirective(const String&) const;
    109     void reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const Vector<KURL>& reportURIs, const String& header, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), PassRefPtr<ScriptCallStack> = 0) const;
     109    void reportViolation(const String& directiveText, const String& consoleMessage, const KURL& blockedURL, const Vector<KURL>& reportURIs, const String& header, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), ScriptState* = 0) const;
    110110
    111111    void reportBlockedScriptExecutionToInspector(const String& directiveText) const;
     
    120120    explicit ContentSecurityPolicy(ScriptExecutionContext*);
    121121
    122     void logToConsole(const String& message, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), PassRefPtr<ScriptCallStack> = 0) const;
     122    void logToConsole(const String& message, const String& contextURL = String(), const WTF::OrdinalNumber& contextLine = WTF::OrdinalNumber::beforeFirst(), ScriptState* = 0) const;
    123123
    124124    ScriptExecutionContext* m_scriptExecutionContext;
Note: See TracChangeset for help on using the changeset viewer.