Changeset 109730 in webkit


Ignore:
Timestamp:
Mar 5, 2012 2:44:40 AM (12 years ago)
Author:
apavlov@chromium.org
Message:

Web Inspector: [Styles] [CRASH] Handle rule addition and inline style editing failure due to Content-Security-Policy in the page
https://bugs.webkit.org/show_bug.cgi?id=80024

Reviewed by Pavel Feldman.

Source/WebCore:

Test: inspector/styles/add-new-rule-inline-style-csp.html

  • inspector/InspectorCSSAgent.cpp:

(WebCore::InspectorCSSAgent::viaInspectorStyleSheet):

  • inspector/InspectorCSSAgent.h:

(InlineStyleOverrideScope):
(WebCore::InspectorCSSAgent::InlineStyleOverrideScope::InlineStyleOverrideScope):
(WebCore::InspectorCSSAgent::InlineStyleOverrideScope::~InlineStyleOverrideScope):
(InspectorCSSAgent):

  • inspector/InspectorStyleSheet.cpp:

(WebCore::InspectorStyleSheetForInlineStyle::setStyleText):

  • page/ContentSecurityPolicy.cpp:

(WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
(WebCore::ContentSecurityPolicy::allowInlineStyle):
(WebCore::ContentSecurityPolicy::setOverrideAllowInlineStyle):
(WebCore):

  • page/ContentSecurityPolicy.h:

(ContentSecurityPolicy):

LayoutTests:

  • inspector/styles/add-new-rule-inline-style-csp-expected.txt: Added.
  • inspector/styles/add-new-rule-inline-style-csp.html: Added.
Location:
trunk
Files:
2 added
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r109728 r109730  
     12012-03-02  Alexander Pavlov  <apavlov@chromium.org>
     2
     3        Web Inspector: [Styles] [CRASH] Handle rule addition and inline style editing failure due to Content-Security-Policy in the page
     4        https://bugs.webkit.org/show_bug.cgi?id=80024
     5
     6        Reviewed by Pavel Feldman.
     7
     8        * inspector/styles/add-new-rule-inline-style-csp-expected.txt: Added.
     9        * inspector/styles/add-new-rule-inline-style-csp.html: Added.
     10
    1112012-03-05  Pavel Podivilov  <podivilov@chromium.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r109729 r109730  
     12012-03-02  Alexander Pavlov  <apavlov@chromium.org>
     2
     3        Web Inspector: [Styles] [CRASH] Handle rule addition and inline style editing failure due to Content-Security-Policy in the page
     4        https://bugs.webkit.org/show_bug.cgi?id=80024
     5
     6        Reviewed by Pavel Feldman.
     7
     8        Test: inspector/styles/add-new-rule-inline-style-csp.html
     9
     10        * inspector/InspectorCSSAgent.cpp:
     11        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
     12        * inspector/InspectorCSSAgent.h:
     13        (InlineStyleOverrideScope):
     14        (WebCore::InspectorCSSAgent::InlineStyleOverrideScope::InlineStyleOverrideScope):
     15        (WebCore::InspectorCSSAgent::InlineStyleOverrideScope::~InlineStyleOverrideScope):
     16        (InspectorCSSAgent):
     17        * inspector/InspectorStyleSheet.cpp:
     18        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
     19        * page/ContentSecurityPolicy.cpp:
     20        (WebCore::ContentSecurityPolicy::ContentSecurityPolicy):
     21        (WebCore::ContentSecurityPolicy::allowInlineStyle):
     22        (WebCore::ContentSecurityPolicy::setOverrideAllowInlineStyle):
     23        (WebCore):
     24        * page/ContentSecurityPolicy.h:
     25        (ContentSecurityPolicy):
     26
    1272012-03-05  Yoshifumi Inoue  <yosin@chromium.org>
    228
  • trunk/Source/WebCore/inspector/InspectorCSSAgent.cpp

    r109116 r109730  
    3737#include "CSSStyleSelector.h"
    3838#include "CSSStyleSheet.h"
     39#include "ContentSecurityPolicy.h"
    3940#include "DOMWindow.h"
    4041#include "HTMLHeadElement.h"
     
    897898        else
    898899            return 0;
     900
     901        InlineStyleOverrideScope overrideScope(document);
    899902        targetNode->appendChild(styleElement, ec);
    900903    }
     
    903906    StyleSheetList* styleSheets = document->styleSheets();
    904907    StyleSheet* styleSheet = styleSheets->item(styleSheets->length() - 1);
    905     if (!styleSheet->isCSSStyleSheet())
     908    if (!styleSheet || !styleSheet->isCSSStyleSheet())
    906909        return 0;
    907910    CSSStyleSheet* cssStyleSheet = static_cast<CSSStyleSheet*>(styleSheet);
  • trunk/Source/WebCore/inspector/InspectorCSSAgent.h

    r107683 r109730  
    2727
    2828#include "CSSSelector.h"
     29#include "ContentSecurityPolicy.h"
    2930#include "Document.h"
    3031#include "InspectorBaseAgent.h"
     
    3334#include "InspectorValues.h"
    3435#include "PlatformString.h"
     36#include "SecurityContext.h"
    3537
    3638#include <wtf/HashMap.h>
     
    6264    WTF_MAKE_NONCOPYABLE(InspectorCSSAgent);
    6365public:
     66    class InlineStyleOverrideScope {
     67    public:
     68        InlineStyleOverrideScope(SecurityContext* context)
     69            : m_contentSecurityPolicy(context->contentSecurityPolicy())
     70        {
     71            m_contentSecurityPolicy->setOverrideAllowInlineStyle(true);
     72        }
     73
     74        ~InlineStyleOverrideScope()
     75        {
     76            m_contentSecurityPolicy->setOverrideAllowInlineStyle(false);
     77        }
     78
     79    private:
     80        ContentSecurityPolicy* m_contentSecurityPolicy;
     81    };
     82
    6483    static CSSStyleRule* asCSSStyleRule(CSSRule*);
    6584
  • trunk/Source/WebCore/inspector/InspectorStyleSheet.cpp

    r109116 r109730  
    3737#include "CSSStyleSelector.h"
    3838#include "CSSStyleSheet.h"
     39#include "ContentSecurityPolicy.h"
    3940#include "Document.h"
    4041#include "Element.h"
     
    13201321    ASSERT_UNUSED(style, style == inlineStyle());
    13211322    ExceptionCode ec = 0;
    1322     m_element->setAttribute("style", text, ec);
     1323
     1324    {
     1325        InspectorCSSAgent::InlineStyleOverrideScope overrideScope(m_element->ownerDocument());
     1326        m_element->setAttribute("style", text, ec);
     1327    }
     1328
    13231329    m_styleText = text;
    13241330    m_isStyleTextValid = true;
  • trunk/Source/WebCore/page/ContentSecurityPolicy.cpp

    r103617 r109730  
    488488    , m_reportOnly(false)
    489489    , m_haveSandboxPolicy(false)
     490    , m_overrideInlineStyleAllowed(false)
    490491{
    491492}
     
    623624{
    624625    DEFINE_STATIC_LOCAL(String, consoleMessage, ("Refused to apply inline style because of Content-Security-Policy.\n"));
    625     return checkInlineAndReportViolation(operativeDirective(m_styleSrc.get()), consoleMessage);
     626    return m_overrideInlineStyleAllowed || checkInlineAndReportViolation(operativeDirective(m_styleSrc.get()), consoleMessage);
    626627}
    627628
     
    678679    DEFINE_STATIC_LOCAL(String, type, ("connect"));
    679680    return checkSourceAndReportViolation(operativeDirective(m_connectSrc.get()), url, type);
     681}
     682
     683void ContentSecurityPolicy::setOverrideAllowInlineStyle(bool value)
     684{
     685    m_overrideInlineStyleAllowed = value;
    680686}
    681687
  • trunk/Source/WebCore/page/ContentSecurityPolicy.h

    r104329 r109730  
    7171    bool allowConnectFromSource(const KURL&) const;
    7272
     73    void setOverrideAllowInlineStyle(bool);
     74
    7375private:
    7476    explicit ContentSecurityPolicy(ScriptExecutionContext*);
     
    108110    OwnPtr<CSPDirective> m_connectSrc;
    109111    bool m_haveSandboxPolicy;
     112    bool m_overrideInlineStyleAllowed;
    110113    Vector<KURL> m_reportURLs;
    111114};
Note: See TracChangeset for help on using the changeset viewer.