[Webkit-unassigned] [Bug 136542] Web Inspector: breakpoint actions should work regardless of Content Security Policy

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Thu Sep 4 18:45:01 PDT 2014


https://bugs.webkit.org/show_bug.cgi?id=136542


Mark Lam <mark.lam at apple.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #237664|review?                     |review-
               Flag|                            |




--- Comment #3 from Mark Lam <mark.lam at apple.com>  2014-09-04 18:45:06 PST ---
(From update of attachment 237664)
View in context: https://bugs.webkit.org/attachment.cgi?id=237664&action=review

> Source/JavaScriptCore/ChangeLog:9
> +        JSGlobalObject for the duration of scope, returning the eval enabled state to its

/duration of scope/duration of a scope/

> Source/JavaScriptCore/ChangeLog:11
> +        to allow breakpoint actions to execute JS in pages with CSP that would normally

Would you mind spelling out Content Security Policy instead of the CSP abbreviation?  Thanks.

> Source/JavaScriptCore/ChangeLog:14
> +        Refactored Inspector::InjectedScriptBase to use RAII object instead of manually

/use RAII/use the RAII/

> Source/JavaScriptCore/ChangeLog:15
> +        setting/resetting eval enabled state.

/...ing eval enabled/...ing the eval enabled/

> Source/JavaScriptCore/debugger/DebuggerEvalEnabler.h:46
> +    explicit DebuggerEvalEnabler(const ExecState* exec)
> +        : m_globalObject(nullptr)
> +        , m_evalEnabled(false)
> +    {
> +        if (exec) {
> +            m_globalObject = exec->lexicalGlobalObject();
> +            m_evalEnabled = m_globalObject->evalEnabled();
> +        }
> +        if (m_globalObject && !m_evalEnabled)
> +            m_globalObject->setEvalEnabled(true, m_globalObject->evalDisabledErrorMessage());
> +    }

I suggest renaming m_evalEnabled to m_evalWasEnabled to indicate that it is referring to the original state.  Actually, I think you should use m_evalwasDisabled instead because that would remove the need for a lot of negation in the code (making the logic simpler).

I think it's weird that the exec can be NULL, but that appears to be a due to InjectedScriptBase getting the exec from ScriptObject::scriptState() which can currently be NULL.  I suggest adding a comment in the ChangeLog to document this so that we'll have a record of why this NULL check exists, and can remove it in the future if we fix ScriptObject::scriptState() to never be NULL (at least for the duration when the DebuggerEvalEnabler is called).

Why not just cache the ExecState, and do a conditional on that?  I suggest the following:

    explicit DebuggerEvalEnabler(const ExecState* exec)
        : m_exec(exec)
        , m_evalWasDisabled(false)
    {
        if (exec) {
            JSGlobalObject* globalObject = exec->lexicalGlobalObject();
            m_evalWasDisabled = !m_globalObject->evalEnabled();
            if (m_evalWasDisabled)
                globalObject->setEvalEnabled(true, globalObject->evalDisabledErrorMessage());
        }
    }

    ~DebuggerEvalEnabler()
    {
        if (m_evalWasDisabled) {
            ASSERT(m_exec);
            JSGlobalObject* globalObject = exec->lexicalGlobalObject();
            globalObject()->setEvalEnabled(false, globalObject->evalDisabledErrorMessage());
        }
    }

I think the code is a little simpler this way.

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list