Changeset 96667 in webkit


Ignore:
Timestamp:
Oct 4, 2011 5:52:50 PM (13 years ago)
Author:
weinig@apple.com
Message:

Wean ContentSecurityPolicy from the Document
https://bugs.webkit.org/show_bug.cgi?id=69387

Reviewed by Adam Barth.

  • bindings/js/WorkerScriptController.cpp:

(WebCore::WorkerScriptController::disableEval):

  • bindings/js/WorkerScriptController.h:
  • dom/Document.cpp:

(WebCore::Document::disableEval):

  • dom/Document.h:
  • workers/WorkerContext.cpp:

(WebCore::WorkerContext::disableEval):

  • workers/WorkerContext.h:
  • dom/ScriptExecutionContext.h:

Add pure virtual disableEval to ScriptExecutionContext, so that ContentSecurityPolicy
can call it for both Documents and WorkerContexts.

  • page/ContentSecurityPolicy.cpp:

(WebCore::ContentSecurityPolicy::didReceiveHeader):
Call the new ScriptExecutionContext::disableEval() function.

(WebCore::ContentSecurityPolicy::reportViolation):
Use ScriptExecutionContext::addMessage() instead of going directly to the DOMWindow.

Location:
trunk/Source/WebCore
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r96663 r96667  
     12011-10-04  Sam Weinig  <sam@webkit.org>
     2
     3        Wean ContentSecurityPolicy from the Document
     4        https://bugs.webkit.org/show_bug.cgi?id=69387
     5
     6        Reviewed by Adam Barth.
     7
     8        * bindings/js/WorkerScriptController.cpp:
     9        (WebCore::WorkerScriptController::disableEval):
     10        * bindings/js/WorkerScriptController.h:
     11        * dom/Document.cpp:
     12        (WebCore::Document::disableEval):
     13        * dom/Document.h:
     14        * workers/WorkerContext.cpp:
     15        (WebCore::WorkerContext::disableEval):
     16        * workers/WorkerContext.h:
     17        * dom/ScriptExecutionContext.h:
     18        Add pure virtual disableEval to ScriptExecutionContext, so that ContentSecurityPolicy
     19        can call it for both Documents and WorkerContexts.
     20
     21        * page/ContentSecurityPolicy.cpp:
     22        (WebCore::ContentSecurityPolicy::didReceiveHeader):
     23        Call the new ScriptExecutionContext::disableEval() function.
     24
     25        (WebCore::ContentSecurityPolicy::reportViolation):
     26        Use ScriptExecutionContext::addMessage() instead of going directly to the DOMWindow.
     27
    1282011-10-04  Anders Carlsson  <andersca@apple.com>
    229
  • trunk/Source/WebCore/bindings/js/WorkerScriptController.cpp

    r96465 r96667  
    182182}
    183183
     184void WorkerScriptController::disableEval()
     185{
     186    initScriptIfNeeded();
     187    JSLock lock(SilenceAssertionsOnly);
     188
     189    m_workerContextWrapper->setEvalEnabled(false);
     190}
     191
    184192} // namespace WebCore
    185193
  • trunk/Source/WebCore/bindings/js/WorkerScriptController.h

    r83900 r96667  
    7474        bool isExecutionForbidden() const;
    7575
     76        void disableEval();
     77
    7678        JSC::JSGlobalData* globalData() { return m_globalData.get(); }
    7779
  • trunk/Source/WebCore/dom/Document.cpp

    r96550 r96667  
    24392439}
    24402440
     2441void Document::disableEval()
     2442{
     2443    if (!frame())
     2444        return;
     2445
     2446    frame()->script()->disableEval();
     2447}
     2448
    24412449CSSStyleSheet* Document::pageUserSheet()
    24422450{
  • trunk/Source/WebCore/dom/Document.h

    r96550 r96667  
    613613    virtual String userAgent(const KURL&) const;
    614614
     615    virtual void disableEval() OVERRIDE;
     616
    615617    CSSStyleSheet* pageUserSheet();
    616618    void clearPageUserSheet();
  • trunk/Source/WebCore/dom/ScriptExecutionContext.h

    r96550 r96667  
    9797        virtual String userAgent(const KURL&) const = 0;
    9898
     99        virtual void disableEval() = 0;
     100
    99101        SecurityOrigin* securityOrigin() const { return m_securityOrigin.get(); }
    100102        ContentSecurityPolicy* contentSecurityPolicy() { return m_contentSecurityPolicy.get(); }
  • trunk/Source/WebCore/page/ContentSecurityPolicy.cpp

    r96621 r96667  
    2828
    2929#include "Console.h"
    30 #include "DOMWindow.h"
    3130#include "Document.h"
    3231#include "FormData.h"
     
    3433#include "Frame.h"
    3534#include "PingLoader.h"
     35#include "ScriptCallStack.h"
    3636#include "SecurityOrigin.h"
    3737#include "TextEncoding.h"
     
    492492    }
    493493
    494     if (!checkEval(operativeDirective(m_scriptSrc.get()))) {
    495         // FIXME: Support disabling eval for Workers.
    496         if (m_scriptExecutionContext->isDocument()) {
    497             if (Frame* frame = static_cast<Document*>(m_scriptExecutionContext)->frame())
    498                 frame->script()->disableEval();
    499         }
    500     }
     494    if (!checkEval(operativeDirective(m_scriptSrc.get())))
     495        m_scriptExecutionContext->disableEval();
    501496}
    502497
    503498void ContentSecurityPolicy::reportViolation(const String& directiveText, const String& consoleMessage) const
    504499{
    505     // FIXME: Support reporting violations for Workers.
     500    String message = m_reportOnly ? "[Report Only] " + consoleMessage : consoleMessage;
     501    m_scriptExecutionContext->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, message, 1, String(), 0);
     502
     503    if (m_reportURLs.isEmpty())
     504        return;
     505
     506    // FIXME: Support sending reports from worker.
    506507    if (!m_scriptExecutionContext->isDocument())
    507508        return;
     
    510511    Frame* frame = document->frame();
    511512    if (!frame)
    512         return;
    513 
    514     String message = m_reportOnly ? "[Report Only] " + consoleMessage : consoleMessage;
    515     frame->domWindow()->console()->addMessage(JSMessageSource, LogMessageType, ErrorMessageLevel, message, 1, String());
    516 
    517     if (m_reportURLs.isEmpty())
    518513        return;
    519514
  • trunk/Source/WebCore/workers/WorkerContext.cpp

    r96550 r96667  
    166166}
    167167
     168void WorkerContext::disableEval()
     169{
     170    m_script->disableEval();
     171}
     172
    168173WorkerLocation* WorkerContext::location() const
    169174{
  • trunk/Source/WebCore/workers/WorkerContext.h

    r95849 r96667  
    7878        virtual String userAgent(const KURL&) const;
    7979
     80        virtual void disableEval() OVERRIDE;
     81
    8082        WorkerScriptController* script() { return m_script.get(); }
    8183        void clearScript() { m_script.clear(); }
Note: See TracChangeset for help on using the changeset viewer.