2019-10-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: enable the image transparency grid by default and create a checkbox for it
        https://bugs.webkit.org/show_bug.cgi?id=202678

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        Enable the "Show transparency grid" setting by default.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createSourcesSettingsView):
        Add a checkbox for "Show transparency grid" in the "Sources" pane.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        * UserInterface/Views/ImageResourceContentView.js:
        (WI.ImageResourceContentView):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        * UserInterface/Views/ResourceCollectionContentView.js:
        (WI.ResourceCollectionContentView):
        * Localizations/en.lproj/localizedStrings.js:
        Unify the tooltip string for all of the "Show transparency grid" navigation items.

2019-10-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: don't allow blackboxing of scripts that aren't finished loading or failed to load
        https://bugs.webkit.org/show_bug.cgi?id=202376

        Reviewed by Matt Baker.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get supportsScriptBlackboxing):

        * UserInterface/Views/SourceCodeTreeElement.js:
        (WI.SourceCodeTreeElement.prototype.updateStatus):

2019-10-02  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: for rules that don't match selected node, property values always show as invalid
        https://bugs.webkit.org/show_bug.cgi?id=201571

        Reviewed by Matt Baker.

        The gist of the bug:
        - WI.CSSProperty is instantiated with `valid` false.
        - CSSAgent.getMatchedStylesForNode never updates WI.CSSProperty instances because
          the edited style does not in fact match the selected DOM node. A valid CSS property
          is shown as invalid.

        To resolve this, WI.CSSProperty instances are now updated after editing
        in the callback of `CSSAgent.setStyleText`.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeStyleText):
        (WI.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        Don't store `style` in `this._stylesMap` of WI.DOMNodeStyles when the style doesn't match the selected node.

2019-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r250149): changing CSS via the Styles details sidebar panel doesn't update the associated resource
        https://bugs.webkit.org/show_bug.cgi?id=202446

        Reviewed by Joseph Pecoraro.

        When updating the text of a `WI.CSSProperty` (or the selector of a `WI.CSSRule`) is updated,
        Web Inspector will update the backend style sheet, which will notify the `WI.CSSManager` of
        the change, without ever going through the associated `WI.SourceCode`. `WI.CSSManager` then
        updates the content of the `WI.SourceCode` to reflect these changes, but at that point the
        `WI.SourceCode` hadn't yet "moved" it's `currentRevision` forward of it's `originalRevision`
        which means it would get overridden the first time the `WI.SourceCode` updates itself.

        Modify `WI.SourceCode` such that every path to get the `currentRevision` ensures that it is
        "moved" forward before the `WI.SourceCodeRevision` value is returned.

        * UserInterface/Models/SourceCode.js:
        (WI.SourceCode.prototype.get currentRevision):
        (WI.SourceCode.prototype.get content):
        (WI.SourceCode.prototype.revisionContentDidChange):
        (WI.SourceCode.prototype._initializeCurrentRevisionIfNeeded): Added.
        (WI.SourceCode.prototype._processContent):

2019-10-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: clicking on a breakpoint changes the path components to not match the script's path
        https://bugs.webkit.org/show_bug.cgi?id=196450
        <rdar://problem/49488100>

        Reviewed by Matt Baker.

        When selecting any tree element that isn't in the resources tree outline, attempt to find
        the corresponding tree element in the resources tree outline and silently select that as
        well so that the hierarchical path component shows the right breadcrumb trail.

        If the tree element is for a `WI.Script` which has a corresponding `WI.Resource`, use the
        `WI.Resource` instead.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):

2019-09-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: JS Formatter: unexpected newlines added inside template string expression
        https://bugs.webkit.org/show_bug.cgi?id=202374

        Reviewed by Joseph Pecoraro.

        Wrap every "add newline" with a check to see if the current node is inside a template
        literal node. If so (and we aren't forcibly adding a newline), prevent the newline from
        being added.

        * UserInterface/Workers/Formatter/JSFormatter.js:
        (JSFormatter.prototype._appendNewline): Added.
        (JSFormatter.prototype._insertNewlinesBeforeToken):
        (JSFormatter.prototype._insertComment):
        (JSFormatter.prototype._insertSameLineTrailingComments):
        (JSFormatter.prototype._insertCommentsAndNewlines):
        (JSFormatter.prototype._before):
        (JSFormatter.prototype._after):
        (JSFormatter.prototype._handleTokenAtNode):
        (JSFormatter.prototype._exitNode):
        (JSFormatter.prototype._afterProgram):

2019-09-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: shader type header is white in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=202253

        Reviewed by Matt Baker.

        * UserInterface/Views/ShaderProgramContentView.css:
        (.content-view.shader-program > .shader > header > .shader-type):
        (@media (prefers-color-scheme: dark) .content-view.shader-program > .shader > header > .shader-type): Added.
        (@media (prefers-color-scheme: dark) .content-view.shader-program > .shader > header): Deleted.
        (.content-view.shader-program > .shader > header > *): Deleted.

2019-09-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include LocalResourceOverrides in the Open Resource dialog
        https://bugs.webkit.org/show_bug.cgi?id=202023

        Reviewed by Devin Rousso.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addScriptsForTarget):
        Also walk the extraScriptCollection. Some Worker resource loads never
        fully become resources.

        (WI.OpenResourceDialog.prototype.didPresentDialog):
        (WI.OpenResourceDialog.prototype._addLocalResourceOverrides):
        Include local resource override resources.

        (WI.OpenResourceDialog.prototype._populateResourceTreeOutline):
        * Localizations/en.lproj/localizedStrings.js:
        Include a subtitle for local resource overrides.

        * UserInterface/Views/OpenResourceDialog.css:
        (.open-resource-dialog .tree-outline.large .item .titles .subtitle):
        Improved subtitle styling.

2019-09-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION: Elements detail sidebar sometimes starts collapsed
        https://bugs.webkit.org/show_bug.cgi?id=202057
        <rdar://problem/55572345>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView.prototype.get detailsSidebarExpandedByDefault):
        Default the Elements tab detail sidebar to be shown, not collapsed.

        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView):
        (WI.TabContentView.prototype.get detailsSidebarExpandedByDefault):
        Allow classes to specify whether or not their detail sidebar should
        be expanded by default.

2019-09-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: undefined is not an object (evaluating 'WI.showDebugUISetting.addEventListener')
        https://bugs.webkit.org/show_bug.cgi?id=202220

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype.initialLayout):

2019-09-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: WebGPU compute shaders aren't syntax highlighted
        https://bugs.webkit.org/show_bug.cgi?id=202030

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CodeMirrorAdditions.js:
        `CodeMirror.defineMIME` expects a "spec" object, which can't just be another MIME type.
        Instead, get the "spec" of the defined "x-shader/x-vertex" and "x-shader/x-fragment" modes
        and use that when defining MIMEs for the WebGPU shader pipeline modes.

        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView):
        Get the `contextType` off of the shader's canvas, which is where it actually lives.

2019-09-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: show WebGPU shader pipelines
        https://bugs.webkit.org/show_bug.cgi?id=201675
        <rdar://problem/55543450>

        Reviewed by Joseph Pecoraro.

        Show WebGPU shader pipelines ("programs") underneath each corresponding WebGPU device.

        Allow editing of attached shader modules for each WebGPU shader pipeline, but don't allow
        highlighting/disabling, as WebGPU pipelines don't have those capabilities/concepts yet.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.programCreated):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.programCreated):

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.nextShaderProgramDisplayNumberForProgramType): Added.
        (WI.Canvas.prototype.nextShaderProgramDisplayNumber): Deleted.

        * UserInterface/Models/ShaderProgram.js:
        (WI.ShaderProgram):
        (WI.ShaderProgram.contextTypeSupportsProgramType): Added.
        (WI.ShaderProgram.programTypeSupportsShaderType): Added.
        (WI.ShaderProgram.prototype.get programType): Added.
        (WI.ShaderProgram.prototype.get displayName):
        (WI.ShaderProgram.prototype.set disabled):
        (WI.ShaderProgram.prototype.requestShaderSource):
        (WI.ShaderProgram.prototype.updateShader):
        (WI.ShaderProgram.prototype.showHighlight):
        (WI.ShaderProgram.prototype.hideHighlight):
        (WI.ShaderProgram.prototype.requestVertexShaderSource): Deleted.
        (WI.ShaderProgram.prototype.requestFragmentShaderSource): Deleted.
        (WI.ShaderProgram.prototype.updateVertexShader): Deleted.
        (WI.ShaderProgram.prototype.updateFragmentShader): Deleted.
        (WI.ShaderProgram.prototype._requestShaderSource): Deleted.
        (WI.ShaderProgram.prototype._updateShader): Deleted.

        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView):
        (WI.ShaderProgramContentView.prototype.get navigationItems): Added.
        (WI.ShaderProgramContentView.prototype.shown):
        (WI.ShaderProgramContentView.prototype.hidden):
        (WI.ShaderProgramContentView.prototype.get saveData):
        (WI.ShaderProgramContentView.prototype._refreshContent):
        (WI.ShaderProgramContentView.prototype._updateShader):
        (WI.ShaderProgramContentView.prototype._contentDidChange):
        * UserInterface/Views/ShaderProgramContentView.css:
        (.content-view.shader-program > .shader): Added.
        (.content-view.shader-program > .shader.compute): Added.
        (body[dir=ltr] .content-view.shader-program > .shader.vertex,): Added.
        (body[dir=ltr] .content-view.shader-program > .shader.fragment,): Added.
        (.content-view.shader-program > .shader + .shader): Added.
        (.content-view.shader-program > .shader > header > *): Added.
        (.content-view.shader-program > .shader > header > .shader-type): Added.
        (@media (prefers-color-scheme: dark) .content-view.shader-program > .shader > header): Added.
        (.content-view.shader-program > .text-editor.shader): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader.vertex,): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader.fragment,): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader + .text-editor.shader): Deleted.
        (body[dir=rtl] .content-view.shader-program > .text-editor.shader + .text-editor.shader): Deleted.
        (.content-view.shader-program > .text-editor.shader > .type-title): Deleted.
        (.content-view.shader-program > .text-editor.shader > .CodeMirror): Deleted.
        * UserInterface/Views/CodeMirrorAdditions.js:

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement):
        (WI.ShaderProgramTreeElement.prototype.onattach):
        (WI.ShaderProgramTreeElement.prototype.ondetach):
        (WI.ShaderProgramTreeElement.prototype.canSelectOnMouseDown):
        (WI.ShaderProgramTreeElement.prototype.populateContextMenu):

        * Localizations/en.lproj/localizedStrings.js:

2019-09-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve the Uncaught Exception View file a bug link
        https://bugs.webkit.org/show_bug.cgi?id=201717

        Reviewed by Devin Rousso.

        * UserInterface/Debug/UncaughtExceptionReporter.js:
        Allow the link to be clicked. Use openInNewTab on click to also
        bring the new tab to the foreground. Also update the content.

2019-09-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: HTML Formatter - better indentation/newline handling for self closing tags
        https://bugs.webkit.org/show_bug.cgi?id=202036

        Reviewed by Joseph Pecoraro.

        * UserInterface/Workers/Formatter/HTMLFormatter.js:
        (HTMLFormatter.prototype._before):

2019-09-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove BranchManager in favor of just using currentRevision
        https://bugs.webkit.org/show_bug.cgi?id=202000

        Reviewed by Devin Rousso.

        Remove BranchManager. The Branch concept never got fleshed out, and would
        likely be too complex for the average case. Local Overrides are simpler.
        In the interest of expanding Local Overrides to more content lets simply
        by removing Branches.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Controllers/BranchManager.js: Removed.
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype._resourceContentDidChange.applyStyleSheetChanges.styleSheetFound):
        (WI.CSSManager.prototype._resourceContentDidChange.applyStyleSheetChanges):
        (WI.CSSManager.prototype._resourceContentDidChange):
        (WI.CSSManager.prototype._updateResourceContent.fetchedStyleSheetContent):
        * UserInterface/Main.html:
        * UserInterface/Models/Branch.js: Removed.
        * UserInterface/Models/SourceCode.js:
        (WI.SourceCode.prototype._processContent):
        (WI.SourceCode):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView.prototype._textEditorContentDidChange):

2019-09-20  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r250114.

        Broke ~16 webgpu/ tests on Mojave wk2

        Reverted changeset:

        "Web Inspector: Canvas: show WebGPU shader pipelines"
        https://bugs.webkit.org/show_bug.cgi?id=201675
        https://trac.webkit.org/changeset/250114

2019-09-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: searching in overrides doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=202020

        Reviewed by Devin Rousso.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.customPerformSearch):
        Do not go to agents for a local resource. Search locally in the TextEditor.

2019-09-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: show WebGPU shader pipelines
        https://bugs.webkit.org/show_bug.cgi?id=201675

        Reviewed by Joseph Pecoraro.

        Show WebGPU shader pipelines ("programs") underneath each corresponding WebGPU device.

        Allow editing of attached shader modules for each WebGPU shader pipeline, but don't allow
        highlighting/disabling, as WebGPU pipelines don't have those capabilities/concepts yet.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.programCreated):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.programCreated):

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.nextShaderProgramDisplayNumberForProgramType): Added.
        (WI.Canvas.prototype.nextShaderProgramDisplayNumber): Deleted.

        * UserInterface/Models/ShaderProgram.js:
        (WI.ShaderProgram):
        (WI.ShaderProgram.contextTypeSupportsProgramType): Added.
        (WI.ShaderProgram.programTypeSupportsShaderType): Added.
        (WI.ShaderProgram.prototype.get programType): Added.
        (WI.ShaderProgram.prototype.get displayName):
        (WI.ShaderProgram.prototype.set disabled):
        (WI.ShaderProgram.prototype.requestShaderSource):
        (WI.ShaderProgram.prototype.updateShader):
        (WI.ShaderProgram.prototype.showHighlight):
        (WI.ShaderProgram.prototype.hideHighlight):
        (WI.ShaderProgram.prototype.requestVertexShaderSource): Deleted.
        (WI.ShaderProgram.prototype.requestFragmentShaderSource): Deleted.
        (WI.ShaderProgram.prototype.updateVertexShader): Deleted.
        (WI.ShaderProgram.prototype.updateFragmentShader): Deleted.
        (WI.ShaderProgram.prototype._requestShaderSource): Deleted.
        (WI.ShaderProgram.prototype._updateShader): Deleted.

        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView):
        (WI.ShaderProgramContentView.prototype.get navigationItems): Added.
        (WI.ShaderProgramContentView.prototype.shown):
        (WI.ShaderProgramContentView.prototype.hidden):
        (WI.ShaderProgramContentView.prototype.get saveData):
        (WI.ShaderProgramContentView.prototype._refreshContent):
        (WI.ShaderProgramContentView.prototype._updateShader):
        (WI.ShaderProgramContentView.prototype._contentDidChange):
        * UserInterface/Views/ShaderProgramContentView.css:
        (.content-view.shader-program > .shader): Added.
        (.content-view.shader-program > .shader.compute): Added.
        (body[dir=ltr] .content-view.shader-program > .shader.vertex,): Added.
        (body[dir=ltr] .content-view.shader-program > .shader.fragment,): Added.
        (.content-view.shader-program > .shader + .shader): Added.
        (.content-view.shader-program > .shader > header > *): Added.
        (.content-view.shader-program > .shader > header > .shader-type): Added.
        (@media (prefers-color-scheme: dark) .content-view.shader-program > .shader > header): Added.
        (.content-view.shader-program > .text-editor.shader): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader.vertex,): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader.fragment,): Deleted.
        (body[dir=ltr] .content-view.shader-program > .text-editor.shader + .text-editor.shader): Deleted.
        (body[dir=rtl] .content-view.shader-program > .text-editor.shader + .text-editor.shader): Deleted.
        (.content-view.shader-program > .text-editor.shader > .type-title): Deleted.
        (.content-view.shader-program > .text-editor.shader > .CodeMirror): Deleted.
        * UserInterface/Views/CodeMirrorAdditions.js:

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement):
        (WI.ShaderProgramTreeElement.prototype.onattach):
        (WI.ShaderProgramTreeElement.prototype.ondetach):
        (WI.ShaderProgramTreeElement.prototype.canSelectOnMouseDown):
        (WI.ShaderProgramTreeElement.prototype.populateContextMenu):

        * Localizations/en.lproj/localizedStrings.js:

2019-09-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Better handling for large arrays and collections in Object Trees
        https://bugs.webkit.org/show_bug.cgi?id=143589
        <rdar://problem/16135388>

        Reviewed by Joseph Pecoraro.

        Adds two buttons before the "Prototype" item in expanded object/collection previews:
         - Show %d More
         - Show All (%d More)

        The default `fetchCount` increment is `100`. The first button will only be shown if there
        are more than `100` items remaining (haven't been shown).

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.getPropertyDescriptors):
        (WI.RemoteObject.prototype.getDisplayablePropertyDescriptors):
        (WI.RemoteObject.prototype.getCollectionEntries):
        (WI.RemoteObject.prototype.getOwnPropertyDescriptor.wrappedCallback):
        (WI.RemoteObject.prototype._getProperties): Added.
        (WI.RemoteObject.prototype._getDisplayableProperties): Added.

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView):
        (WI.ObjectTreeView.showMoreFetchCount): Added.
        (WI.ObjectTreeView.addShowMoreIfNeeded): Added.
        (WI.ObjectTreeView.prototype.update):
        (WI.ObjectTreeView.prototype._updateChildren):
        (WI.ObjectTreeView.prototype._updateEntries):
        (WI.ObjectTreeView.prototype._updateProperties):
        * UserInterface/Views/ObjectTreeView.css:
        (.tree-outline.object li > button[disabled] + .indeterminate-progress-spinner): Added.
        Avoid duplicating the button creation logic in `WI.ObjectTreePropertyTreeElement` by using a
        `static` function. This expects the existence of and requires access to "private" values.

        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
        (WI.ObjectTreePropertyTreeElement):
        (WI.ObjectTreePropertyTreeElement.prototype.onpopulate):
        (WI.ObjectTreePropertyTreeElement.prototype._updateChildren):
        (WI.ObjectTreePropertyTreeElement.prototype._updateEntries):
        (WI.ObjectTreePropertyTreeElement.prototype._updateProperties):
        (WI.ObjectTreePropertyTreeElement.prototype._updateChildrenInternal): Deleted.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.evaluated):
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedArrayPropertyNames): Deleted.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.getPropertiesForRemoteObject): Deleted.
        Remove unused function.
        * Localizations/en.lproj/localizedStrings.js:

2019-09-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: console assertion when pressing up/down in empty console log view
        https://bugs.webkit.org/show_bug.cgi?id=201948

        Reviewed by Devin Rousso.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._upArrowWasPressed):
        (WI.LogContentView.prototype._downArrowWasPressed):
        Ensure that a message exists before calling `_updateMessagesSelection`, which
        would assert if given a bad message. Additionally, only perform preventDefault
        when selecting a message. This allows us to fall back to a system beep if
        this key event does nothing.

2019-09-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: HTML Formatter - better handling for HTML specific tag cases (<p>/<li>)
        https://bugs.webkit.org/show_bug.cgi?id=201757
        <rdar://problem/55409987>

        Reviewed by Devin Rousso.

        * UserInterface/Workers/Formatter/HTMLFormatter.js:
        (HTMLFormatter.prototype._after):
        Handle a closing tag with different text than the opening tag.

        * UserInterface/Workers/Formatter/HTMLTreeBuilderFormatter.js:
        (HTMLTreeBuilderFormatter.prototype._pushParserNodeTopLevel):
        (HTMLTreeBuilderFormatter.prototype._pushParserNodeStack):
        (HTMLTreeBuilderFormatter.prototype._implicitlyCloseHTMLNodesForOpenTag):
        (HTMLTreeBuilderFormatter.prototype._implicitlyCloseTagNamesInsideParentTagNames):
        (HTMLTreeBuilderFormatter.prototype._indexOfStackNodeMatchingTagNames):
        Generalize the implicit closing a bit. Allow open tags to implicitly
        close certain other open tags in the stack.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: HTML Formatter - XML mode
        https://bugs.webkit.org/show_bug.cgi?id=201758

        Reviewed by Devin Rousso.

        * Tools/HTMLFormatter/index.html:
        * Tools/SourceMaps/index.html:
        Update Tools to more easily test XML.

        * UserInterface/Proxies/FormatterWorkerProxy.js:
        (WI.FormatterWorkerProxy.prototype.formatXML):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.hasFormatter):
        (WI.TextEditor.prototype._startWorkerPrettyPrint):
        Allow formatting XML content.

        * UserInterface/Workers/Formatter/FormatterWorker.js:
        (FormatterWorker.prototype.formatHTML):
        (FormatterWorker.prototype.formatXML):
        Expose "formatXML".

        * UserInterface/Workers/Formatter/HTMLFormatter.js:
        (HTMLFormatter.let.dom):
        (HTMLFormatter):
        (HTMLFormatter.prototype._shouldHaveNoChildren):
        (HTMLFormatter.prototype._before):
        (HTMLFormatter.prototype._after):
        * UserInterface/Workers/Formatter/HTMLParser.js:
        (HTMLParser.prototype.parseDocument):
        * UserInterface/Workers/Formatter/HTMLTreeBuilderFormatter.js:
        (HTMLTreeBuilderFormatter.prototype._isEmptyNode):
        Give the HTMLFormatter and related classes an XML mode that
        has less of the smarts of XML.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: HTML Formatting: Handle infinite loop for incomplete script data
        https://bugs.webkit.org/show_bug.cgi?id=201769

        Reviewed by Devin Rousso.

        * UserInterface/Workers/Formatter/HTMLParser.js:
        (HTMLParser):
        Handle EOF in the script data's loop.
        Better handle EOF at the end of text data.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve auto completion typing performance by avoiding global forced layouts
        https://bugs.webkit.org/show_bug.cgi?id=201735

        Reviewed by Devin Rousso.

        * UserInterface/Views/Main.css:
        (#layout-measurement-container):
        * UserInterface/Base/Main.js:
        (WI.measureElement):
        Provide a helper for measuring an element in a hidden container
        that helps avoid more global layout.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.show):
        Use measure element to avoid a global forced layout.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Tighter autocomplete bubbles
        https://bugs.webkit.org/show_bug.cgi?id=201742

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.show):
        Eliminate the trailing space. Use bounding client rect to get
        fractional widths and raise the value so we are at an even number.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: Web Inspector: Layout Timeline View does not show popover for initiator data
        https://bugs.webkit.org/show_bug.cgi?id=201732
        <rdar://problem/55312339>

        Reviewed by Devin Rousso.

        * UserInterface/Views/LayoutTimelineDataGrid.js:
        (WI.LayoutTimelineDataGrid.prototype.callFramePopoverAnchorElement):
        (WI.LayoutTimelineDataGrid.prototype.shouldShowCallFramePopover):
        The column name was incorrect.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: null is not an object (evaluating 'Object.keys(propertyNames)​')​ (at JavaScriptRuntimeCompletionProvider.js:​244:​57)​
        https://bugs.webkit.org/show_bug.cgi?id=201729

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider):
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded):
        Don't clear the completion object group until all ongoing requests have completed.
        Percision for the lifetime of the object group objects is not important, but we
        surely don't want to delete an object too soon.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Formatter: Pretty Print HTML resources (including inline <script>/<style>)
        https://bugs.webkit.org/show_bug.cgi?id=201535
        <rdar://problem/29119232>

        Reviewed by Devin Rousso.

        Introduce HTMLFormatter, HTMLParser, and HTMLTreeBuilderFormatter.

            - HTMLParser tokenizes HTML content and passes it to a tree builder.
            - HTMLTreeBuilderFormatter uses those tokens to create a formatted dom tree of fake nodes.
            - HTMLFormatter then builds formatted content and a FormatterSourceMap from that DOM tree.
        
        The output of HTMLFormatter is intended to just modify whitespace. So it won't be a
        100% compatible DOM, but will be useful for debugging and reading inline <style>
        and <script>, which is a more common debugging scenario. It also maintains original
        author attribute quotations or lack therefore, because again it tries to only
        change whitespace. A separate tree builder could be used for tidying content.

        This introduces a few tools for working with formatting:

            - Tools/HTMLFormatter - debug the parser, tree builder, and output format
            - Tools/SourceMaps - debug formatted content and source mappings

        This also:
        
            - renames "EsprimaFormatter" to "JSFormatter"
            - eliminates an extra trailing newline in CSSFormatter output

        * Tools/HTMLFormatter/HTMLTreeBuilderDebug.js: Added.
        * Tools/HTMLFormatter/index.html: Added.
        * Tools/HTMLFormatter/styles.css: Added.
        Tool for debugging the HTML formatter components.

        * Tools/SourceMaps/.gitignore: Added.
        * Tools/SourceMaps/index.html: Added.
        * Tools/SourceMaps/setup.sh: Added.
        * Tools/SourceMaps/styles.css: Added.
        Tool for debugging Formatter generated Source Maps.

        * Tools/JSFormatter/JSFormatterDebug.js: Renamed from Source/WebInspectorUI/Tools/Formatting/EsprimaFormatterDebug.js.
        * Tools/JSFormatter/codemirror-additions.css: Renamed from Source/WebInspectorUI/Tools/Formatting/codemirror-additions.css.
        * Tools/JSFormatter/index.html: Renamed from Source/WebInspectorUI/Tools/Formatting/index.html.
        Renamed this tool. EsprimaFormatter => JSFormatter.

        * UserInterface/Controllers/FormatterSourceMap.js:
        (WI.FormatterSourceMap.prototype.originalPositionToFormattedPosition):
        (WI.FormatterSourceMap.prototype.formattedPositionToOriginalPosition):
        New APIs used by tools and tests for translating "position" offsets and not line/columns.

        * UserInterface/Workers/Formatter/JSFormatter.js: Renamed from Source/WebInspectorUI/UserInterface/Workers/Formatter/EsprimaFormatter.js.
        (JSFormatter):
        * UserInterface/Workers/Formatter/CSSFormatter.js:
        (CSSFormatter):
        Allow using a supplied builder, which is useful when formatting
        inline content from HTMLFormatter (<style> / <script>).

        * UserInterface/Workers/Formatter/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype.get indentString):
        (FormatterContentBuilder.prototype.get originalContent):
        (FormatterContentBuilder.prototype.get indentLevel):
        (FormatterContentBuilder.prototype.get originalOffset):
        (FormatterContentBuilder.prototype.set originalOffset):
        (FormatterContentBuilder.prototype.appendNonToken):
        (FormatterContentBuilder.prototype.appendToken):
        (FormatterContentBuilder.prototype.appendTokenWithPossibleNewlines):
        (FormatterContentBuilder.prototype.appendMapping):
        (FormatterContentBuilder.prototype.indentToLevel):
        (FormatterContentBuilder.prototype.finish):
        Provide API for getting / setting the original offset and indent level.
        This is useful when the HTMLFormatter runs the CSSFormatter/JSFormatter
        in a nested context (<style> / <script>). Add a few more APIs for
        conveniences when appending tokens or important positions.

        * UserInterface/Workers/Formatter/HTMLParser.js: Added.
        (HTMLParser.prototype.parseDocument):
        (HTMLParser.prototype._isEOF):
        (HTMLParser.prototype._peek):
        (HTMLParser.prototype._peekCharacterRegex):
        (HTMLParser.prototype._peekString):
        (HTMLParser.prototype._peekCaseInsensitiveString):
        (HTMLParser.prototype._consumeWhitespace):
        (HTMLParser.prototype._consumeUntilString):
        (HTMLParser.prototype._consumeUntilRegex):
        (HTMLParser.prototype._consumeDoubleQuotedString):
        (HTMLParser):
        Tokenize HTML content into nodes.

        * UserInterface/Workers/Formatter/HTMLTreeBuilderFormatter.js: Added.
        (HTMLTreeBuilderFormatter.prototype.get dom):
        (HTMLTreeBuilderFormatter.prototype.begin):
        (HTMLTreeBuilderFormatter.prototype.pushParserNode):
        (HTMLTreeBuilderFormatter.prototype.end):
        (HTMLTreeBuilderFormatter.prototype._pushParserNodeTopLevel):
        (HTMLTreeBuilderFormatter.prototype._pushParserNodeStack):
        (HTMLTreeBuilderFormatter.prototype._isEmptyNode):
        (HTMLTreeBuilderFormatter.prototype._buildDOMNodeFromOpenTag):
        (HTMLTreeBuilderFormatter.prototype._buildErrorNodeFromCloseTag):
        (HTMLTreeBuilderFormatter.prototype._buildSimpleNodeFromParserNode):
        (HTMLTreeBuilderFormatter):
        Build a simple DOM tree from parser nodes.

        * UserInterface/Workers/Formatter/HTMLFormatter.js: Added.
        (HTMLFormatter.let.dom):
        (HTMLFormatter):
        (HTMLFormatter.prototype.get success):
        (HTMLFormatter.prototype.get formattedText):
        (HTMLFormatter.prototype.get sourceMapData):
        (HTMLFormatter.prototype._walk):
        (HTMLFormatter.prototype._walkChildren):
        (HTMLFormatter.prototype._isNodeSelfClosing):
        (HTMLFormatter.prototype._shouldHaveInlineContent):
        (HTMLFormatter.prototype._hasMultipleNewLines):
        (HTMLFormatter.prototype._buildAttributeString):
        (HTMLFormatter.prototype._before):
        (HTMLFormatter.prototype._after):
        (HTMLFormatter.prototype._formatWithNestedFormatter):
        (HTMLFormatter.prototype._formatScript):
        (HTMLFormatter.prototype._formatStyle):
        Output pretty printed text from a HTMLTreeBuilderFormatter dom tree.

        * UserInterface/Proxies/FormatterWorkerProxy.js:
        (WI.FormatterWorkerProxy.prototype.formatHTML):
        * UserInterface/Workers/Formatter/FormatterWorker.js:
        (FormatterWorker.prototype.formatJavaScript):
        (FormatterWorker.prototype.formatCSS):
        (FormatterWorker.prototype.formatHTML):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.hasFormatter):
        (WI.TextEditor.prototype._canUseFormatterWorker):
        (WI.TextEditor.prototype._startWorkerPrettyPrint):
        Allow pretty printing HTML resources.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        New resources.

2019-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: [Overrides] Command-Z doesn't undo changes after page reload
        https://bugs.webkit.org/show_bug.cgi?id=201698
        <rdar://problem/55276645>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ContentViewContainer.js:
        (WI.ContentViewContainer.prototype.closeAllContentViews):
        Provide a filter to opt out of closing some content views.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._closeContentViewsFilter):
        (WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):
        Avoid closing ContentViews for local resource overrides. This keeps the
        SourceCodeTextEditor around and thus its undo/redo stack.

2019-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: TypeError: null is not an object (evaluating 'selectedTreeElement.representedObject')
        https://bugs.webkit.org/show_bug.cgi?id=201716
        <rdar://problem/55292615>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        If a breakpoint was removed without a selection in the breakpoint tree outline
        then there may be no selected tree element.

2019-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION: Inspector Timeline always starts at about 500ms mark on a reload
        https://bugs.webkit.org/show_bug.cgi?id=200637
        <rdar://problem/54218967>

        Reviewed by Devin Rousso.

        The Timeline was getting a startTime value from before the user started
        the timeline recording because of artificial adjustments that were made
        to CPUTimelineRecords. Ignore adjusted values when updating the Timeline's
        start and end times.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype._updateTimesIfNeeded):
        Use unadjusted times, which should fall in the user started / stopped
        timeline range.

        * UserInterface/Models/TimelineRecord.js:
        (WI.TimelineRecord.prototype.get unadjustedStartTime):
        (WI.TimelineRecord.prototype.get unadjustedEndTime):
        Default implementation uses startTime/endTime.

        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.get unadjustedStartTime):
        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord.prototype.get unadjustedStartTime):
        Each of these adjusted their startTime.

2019-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION: CPU: Overlay Markers for Thread views are off by 500ms
        https://bugs.webkit.org/show_bug.cgi?id=201709
        <rdar://problem/55289279>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.layout):
        Use the CPUTimelineRecord's timestamp (same as the record's endTime) as the
        point when the CPU sample is taken. This aligns with the rest of the UI that
        assumes that the 500ms before the sample point leads up to the sample value.

2019-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Do not show override actions unless Sources tab is enabled
        https://bugs.webkit.org/show_bug.cgi?id=201708

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.supportsLocalResourceOverrides):

2019-09-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: checkerboard has too much contrast in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=201670

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CanvasTabContentView.css:
        (.content-view.canvas > .preview > img, .content-view.canvas .preview-container > canvas): Deleted.
        Don't force a `background-color: white;` in dark mode.

2019-09-11  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Elements: don't show Changes panel when selecting text node
        https://bugs.webkit.org/show_bug.cgi?id=201669

        Reviewed by Joseph Pecoraro.

        Show Changes panel only for elements regardless of "Show only for selected node" setting.

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype.supportsDOMNode):
        (WI.ChangesDetailsSidebarPanel.prototype.inspect): Deleted.

2019-09-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: instrument WebGPUDevice instead of GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=201650

        Reviewed by Joseph Pecoraro.

        Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`.

        A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even
        required (e.g. compute pipeline).  We should treat the `GPUCanvasContext` almost like a
        `-webkit-canvas` client of a `WebGPUDevice`.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.clientNodesChanged): Added.
        (WI.CanvasObserver.prototype.cssCanvasClientNodesChanged):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.clientNodesChanged): Added.
        (WI.CanvasManager.prototype.cssCanvasClientNodesChanged): Deleted.
        * UserInterface/Models/Canvas.js:
        (WI.Canvas.resetUniqueDisplayNameNumbers):
        (WI.Canvas.prototype.get displayName):
        (WI.Canvas.prototype.requestNode):
        (WI.Canvas.prototype.requestClientNodes): Added.
        (WI.Canvas.prototype.requestSize):
        (WI.Canvas.prototype.clientNodesChanged): Added.
        (WI.Canvas.prototype.requestCSSCanvasClientNodes): Deleted.
        (WI.Canvas.prototype.cssCanvasClientNodesChanged): Deleted.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.resolveCanvasContext):

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype._refreshPixelSize):
        * UserInterface/Views/CanvasDetailsSidebarPanel.js:
        (WI.CanvasDetailsSidebarPanel.prototype.set canvas):
        (WI.CanvasDetailsSidebarPanel.prototype.initialLayout):
        (WI.CanvasDetailsSidebarPanel.prototype.layout):
        (WI.CanvasDetailsSidebarPanel.prototype._refreshSourceSection):
        (WI.CanvasDetailsSidebarPanel.prototype._refreshClientsSection): Added.
        (WI.CanvasDetailsSidebarPanel.prototype._refreshCSSCanvasSection): Deleted.
        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._contentViewMouseEnter):
        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.prototype._handleMouseOver):

        * Localizations/en.lproj/localizedStrings.js:

2019-09-11  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r249753.

        caused inspector/canvas/shaderProgram-add-remove-webgl.html to
        crash on all Mac platforms.

        Reverted changeset:

        "Web Inspector: Canvas: instrument WebGPUDevice instead of
        GPUCanvasContext"
        https://bugs.webkit.org/show_bug.cgi?id=201650
        https://trac.webkit.org/changeset/249753

2019-09-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: instrument WebGPUDevice instead of GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=201650

        Reviewed by Joseph Pecoraro.

        Most of the actual "work" done with Web GPU actually uses a `WebGPUDevice`.

        A `GPUCanvasContext` is basically just a display "client" of the device, and isn't even
        required (e.g. compute pipeline).  We should treat the `GPUCanvasContext` almost like a
        `-webkit-canvas` client of a `WebGPUDevice`.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.clientNodesChanged): Added.
        (WI.CanvasObserver.prototype.cssCanvasClientNodesChanged):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.clientNodesChanged): Added.
        (WI.CanvasManager.prototype.cssCanvasClientNodesChanged): Deleted.
        * UserInterface/Models/Canvas.js:
        (WI.Canvas.resetUniqueDisplayNameNumbers):
        (WI.Canvas.prototype.get displayName):
        (WI.Canvas.prototype.requestNode):
        (WI.Canvas.prototype.requestClientNodes): Added.
        (WI.Canvas.prototype.requestSize):
        (WI.Canvas.prototype.clientNodesChanged): Added.
        (WI.Canvas.prototype.requestCSSCanvasClientNodes): Deleted.
        (WI.Canvas.prototype.cssCanvasClientNodesChanged): Deleted.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.resolveCanvasContext):

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype._refreshPixelSize):
        * UserInterface/Views/CanvasDetailsSidebarPanel.js:
        (WI.CanvasDetailsSidebarPanel.prototype.set canvas):
        (WI.CanvasDetailsSidebarPanel.prototype.initialLayout):
        (WI.CanvasDetailsSidebarPanel.prototype.layout):
        (WI.CanvasDetailsSidebarPanel.prototype._refreshSourceSection):
        (WI.CanvasDetailsSidebarPanel.prototype._refreshClientsSection): Added.
        (WI.CanvasDetailsSidebarPanel.prototype._refreshCSSCanvasSection): Deleted.
        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._contentViewMouseEnter):
        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.prototype._handleMouseOver):

        * Localizations/en.lproj/localizedStrings.js:

2019-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove legacy CodeMirror based pretty printers
        https://bugs.webkit.org/show_bug.cgi?id=201624

        Reviewed by Devin Rousso.

        * Tools/PrettyPrinting/FormatterDebug.js: Removed.
        * Tools/PrettyPrinting/Utilities.js: Removed.
        * Tools/PrettyPrinting/codemirror-additions.css: Removed.
        * Tools/PrettyPrinting/index.html: Removed.
        * Tools/PrettyPrinting/populate/apple.css: Removed.
        * UserInterface/Controllers/Formatter.js: Removed.
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Views/CodeMirrorFormatters.js: Removed.
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.prettyPrint):
        (WI.TextEditor.prototype._canUseFormatterWorker): Deleted.
        (WI.TextEditor.prototype._startCodeMirrorPrettyPrint): Deleted.
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2019-09-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dark Mode: Overview Timeline View has jarring white box-shadows in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=201442
        <rdar://problem/54999794>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DataGrid.css:
        (.data-grid:not(.variable-height-rows) table.data):
        (.data-grid:not(.variable-height-rows) table.data.even-first-zebra-stripe):
        (.data-grid.variable-height-rows.even-first-zebra-stripe table.data tr:nth-child(odd)):
        (.data-grid.variable-height-rows.even-first-zebra-stripe table.data tr:nth-child(even)):
        (.data-grid:not(.variable-height-rows) table.data.odd-first-zebra-stripe): Deleted.
        (.data-grid.variable-height-rows.odd-first-zebra-stripe table.data tr:nth-child(odd)): Deleted.
        (.data-grid.variable-height-rows.odd-first-zebra-stripe table.data tr:nth-child(even)): Deleted.
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.updateVisibleRows):
        * UserInterface/Views/Table.css:
        (.table > .data-container > .data-list):
        (.table > .data-container > .data-list.even-first-zebra-stripe):
        (.table > .data-container > .data-list.odd-first-zebra-stripe): Deleted.
        * UserInterface/Views/Table.js:
        In the gradients "even" was mistakenly first. Fix these so that "odd" is first and the
        unusual case would be having "even" first. This allows us to line up with `nth-of-type(even)`.

        * UserInterface/Views/Main.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        Flip even and odd so we maintain the same styles for gradients.

        * UserInterface/Views/OverviewTimelineView.css:
        (.timeline-view.overview > .data-grid tr):
        (.timeline-view.overview > .data-grid tr:nth-child(even)):
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded) td.graph-column .timeline-record-bar:not(.has-inactive-segment) > .segment):
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded).selected td.graph-column .timeline-record-bar:not(.has-inactive-segment) > .segment):
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded) td.graph-column .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded).selected td.graph-column .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (@media (prefers-color-scheme: dark)):
        (WI.Table.prototype._updateVisibleRows):
        * UserInterface/Views/Variables.css:

2019-09-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSS Formatter: the closing } of nested @media aren't indented
        https://bugs.webkit.org/show_bug.cgi?id=201560

        Reviewed by Joseph Pecoraro.

        * UserInterface/Workers/Formatter/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype.removeLastNewline):
        It's possible that there were multiple newlines in a row, so we should update `_startOfLine`
        to be `true` if the previous line was empty.

2019-09-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSS Formatter: links to CSS resources don't map to the right line after pretty printing if the line is after a multiline comment
        https://bugs.webkit.org/show_bug.cgi?id=201559

        Reviewed by Joseph Pecoraro.

        Newlines in multiline comments weren't added as line endings, so they weren't considered
        when a source code location updated after pretty printing.

        * UserInterface/Workers/Formatter/CSSFormatter.js:
        (CSSFormatter.prototype._format):

2019-09-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better position for Sources tab when enabling the experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=201539

        Reviewed by Devin Rousso.

        * UserInterface/Views/SettingsTabContentView.js:
        Place the Sources tab where the Debugger tab was.

2019-09-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network: Error response headers summary has wrong color border
        https://bugs.webkit.org/show_bug.cgi?id=201538
        <rdar://problem/55104469>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ResourceHeadersContentView.css:
        (body[dir] .resource-headers > section.error > .details):
        Re-apply an error style for resource-header sections.

2019-09-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: unify the interaction of show/hide status icons in Sources and Canvas
        https://bugs.webkit.org/show_bug.cgi?id=201470

        Reviewed by Joseph Pecoraro.

        Rather than "fading" the tree element's text when the underlying represented object is
        disabled/blackboxed, we should just "fade" the icon. The "fade" shouldn't change when the
        tree element is selected. The image of the status eye also shouldn't change depending on
        whether the underlying represented object is disabled/blackboxed, as it being visible (even
        if it's "faded") is already enough of an indicator.

        It should also be possible to toggle the disabled/blackboxed state via the context menu.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):
        * UserInterface/Views/SourceCodeTreeElement.css:
        (.tree-outline:not(.navigation-sidebar-panel-content-tree-outline) .item .status > .toggle-script-blackboxed, .tree-outline .item:not(:hover) .status > .toggle-script-blackboxed:not(.blackboxed)): Added.
        (.tree-outline:not(.navigation-sidebar-panel-content-tree-outline) .item .status > .toggle-script-blackboxed, .tree-outline .item:not(:hover, .selected) .status > .toggle-script-blackboxed:not(.blackboxed)): Deleted.

        * UserInterface/Models/ShaderProgram.js:
        (WI.ShaderProgram):
        (WI.ShaderProgram.prototype.get disabled): Added.
        (WI.ShaderProgram.prototype.set disabled): Added.
        (WI.ShaderProgram.prototype.toggleDisabled): Deleted.
        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.onattach):
        (WI.ShaderProgramTreeElement.prototype.ondetach): Added.
        (WI.ShaderProgramTreeElement.prototype.canSelectOnMouseDown):
        (WI.ShaderProgramTreeElement.prototype.populateContextMenu): Added.
        (WI.ShaderProgramTreeElement.prototype._disabledImageElementClicked):
        (WI.ShaderProgramTreeElement.prototype._handleShaderProgramDisabledChanged): Added.
        * UserInterface/Views/ShaderProgramTreeElement.css:
        (.tree-outline .item.shader-program .status > img): Added.
        (.tree-outline .item.shader-program:not(:hover, .selected, .disabled) .status > img): Added.
        (.tree-outline .item.shader-program.disabled .status > img): Added.
        (@media (prefers-color-scheme: dark) .tree-outline .item.shader-program .status > img): Added.
        (.item.shader-program .status > img): Deleted.
        (.item.shader-program.disabled:hover .status > img): Deleted.
        (.item.shader-program:not(:hover, .selected, .disabled) .status > img): Deleted.
        (.item.shader-program.disabled > :not(.status)): Deleted.
        (@media (prefers-color-scheme: dark) .item.shader-program .status > img): Deleted.

2019-09-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Local Overrides - Provide substitution content for resource loads (URL based)
        https://bugs.webkit.org/show_bug.cgi?id=201262
        <rdar://problem/13108764>

        Reviewed by Devin Rousso.

        This adds a new "Local Overrides" section to the Sources tab sidebar
        which will allow users to provide their own resource content for text
        resources. Users can clone a resource, and provide their own content
        (by editing in Web Inspector) and new requests for those particular
        URLs will get the substitute content.

        Overrides are based on a particular URL (ignoring fragment). They
        can override: status code, status text, response headers, content,
        and MIME Type (Content-Type).

        * Tools/CodeMirrorModes/index.html: Added.
        * Tools/CodeMirrorModes/styles.css: Added.
        Debug tool for CodeMirror editors and our custom CodeMirror modes.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * Localizations/en.lproj/localizedStrings.js:
        New files and strings.

        * UserInterface/Base/HTTPUtilities.js: Added.
        (WI.httpStatusTextForStatusCode):
        Translate between typical status codes and status text.

        * UserInterface/Base/ObjectStore.js:
        (WI.ObjectStore._open):
        New persistent store for local resource overrides.

        * UserInterface/Base/Main.js:
        (WI.showLocalResourceOverride):
        Convenience for showing an override file.

        * UserInterface/Base/URLUtilities.js:
        (parseURL):
        Avoid uncaught exceptions with the URL constructor for common WebKit internal sourceURL strings.
        
        (WI.urlWithoutFragment):
        Strip a fragment from a URL.

        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.fetchType):
        (WI.HARBuilder.responseSourceFromHARFetchType):
        Handle new custom response types.

        * UserInterface/Protocol/NetworkObserver.js:
        (WI.NetworkObserver.prototype.responseIntercepted):
        (WI.NetworkObserver):
        New events.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.supportsLocalResourceOverrides):
        (WI.NetworkManager.prototype.initializeTarget):
        (WI.NetworkManager.prototype.get localResourceOverrides):
        (WI.NetworkManager.prototype.get interceptionEnabled):
        (WI.NetworkManager.prototype.set interceptionEnabled):
        (WI.NetworkManager.prototype.addLocalResourceOverride):
        (WI.NetworkManager.prototype.removeLocalResourceOverride):
        (WI.NetworkManager.prototype.localResourceOverrideForURL):
        (WI.NetworkManager.prototype.canBeOverridden):
        (WI.NetworkManager.prototype.responseIntercepted):
        (WI.NetworkManager.prototype._handleResourceContentDidChange):
        (WI.NetworkManager.prototype._persistLocalResourceOverrideSoonAfterContentChange):
        (WI.NetworkManager.prototype._saveLocalResourceOverrides):
        (WI.NetworkManager.prototype._extraDomainsActivated):
        (WI.NetworkManager.prototype.localResourceForURL): Deleted.
        Handle saving and restoring local resource overrides.
        Handle responding to a `responseIntercepted` Network protocol event.

        * UserInterface/Models/LocalResource.js:
        (WI.LocalResource.fromJSON):
        (WI.LocalResource.prototype.toJSON):
        (WI.LocalResource.prototype.get localContent):
        (WI.LocalResource.prototype.get localContentIsBase64Encoded):
        (WI.LocalResource.prototype.isLocalResourceOverride):
        (WI.LocalResource.prototype.updateOverrideContent):
        Allow a LocalResource to identify itself as an "override".

        * UserInterface/Models/LocalResourceOverride.js: Added.
        (WI.LocalResourceOverride.prototype.create):
        (WI.LocalResourceOverride.fromJSON):
        (WI.LocalResourceOverride.prototype.toJSON):
        (WI.LocalResourceOverride.prototype.get url):
        (WI.LocalResourceOverride.prototype.get localResource):
        (WI.LocalResourceOverride.prototype.get disabled):
        (WI.LocalResourceOverride.prototype.set disabled):
        (WI.LocalResourceOverride.prototype.saveIdentityToCookie):
        (WI.LocalResourceOverride):
        Model object for a LocalResourceOverride. This has LocalResource content
        and an enabled/disabled state.

        * UserInterface/Models/Resource.js:
        (WI.Resource.classNamesForResource):
        (WI.Resource.responseSourceFromPayload):
        (WI.Resource.prototype.isLocalResourceOverride):
        (WI.Resource.prototype.async.createLocalResourceOverride):
        (WI.Resource.classNameForResource): Deleted.
        Convenience functions and icon updates.

        * UserInterface/Views/SourcesTabContentView.js:
        (WI.SourcesTabContentView.prototype.canShowRepresentedObject):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        (WI.ContentView.resolvedRepresentedObjectForRepresentedObject):
        (WI.ContentView.isViewable):
        Handle new represented object type.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.createContentTreeOutline):
        (WI.SourcesNavigationSidebarPanel.prototype.willDismissPopover):
        (WI.SourcesNavigationSidebarPanel.prototype._willDismissLocalOverridePopover):
        (WI.SourcesNavigationSidebarPanel.prototype._willDismissEventBreakpointPopover):
        (WI.SourcesNavigationSidebarPanel.prototype._willDismissURLBreakpointPopover):
        (WI.SourcesNavigationSidebarPanel.prototype._addLocalResourceOverride):
        (WI.SourcesNavigationSidebarPanel.prototype._removeLocalResourceOverride):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateBreakpointContextMenu):
        (WI.SourcesNavigationSidebarPanel.prototype._handleLocalResourceOverrideAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleLocalResourceOverrideRemoved):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .warning-banner):
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container, .local-overrides)):
        (.sidebar > .panel.navigation.sources > .content > .local-overrides):
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container)): Deleted.
        Hide and show Local Overrides section.

        * UserInterface/Views/LocalResourceOverrideTreeElement.css:
        (.item.resource.override .status > div):
        * UserInterface/Views/LocalResourceOverrideTreeElement.js: Added.
        (WI.LocalResourceOverrideTreeElement):
        (WI.LocalResourceOverrideTreeElement.prototype.canSelectOnMouseDown):
        (WI.LocalResourceOverrideTreeElement.prototype.populateContextMenu):
        (WI.LocalResourceOverrideTreeElement.prototype.willDismissPopover):
        TreeElement for a Local Resource Override.

        * UserInterface/Views/CodeMirrorLocalOverrideURLMode.css:
        (.cm-s-default .cm-local-override-url-bad-scheme):
        (.cm-s-default .cm-local-override-url-fragment):
        * UserInterface/Views/CodeMirrorLocalOverrideURLMode.js: Added.
        (tokenBase):
        (return.startState):
        (return.token):
        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype._revealAndSelectRepresentedObject):

        * UserInterface/Views/ContextMenu.js:
        (WI.ContextMenu.prototype._itemSelected):
        (WI.ContextMenu):
        Better debugging for exceptions in context menu handlers.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):
        (WI.appendContextMenuItemsForURL):
        Context menu items for Local Resource Overrides.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.startEditingNode):
        (WI.DataGrid.prototype._startEditingNodeAtColumnIndex):
        (WI.DataGrid.prototype._startEditing):
        (WI.DataGrid.prototype._contextMenuInDataTable):
        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode):
        (WI.DataGridNode.prototype.get editable):
        (WI.DataGridNode.prototype.set editable):
        Improve DataGrid editing functionality.
        Allow a node to not be editable.
        Allow adding a new node and starting to edit in one action.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype.treeElementForRepresentedObject):
        Do not provide overrides in the Debugger tab.

        * UserInterface/Views/LocalResourceOverrideLabelView.css:
        (.local-resource-override-label-view):
        (.local-resource-override-label-view > div):
        (.local-resource-override-label-view > div > .label):
        (.local-resource-override-label-view > div > .url):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/LocalResourceOverrideLabelView.js:
        (WI.LocalResourceOverrideLabelView):
        (WI.LocalResourceOverrideLabelView.prototype.initialLayout):
        * UserInterface/Views/LocalResourceOverridePopover.css: Added.
        (.popover .local-resource-override-popover-content):
        (.popover .local-resource-override-popover-content > label.toggle):
        (.popover .local-resource-override-popover-content > table):
        (.popover .local-resource-override-popover-content > table > tr > th):
        (.popover .local-resource-override-popover-content > table > tr > td):
        (.popover .local-resource-override-popover-content .editor):
        (.popover .local-resource-override-popover-content .editor > .CodeMirror):
        (.popover .local-resource-override-popover-content .editor.url):
        (.popover .local-resource-override-popover-content .editor.mime):
        (.popover .local-resource-override-popover-content .editor.status):
        (.popover .local-resource-override-popover-content .editor.status-text):
        (.popover .local-resource-override-popover-content .add-header):
        (@media (prefers-color-scheme: dark)):
        New banner view for a local resource override itself.
        Shows the URL being overriden.

        * UserInterface/Views/LocalResourceOverrideWarningView.css:
        (.local-resource-override-warning-view):
        (.local-resource-override-warning-view[hidden]):
        (.local-resource-override-warning-view > div):
        (.local-resource-override-warning-view > div > button):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/LocalResourceOverrideWarningView.js: Added.
        (WI.LocalResourceOverrideWarningView):
        (WI.LocalResourceOverrideWarningView.prototype.attached):
        (WI.LocalResourceOverrideWarningView.prototype.detached):
        (WI.LocalResourceOverrideWarningView.prototype._updateContent):
        (WI.LocalResourceOverrideWarningView.prototype._handleLocalResourceOverrideChanged):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.pruneStaleResourceTreeElements):
        New banner view for a resource that has been overridden.
        Allows jumping to the override itself.

        * UserInterface/Views/LocalResourceOverridePopover.js: Added.
        (WI.LocalResourceOverridePopover):
        (WI.LocalResourceOverridePopover.prototype.get serializedData):
        (WI.LocalResourceOverridePopover.prototype.show.addDataGridNodeForHeader):
        (WI.LocalResourceOverridePopover.prototype.show):
        (WI.LocalResourceOverridePopover.prototype._createEditor):
        (WI.LocalResourceOverridePopover.prototype._defaultURL):
        (WI.LocalResourceOverridePopover.prototype._presentOverTargetElement):
        New popover for creating or editing a Local Resource Override.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch):
        Consider searching overrides.

        * UserInterface/Views/Variables.css:
        (:root):
        * UserInterface/Views/SearchSidebarPanel.css:
        (.sidebar > .panel.navigation.search.changed > .banner):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .warning-banner):
        * UserInterface/Views/ConsoleMessageView.css:
        (.console-warning-level):
        Use a new variable for a common warning color.

        * UserInterface/Images/NavigationItemNetworkOverride.svg: Added.
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.canBeFormatted):
        (WI.SourceCodeTextEditor.prototype.get _supportsDebugging):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .warning-banner):
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container, .local-overrides)):
        (.sidebar > .panel.navigation.sources > .content > .local-overrides):
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container)): Deleted.
        * UserInterface/Views/TextEditor.css:
        (.text-editor):
        * UserInterface/Views/TextResourceContentView.css:
        (.content-view.resource.text):
        (.content-view.resource.text > .text-editor):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype.get navigationItems):
        (WI.TextResourceContentView.prototype.closed):
        (WI.TextResourceContentView.prototype._contentWillPopulate):
        (WI.TextResourceContentView.prototype._contentDidPopulate):
        (WI.TextResourceContentView.prototype.async._handleCreateLocalResourceOverride):
        (WI.TextResourceContentView.prototype._handleRemoveLocalResourceOverride):
        (WI.TextResourceContentView.prototype._handleLocalResourceOverrideChanged):
        (WI.TextResourceContentView.prototype._textEditorContentDidChange):
        (WI.TextResourceContentView.prototype._shouldBeEditable):
        Allow Text resources to create a local resource override.
        Support for Image resources will come separately.

        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._responseSourceDisplayString):
        Handle new response type.

        * UserInterface/Controllers/CSSManager.js:
        Avoid extra handling for Local Resource Overrides.

        * UserInterface/Views/ResourceIcons.css:
        (.resource-icon.override .icon):
        * UserInterface/Views/ResourceSizesContentView.js:
        (WI.ResourceSizesContentView.prototype.initialLayout):
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        (WI.ResourceTimelineDataGridNode.prototype.iconClassNames):
        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement.prototype._updateResource):
        (WI.ResourceTreeElement.prototype._updateIcon):
        (WI.ResourceTreeElement.prototype._responseReceived):
        (WI.ResourceTreeElement):
        * UserInterface/Views/TimelineDataGridNode.js:
        (WI.TimelineDataGridNode.prototype.createCellContent):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateTransferSizeCell):
        (WI.NetworkTableContentView.prototype._generateSortComparator):
        Better Resource icons all over for overrides.

        * UserInterface/Views/URLBreakpointPopover.js:
        (WI.URLBreakpointPopover.prototype._createEditor):
        Code cleanup.

2019-09-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to view XML/HTML/SVG resource responses as a DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=201046
        <rdar://problem/54446087>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceClusterContentView.js:
        (WI.ResourceClusterContentView):
        (WI.ResourceClusterContentView.prototype.showRequest):
        (WI.ResourceClusterContentView.prototype.showResponse):
        (WI.ResourceClusterContentView.prototype.get customRequestDOMContentView): Added.
        (WI.ResourceClusterContentView.prototype.get customRequestJSONContentView): Added.
        (WI.ResourceClusterContentView.prototype.get customResponseDOMContentView): Added.
        (WI.ResourceClusterContentView.prototype.get customResponseJSONContentView): Added.
        (WI.ResourceClusterContentView.prototype.get customResponseTextContentView): Added.
        (WI.ResourceClusterContentView.prototype._createPathComponent): Added.
        (WI.ResourceClusterContentView.prototype._canShowCustomRequestContentView):
        (WI.ResourceClusterContentView.prototype._canShowCustomResponseContentView):
        (WI.ResourceClusterContentView.prototype._contentViewForResourceType):
        (WI.ResourceClusterContentView.prototype._pathComponentForContentView):
        (WI.ResourceClusterContentView.prototype._identifierForContentView):
        (WI.ResourceClusterContentView.prototype._showContentViewForIdentifier):
        (WI.ResourceClusterContentView.prototype._resourceLoadingDidFinish):
        (WI.ResourceClusterContentView.prototype._canUseDOMContentViewForContent): Added.
        (WI.ResourceClusterContentView.prototype._normalizeMIMETypeForDOM): Added.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomRequestContentViews): Added.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomResponseContentViews): Added.
        (WI.ResourceClusterContentView.createPathComponent): Deleted.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomRequestContentView): Deleted.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomResponseContentView): Deleted.
        * UserInterface/Base/Main.js:
        (WI.showResourceRequest):
        * UserInterface/Views/PathComponentIcons.css:
        (.object-icon .icon): Added.
        * UserInterface/Main.html:
        * UserInterface/Views/SVGImageResourceClusterContentView.js: Removed.
        Reworked to allow more than one custom request/response content view at the same time. As
        such, merge the `WI.SVGImageResourceClusterContentView` into this class.

        * UserInterface/Views/LocalRemoteObjectContentView.js: Added.
        (WI.LocalRemoteObjectContentView):
        (WI.LocalRemoteObjectContentView.prototype.get expression):
        (WI.LocalRemoteObjectContentView.prototype.renderRemoteObject):
        (WI.LocalRemoteObjectContentView.prototype.initialLayout):
        (WI.LocalRemoteObjectContentView.prototype.attached):
        (WI.LocalRemoteObjectContentView.prototype.closed):
        * UserInterface/Views/LocalRemoteObjectContentView.css: Added.
        (.content-view.local-remote-object):
        * UserInterface/Views/LocalDOMContentView.js: Added.
        (WI.LocalDOMContentView):
        (WI.LocalDOMContentView.prototype.get expression):
        (WI.LocalDOMContentView.prototype.renderRemoteObject):
        * UserInterface/Views/LocalJSONContentView.js: Added.
        (WI.LocalJSONContentView):
        (WI.LocalJSONContentView.prototype.get expression):
        (WI.LocalJSONContentView.prototype.renderRemoteObject):
        * UserInterface/Views/JSONContentView.js: Removed.
        * UserInterface/Views/JSONContentView.css: Removed.
        Rework `WI.JSONContentView` into a more generic set of classes that render an object we send
        to the inspected page for instrumentation.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        (WI.DOMTreeOutline.prototype._onmousemove):
        (WI.DOMTreeOutline.prototype._onmouseout):
        (WI.DOMTreeOutline.prototype._ondragstart):
        (WI.DOMTreeOutline.prototype._ondragover):
        (WI.DOMTreeOutline.prototype._ondragleave):
        (WI.DOMTreeOutline.prototype._ondragend):
        (WI.DOMTreeOutline.prototype._hideElements):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):
        Ensure that interactions that would modify the DOM tree only happen when editable. If the
        `WI.DOMTreeOutline` represents a "local" `WI.DOMNode` (one that's been sent to the inspected
        page for instrumentation, and shouldn't be part of the main #document), don't allow any
        editing actions to be performed.

        * UserInterface/Views/TextContentView.js:
        (WI.TextContentView):
        Allow a `representedObject` object to be provided and used instead of the given `string`.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/Object.svg: Added.

2019-09-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: implement blackboxing of script resources
        https://bugs.webkit.org/show_bug.cgi?id=17240
        <rdar://problem/5732847>

        Reviewed by Joseph Pecoraro.

        When a script is blackboxed and the debugger attempts to pause in that script, the pause
        reason/data will be saved and execution will continue until it has left the blackboxed
        script. Once outside, execution is paused with the saved reason/data.

        This is especially useful when debugging issues using libraries/frameworks, as it allows the
        developer to "skip" the internal logic of the library/framework and instead focus only on
        how they're using it.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.supportsBlackboxingScripts): Added.
        (WI.DebuggerManager.pauseReasonFromPayload): Added.
        (WI.DebuggerManager.prototype.isScriptBlackboxed): Added.
        (WI.DebuggerManager.prototype.setShouldBlackboxScript): Added.
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):
        (WI.DebuggerManager.prototype._pauseReasonFromPayload): Deleted.

        * UserInterface/Models/SourceCode.js:
        (WI.SourceCode.prototype.get isScript): Added.
        (WI.SourceCode.prototype.get supportsScriptBlackboxing): Added.
        * UserInterface/Models/Script.js:
        (WI.Script.prototype.get isScript): Added.
        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get isScript): Added.
        Provide a more straightforward way of determining if a `WI.SourceCode` is a script.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._updatePauseReason):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReason):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        Display the original pause reason and breakpoint (if applicable) when pausing after leaving
        a blackboxed script.

        * UserInterface/Views/SourceCodeTreeElement.js:
        (WI.SourceCodeTreeElement.prototype.canSelectOnMouseDown): Added.
        (WI.SourceCodeTreeElement.prototype.updateStatus): Added.
        (WI.SourceCodeTreeElement.prototype._updateSourceCode):
        (WI.SourceCodeTreeElement.prototype._updateToggleBlackboxImageElementState): Added.
        (WI.SourceCodeTreeElement.prototype._handleToggleBlackboxedImageElementClick): Added.
        * UserInterface/Views/SourceCodeTreeElement.css: Added.
        (.tree-outline .item .status > .toggle-script-blackboxed):
        (.tree-outline:not(.navigation-sidebar-panel-content-tree-outline) .item .status > .toggle-script-blackboxed,):
        (.tree-outline:focus .item.selected .status > .toggle-script-blackboxed):
        (.tree-outline .item .status > .toggle-script-blackboxed.blackboxed):
        (@media (prefers-color-scheme: dark) .tree-outline .item .status > .toggle-script-blackboxed):

        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement.prototype._updateResource):
        (WI.ResourceTreeElement.prototype.updateStatus): Added.
        (WI.ResourceTreeElement.prototype._updateStatus): Deleted.
        Make sure that the loading indicator doesn't override the blackbox toggle.

        * UserInterface/Base/Setting.js:
        (WI.Setting.prototype.set value):
        (WI.Setting.prototype.save): Added.
        When modifying an array value, that doesn't go through `WI.Setting.prototype.set value`, so
        we need a more "manual" way of saving the new value.

        * UserInterface/Main.html:
        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Test/TestHarness.js:
        (TestHarness.prototype.newline): Added.
        (TestHarness.prototype.expectException):
        Add a special case for logging error message objects when running protocol tests.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Update .xcconfig symbols to reflect the current set of past and future product versions.
        https://bugs.webkit.org/show_bug.cgi?id=200720
        <rdar://problem/54305032>

        Reviewed by Alex Christensen.

        Remove version symbols related to old OS's we no longer support,
        ensure that version symbols are defined for OS's we do support.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2019-08-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOMDebugger: support event breakpoints in Worker contexts
        https://bugs.webkit.org/show_bug.cgi?id=200651

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        Add assertions when adding/removing DOM breakpoints or animation frame event breakpoints if
        the target is a `WI.WorkerTarget`, as neither are supported by `Worker`s.

2019-08-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace uses of `Array.prototype.concat` with `Array.prototype.push`
        https://bugs.webkit.org/show_bug.cgi?id=201082

        Reviewed by Joseph Pecoraro.

        `x = x.concat(y)` is very slow, as `x` has to be fully copied in order to add `y` to it.
        Introduce `Array.prototype.pushIterable`, which iterates the given `iterable` and adds each
        item to the `this` array.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.get domBreakpoints):
        (WI.DOMDebuggerManager.prototype.domBreakpointsInSubtree):
        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):
        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions):
        * UserInterface/Models/CSSKeywordCompletions.js:
        (WI.CSSKeywordCompletions.forProperty):
        (WI.CSSKeywordCompletions.forProperty.addKeywordsForName):
        (WI.CSSKeywordCompletions.forFunction):
        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.recordingProgress):
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._updateStyleCascade):
        (WI.DOMNodeStyles.prototype._collectStylesInCascadeOrder):
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.get sourceCodeTimelines):
        (WI.TimelineRecording.prototype.initializeCallingContextTrees):
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype._getPropertyDescriptorsResolver):
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendMessageTextAndArguments):
        * UserInterface/Views/ContentBrowser.js:
        (WI.ContentBrowser.prototype.get currentRepresentedObjects):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._visibleChildren):
        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.get filterableData):
        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype.get selectionPathComponents):
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
        (WI.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData.processEntries):
        * UserInterface/Views/NavigationItem.js:
        (WI.NavigationItem.prototype.get _classNames):
        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView.prototype._updateProperties):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addResourcesForFrame):
        * UserInterface/Views/OverviewTimelineView.js:
        (WI.OverviewTimelineView.prototype._loadExistingRecords):
        * UserInterface/Views/ResourceCollectionContentView.js:
        (WI.ResourceCollectionContentView.prototype.get navigationItems):
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/ScriptClusterTimelineView.js:
        (WI.ScriptClusterTimelineView.prototype.get selectionPathComponents):
        * UserInterface/Views/ScrubberNavigationItem.js:
        (WI.ScrubberNavigationItem.prototype.get additionalClassNames):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._addGradientTokens):
        (WI.SpreadsheetStyleProperty.prototype._addColorTokens.pushPossibleColorToken):
        (WI.SpreadsheetStyleProperty.prototype._addTimingFunctionTokens):
        (WI.SpreadsheetStyleProperty.prototype._addVariableTokens):
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selfOrDescendant):
        * UserInterface/Views/View.js:
        (WI.View._visitViewTreeForLayout):

2019-08-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r248873): Debugger: pressing delete on a breakpoint will also delete any resource/element parent immediately before it in the list
        https://bugs.webkit.org/show_bug.cgi?id=200939

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement):
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement.checkIfSelectionAdjustmentNeeded): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.this._breakpointsTreeOutline.ondelete.checkIfSelectionAdjustmentNeeded): Deleted.
        When the `WI.TreeOutline`'s own `ondelete` is called, that means we must be handling a
        delete that was _not_ handled by a `WI.TreeElement`. This means that the `selectedTreeElement`
        has to be a resource/script, the `window` object, or one of the non-deletable breakpoints.

        In the case of a non-deletable breakpoint, since they're never removed from their parent
        `WI.TreeOutline`, we just shift the selection to the next selectable `WI.TreeElement`.

        Otherwise, wait for the `WI.TreeOutline.Event.ElementRemoved` event to be fired, and adjust
        the selection then based on whether the new `selectedTreeElement` is one of the "top" items,
        namely the "All Exceptions", "Uncaught Exceptions", and "Assertion Failures" breakpoints.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement.prototype.ondelete):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement.prototype.ondelete):
        Add `return true;` to let the parent `WI.TreeOutline` know that the delete event was handled.
        This prevents the parent `WI.TreeOutline`'s own `ondelete` from being called, which would
        cause a double-delete as there would be a different `selectedTreeElement`.

2019-08-29  Keith Rollin  <krollin@apple.com>

        Remove support for macOS < 10.13 (part 3)
        https://bugs.webkit.org/show_bug.cgi?id=201224
        <rdar://problem/54795934>

        Reviewed by Darin Adler.

        Remove symbols in WebKitTargetConditionals.xcconfig related to macOS
        10.13, including WK_MACOS_1013 and WK_MACOS_BEFORE_1013, and suffixes
        like _MACOS_SINCE_1013.

        Also added some macOS target numbers.

        * Configurations/WebKitTargetConditionals.xcconfig:

2019-08-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Import file pickers sometimes do not import
        https://bugs.webkit.org/show_bug.cgi?id=201290
        <rdar://problem/54826117>

        Reviewed by Devin Rousso.

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.importText):
        (WI.FileUtilities.importJSON):
        Keep the input element alive so it doesn't get garbage collected,
        which makes the file chooser do nothing.

        (WI.FileUtilities.save):
        (WI.FileUtilities.async.readText):
        Place read operations after event handlers are setup in case the
        read operations can happen synchronously and events may not fire.

2019-08-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r249078): JavaScript autocomplete doesn't work when evaluating properties of values
        https://bugs.webkit.org/show_bug.cgi?id=201226

        Reviewed by Joseph Pecoraro.

        r249078 modified `WI.JavaScriptRuntimeCompletionProvider` to use arrays of property names
        instead of objects for completion, but a few code paths were missed.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.evaluated):
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedPropertyNamesFromEvaluate):
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedObjectPropertyNames): Added.
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedArrayPropertyNames):

        * UserInterface/Models/CallFrame.js:
        (WI.CallFrame.prototype.collectScopeChainVariableNames):
        (WI.CallFrame.prototype.collectScopeChainVariableNames.propertiesCollected):

2019-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace uses of added utility `Array.prototype.keySet` with an actual `Set`
        https://bugs.webkit.org/show_bug.cgi?id=201194

        Reviewed by Ross Kirsling.

        They both have basically the same functionality, with one difference being that a `Set` can
        work with arrays that have non-string values.

        * UserInterface/Base/Utilities.js:
        (Array.prototype.keySet): Deleted.
        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        (WI.CodeMirrorCompletionController.prototype._generateJavaScriptCompletions):
        (WI.CodeMirrorCompletionController.prototype._generateJavaScriptCompletions.matchKeywords):
        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):

2019-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: change the styling of the special log "bubble" to match WI.ScopeBar
        https://bugs.webkit.org/show_bug.cgi?id=201152

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ConsoleMessageView.css:
        (.console-user-command.special-user-log > .console-message-body):

2019-08-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: decrease horizontal padding of `WI.ScopeBar` to have more room
        https://bugs.webkit.org/show_bug.cgi?id=201090

        Reviewed by Joseph Pecoraro.

        There's a lot of "wasted" padding space around each item that we could reuse (or "move") for
        other navigation items.

        * UserInterface/Views/FilterBar.css:
        (.filter-bar > .navigation-bar > .item.scope-bar):
        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only):
        * UserInterface/Views/ScopeBar.css:
        (.scope-bar):
        (body[dir=ltr] .scope-bar > li.multiple > select):
        (body[dir=rtl] .scope-bar > li.multiple > select):
        (.scope-bar > li.multiple > .arrows):

        * UserInterface/Views/RadioButtonNavigationItem.js:
        (WI.RadioButtonNavigationItem):
        (WI.RadioButtonNavigationItem.prototype.update): Deleted.
        There's no reason to forcibly set the `min-width` since all instances are just text.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.initialLayout):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header > nav:not(:empty):before): Deleted.
        Remove the unnecessary "Showing: " prefix before the `WI.ScopeBar`.

        * UserInterface/Views/ScopeRadioButtonNavigationItem.js: Removed.
        * UserInterface/Views/ScopeRadioButtonNavigationItem.css: Removed.
        These classes were never used.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: "Copy Rule" menu item does not propagate comments properly
        https://bugs.webkit.org/show_bug.cgi?id=201095

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.commentOut):
        (WI.CSSProperty.prototype.get formattedText):
        Wrap the `text` in `/* ${text} */` if the `WI.CSSProperty` isn't `enabled` (e.g. commented out).

2019-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: create additional command line api functions for other console methods
        https://bugs.webkit.org/show_bug.cgi?id=200971

        Reviewed by Joseph Pecoraro.

        Expose all `console.*` functions in the command line API, since they're all already able to
        be referenced via the `console` object.

        Provide a simpler interface for other injected scripts to modify the command line API.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.prototype.get _commandLineAPIKeys): Added.
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.updateLastPropertyNames):
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.receivedPropertyNames):

2019-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: transparency checkerboard is too bright in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=201067

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Main.css:
        (@media (prefers-color-scheme: dark) :matches(img, canvas).show-grid):
        * UserInterface/Views/ConsoleMessageView.css:
        (.console-message-body > .show-grid):

2019-08-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Console: automatically select the "Evaluations" filter whenever running commands
        https://bugs.webkit.org/show_bug.cgi?id=201060

        Reviewed by Timothy Hatcher.

        If the Console is actively being filtered (e.g. not "All"), it can be confusing to run a
        command, only to not see any results. We should automatically enable the "Evaluations"
        filter in addition to any other existing filters in these cases.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.didAppendConsoleMessageView):
        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem.prototype.set selected):
        (WI.ScopeBarItem.prototype.toggle): Added.

2019-08-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248485): stack overflow when viewing a source map generated from inline content
        https://bugs.webkit.org/show_bug.cgi?id=201042
        <rdar://problem/54509750>

        Reviewed by Antoine Quint.

        In r248485, `WI.ResourceClusterContentView` was changed to `requestContent` whenever the
        given resource finished loading (by listening for `WI.Resource.Event.LoadingDidFinish`).

        Even though retrieving a source map's contents uses `Promise`s, in the case that the content
        was inlined in the "original" source code, the code path would mark the source map as being
        finished (which would fire a `WI.Resource.Event.LoadingDidFinish`) _before_ it could return
        a `Promise`, which would've been cached (`WI.SourceCode.prototype.requestContent`) and
        preventend any reentrancy.

        Wrapping the inline code path in a `Promise.resolve()` gives the `WI.SourceCode` a chance to
        cache the `Promise` before any events are fired.

        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource.prototype.requestContentFromBackend):

2019-08-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: console.dir should expand objects
        https://bugs.webkit.org/show_bug.cgi?id=152039
        <rdar://problem/23816853>

        Reviewed by Joseph Pecoraro.

        Expand objects logged by console.dir but keep them collapsed when logged by console.log.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype.render):

2019-08-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleanup some unused code
        https://bugs.webkit.org/show_bug.cgi?id=201041

        Reviewed by Alex Christensen.

        * UserInterface/Views/CPUUsageCombinedView.css:
        (.cpu-usage-combined-view > .graph > .stacked-area-chart):
        * UserInterface/Views/CPUUsageCombinedView.js:
        (WI.CPUUsageCombinedView):
        * UserInterface/Views/MediaTimelineOverviewGraph.js:
        (WI.MediaTimelineOverviewGraph):

2019-08-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide an engineering option to log protocol traffic as text
        https://bugs.webkit.org/show_bug.cgi?id=200969

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:
        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer.prototype._processEntry):
        (WI.LoggingProtocolTracer):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):

2019-08-21  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: RTL: DOM outline in Elements tab should be LTR
        https://bugs.webkit.org/show_bug.cgi?id=200601

        Reviewed by Timothy Hatcher.

        Make DOM outlines in Console and Elements tab always LTR,
        and unsure that Left and Right arrow keys continue working correctly.

        * UserInterface/Base/Main.js:
        (WI.resolveLayoutDirectionForElement): Added.
        The existing WI.resolvedLayoutDirection function returns the value of the root DOM element.
        The newly added resolveLayoutDirectionForElement function returns the correct value for any element,
        including elements with `dir=ltr` inside of `<body dir=rtl>`.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li:matches(.hovered, .selected) + ol.children.expanded):
        (.tree-outline.dom li:not(.editing)):
        (.tree-outline.dom li.editing):
        (.tree-outline.dom li .pseudo-class-indicator):
        (.tree-outline.dom.single-node li):
        (.tree-outline.dom li.parent):
        (.tree-outline.dom li .html-tag.close):
        (.tree-outline.dom li.parent::before):
        (.tree-outline.dom li.parent.shadow::after):
        Remove RTL logic.

        * UserInterface/Views/DOMTreeOutline.js:
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):
        Make Left and Right arrow keys work correctly for LTR DOM outlines inside of the global RTL.

2019-08-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Page: re-add enable/disable after r248454
        https://bugs.webkit.org/show_bug.cgi?id=200947

        Reviewed by Joseph Pecoraro.

        We shouldn't design the agent system with only Web Inspector in mind. Other clients may want
        to have different functionality, not being told about frames creation/updates/destruction.
        In these cases, we should have graceful error message failures for other agents that rely on
        the Page agent.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):

2019-08-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: increase the filter bar's width when it's focused if a resource type filter is active
        https://bugs.webkit.org/show_bug.cgi?id=200940

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar.prototype._handleFilterChanged):
        (WI.FilterBar.prototype.get indicatingProgress): Deleted.
        (WI.FilterBar.prototype.set indicatingProgress): Deleted.
        (WI.FilterBar.prototype.get indicatingActive): Deleted.
        (WI.FilterBar.prototype.set indicatingActive): Deleted.
        If escape is pressed when the <input> is empty, unfocus (blur) the <input>.
        Drive-by: remove unused/unnecessary functions.

        * UserInterface/Views/FilterBar.css:
        (.filter-bar > input[type="search"]):
        (:matches(.filter-bar, .search-bar) > input[type="search"]): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]:matches(:focus, :not(:placeholder-shown))): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]::-webkit-search-decoration): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]::-webkit-search-results-button): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]::placeholder): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]:matches(:not(:focus), :placeholder-shown)::-webkit-search-cancel-button): Added.
        (:matches(.filter-bar, .search-bar) > .navigation-bar + input[type="search"]): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]:focus): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"] + :empty): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"]:focus ~ *): Added.
        (:matches(.filter-bar, .search-bar) > input[type="search"] + .navigation-bar > .item.scope-bar:last-child): Added.
        (.filter-bar > input[type="search"] + .navigation-bar > .item.scope-bar:last-child): Deleted.
        (.filter-bar > .navigation-bar + input[type="search"]): Deleted.
        (.filter-bar > input[type="search"]::placeholder): Deleted.
        (.filter-bar > input[type="search"]:focus): Deleted.
        (.filter-bar > input[type="search"]::-webkit-search-decoration): Deleted.
        (.filter-bar.active > input[type="search"]::-webkit-search-decoration): Deleted.
        (.filter-bar.indicating-progress > input[type="search"]::-webkit-search-decoration): Deleted.
        (.filter-bar > input[type="search"] + .navigation-bar:empty): Deleted.
        When the <input> is `:focus`, hide the following `WI.NavigationBar` (if it's being used) so
        that there's more room to show the filter text.
        Drive-by: fix background, border, and text color styling when `:focus`.

        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]):
        (.search-bar > input[type="search"]::placeholder): Deleted.
        (.search-bar > input[type="search"]:focus): Deleted.
        (.search-bar > input[type="search"]:not(:placeholder-shown)): Deleted.
        (.search-bar > input[type="search"]:placeholder-shown::-webkit-search-cancel-button): Deleted.
        (@media (prefers-color-scheme: dark)): Deleted.
        (:matches(.search-bar, .filter-bar) > input[type="search"],): Deleted.
        (:matches(.search-bar, .filter-bar) > input[type="search"]::placeholder): Deleted.
        (:matches(.search-bar, .filter-bar) > input[type="search"]:focus): Deleted.
        * UserInterface/Views/SearchSidebarPanel.css:
        (.sidebar > .panel.navigation.search > .search-bar):
        (.sidebar > .panel.navigation.search > .search-bar > input[type="search"]):
        (.sidebar > .panel.navigation.search > .search-bar > .search-settings): Added.
        (.sidebar > .panel.navigation.search > .search-bar > input[type="search"]::-webkit-search-results-button): Deleted.
        * UserInterface/Views/Toolbar.css:
        (.toolbar .search-bar > input[type="search"]::-webkit-textfield-decoration-container): Deleted.
        Move shared styles to FilterBar.css as `WI.FilterBar` are more common.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark) :root):
        Expose some CSS variables in light mode that were previously only defined in dark mode.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._updateURLFilterActiveIndicator): Deleted.
        * UserInterface/Images/FilterFieldActiveGlyph.svg: Removed.

2019-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unnecessary properties on SVGs
        https://bugs.webkit.org/show_bug.cgi?id=200968

        Reviewed by Devin Rousso.

        * UserInterface/Images/EventPause.svg:
        * UserInterface/Images/EventPlay.svg:
        * UserInterface/Images/EventProcessing.svg:
        * UserInterface/Images/EventStop.svg:
        * UserInterface/Images/MediaInstrument.svg:

2019-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Implement `queryHolders` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=200458

        Reviewed by Joseph Pecoraro.

        Call `queryHolders(object)` from the Console to return an array of objects that strongly
        reference the given `object`. This could be very useful for finding JavaScript "leaks".

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:

2019-08-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Address a few Esprima issues preventing pretty printing of resources
        https://bugs.webkit.org/show_bug.cgi?id=200935

        Reviewed by Timothy Hatcher.

        Address a few Esprima issues:

            Issue #1991 - Failure to parse template literal with destructuring assignment expression
            https://github.com/jquery/esprima/issues/1991

            Issue #1920 - Invalid Left Hand Side in for-in
            https://github.com/jquery/esprima/issues/1920

        * UserInterface/External/Esprima/esprima.js:

2019-08-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update CodeMirror to support numeric separators in JavaScript numbers
        https://bugs.webkit.org/show_bug.cgi?id=200942

        Cherry-pick a few CodeMirror changes:
        
            [javascript mode] Support numeric separators
            https://github.com/codemirror/CodeMirror/commit/beab8ed123683416bfec934df73d13401ec086b5#diff-9812850bb71d31e8dd60b476abb2bae8

            [javascript mode] fix tokenizing of underscore properties
            https://github.com/codemirror/CodeMirror/commit/463ea2c34ab442c0cae1d9732305219ca9b04dfe#diff-9812850bb71d31e8dd60b476abb2bae8

        Reviewed by Timothy Hatcher.

        * UserInterface/External/CodeMirror/javascript.js:

2019-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: move the resource type scope bar to be next to the filter
        https://bugs.webkit.org/show_bug.cgi?id=200891

        Reviewed by Joseph Pecoraro.

        It's odd to have UI for controlling the active filters in two different places. Move the
        resource type `WI.ScopeBar` to the filter bar area, and "promote" the resource grouping mode
        items from a context menu to an always visible `WI.ScopeBar` in the space left by the
        resource type `WI.ScopeBar` (switching between grouping modes quickly is a useful workflow).

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.hasCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeScopeBarSelectionChanged): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
        (WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu.addOption): Deleted.
        (WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:not(:hover)): Added.
        (.sidebar > .panel.navigation.sources > .filter-bar .sources-resource-type-scope-bar.default-item-selected:hover): Added.

        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar.prototype.addFilterNavigationItem): Added.
        (WI.FilterBar.prototype.addFilterBarButton):
        * UserInterface/Views/FilterBar.css:
        (.filter-bar > .navigation-bar > .item):
        (.filter-bar > .navigation-bar > .item.button): Added.
        (.filter-bar > .navigation-bar > .item.scope-bar): Added.
        (.filter-bar > input[type="search"] + .navigation-bar > .item.scope-bar:last-child): Added.
        Provide a way to add arbitrary `WI.NavigationItem` to the contained `WI.NavigationBar`.
        Slightly adjust the spacing of the items (depending on their type) in the `WI.NavigationBar`
        so they are all centered.

        * UserInterface/Views/ScopeBar.css:
        (.scope-bar):
        (.scope-bar > li):
        (.scope-bar > li::after):
        (.scope-bar > li:not(.selected):hover): Added.
        (body[dir=ltr] .scope-bar > li.multiple > select):
        (body[dir=rtl] .scope-bar > li.multiple > select):
        (.scope-bar > li:not(.selected):hover::after): Added.
        Introduce CSS variables for `margin`, `padding`, and `opacity` that callers can override to
        customize the appearance of the `WI.ScopeBar`.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Sources: Give Origins their own icon in the Sources sidebar
        https://bugs.webkit.org/show_bug.cgi?id=200683
        <rdar://problem/54269044>

        Reviewed by Devin Rousso.

        * UserInterface/Images/Origin.svg: Added.
        * UserInterface/Main.html:
        New resources.

        * UserInterface/Views/FolderIcon.css:
        (.origin-icon .icon):
        Light and Dark appearances for Origin icons.

        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/OriginTreeElement.js:
        (WI.OriginTreeElement):
        Very much like a folder with different classes.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
        Use OriginTreeElement in a few places.

2019-08-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support for JavaScript BigInt
        https://bugs.webkit.org/show_bug.cgi?id=180731
        <rdar://problem/36298748>

        Reviewed by Devin Rousso.

        * UserInterface/External/CodeMirror/javascript.js:
        (expressionAllowed):
        Cherry-pick BigInt JavaScript mode support from CodeMirror:
        https://github.com/codemirror/CodeMirror/pull/5411

        * UserInterface/Images/TypeBigInt.svg: Added.
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CodeMirrorAdditions.js:
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (.cm-s-default .cm-number.cm-bigint,):
        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (.object-tree-property.bigint > .icon):
        * UserInterface/Views/HeapSnapshotInstancesContentView.css:
        (.heap-snapshot .icon.bigint):
        Style BigInt similiar but different from numbers but with
        a [B] icon instead of [N].

        * UserInterface/Views/FormattedValue.css:
        (.formatted-bigint):
        * UserInterface/Views/FormattedValue.js:
        (WI.FormattedValue.hasSimpleDisplay):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression.populate):
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression):
        Simple value formatting for the new type.

        * UserInterface/Models/TypeSet.js:
        (WI.TypeSet):
        (WI.TypeSet.prototype.get primitiveTypeNames):
        * UserInterface/Views/TypeTokenView.css:
        (.type-token-bigint):
        * UserInterface/Views/TypeTokenView.js:
        (WI.TypeTokenView.prototype._displayTypeName):
        (WI.TypeTokenView):
        New type handling for the Type profiler.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject):
        (WI.RemoteObject.createBigIntFromDescriptionString):
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WI.HeapSnapshotClusterContentView.iconStyleClassNameForClassName):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WI.HeapSnapshotInstanceDataGridNode.prototype._populatePreview):
        BigInt values are not tied to a GlobalObject, so do some special casing
        in the Heap output (like Strings) so we get a preview.

2019-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Use URL constructor to better handle all kinds of URLs
        https://bugs.webkit.org/show_bug.cgi?id=165155

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/URLUtilities.js:
        (parseURL):

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: add a global breakpoint for pausing in the next microtask
        https://bugs.webkit.org/show_bug.cgi?id=200652

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype.get allMicrotasksBreakpoint): ADded.
        (WI.DebuggerManager.prototype.isBreakpointSpecial):
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):
        (WI.DebuggerManager.prototype._breakpointDisabledStateDidChange):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.saveStateToCookie):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.DebuggerSidebarPanel.prototype._populateCreateBreakpointContextMenu):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._insertDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateBreakpointContextMenu):

        * UserInterface/Views/BreakpointTreeElement.css:
        (.breakpoint-microtask-icon .icon): Added.
        * UserInterface/Images/Microtask.svg: Added.

        * UserInterface/Base/Setting.js:
        * Localizations/en.lproj/localizedStrings.js:

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248682): Elements: Computed: go-to arrows in the Variables section are misaligned
        https://bugs.webkit.org/show_bug.cgi?id=200841

        Reviewed by Joseph Pecoraro.

        The Variables section uses a different CSS class since it's identifier changed in r248682.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style > .content > .computed .details-section:matches(.computed-style-properties, .computed-style-variables)): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .details-section:matches(.computed-style-properties, .computed-style-variables) .property): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .details-section:matches(.computed-style-properties, .computed-style-variables) .property .go-to-arrow): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .details-section:matches(.computed-style-properties, .computed-style-variables) .property:not(:hover) .go-to-arrow): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties): Deleted.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties .property .go-to-arrow): Deleted.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties .property:hover .go-to-arrow): Deleted.

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: have more aggressive checks for dataURLs provided to `console.screenshot`
        https://bugs.webkit.org/show_bug.cgi?id=200747

        Reviewed by Joseph Pecoraro.

        Always send any /data:*+/ strings to the frontend and have it render there. If that doesn't
        work, have the frontend "spoof" an error message look and feel.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendMessageTextAndArguments):

        * Localizations/en.lproj/localizedStrings.js:

2019-08-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: RTL: Network headers values should be preserved
        https://bugs.webkit.org/show_bug.cgi?id=200873

        Reviewed by Joseph Pecoraro.

        Replace spans with bdi elements, which have `unicode-bidi: isolate` User Agent style.
        This works well with both LTR and RTL values.

        * UserInterface/Views/ResourceDetailsSection.js:
        (WI.ResourceDetailsSection.prototype.appendKeyValuePair):
        Drive-by: remove unnecessary if/else statement and use `append` instead.

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Debugger: pressing delete when the all/uncaught exceptions breakpoint is selected should select the next tree element
        https://bugs.webkit.org/show_bug.cgi?id=200876

        Reviewed by Joseph Pecoraro.

        Removing the `return true;` from the various `WI.TreeElement` breakpoint classes allows the
        owner `WI.TreeOutline` to also handle the delete event. In the Debugger/Sources navigation
        sidebar, the owner `WI.TreeOutline` checks to see if the currently selected `WI.TreeElement`
        is one of the "top" items ("All Exceptions", "Uncaught Exceptions", "Assertion Failures")
        and if so, select the next tree element (if able) instead of the previous one.

        This is a preferred experience because the "top" items can only be disabled, not deleted, so
        trying to delete them wouldn't actually change the selection. They should only ever be
        selected if there's nothing else that can be selected.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement):
        (WI.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement.checkIfSelectionAdjustmentNeeded): Added.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.checkIfSelectionAdjustmentNeeded): Added.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement.prototype.ondelete):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement.prototype.ondelete):

2019-08-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: don't show the All Requests breakpoint by default
        https://bugs.webkit.org/show_bug.cgi?id=200892

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Setting.js:

2019-08-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: gear icons moves to 2nd line when sidebar is narrow
        https://bugs.webkit.org/show_bug.cgi?id=198017

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar):
        (WI.NavigationBar.prototype.layout):
        (WI.NavigationBar.prototype.layout.forceItemHidden): Added.
        (WI.NavigationBar.prototype.layout.isDivider): Added.
        (WI.NavigationBar.prototype.layout.calculateVisibleItemWidth): Added.
        (WI.NavigationBar.prototype.needsLayout): Deleted.
        (WI.NavigationBar.prototype.sizeDidChange): Deleted.
        (WI.NavigationBar.prototype._updateContent): Deleted.
        (WI.NavigationBar.prototype._updateContent.forceItemHidden): Deleted.
        (WI.NavigationBar.prototype._updateContent.isDivider): Deleted.
        (WI.NavigationBar.prototype._updateContent.calculateVisibleItemWidth): Deleted.
        Reset the cached `_minimumWidth` whenever updating in `layout()`.

        * UserInterface/Views/NavigationItem.js:
        (WI.NavigationItem.prototype.get width):
        (WI.NavigationItem.prototype.update): Added.
        (WI.NavigationItem.prototype.updateLayout): Deleted.
        (WI.NavigationItem.prototype.get totalMargin): Added.
        * UserInterface/Views/ButtonNavigationItem.js:
        (WI.ButtonNavigationItem.prototype.get totalMargin): Added.
        * UserInterface/Views/ButtonNavigationItem.css:
        * UserInterface/Views/TextNavigationItem.js:
        (WI.TextNavigationItem.prototype.get totalMargin): Added.
        * UserInterface/Views/TextNavigationItem.css:
        `Element.prototype.getBoundingClientRect` doesn't include the `margin` box of an element.
        Rather than create a CSS variable and parse a computed style, save the total `margin` amount
        to a getter that can then be added when computing the minimum width.

        * UserInterface/Views/Sidebar.js:
        (WI.Sidebar):
        (WI.Sidebar.prototype._recalculateWidth):
        * UserInterface/Views/FlexibleSpaceNavigationItem.js:
        (WI.FlexibleSpaceNavigationItem.prototype.update): Added.
        (WI.FlexibleSpaceNavigationItem.prototype.updateLayout): Deleted.
        * UserInterface/Views/GroupNavigationItem.js:
        (WI.GroupNavigationItem.prototype.update): Added.
        (WI.GroupNavigationItem.prototype.updateLayout): Deleted.
        * UserInterface/Views/HierarchicalPathNavigationItem.js:
        (WI.HierarchicalPathNavigationItem.prototype.update): Added.
        (WI.HierarchicalPathNavigationItem.prototype.updateLayout): Deleted.
        * UserInterface/Views/RadioButtonNavigationItem.js:
        (WI.RadioButtonNavigationItem.prototype.update): Added.
        (WI.RadioButtonNavigationItem.prototype.updateLayout): Deleted.
        Rename `updateLayout` to `update` so it doesn't clash with `WI.View` naming.

        * UserInterface/Views/SidebarNavigationBar.js: Removed.
        * UserInterface/Main.html:
        * UserInterface/Views/NavigationBar.css:
        (.navigation-bar .item): Added.
        (.navigation-bar .item, .sidebar-navigation-bar > .holder .item): Deleted.
        (.sidebar-navigation-bar): Deleted.
        (.sidebar-navigation-bar .holder): Deleted.
        Remove unnecessary class.

2019-08-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Syntax Highlight more CSS media queries
        https://bugs.webkit.org/show_bug.cgi?id=200824

        Reviewed by Devin Rousso.

        * UserInterface/Views/CodeMirrorAdditions.js:
        Special case CSS "error" tokenized values from CodeMirror inside @ rules
        to treat some as properties.

2019-08-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JavaScript formatting of single statement arrow function can be poor
        https://bugs.webkit.org/show_bug.cgi?id=200800

        Reviewed by Ross Kirsling.

        * UserInterface/Workers/Formatter/EsprimaFormatter.js:
        (EsprimaFormatter.prototype._isLikelyToHaveNewline):
        (EsprimaFormatter.prototype._handleTokenAtNode):
        Better heuristic for single statement arrow functions.

2019-08-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: there should be an opposite icon for Eye.svg when we want to hide things instead of showing them
        https://bugs.webkit.org/show_bug.cgi?id=200736

        Reviewed by Joseph Pecoraro.

        We currently use Eye.svg for disabling, or turning "off", Shader Programs, but it's not very
        clear that clicking on the eye (which looks like "show me this", not "hide this") will do
        that. Furthermore, a greyed out version also isn't clear that the Shader Program is disabled,
        instead making the user think that the disable toggle is somehow "not working".

        The new hide icon is clearer, as it uses a strikethrough, rather than some shading/greying.

        * UserInterface/Views/ShaderProgramTreeElement.css:
        (.item.shader-program .status > img):
        (.item.shader-program.disabled:matches:hover .status > img): Added.
        (.item.shader-program.disabled > :not(.status)): Added.
        (.item.shader-program.disabled > *): Deleted.
        * UserInterface/Images/Hide.svg: Added.

        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (.object-tree-property .getter):
        * UserInterface/Images/Show.svg: Renamed from UserInterface/Images/Eye.svg.

2019-08-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename "Invalid Characters" to "Invisible Characters" for clarity
        https://bugs.webkit.org/show_bug.cgi?id=200808

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):

        * UserInterface/Base/Main.js:
        (setInvisibleCharacterClassName): Added.
        (setInvalidCharacterClassName): Deleted.
        * UserInterface/Views/CodeMirrorOverrides.css:
        (.show-invisible-characters .CodeMirror .cm-invalidchar): Added.
        (.show-invalid-characters .CodeMirror .cm-invalidchar): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: RTL: Console should be always LTR
        https://bugs.webkit.org/show_bug.cgi?id=200482

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ConsoleCommandView.js:
        (WI.ConsoleCommandView.prototype.render):
        * UserInterface/Views/ConsoleMessageView.css:
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype.render):
        Make console messages always LTR.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._keyDown):
        Since the console is always LTR now, we can remove code that flips left and right
        arrow keys.

        * UserInterface/Views/ObjectTreeView.css:
        JS objects should always be LTR.

        * UserInterface/Views/TreeElement.js:
        Look at "direction" CSS property because Element's text direction can be LTR even
        when `WI.resolvedLayoutDirection()` is RTL.

        (WI.TreeElement.prototype.isEventWithinDisclosureTriangle):
        * UserInterface/Views/TreeOutline.css:
        (body[dir=ltr] .tree-outline .item :matches(.disclosure-button, .icon),):
        (body[dir=rtl] [dir=ltr] .tree-outline .item .disclosure-button):

2019-08-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: setting a breakpoint on a specific listener should enable the event listener
        https://bugs.webkit.org/show_bug.cgi?id=200551

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup):

2019-08-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update Esprima to support modern JavaScript language features
        https://bugs.webkit.org/show_bug.cgi?id=200796

        Reviewed by Ross Kirsling.

        Use a fork of Esprima to support modern JavaScript language features
        while going through the process to upstream support:

          ES2018 Feature: Async Iteration (for-await-of)
          https://github.com/jquery/esprima/issues/1990

          ES2019 Feature: Numeric Separator
          https://github.com/jquery/esprima/issues/1989

          ES2019 Feature: Optional catch binding
          https://github.com/jquery/esprima/issues/1953

          ES2020 Feature: BigInt
          https://github.com/jquery/esprima/issues/1988

        ESTree compatible AST changes are summarized as:

          - CatchClause `param` property is now nullable
          - ForOfStatement now has a boolean `await` property
          - Literal can be a `"bigint"` type (works if the environment has BigInt or not)

        The pretty printer only needed to have additional handling for `for-await-of`.

        * UserInterface/External/Esprima/esprima.js:
        New version. Typescript output expects a modern JavaScript environment
        instead of just ES6.

        * Tools/Formatting/index.html:
        Update the formatting tool for easier use in case of errors.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):

        * UserInterface/Test/TestHarness.js:
        (TestHarness.prototype.passOrFail):
        Convenience for pass/fail with the same message based on a condition.

        * UserInterface/Workers/Formatter/EsprimaFormatter.js:
        (EsprimaFormatter.prototype._handleTokenAtNode):
        Ensure a space after `await` in `for await` syntax.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r244268): "Show Scope Chain on pause" setting has no effect
        https://bugs.webkit.org/show_bug.cgi?id=200797

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView.prototype.showDetailsSidebarPanels):
        * UserInterface/Views/SourcesTabContentView.js:
        (WI.SourcesTabContentView.prototype.showDetailsSidebarPanels):
        When the sidebar panel isn't visible `parentSidebar` is `null`. Use `WI.DetailsSidebar` instead.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'this._resource.initiatorSourceCodeLocation')
        https://bugs.webkit.org/show_bug.cgi?id=200798

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype.set resource):
        (WI.ResourceDetailsSidebarPanel.prototype.layout):
        Cancel the `Throttler` whenever the `_resource` is updated, as otherwise the `Throttler` may
        fire later on with an unset `_resource`.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: provide a way to create an arbitrary Inspector Style Sheet
        https://bugs.webkit.org/show_bug.cgi?id=200425

        Reviewed by Joseph Pecoraro.

        Right now, the only way to create an Inspector Style Sheet is by creating a new rule in the
        Styles sidebar of the Elements Tab. This is unnecessarily restrictive, especially for those
        who don't use the Elements tab.

        Add a + button after the filter bar in the Navigation sidebar. Clicking on the + button will
        show a menu with the following (more likely to be added later):
         - Inspector Style Sheet
         - Frames (if there are subframes)
           - (name of subframe)
              - Inspector Style Sheet

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._filterByResourcesWithIssues): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addResource):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateResourceContextMenu): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
        (WI.SourcesNavigationSidebarPanel.prototype._handleFrameWasAdded): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleMainFrameDidChange): Deleted.
        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.createFoldersAsNeededForSubpath):
        Drive-by: sort `WI.ResourceTreeElement`s alongside `WI.FolderTreeElement`s for easier readability.

        * UserInterface/Views/FrameTreeElement.js:
        (WI.FrameTreeElement.prototype.onpopulate):
        Add all `inspectorStyleSheetsForFrame` instead of just the preferred one so that they all
        are visible/selectable for editing.

        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar):
        * UserInterface/Views/FilterBar.css:
        (.filter-bar > .navigation-bar > .item):
        (.filter-bar > input[type="search"]):
        (.filter-bar > .navigation-bar + input[type="search"]): Added.
        (.filter-bar > input[type="search"] + .navigation-bar:empty): Added.
        Move the position of the filter bar buttons to be after the filter bar itself, so that other
        parents can add action items before the filter bar to keep a consistent positioning.
         - to the left of the filter bar are action items (e.g. "+")
         - the filter bar itself
         - to the right of the filter bar are filter buttons (e.g. "filter by resoure with issue")

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.get frames):
        Drive-by: use `Array.from`, instead of `[...map.values()]`.

        * UserInterface/Models/Frame.js:
        (WI.Frame.prototype.get url):
        (WI.Frame.prototype.get urlComponents): Added.

        * UserInterface/Base/URLUtilities.js.js:
        (parseURL):
        Calculate and include the `origin` string with the output.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype.preferredInspectorStyleSheetForFrame):
        Remove `doNotCreateIfMissing` now that the last caller has been removed.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: CodeMirror still inserts a tab even when "Prefer indent using" is set to "Spaces"
        https://bugs.webkit.org/show_bug.cgi?id=200770

        Reviewed by Ross Kirsling.

        * UserInterface/Views/CodeMirrorAdditions.js:
        Remap the `insertTab` command to use `insertSoftTab` when "Prefer indent using" is set to
        "Spaces" so that CodeMirror inserts the number of spaces that would match a tab ("\t") being
        inserted at the same spot.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: the "No Filter Results" message sits on top of all of the content, preventing any interaction
        https://bugs.webkit.org/show_bug.cgi?id=200755

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .resources-container): Added.
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > :matches(.call-stack-container, .breakpoints-container, .resources-container)): Added.
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > .call-stack-container):
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > .breakpoints-container):
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > .resources-container): Added.
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > :matches(.call-stack-container, .breakpoints-container, .resources)): Deleted.
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > .resources): Deleted.
        Wrap the resources `WI.TreeOutline` in a <div> so the empty message placeholder that gets
        inserted after it can be constrained to the size of the `WI.TreeOutline`.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Layers: background of 3D area doesn't update when transitioning to/from Dark mode
        https://bugs.webkit.org/show_bug.cgi?id=200775

        Reviewed by Ross Kirsling.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype.initialLayout):
        Add a `matchMedia` listener for `(prefers-color-scheme: dark)` and update the clear color
        of the WebGL renderer whenever it changes.

        * UserInterface/Views/ErrorObjectView.css:
        (@media (prefers-color-scheme: dark)): Added.
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (@media (prefers-color-scheme: dark)): Added.
        (@media (prefers-dark-interface)): Deleted.
        Drive-by: replace older `prefers-dark-interface` with modern `prefers-color-scheme: dark`.

2019-08-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update Esprima to trunk (minor fixes)
        https://bugs.webkit.org/show_bug.cgi?id=200691
        <rdar://problem/54276170>

        Rubber-stamped by Devin Rousso.

        * UserInterface/External/Esprima/esprima.js:
        Updated to jquery/esprima@5e55171feb5adbc2b1d28ef4b2628d5ea9af0848.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration.gatherIdentifiers):
        (WI.ScriptSyntaxTree.prototype._gatherIdentifiersInDeclaration):
        (WI.ScriptSyntaxTree.prototype._recurse):
        (WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
        (WI.ScriptSyntaxTree):
        * UserInterface/Workers/Formatter/ESTreeWalker.js:
        (ESTreeWalker.prototype._walkChildren):
        (ESTreeWalker):
        * UserInterface/Workers/Formatter/EsprimaFormatter.js:
        (EsprimaFormatter.prototype._handleTokenAtNode):
        - SpreadProperty => SpreadElement.
        - RestProperty => RestElement.

2019-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: Content request failed.
        https://bugs.webkit.org/show_bug.cgi?id=200704
        <rdar://problem/54279372>

        Reviewed by Brian Burg.

        * UserInterface/Models/WebSocketResource.js:
        (WI.WebSocketResource.prototype.requestContentFromBackend): Added.
        Add an "assert not reached", as WebSocket resources don't really have "content", instead
        having a list of send/receive frames.

        * UserInterface/Views/ResourceClusterContentView.js:
        (WI.ResourceClusterContentView.prototype._tryEnableCustomResponseContentView):
        Don't attempt to request the content of any `WI.WebSocketResource` for the reason above.

2019-08-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Computed: move the Box Model section to the top
        https://bugs.webkit.org/show_bug.cgi?id=200555

        Reviewed by Joseph Pecoraro.

        For nodes that use a lot of different CSS properties, having the Box Model section all the
        way at the bottom isn't as useful for taking a quick glance at the node's box model data.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):

2019-08-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Computed: the collapsed state of the Variables section should be separate from the collapsed state of the Properties section
        https://bugs.webkit.org/show_bug.cgi?id=200725

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        Use a different identifier string for the Variable section so it preserves its own collapsed
        collapsed state independent of the Properties section.

2019-08-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Computed: the background of the Properties/Variables sections should match the Box Model section when expanded
        https://bugs.webkit.org/show_bug.cgi?id=200724

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style > .content > .computed > .details-section:not(.collapsed) > :matches(.header, .content)): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties .property .go-to-arrow): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .computed-style-properties .property:hover .go-to-arrow): Added.
        (.sidebar > .panel.details.css-style > .content > .computed .details-section:matches(.computed-style-properties, .computed-style-variables) > .content): Added.
        (.details-section:matches(.computed-style-properties, .computed-style-box-model):not(.collapsed) > :matches(.header, .content)): Deleted.
        (.computed-style-properties): Deleted.
        (.computed-style-properties .property .go-to-arrow): Deleted.
        (.computed-style-properties .property:hover .go-to-arrow): Deleted.
        (.details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)): Deleted.
        (.details-section.computed-style-properties > .content): Deleted.
        (@media (prefers-color-scheme: dark)): Deleted.
        Use more specific selectors to match overall Web Inspector style.

        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item.expanded):
        Darken the background of any expanded computed property in light mode.

2019-08-13  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: content.isJSON is not a function selecting image resource
        https://bugs.webkit.org/show_bug.cgi?id=200680

        Reviewed by Devin Rousso.

        * UserInterface/Views/ResourceClusterContentView.js:
        (WI.ResourceClusterContentView.prototype._canUseJSONContentViewForContent):
        Protect against non-string data, such as Blob response content.

2019-08-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: show @supports CSS groupings
        https://bugs.webkit.org/show_bug.cgi?id=200419
        <rdar://problem/53971948>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/CSSGrouping.js: Renamed from Source/WebInspectorUI/UserInterface/Models/CSSMedia.js.
        (WI.CSSGrouping):
        (WI.CSSGrouping.prototype.get type):
        (WI.CSSGrouping.prototype.get text):
        (WI.CSSGrouping.prototype.get sourceCodeLocation):
        (WI.CSSGrouping.prototype.get isMedia): Added.
        (WI.CSSGrouping.prototype.get isSupports): Added.
        (WI.CSSGrouping.prototype.get prefix): Added.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.get groupings): Added.
        (WI.CSSStyleDeclaration.prototype.generateCSSRuleString):
        (WI.CSSStyleDeclaration.prototype.get mediaList): Deleted.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule):
        (WI.CSSRule.prototype.get groupings): Added.
        (WI.CSSRule.prototype.update):
        (WI.CSSRule.prototype._selectorResolved):
        (WI.CSSRule.prototype.get mediaList): Deleted.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseRulePayload):
        (WI.DOMNodeStyles.prototype.rulesForSelector): Deleted.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleEditorFilterApplied):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._createMediaHeader): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration :matches(.header, .header-groupings)): Added.
        (.spreadsheet-css-declaration :matches(.header, .header-groupings):first-child): Added.
        (.spreadsheet-css-declaration .header-groupings > .grouping): Added.
        (.spreadsheet-css-declaration :matches(.header, .header-media)): Deleted.
        (.spreadsheet-css-declaration :matches(.header, .header-media):first-child): Deleted.
        (.spreadsheet-css-declaration .media-label): Deleted.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.protocolGroupingTypeToEnum): Added.
        (WI.CSSManager.protocolMediaSourceToEnum): Deleted.

        * UserInterface/Main.html:
        * UserInterface/Test.html:

2019-08-12  Devin Rousso  <drousso@apple.com>

        REGRESSION(r248391): Web Inspector: changing Layout Direction Debug setting no longer adds dir="ltr" to body element
        https://bugs.webkit.org/show_bug.cgi?id=200564

        Reviewed by Joseph Pecoraro.

        `WI.resolvedLayoutDirection` was called before `WI.runBootstrapOperations`, which is what
        instantiates `WI.showDebugUISetting`. Without it, `WI.resolvedLayoutDirection` will ignore
        the value of `WI.settings.debugLayoutDirection` and instead use the system.

        Moving the instantiation of `WI.showDebugUISetting` outside `WI.runBootstrapOperations`
        allows the setting to be created when the Bootstrap.js script is loaded, rather than after
        the `DOMContentLoaded` event is fired. This means that it's guaranteed to exist before any
        interface/view code runs.

        * UserInterface/Debug/Bootstrap.js:
        (WI.runBootstrapOperations):

2019-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove WI.DeprecatedRemoteObjectProperty
        https://bugs.webkit.org/show_bug.cgi?id=200549

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.deprecatedGetOwnProperties): Deleted.
        (WI.RemoteObject.prototype.deprecatedGetAllProperties): Deleted.
        (WI.RemoteObject.prototype.deprecatedGetDisplayableProperties): Deleted.
        (WI.RemoteObject.prototype._deprecatedGetProperties): Deleted.
        (WI.RemoteObject.prototype._deprecatedGetPropertiesResolver): Deleted.
        (WI.DeprecatedRemoteObjectProperty): Deleted.
        (WI.DeprecatedRemoteObjectProperty.prototype.fromPrimitiveValue): Deleted.

        * UserInterface/Models/CallFrame.js:
        (WI.CallFrame.prototype.collectScopeChainVariableNames):

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshProperties):

2019-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248201): DOMDebugger: unable to add event breakpoint when All Events breakpoint is enabled
        https://bugs.webkit.org/show_bug.cgi?id=200561

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):

2019-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: DOMDebugger: breakpoints are forcibly enabled when resolving DOM breakpoints for newly added nodes
        https://bugs.webkit.org/show_bug.cgi?id=200639

        Reviewed by Joseph Pecoraro.

        Since DOM breakpoints revolve around a given DOM node, we attempt to restore DOM breakpoints
        whenever new nodes are added by matching them to the path of the DOM breakpoint. When doing
        so, we should be in a "temporarily restoring breakpoints" mode so that we don't forcibly
        enable all breakpoints.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype._speculativelyResolveDOMBreakpointsForURL):
        (WI.DOMDebuggerManager.prototype._nodeInserted):

2019-08-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Styles: add space between media query and style icon
        https://bugs.webkit.org/show_bug.cgi?id=200623

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .header:not(:first-child), .spreadsheet-css-declaration .header:not(.editing-selector) .selector, .spreadsheet-css-declaration.has-icon .header.editing-selector .selector): Added.
        (.spreadsheet-css-declaration .header.editing-selector .selector): Deleted.
        Ensure the selector field doesn't shift vertically when entering/exiting editing mode.

2019-08-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Address some ESLint warnings
        https://bugs.webkit.org/show_bug.cgi?id=200598

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Controllers/TimelineManager.js:
        * UserInterface/Models/DOMNodeStyles.js:
        * UserInterface/Models/LayoutTimelineRecord.js:
        * UserInterface/Models/ServerTimingEntry.js:
        * UserInterface/Models/TimelineRecording.js:
        * UserInterface/Protocol/RemoteObject.js:
        * UserInterface/Test/FrontendTestHarness.js:
        * UserInterface/Test/Test.js:
        * UserInterface/Views/CPUTimelineView.js:
        * UserInterface/Views/CPUUsageCombinedView.js:
        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        * UserInterface/Views/DOMTreeContentView.js:
        * UserInterface/Views/DOMTreeElement.js:
        * UserInterface/Views/DebuggerSidebarPanel.js:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/ResourceTimingBreakdownView.js:
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        * UserInterface/Views/TreeOutline.js:

2019-08-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better organize manager / observer API groups
        https://bugs.webkit.org/show_bug.cgi?id=200594

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.globalObjectCleared):
        (WI.DebuggerManager.prototype.reset): Deleted.
        Renamed.

        * UserInterface/Protocol/DebuggerObserver.js:
        (WI.DebuggerObserver.prototype.globalObjectCleared):

        * UserInterface/Controllers/CSSManager.js:
        * UserInterface/Controllers/CanvasManager.js:
        * UserInterface/Controllers/ConsoleManager.js:
        * UserInterface/Controllers/DOMManager.js:
        * UserInterface/Controllers/DOMStorageManager.js:
        * UserInterface/Controllers/LayerTreeManager.js:
        * UserInterface/Controllers/NetworkManager.js:
        * UserInterface/Controllers/TargetManager.js:
        * UserInterface/Controllers/TimelineManager.js:
        * UserInterface/Controllers/WorkerManager.js:

2019-08-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248454): WK1 inspector frontend client doesn't queue messages to the frontend before it's loaded
        https://bugs.webkit.org/show_bug.cgi?id=200587

        Reviewed by Joseph Pecoraro.

        WK1 inspector sends messages to the frontend using `WebCore::InspectorClient::doDispatchMessageOnFrontendPage`,
        which does not do any sort of queueing to wait until the frontend is loaded (`InspectorFrontendHost.loaded()`).

        Now that we are sending messages immediately, we should always queue.

        * UserInterface/Test/TestStub.js:
        (InspectorFrontendAPI.dispatch): Added.

        * UserInterface/Models/Frame.js:
        (WI.Frame.prototype.markDOMContentReadyEvent):
        (WI.Frame.prototype.markLoadEvent):

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.pageDOMContentLoadedEventFired):
        (WI.TimelineManager.prototype.pageLoadEventFired):

2019-08-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Node details sidebar sections have unclear delineation in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=200603
        <rdar://problem/54146925>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DetailsSection.css:
        (@media (prefers-color-scheme: dark)):
        (.details-section .details-section,):
        Give a details section header a different color than a normal sidebar header.

2019-08-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r248480): Sources: the Pause Reason section takes the entire vertical space when there are few breakpoints/resources
        https://bugs.webkit.org/show_bug.cgi?id=200597

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (@media (min-height: 650px) .sidebar > .panel.navigation.sources > .content > .pause-reason-container): Deleted.
        Don't `flex-grow` or `flex-shrink` the Pause Reason section so it always displays its full
        content. The rest of the sections can grow/shrink as needed.

2019-08-09  Devin Rousso  <drousso@apple.com>

        REGRESSION (Safari 6): Web Inspector: JSON may not be pretty printed if served as text/html
        https://bugs.webkit.org/show_bug.cgi?id=122898
        <rdar://problem/15241419>

        Reviewed by Joseph Pecoraro.

        Check the request/response data to see if it's JSON parsable. If so, allow the user to elect
        to view the request/response as a JSON preview instead of raw (or pretty printed) text.

        Prefer the JSON view wherever possible.

        * UserInterface/Views/ResourceClusterContentView.js:
        (WI.ResourceClusterContentView):
        (WI.ResourceClusterContentView.prototype.get requestContentView):
        (WI.ResourceClusterContentView.prototype.get customRequestContentView): Added.
        (WI.ResourceClusterContentView.prototype.get customResponseContentView):
        (WI.ResourceClusterContentView.prototype.get selectionPathComponents):
        (WI.ResourceClusterContentView.prototype.showRequest):
        (WI.ResourceClusterContentView.prototype._canShowCustomRequestContentView): Added.
        (WI.ResourceClusterContentView.prototype._canShowCustomResponseContentView):
        (WI.ResourceClusterContentView.prototype._contentViewForResourceType):
        (WI.ResourceClusterContentView.prototype._pathComponentForContentView):
        (WI.ResourceClusterContentView.prototype._identifierForContentView):
        (WI.ResourceClusterContentView.prototype._showContentViewForIdentifier):
        (WI.ResourceClusterContentView.prototype._canUseJSONContentViewForContent): Added.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomRequestContentView): Added.
        (WI.ResourceClusterContentView.prototype._tryEnableCustomResponseContentView):
        (WI.ResourceClusterContentView.prototype.saveToCookie): Deleted.
        (WI.ResourceClusterContentView.prototype._customContentViewConstructorForResource): Deleted.
        Since the current view is already saved in a `WI.Setting`, there's no need to save that
        state to a cookie, as it'll be restored elsewhere.

        * UserInterface/Base/Main.js:
        (WI.showResourceRequest):

        * UserInterface/Main.html:
        * UserInterface/Views/JSONContentView.js: Added.
        (WI.JSONContentView):
        (WI.JSONContentView.prototype.initialLayout):
        (WI.JSONContentView.prototype.attached):
        (WI.JSONContentView.prototype.closed):
        * UserInterface/Views/JSONContentView.css: Added.
        (.content-view.json):
        * Source/WebInspectorUI/UserInterface/Views/JSONResourceContentView.js: Deleted.
        * Source/WebInspectorUI/UserInterface/Views/JSONResourceContentView.css: Deleted.
        Create a more generic content view that shows a preview for the given JSON parsable string.

        * UserInterface/Base/Utilities.js:
        (String.prototype.isJSON): Added.
        * UserInterface/Views/WebSocketDataGridNode.js:
        (WI.WebSocketDataGridNode.prototype.appendContextMenuItems):
        Utility function for checking if a string is JSON parsable.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: increase the vertical space allocated to the call stack when paused
        https://bugs.webkit.org/show_bug.cgi?id=200236

        Reviewed by Joseph Pecoraro.

        Rather than uniformly constrict the height of the Call Stack and Breakpoints sections, they
        should "flex" based on their importance, which can likely be derived from the current state.
        This way, it's possible to see information from each section at the same time, but still
        have enough space in each section to be able to do something useful.

        When paused, the most useful data is the call stack, so give the Call Stack section the most
        vertical space (the Pause Reason is also important, but it usually needs very little space).

        When not paused, it's likely that the user cares more about the resources with breakpoints
        than those without, so favor the Breakpoints section.

        Each section will only expand to fit it's maximum content height.

        If the inspector window becomes too short, remove the "flex" entirely and have all the
        content be part of a single scroll area instead.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.createContentTreeOutline):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerPaused):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerResumed):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCallStackElementAddedOrRemoved): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container)): Added.
        (.sidebar > .panel.navigation.sources > .content .details-section): Added.
        (.sidebar > .panel.navigation.sources > .content .details-section.collapsed > .header > .options, .sidebar > .panel.navigation.sources > .content .details-section:not(.collapsed) > .content, .sidebar > .panel.navigation.sources > .content .details-section:not(.collapsed) > .content > .group): Added.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container .create-breakpoint): Added.
        (.sidebar > .panel.navigation.sources > .content > .navigation-bar): Added.
        (@media (min-height: 650px)): Added.
        (.sidebar > .panel.navigation.sources > .content > .pause-reason-container): Added.
        (.sidebar > .panel.navigation.sources > .content > :matches(.call-stack-container, .breakpoints-container, .resources)): Added.
        (.sidebar > .panel.navigation.sources > .content > .call-stack-container): Added.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container): Added.
        (.sidebar > .panel.navigation.sources > .content > .resources): Added.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container .tree-outline .item.event-target-window .icon): Added.
        (.sidebar > .panel.navigation.sources > .content > .details-section): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.paused-reason, .breakpoints).collapsed > .header > .options,): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.collapsed > .content): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints > .header > .options .create-breakpoint): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.pause-reason, .call-stack, .breakpoints) > .content,): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints) > .content): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints):not(.collapsed) > .content): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.call-stack): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints .create-breakpoint): Deleted.
        (@media (min-height: 600px)): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .pause-reason): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints):not(.collapsed) > .content,): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints .tree-outline .item.event-target-window .icon): Deleted.
        Wrap the Pause Reason, Call Stack, and Breakpoints `WI.DetailsSection`s in a container
        element so that the styling of the sticky header doesn't get affected by the clamping of the
        container's height.

        * UserInterface/Views/DetailsSection.css:
        (.details-section):
        (.details-section > .header):
        Create CSS variables for styles that will be overridden by the Sources navigation sidebar.

2019-08-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Page: don't allow the domain to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=200109

        Reviewed by Brian Burg.

        The `PageAgent` is relied on by many of the other agents, so much so that it doesn't make
        sense to support the ability to "disable" (as well as "enable") the agent.

        When the first frontend connects, we should treat the `PageAgent` as active and available.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):

        * Test/Test.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.contentLoaded):
        (WI.targetsAvailable): Added.
        (WI.whenTargetsAvailable): Added.
        * Test/TestStub.js:
        Ensure that the backend always gets notified via `InspectorFrontendHost.loaded` so that
        messages being sent to the frontend are batched.

2019-08-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename `queryObjects` to `queryInstances` for clarity
        https://bugs.webkit.org/show_bug.cgi?id=200520

        Reviewed by Brian Burg.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:

2019-08-07  Devin Rousso  <drousso@apple.com>

        Fix construction of `WI.EventBreakpoint` after r248201

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.setBreakpointForEventListener):

2019-08-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: add an Engineering pane to expose useful settings for other WebKit engineers
        https://bugs.webkit.org/show_bug.cgi?id=200492

        Reviewed by Joseph Pecoraro.

        Other WebKit engineers might find being able to see internal objects or pause in internal
        scripts useful, so we should allow them to do so without having to enable Web Inspector's
        debug "mode".

        A new "Engineering" pane is added to the Settings Tab:
         - Debugging
            - Show WebKit-internal scripts
            - Pause in WebKit-internal scripts
         - Heap Snapshot
            - Show Internal Objects
            - Show Private Symbols

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype.initialLayout):
        (WI.SettingsTabContentView.prototype._createEngineeringSettingsView): Added.
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):

        * UserInterface/Base/Main.js:
        (WI.resolvedLayoutDirection):
        (WI.setLayoutDirection):
        * UserInterface/Base/Object.js:

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.set dumpInspectorProtocolMessages):
        (InspectorBackendClass.prototype.get dumpInspectorProtocolMessages):
        (InspectorBackendClass.prototype.set dumpInspectorTimeStats):
        (InspectorBackendClass.prototype.get dumpInspectorTimeStats):
        (InspectorBackendClass.prototype.set filterMultiplexingBackendInspectorProtocolMessages):
        (InspectorBackendClass.prototype.get filterMultiplexingBackendInspectorProtocolMessages):
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.findFunctionSourceCodeLocation):
        * UserInterface/Debug/Bootstrap.js:
        (WI.runBootstrapOperations):
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        (handleUncaughtExceptionRecord):
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.update):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype.get knownNonResourceScripts):
        (WI.DebuggerManager.prototype.debuggerDidPause):
        (WI.DebuggerManager.prototype.scriptDidParse):
        (WI.DebuggerManager.prototype._handleEngineeringShowInternalScriptsSettingChanged): Added.
        (WI.DebuggerManager.prototype._handleEngineeringPauseForInternalScriptsSettingChanged): Added.
        (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange): Deleted.
        (WI.DebuggerManager.prototype._debugUIEnabledDidChange): Deleted.
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendLocationLink):
        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WI.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addScriptsForTarget):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        * UserInterface/Views/StackTraceView.js:
        (WI.StackTraceView):
        * UserInterface/Views/View.js:
        (WI.View.prototype._layoutSubtree):

2019-08-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: RTL: content of Variables section should always be LTR
        https://bugs.webkit.org/show_bug.cgi?id=200481

        Reviewed by Devin Rousso.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):

2019-08-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TimelineAgent already enabled
        https://bugs.webkit.org/show_bug.cgi?id=200513

        Reviewed by Joseph Pecoraro.

        Update some incorrect compatibility comments from r248286.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        * UserInterface/Controllers/TimelineManager.js:

2019-08-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Show radius values in box model metrics view
        https://bugs.webkit.org/show_bug.cgi?id=160993
        <rdar://problem/27919035>

        Reviewed by Brian Burg.

        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._getPropertyValue): Added.
        (WI.BoxModelDetailsSectionRow.prototype._getPropertyValueAsPx):
        (WI.BoxModelDetailsSectionRow.prototype._getBox):
        (WI.BoxModelDetailsSectionRow.prototype._getComponentPrefix): Added.
        (WI.BoxModelDetailsSectionRow.prototype._getComponentSuffix):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createBoxPartElement):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createContentAreaElement):
        (WI.BoxModelDetailsSectionRow.prototype._applyUserInput):
        (WI.BoxModelDetailsSectionRow.prototype._applyUserInput.inspectedPage_node_toggleInlineStyleProperty):
        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        (.details-section .row.box-model .box): Added.
        (.details-section .row.box-model .box > .label): Added.
        (.details-section .row.box-model .box.position): Added.
        (.details-section .row.box-model .box.margin): Added.
        (.details-section .row.box-model:not(.hovered) .box.margin, .details-section .row.box-model .box.margin.active): Added.
        (.details-section .row.box-model .box.border): Added.
        (.details-section .row.box-model:not(.hovered) .box.border, .details-section .row.box-model .box.border.active): Added.
        (.details-section .row.box-model .box.border > .label): Added.
        (.details-section .row.box-model .box.border.has-top-left-radius, .details-section .row.box-model .box.border.has-top-left-radius .box): Added.
        (.details-section .row.box-model .box.border.has-top-right-radius, .details-section .row.box-model .box.border.has-top-right-radius .box): Added.
        (.details-section .row.box-model .box.border.has-bottom-right-radius, .details-section .row.box-model .box.border.has-bottom-right-radius .box): Added.
        (.details-section .row.box-model .box.border.has-bottom-left-radius, .details-section .row.box-model .box.border.has-bottom-left-radius .box): Added.
        (.details-section .row.box-model .box.padding): Added.
        (.details-section .row.box-model:not(.hovered) .box.padding, .details-section .row.box-model .box.padding.active): Added.
        (.details-section .row.box-model .box.content): Added.
        (.details-section .row.box-model:not(.hovered) .box.content, .details-section .row.box-model .box.content.active): Added.
        (.details-section .row.box-model :matches(.top, .right, .bottom, .left)): Added.
        (.details-section .row.box-model :matches(.top, .right, .bottom, .left):not(.editing), .details-section .row.box-model :matches(.top-left, .top-right, .bottom-right, .bottom-left)): Added.
        (.details-section .row.box-model :matches(.top-left, .top-right, .bottom-right, .bottom-left)): Added.
        (.details-section .row.box-model :matches(.top-left, .top-right)): Added.
        (.details-section .row.box-model :matches(.bottom-left, .bottom-right):not(.editing)): Added.
        (.details-section .row.box-model :matches(.bottom-left, .bottom-right).editing): Added.
        (.details-section .row.box-model :matches(.top-left, .bottom-left):not(.editing)): Added.
        (.details-section .row.box-model :matches(.top-left, .bottom-left).editing): Added.
        (.details-section .row.box-model :matches(.top-right, .bottom-right):not(.editing)): Added.
        (.details-section .row.box-model :matches(.top-right, .bottom-right).editing): Added.
        (@media (prefers-color-scheme: dark) .details-section .row.box-model .box): Added.
        (@media (prefers-color-scheme: dark) .details-section .row.box-model:not(.hovered) .box:matches(.margin, .border, .padding, .content), .details-section .row.box-model .box.active:matches(.margin, .border, .padding, .content)): Added.
        (@media (prefers-color-scheme: dark) .details-section .row.box-model .box.margin): Added.
        (@media (prefers-color-scheme: dark) .details-section .row.box-model .box.border): Added.
        (.details-section .row.box-model :matches(.position, .margin, .border, .padding, .content)): Deleted.
        (.details-section .row.box-model .position): Deleted.
        (.details-section .row.box-model .margin): Deleted.
        (.details-section .row.box-model:not(.hovered) .margin, .details-section .row.box-model .margin.active): Deleted.
        (.details-section .row.box-model .border): Deleted.
        (.details-section .row.box-model:not(.hovered) .border, .details-section .row.box-model .border.active): Deleted.
        (.details-section .row.box-model .padding): Deleted.
        (.details-section .row.box-model:not(.hovered) .padding, .details-section .row.box-model .padding.active): Deleted.
        (.details-section .row.box-model .content): Deleted.
        (.details-section .row.box-model:not(.hovered) .content, .details-section .row.box-model .content.active): Deleted.
        (.details-section .row.box-model :matches(.content span, .top, .right, .bottom, .left)): Deleted.
        (.details-section .row.box-model :matches(.right, .left)): Deleted.
        (.details-section .row.box-model:not(.hovered) :matches(.margin, .border, .padding, .content), .details-section .row.box-model .active:matches(.margin, .border, .padding, .content)): Deleted.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.update):
        Ensure that the `_value` is updated whenever the `_rawValue` is updated.

2019-08-06  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r248289.
        https://bugs.webkit.org/show_bug.cgi?id=200488

        Broke internal builds (Requested by drousso on #webkit).

        Reverted changeset:

        "Web Inspector: Styles: show @supports CSS groupings"
        https://bugs.webkit.org/show_bug.cgi?id=200419
        https://trac.webkit.org/changeset/248289

2019-08-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: RTL: go-to arrows and expand triangles in Computed panel should match their context
        https://bugs.webkit.org/show_bug.cgi?id=200449

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ComputedStyleSection.css:
        (body[dir=rtl] .computed-style-section .computed-property-item .disclosure-button): Deleted.

        * UserInterface/Views/Main.css:
        (body[dir=rtl] [dir=ltr] .go-to-arrow): Added.
        In the RTL mode, LTR "islands" should have their contents to be still LTR.

2019-08-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: show @supports CSS groupings
        https://bugs.webkit.org/show_bug.cgi?id=200419

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/CSSGrouping.js: Renamed from Source/WebInspectorUI/UserInterface/Models/CSSMedia.js.
        (WI.CSSGrouping):
        (WI.CSSGrouping.prototype.get type):
        (WI.CSSGrouping.prototype.get text):
        (WI.CSSGrouping.prototype.get sourceCodeLocation):
        (WI.CSSGrouping.prototype.get isMedia): Added.
        (WI.CSSGrouping.prototype.get isSupports): Added.
        (WI.CSSGrouping.prototype.get prefix): Added.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.get groupings): Added.
        (WI.CSSStyleDeclaration.prototype.generateCSSRuleString):
        (WI.CSSStyleDeclaration.prototype.get mediaList): Deleted.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule):
        (WI.CSSRule.prototype.get groupings): Added.
        (WI.CSSRule.prototype.update):
        (WI.CSSRule.prototype._selectorResolved):
        (WI.CSSRule.prototype.get mediaList): Deleted.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseRulePayload):
        (WI.DOMNodeStyles.prototype.rulesForSelector): Deleted.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleEditorFilterApplied):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._createMediaHeader): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration :matches(.header, .header-groupings)): Added.
        (.spreadsheet-css-declaration :matches(.header, .header-groupings):first-child): Added.
        (.spreadsheet-css-declaration .header-groupings > .grouping): Added.
        (.spreadsheet-css-declaration .header-groupings + .header > .selector > .icon): Added.
        (.spreadsheet-css-declaration :matches(.header, .header-media)): Deleted.
        (.spreadsheet-css-declaration :matches(.header, .header-media):first-child): Deleted.
        (.spreadsheet-css-declaration .media-label): Deleted.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.protocolGroupingTypeToEnum): Added.
        (WI.CSSManager.protocolMediaSourceToEnum): Deleted.

        * UserInterface/Main.html:
        * UserInterface/Test.html:

2019-08-05  Devin Rousso  <drousso@apple.com>

        Can't use $0, $1 etc when inspecting Google Docs pages because the content uses these for function names
        https://bugs.webkit.org/show_bug.cgi?id=195834

        Reviewed by Joseph Pecoraro.

        Allow the user to alias saved results by providing a different prefix (e.g. "$") from within
        Web Inspector. When changing the alias, all existing saved results will update to be
        reference-able from the new alias.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager):
        (WI.RuntimeManager.preferredSavedResultPrefix): Added.
        (WI.RuntimeManager.prototype.initializeTarget):
        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):

        * UserInterface/Base/Setting.js:
        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI.contentLoaded.updateConsoleSavedResultPrefixCSSVariable): Added.
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype.toClipboardString):
        (WI.ConsoleMessageView.prototype.removeEventListeners): Added.
        (WI.ConsoleMessageView.prototype._appendSavedResultIndex):
        (WI.ConsoleMessageView.prototype._appendSavedResultIndex.updateSavedVariableText): Added.
        (WI.ConsoleMessageView.prototype._rootPropertyPathForObject):
        (WI.ConsoleMessageView.prototype._rootPropertyPathForObject.prefixSavedResultIndex): Added.
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._sessionStarted):
        (WI.LogContentView.prototype._logCleared):
        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom.show-last-selected li.last-selected > span::after):
        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):
        (WI.QuickConsole.prototype.closed):
        (WI.QuickConsole.prototype._updateAutomaticExecutionContextPathComponentTooltip): Added.
        Listen for changes to the setting that holds the current saved result alias and update any
        related UI accordingly.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createConsoleSettingsView):
        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="text"]): Added.
        * UserInterface/Views/SettingsGroup.js:
        (WI.SettingsGroup.prototype.addCustomEditor): Added.
        Add an input to the Settings tab that controls the saved result prefix alias. Only allow
        [a-zA-Z0-9_$] as values (but [0-9] cannot be used as the start).

        * UserInterface/Models/PropertyPath.js:
        (WI.PropertyPath.prototype.set pathComponent): Added.
        Miscellaneous getters/setters.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Test/TestHarness.js:
        (TestHarness.prototype.newline): Added.
        Convenience function for adding newlines to test results.

2019-08-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: disable related agents when the tab is closed
        https://bugs.webkit.org/show_bug.cgi?id=200118

        Reviewed by Joseph Pecoraro.

        Rework how `enable`/`disable` is used for timeline-related agents so that events are not sent
        and data isn't kept alive when the Timelines tab isn't enabled.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.get domains): Added.
        (WI.TimelineManager.prototype.activateExtraDomain): Added.
        (WI.TimelineManager.prototype.initializeTarget):
        (WI.TimelineManager.prototype.reset):
        (WI.TimelineManager.prototype.set autoCaptureOnPageLoad):
        (WI.TimelineManager.prototype.enable): Added.
        (WI.TimelineManager.prototype.disable): Added.
        (WI.TimelineManager.prototype.startCapturing):
        (WI.TimelineManager.prototype.stopCapturing):
        (WI.TimelineManager.prototype.async processJSON):
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype.autoCaptureStarted):
        (WI.TimelineManager.prototype.eventRecorded):
        (WI.TimelineManager.prototype.pageDOMContentLoadedEventFired):
        (WI.TimelineManager.prototype.pageLoadEventFired):
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.memoryTrackingUpdated):
        (WI.TimelineManager.prototype.heapTrackingStarted):
        (WI.TimelineManager.prototype.heapTrackingCompleted):
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._loadNewRecording):
        (WI.TimelineManager.prototype._legacyAttemptStartAutoCapturingForFrame):
        (WI.TimelineManager.prototype._provisionalLoadStarted):
        (WI.TimelineManager.prototype._mainResourceDidChange):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype._garbageCollected):
        (WI.TimelineManager.prototype._memoryPressure):
        (WI.TimelineManager.prototype.scriptProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent):
        (WI.TimelineManager.prototype._handleDOMNodePowerEfficientPlaybackStateChanged):
        * UserInterface/Models/Instrument.js:
        (WI.Instrument.startLegacyTimelineAgent):
        (WI.Instrument.stopLegacyTimelineAgent):

        * UserInterface/Controllers/HeapManager.js:
        (WI.HeapManager): Added.
        (WI.HeapManager.prototype.get domains): Added.
        (WI.HeapManager.prototype.activateExtraDomain): Added.
        (WI.HeapManager.prototype.initializeTarget):
        (WI.HeapManager.prototype.enable): Added.
        (WI.HeapManager.prototype.disable): Added.
        (WI.HeapManager.prototype.snapshot): Added.
        (WI.HeapManager.prototype.getPreview): Added.
        (WI.HeapManager.prototype.getRemoteObject): Added.
        (WI.HeapManager.prototype.garbageCollected):

        * UserInterface/Controllers/MemoryManager.js:
        (WI.MemoryManager): Added.
        (WI.MemoryManager.prototype.get domains): Added.
        (WI.MemoryManager.prototype.activateExtraDomain): Added.
        (WI.MemoryManager.prototype.initializeTarget):
        (WI.MemoryManager.prototype.enable): Added.
        (WI.MemoryManager.prototype.disable): Added.
        (WI.MemoryManager.prototype.memoryPressure):

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):
        (WI.TimelineTabContentView.prototype.closed):

        * UserInterface/Models/HeapAllocationsInstrument.js:
        (WI.HeapAllocationsInstrument):
        (WI.HeapAllocationsInstrument.prototype._takeHeapSnapshot):
        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype._takeHeapSnapshotClicked):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WI.HeapSnapshotInstanceDataGridNode.logHeapSnapshotNode):
        (WI.HeapSnapshotInstanceDataGridNode.prototype._populatePreview):
        (WI.HeapSnapshotInstanceDataGridNode.prototype._mouseoverHandler.appendPathRow):
        Go through the `HeapManager` for `HeapAgent` commands so it can better manage state.

        * UserInterface/Test/Test.js:
        (WI.contentLoaded):

2019-08-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: brotli-compressed resources have "Compressed: No" in Resources details sidebar
        https://bugs.webkit.org/show_bug.cgi?id=200452

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get compressed):
        Add "br" - Brotli content encoding.

2019-08-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: variable swatch not shown for var() with a fallback
        https://bugs.webkit.org/show_bug.cgi?id=200237

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        (WI.SpreadsheetStyleProperty.prototype._replaceSpecialTokens): Added.
        (WI.SpreadsheetStyleProperty.prototype._addGradientTokens):
        (WI.SpreadsheetStyleProperty.prototype._addColorTokens):
        (WI.SpreadsheetStyleProperty.prototype._addTimingFunctionTokens):
        (WI.SpreadsheetStyleProperty.prototype._addVariableTokens):
        Check to see if there's a fallback value in the `var()` and tokenize it if there is. Mark
        the property as invalid if the `var()` doesn't end up resolving to anything.

        * UserInterface/Views/InlineSwatch.js:
        (WI.InlineSwatch):
        (WI.InlineSwatch.prototype.get value):
        (WI.InlineSwatch.prototype._updateSwatch):
        (WI.InlineSwatch.prototype._handleContextMenuEvent):
        (WI.InlineSwatch.prototype._getNextValidHEXFormat.hexMatchesCurrentColor):
        (WI.InlineSwatch.prototype._getNextValidHEXFormat):
        Allow the `value` to be a function. In that case, use the getter `this.value` instead of the
        value `this._value` directly so that the function is invoked.
        This is needed for variable swatches because the fallback value could change after the
        swatch has been created (e.g. another swatch in a CSS property value that just modifies the
        text, rather than re-renders the entire CSS property value).

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.resolveVariableValue): Added.
        Follow the variable chain until an ultimate value is reached.

        * UserInterface/Models/CSSKeywordCompletions.js:
        (WI.CSSKeywordCompletions.isColorAwareProperty):
        (WI.CSSKeywordCompletions.isTimingFunctionAwareProperty): Added.
        Limit `cubic-bezier` and `spring` tokens to only be shown for timing function properties.

2019-08-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename "Stylesheet" to "Style Sheet" to match spec text
        https://bugs.webkit.org/show_bug.cgi?id=200422

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype._resourceAdded):
        (WI.CSSManager.prototype._resourceTypeDidChange):
        (WI.CSSManager.prototype._clearStyleSheetsForResource):
        (WI.CSSManager.prototype._updateResourceContent.fetchedStyleSheetContent):
        * UserInterface/Models/CSSStyleSheet.js:
        (WI.CSSStyleSheet.prototype.get displayName):
        * UserInterface/Models/CollectionTypes.js:
        (WI.CSSStyleSheetCollection.prototype.get displayName):
        * UserInterface/Models/Resource.js:
        (WI.Resource.displayNameForType):
        (WI.Resource.prototype.get syntheticMIMEType):
        * UserInterface/Models/ResourceCollection.js:
        (WI.ResourceCollection.prototype.objectIsRequiredType):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.shortDisplayNameForResourceType):
        * UserInterface/Views/ResourceClusterContentView.js:
        (WI.ResourceClusterContentView.prototype._contentViewForResourceType):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._save):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._populateIconElementContextMenu):
        * UserInterface/Views/StyleOriginView.js:
        (WI.StyleOriginView.prototype.update):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView.prototype._shouldBeEditable):

        * UserInterface/Views/CSSStyleSheetTreeElement.js:
        (WI.CSSStyleSheetTreeElement):
        * UserInterface/Views/ResourceIcons.css:
        (:matches(.resource-icon.resource-type-style-sheet, .style-sheet-icon) .icon): Added.
        (.source-map-resource.resource-icon.resource-type-style-sheet .icon): Added.
        (.large :matches(.resource-icon.resource-type-style-sheet, .style-sheet-icon) .icon): Added.
        (.large .source-map-resource.resource-icon.resource-type-style-sheet .icon): Added.
        (:matches(.resource-icon.resource-type-stylesheet, .stylesheet-icon) .icon): Deleted.
        (.source-map-resource.resource-icon.resource-type-stylesheet .icon): Deleted.
        (.large :matches(.resource-icon.resource-type-stylesheet, .stylesheet-icon) .icon): Deleted.
        (.large .source-map-resource.resource-icon.resource-type-stylesheet .icon): Deleted.

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Styles: move psuedo-selector rules before inherited rules
        https://bugs.webkit.org/show_bug.cgi?id=199950

        Reviewed by Joseph Pecoraro.

        Since pseudo-selector rules (usually) affect the selected element, or are related to its
        content, it's more useful to have them near that element's rules instead of after all of
        it's inherited rules.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: Styles: add icons for various CSS rule types
        https://bugs.webkit.org/show_bug.cgi?id=199946

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.displayNameForPseudoId):
        Add hardcoded pseudo-selector identifiers for older backends.

        * UserInterface/Models/CSSSelector.js:
        (WI.CSSSelector.prototype.isPseudoSelector): Added.
        (WI.CSSSelector.prototype.isPseudoElementSelector): Deleted.
        There are more types of pseudo-selectors than just `:{before|after}`.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.generateCSSRuleString): Added.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationSectionAddNewRule): Added.
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        Provide a delegate method for adding a new rule, so the `WI.SpreadsheetRulesStyleDetailsPanel`
        can know what selector to focus once the new rule gets added.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._renderSelector):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._populateIconElementContextMenu): Added.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .header.editing-selector .selector): Added.
        (.spreadsheet-css-declaration .selector > .icon): Added.
        (.spreadsheet-css-declaration .selector > .icon + *): Added.
        (.spreadsheet-css-declaration .selector.style-attribute > span): Added.
        When "mousedown" (or "contextmenu") on the icon, show a context menu with helpful actions:
         - Copy Rule
         - {Disable|Enable} Rule
         - Duplicate Selector
         - Add :{active|focus|hover|visited} Rule
         - Create ::{before|after} Rule
         - Reveal in {Resources Tab|Sources Tab|Stylesheet}
        Drive-by: add an extra 0.5px of initial margin before the Style Attribute selector (which is
        sans-serif) so it properly aligns with the other selectors (which are monospaced).

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor:empty): Added.
        (.spreadsheet-style-declaration-editor.no-properties): Deleted.
        Add some extra space when there's no inline style so it looks a bit less cramped.

        * UserInterface/Main.html:
        * UserInterface/Views/StyleRuleIcons.css: Added.
        (.author-style-rule-icon .icon):
        (.author-style-rule-icon.pseudo-selector .icon):
        (.user-style-rule-icon .icon):
        (.user-style-rule-icon.pseudo-selector .icon):
        (.user-agent-style-rule-icon .icon):
        (.user-agent-style-rule-icon.pseudo-selector .icon):
        (.inspector-style-rule-icon .icon):
        (.inspector-style-rule-icon.pseudo-selector .icon):
        (.inherited-style-rule-icon .icon):
        (.inherited-element-style-rule-icon .icon):
        * UserInterface/Images/StyleRule.svg: Added.
        * UserInterface/Images/StyleRuleInheritedElement.svg: Added.
        * UserInterface/Images/StyleRulePseudo.svg: Added.
        Add generic icon classes for style rule icons.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        Add experimental setting.

        * Localizations/en.lproj/localizedStrings.js:

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: add a special breakpoint for "All Events"
        https://bugs.webkit.org/show_bug.cgi?id=200285

        Reviewed by Joseph Pecoraro.

        Similar to the existing "All Requests" breakpoint, there should be a way to set a breakpoint
        that would pause for any DOM event, regardless of the event's name. This is useful for
        situations where the event name isn't known, or where one simply want's to pause on the next
        entry to the event loop.

        Along these lines, make the "requestAnimationFrame", "setTimeout", and "setInterval"
        event breakpoints into special breakpoints that can be added/removed via the create
        breakpoint context menu. This simplifies the process for setting these breakpoints, and also
        makes them more discoverable (most people wouldn't consider them to be "events").

        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.deserialize):
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):
        (WI.EventBreakpoint.prototype.toJSON):

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype.initializeTarget):
        (WI.DOMDebuggerManager.supportsDOMBreakpoints): Added.
        (WI.DOMDebuggerManager.supportsEventBreakpoints):
        (WI.DOMDebuggerManager.supportsEventListenerBreakpoints): Added.
        (WI.DOMDebuggerManager.supportsURLBreakpoints):
        (WI.DOMDebuggerManager.supportsXHRBreakpoints): Added.
        (WI.DOMDebuggerManager.supportsAllListenersBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.get allAnimationFramesBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.get allIntervalsBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.get allListenersBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.get allTimeoutsBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.get listenerBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.isBreakpointSpecial):
        (WI.DOMDebuggerManager.prototype.listenerBreakpointForEventName): Added.
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.addURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype.get eventBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype.eventBreakpointForTypeAndEventName): Deleted.
        Add additional target compatibility checks.

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype.dismiss):
        (WI.EventBreakpointPopover.prototype._handleTypeSelectChange): Deleted.
        * UserInterface/Views/EventBreakpointPopover.css:
        (.popover .event-breakpoint-content > input): Added.
        (.popover .event-breakpoint-content > input::placeholder): Added.
        (.popover .event-breakpoint-content > .event-type): Deleted.
        (.popover .event-breakpoint-content > .event-type > input): Deleted.
        (.popover .event-breakpoint-content > .event-type > input::placeholder): Deleted.

        * UserInterface/Views/EventBreakpointTreeElement.css:
        (.breakpoint.event.breakpoint-for-interval:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.breakpoint-for-timeout:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.breakpoint-for-timer:not(.breakpoint-paused-icon) .icon): Deleted.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.saveStateToCookie):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.DebuggerSidebarPanel.prototype._populateCreateBreakpointContextMenu.addToggleForSpecialEventBreakpoint): Added.
        (WI.DebuggerSidebarPanel.prototype._populateCreateBreakpointContextMenu):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._insertDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateBreakpointContextMenu.addToggleForSpecialEventBreakpoint): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateBreakpointContextMenu):
        Add create breakpoint context menu items (also sort the breakpoints in this order):
         - "All Animation Frames"  =>  [A] All Animation Frames
         - "All Timeouts"          =>  [T] All Timeouts
         - "All Intervals"         =>  [I] All Intervals
         - "All Events"            =>  [E] All Events

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):

        * UserInterface/Base/Setting.js:
        * UserInterface/Images/EventBreakpointInterval.svg: Added.
        * UserInterface/Images/EventBreakpointTimeout.svg: Renamed from Source/WebInspectorUI/UserInterface/Images/EventBreakpointTimer.svg.
        * Localizations/en.lproj/localizedStrings.js:

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Heap Snapshot Views should be searchable
        https://bugs.webkit.org/show_bug.cgi?id=157582
        <rdar://problem/26228629>

        Reviewed by Joseph Pecoraro.

        Without the ability to filter/search, it's far more difficult to find objects of interest.
        Rather than spending time scrolling through the entire heap snapshot or sorting by "Name",
        a simple filter/search (which also uses the global search settings) is almost instant.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype.updateFilter): Addded.
        (WI.HeapAllocationsTimelineView.prototype.get showsFilterBar): Deleted.
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WI.HeapSnapshotClusterContentView.prototype.updateFilter): Added.
        * UserInterface/Views/HeapSnapshotContentView.js:
        (WI.HeapSnapshotContentView):
        (WI.HeapSnapshotContentView.prototype.updateFilter): Added.
        (WI.HeapSnapshotContentView.prototype.dataGridMatchNodeAgainstCustomFilters): Added.
        (WI.HeapSnapshotContentView.prototype.dataGridMatchShouldPopulateWhenFilteringNode): Added.
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._updateFilter.createIteratorForNodesToBeFiltered):
        Don't attempt to populate each heap snapshot `WI.DataGridNode` when filtering, as that can
        quickly exhaust memory due to the sheer size of a heap snapshot.

        * UserInterface/Base/Main.js:
        (WI._find):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.prototype.get canHandleFindEvent): Added.
        (WI.TimelineTabContentView.prototype.handleFindEvent): Added.
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype.get canFocusFilterBar): Added.
        (WI.TimelineRecordingContentView.prototype.focusFilterBar): Added.
        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar.prototype.focus): Added.
        Allow the current tab to intercept the find shortcut and do something custom. In the case
        of a `WI.TimelineTabContentView`, declare that it can handle the find event if the displayed
        content view (`WI.TimelineRecordingContentView`) can focus it's filter bar. If so, when the
        find shortcut is triggered, focus the filter bar.

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSS Formatter: comments with an escape character aren't formatted
        https://bugs.webkit.org/show_bug.cgi?id=200168

        Reviewed by Joseph Pecoraro.

        Don't allow escaping of the "*" in CSS comments (e.g. `\*/`).

        Add additional pretty printing rules for comments so that there's always some space between
        them and the surrounding text. This ensures that they don't interfere with readability.

        * UserInterface/Workers/Formatter/CSSFormatter.js:
        (CSSFormatter.prototype._format):

        * UserInterface/Workers/Formatter/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype.get indented): Added.

2019-08-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Console: execution context picker doesn't update when switching to the inferred context from auto
        https://bugs.webkit.org/show_bug.cgi?id=200279

        Reviewed by Joseph Pecoraro.

        The `representedObject` of the "auto" execution context path component is shared with that
        execution context's actual path component, meaning that if the user switches from "auto" to
        that execution context's path component, the underlying `representedObject` wouldn't change,
        and therfore the `RuntimeManager.Event.ActiveExecutionContextChanged` wouldn't fire. In this
        case, update the visible ("selected") execution context path component manually.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._selectExecutionContext):
        (WI.QuickConsole.prototype._pathComponentSelected):

2019-08-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Console: all navigation items should be shown in the split console
        https://bugs.webkit.org/show_bug.cgi?id=200280

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        (WI.LogContentView.prototype.get navigationItems):
        Adjust the `visibilityPriority` of each `navigationItems` so that the filter/scope bars are
        kept visible for longer than the "Preserve Log"/"Emulate User Gesture" toggles.

        * UserInterface/Views/FindBanner.js:
        (WI.FindBanner):
        * UserInterface/Views/FindBanner.css:
        (.find-banner.console-find-banner > input[type="search"]):
        (.find-banner.console-find-banner > :matches(input[type="search"], button)):
        (.find-banner.console-find-banner > input[type="search"]:focus, .find-banner.console-find-banner > input[type="search"]:focus ~ button, .find-banner.console-find-banner > input[type="search"]:not(:placeholder-shown), .find-banner.console-find-banner > input[type="search"]:not(:placeholder-shown) ~ button ): Added.
        (.find-banner.console-find-banner > input[type="search"]::placeholder): Deleted.
        (.find-banner.console-find-banner > input[type="search"]:focus): Deleted.
        (.find-banner.console-find-banner > input[type="search"]:not(:placeholder-shown)): Deleted.
        (@media (prefers-color-scheme: dark) .find-banner.console-find-banner > input[type=search]:not(:placeholder-shown)): Deleted.
        Make the `WI.FindBanner` blend in with the surrounding content when it's not focused or has
        no content.

2019-08-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Storage: disable related agents when the tab is closed
        https://bugs.webkit.org/show_bug.cgi?id=200117

        Reviewed by Joseph Pecoraro.

        Rework how `enable`/`disable` is used for storage-related agents so that events are not sent
        and data isn't kept alive when the Storage tab isn't enabled.

        * UserInterface/Controllers/ApplicationCacheManager.js:
        (WI.ApplicationCacheManager):
        (WI.ApplicationCacheManage.prototype.get domains): Added.
        (WI.ApplicationCacheManage.prototype.activateExtraDomain): Added.
        (WI.ApplicationCacheManager.prototype.initializeTarget):
        (WI.ApplicationCacheManager.prototype.enable): Added.
        (WI.ApplicationCacheManager.prototype.disable): Added.
        (WI.ApplicationCacheManager.prototype.networkStateUpdated):
        (WI.ApplicationCacheManager.prototype.applicationCacheStatusUpdated):
        (WI.ApplicationCacheManager.prototype._reset): Added.
        (WI.ApplicationCacheManager.prototype._mainResourceDidChange):
        (WI.ApplicationCacheManager.prototype._manifestForFrameLoaded):
        (WI.ApplicationCacheManager.prototype._framesWithManifestsLoaded):
        (WI.ApplicationCacheManager.prototype.initialize): Deleted.

        * UserInterface/Controllers/DOMStorageManager.js:
        (WI.DOMStorageManager):
        (WI.DOMStorageManager.prototype.get domains): Added.
        (WI.DOMStorageManager.prototype.activateExtraDomain): Added.
        (WI.DOMStorageManager.prototype.initializeTarget):
        (WI.DOMStorageManager.prototype.enable): Added.
        (WI.DOMStorageManager.prototype.disable): Added.
        (WI.DOMStorageManager.prototype.itemsCleared):
        (WI.DOMStorageManager.prototype.itemRemoved):
        (WI.DOMStorageManager.prototype.itemAdded):
        (WI.DOMStorageManager.prototype.itemUpdated):
        (WI.DOMStorageManager.prototype.inspectDOMStorage):
        (WI.DOMStorageManager.prototype._reset): Added.
        (WI.DOMStorageManager.prototype._addDOMStorageIfNeeded):
        (WI.DOMStorageManager.prototype._addCookieStorageIfNeeded):
        (WI.DOMStorageManager.prototype._mainResourceDidChange):
        (WI.DOMStorageManager.prototype.initialize): Deleted.
        (WI.DOMStorageManager.prototype.domStorageWasAdded): Deleted.

        * UserInterface/Controllers/DatabaseManager.js:
        (WI.DatabaseManager):
        (WI.DatabaseManager.prototype.get domains): Added.
        (WI.DatabaseManager.prototype.activateExtraDomain): Added.
        (WI.DatabaseManager.prototype.initializeTarget):
        (WI.DatabaseManager.prototype.enable): Added.
        (WI.DatabaseManager.prototype.disable): Added.
        (WI.DatabaseManager.prototype.databaseWasAdded):
        (WI.DatabaseManager.prototype.inspectDatabase):
        (WI.DatabaseManager.prototype._reset): Added.
        (WI.DatabaseManager.prototype._mainResourceDidChange):
        (WI.DatabaseManager.prototype.initialize): Deleted.

        * UserInterface/Controllers/IndexedDBManager.js:
        (WI.IndexedDBManager):
        (WI.IndexedDBManager.prototype.get domains): Added.
        (WI.IndexedDBManager.prototype.activateExtraDomain): Added.
        (WI.IndexedDBManager.prototype.initializeTarget):
        (WI.IndexedDBManager.prototype.enable): Added.
        (WI.IndexedDBManager.prototype.disable): Added.
        (WI.IndexedDBManager.prototype.clearObjectStore):
        (WI.IndexedDBManager.prototype._reset): Added.
        (WI.IndexedDBManager.prototype._mainResourceDidChange):
        (WI.IndexedDBManager.prototype.initialize): Deleted.

        * UserInterface/Controllers/AppController.js:
        (WI.AppController.prototype.activateExtraDomains):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.get domains): Added.
        (WI.CanvasManager.prototype.activateExtraDomain): Added.
        Only call `enable` on any extra agents if the domain is not controlled by a manager.

        * UserInterface/Views/StorageTabContentView.js:
        (WI.StorageTabContentView):
        (WI.StorageTabContentView.static isTabAllowed):
        (WI.StorageTabContentView.prototype.canShowRepresentedObject):
        (WI.StorageTabContentView.prototype.closed): Added.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.contentLoaded):

2019-08-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: Develop > Start Timeline Recording doesn't work when focused on a detached inspector window
        https://bugs.webkit.org/show_bug.cgi?id=200125
        <rdar://problem/53543008>

        Reviewed by Brian Burg.

        Always show the Timelines tab in Web Inspector whenever timeline recording starts/stops.
        Notify the UIProcess whenever the timeline recording state changes.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setTimelineProfilingEnabled):

2019-08-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: "Inspector.initialized" happens before breakpoints are set
        https://bugs.webkit.org/show_bug.cgi?id=200364

        Reviewed by Joseph Pecoraro.

        Allow managers to register a promise that will delay `Inspector.initialized`. This is needed
        when restoring breakpoints so that "Automatically Show Web Inspector for JSContexts" can set
        them before any scripts have evaluated, ensuring that no breakpoints are "skipped".

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.initialize):
        (WI.Target.registerInitializationPromise): Added.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):

2019-08-01  Devin Rousso  <drousso@apple.com>

        Unreviewed, remove `emulateUserGesture` parameter from `Debugger.evaluateOnCallFrame` for iOS 13

        Rubber-stamped by Joseph Pecoraro.

        * UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-13.0.json:
        The iOS 13 protocol has already been decided, so these shouldn't have been added unless they
        were cherry-picked in.

2019-07-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: support emulateUserGesture parameter in Debugger.evaluateOnCallFrame
        https://bugs.webkit.org/show_bug.cgi?id=200272

        Reviewed by Joseph Pecoraro.

        When paused, evaluating in the console should still respect the "Emulate User Gesture" checkbox.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.evaluateInInspectedWindow):

        * UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-13.0.json:

2019-07-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'issueMessage.sourceCodeLocation.sourceCode')
        https://bugs.webkit.org/show_bug.cgi?id=200296

        Reviewed by Joseph Pecoraro.

        When fetching all `WI.IssueMessage`s for a given `WI.SourceCode`, the `WI.IssueMessage` may
        be associated in a different way (e.g. by url, instead of `WI.SourceCodeLocation`). As such,
        we should pass the `WI.SourceCode` along, and use it when adding the `WI.IssueTreeElement`.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addIssuesForSourceCode):
        (WI.DebuggerSidebarPanel.prototype._addIssue):

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._addIssue):
        (WI.SourcesNavigationSidebarPanel.prototype._addIssuesForSourceCode):

2019-07-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: provide a way to disable/breakpoint all event listeners for a given DOM node or event type
        https://bugs.webkit.org/show_bug.cgi?id=200233

        Reviewed by Joseph Pecoraro.

        Often, when trying to debug issues with DOM events, it's extremely tedious to have to go
        through event listeners one by one and disable them (or set a breakpoint). This patch adds
        a way of performing these "state modifications" in batch operations, based on the current
        grouping method of the Event Listeners section.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.supportsDisablingEventListeners): Added.
        (WI.DOMManager.supportsEventListenerBreakpoints): Added.
        Common convenience functions for checking for protocol support.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.createEventListenerSection):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners .details-section.event-listener-section > .header > .event-listener-options): Added.
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners .details-section.event-listener-section:hover > .header > .event-listener-options): Added.
        Add an options element that shows a context menu:
         - "Disable Event Listeners"/"Enable Event Listeners"
         - "Add Breakpoints"/"Delete Breakpoints"
        Each action applies the corresponding state to all event listeners in that section.

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup):
        (WI.EventListenerSectionGroup.prototype.get supportsStateModification): Added.
        (WI.EventListenerSectionGroup.prototype.get isEventListenerDisabled): Added.
        (WI.EventListenerSectionGroup.prototype.set isEventListenerDisabled): Added.
        (WI.EventListenerSectionGroup.prototype.get hasEventListenerBreakpoint): Added.
        (WI.EventListenerSectionGroup.prototype.set hasEventListenerBreakpoint): Added.
        (WI.EventListenerSectionGroup.prototype._updateDisabledToggle): Added.
        (WI.EventListenerSectionGroup.prototype._updateBreakpointToggle): Added.
        (WI.EventListenerSectionGroup.prototype._createDisabledToggleRow): Deleted.
        (WI.EventListenerSectionGroup.prototype._createBreakpointToggleRow): Deleted.
        Expose a way to modify the event listener's state so that the UI (e.g. checkbox and title)
        also get's updated.

        * Localizations/en.lproj/localizedStrings.js:

2019-07-30  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Resources: Display outline around images when viewing image collections
        https://bugs.webkit.org/show_bug.cgi?id=200212

        Reviewed by Devin Rousso.

        * UserInterface/Views/CollectionContentView.css:
        (.content-view.collection .resource.image img):
        (.content-view.collection .resource.image img:hover):

2019-07-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: Resources: add a "Show Grid" navigation item for the Images collection
        https://bugs.webkit.org/show_bug.cgi?id=200260

        Reviewed by Joseph Pecoraro.

        Each subview `WI.ImageResourceContentView` already listens for changes to the underlying
        `WI.settings.showImageGrid` and adds the `.show-grid` class if enabled. As such, this change
        just adds a `WI.ButtonNavigationItem` for toggling `WI.settings.showImageGrid` from the
        Images "folder".

        * UserInterface/Views/ResourceCollectionContentView.js:
        (WI.ResourceCollectionContentView):
        (WI.ResourceCollectionContentView.prototype.get navigationItems):
        (WI.ResourceCollectionContentView.prototype.attached): Added.
        (WI.ResourceCollectionContentView.prototype.detached): Added.
        (WI.ResourceCollectionContentView.prototype._updateImageTypeScopeBar):
        Drive-by: hide the image type `WI.ScopeBar` if there's only one type of image.
        (WI.ResourceCollectionContentView.prototype._handleShowGridButtonClicked): Added.
        (WI.ResourceCollectionContentView.prototype._handleShowImageGridSettingChanged): Added.

2019-07-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: add -webkit-* keywords for *-height CSS properties
        https://bugs.webkit.org/show_bug.cgi?id=200240

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/CSSKeywordCompletions.js:

        * UserInterface/Views/Main.css:
        (.message-text-view):
        * UserInterface/Views/Toolbar.css:
        (.toolbar .control-section):
        (.toolbar .item-section):
        Replace `-webkit-min-content` with `min-content`.

2019-07-26  Greg Doolittle  <gr3g@apple.com>

        Web Inspector: AXI: Audit: Typo of "some" as "somee"
        https://bugs.webkit.org/show_bug.cgi?id=200166

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype._addDefaultTests):
        (WI.AuditManager):

2019-07-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: no context menu items work when context menu clicking on "Add Breakpoint"
        https://bugs.webkit.org/show_bug.cgi?id=199953

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.addMouseDownContextMenuHandlers): Added.
        Create a helper function for managing elements that show a context menu on "mousedown".

        * UserInterface/Base/SearchUtilities.js:
        (WI.SearchUtilities.createSettingsButton):
        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._populateCanvasElementButtonContextMenu): Added.
        (WI.CanvasContentView.prototype._populateViewShaderButtonContextMenu): Added.
        (WI.CanvasContentView.prototype._populateViewRecordingButtonContextMenu): Added.
        (WI.CanvasContentView.prototype._handleCanvasElementButtonMouseDown): Deleted.
        (WI.CanvasContentView.prototype._handleViewShaderButtonMouseDown): Deleted.
        (WI.CanvasContentView.prototype._handleViewRecordingButtonMouseDown): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._populateCreateBreakpointContextMenu): Added.
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointMouseDown): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._populateResourceGroupingModeContextMenu): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._populateCreateBreakpointContextMenu): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeMouseDown): Deleted.
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointMouseDown): Deleted.

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype._handleTabPickerTabContextMenu): Deleted.
        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar):
        (WI.LegacyTabBar.prototype._handleTabPickerTabContextMenu): Deleted.
        Remove the "contextmenu" handler on the tab picker, as that's already used by the entire
        tab bar to show/hide tabs.

2019-07-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: print the target of `console.screenshot` last so the target is the closest item to the image
        https://bugs.webkit.org/show_bug.cgi?id=199308

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype.render):
        (WI.ConsoleMessageView.prototype._appendMessageTextAndArguments):
        (WI.ConsoleMessageView.prototype._handleContextMenu):
        * UserInterface/Views/ConsoleMessageView.css:
        (.console-image > .console-message-body > :matches(hr, img)): Added.
        (.console-image > .console-message-body > hr): Added.
        (.console-image > .console-message-body > img): Added.
        (.console-log-level.console-image::before): Added.
        (.console-message-body > .console-image): Deleted.
        (.console-log-level.console-image-container::before): Deleted.
        Allow `ConsoleMessage.MessageType.Image` to be an `ConsoleMessage.MessageLevel.Error`, and
        print the message (and extra parameters) in that case.
        Drive-by: reorganize the switch-case so all paths have the same `default` case.

        * Localizations/en.lproj/localizedStrings.js:

2019-07-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Command-X should cut selected properties
        https://bugs.webkit.org/show_bug.cgi?id=199341

        Reviewed by Devin Rousso.

        Implement cutting of selected CSS properties in the style editor.
        Unify cutting and copying logic wherever possible.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.placeTextCaretInFocusedProperty): Added.
        Cut/copy events could only fire on SpreadsheetCSSStyleDeclarationEditor element if it
        has selection inside of it. Placing text caret at the beginning of the focused property
        ensures that.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy): Deleted.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._copySelectedProperties): Added.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._removeSelectedProperties): Added.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._stopSelection):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        Remove old copying logic.

2019-07-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Display "Resource has no content" for about:blank iframes instead of an error
        https://bugs.webkit.org/show_bug.cgi?id=198029

        Reviewed by Devin Rousso.

        Display "about:blank" in the middle of the content view when selecting "about:blank" resources.
        Previoulsly, we showed a misleading "An error occurred trying to load the resource" error
        message.

        * UserInterface/Models/CSSStyleSheet.js:
        (WI.CSSStyleSheet.prototype.requestContentFromBackend):
        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.requestContentFromBackend):
        * UserInterface/Models/Script.js:
        (WI.Script.prototype.requestContentFromBackend):
        * UserInterface/Models/SourceCode.js:
        (WI.SourceCode.generateSpecialContentForURL):
        (WI.SourceCode.prototype._processContent):
        (WI.SourceCode):
        * UserInterface/Views/ResourceContentView.js:
        (WI.ResourceContentView.prototype._contentAvailable):

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._contentAvailable):
        (WI.SourceCodeTextEditor.prototype._showMessage):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView.prototype._contentDidPopulate):
        Display empty text editor when it has no content instead of "Resource has no content" message.

2019-07-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: Breakpoint at specified location already exists.
        https://bugs.webkit.org/show_bug.cgi?id=197034
        <rdar://problem/50049004>

        Reviewed by Joseph Pecoraro.

        When "adjusting" a `WI.Breakpoint` (e.g. removing and then re-adding with a different
        configuration), make sure to only re-add the `WI.Breakpoint` to the `WI.Target` it was just
        removed from, rather to all `WI.targets`.

        Since we iterate over `WI.targets` in both `WI.DebuggerManager.prototype._setBreakpoint` and
        `WI.DebuggerManager.prototype._removeBreakpoint`, we ended up iterating `WI.targets` twice.

        Each time the `WI.Breakpoint` is removed from a `WI.Target`, pass the `WI.Target` to the
        `callback` given to `WI.DebuggerManager.prototype._removeBreakpoint`, so that the eventual
        call to `WI.DebuggerManager.prototype._setBreakpoint` can reuse it as the `specificTarget`,
        instead of iterating `WI.targets` (meaning we only iterate it once).

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype._removeBreakpoint.didRemoveBreakpoint):
        (WI.DebuggerManager.prototype._breakpointDisplayLocationDidChange):
        (WI.DebuggerManager.prototype._breakpointEditablePropertyDidChange):

2019-07-22  Devin Rousso  <drousso@apple.com>

        Localization: change fps to FPS
        <rdar://problem/53342508>

        Rubber-stamped by Joseph Pecoraro.

        * UserInterface/Views/RenderingFrameTimelineOverviewGraph.js:
        (WI.RenderingFrameTimelineOverviewGraph.prototype._updateDividers.createDividerAtPosition):

        * Localizations/en.lproj/localizedStrings.js:

2019-07-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Issues toggling multiple breakpoints on one line
        https://bugs.webkit.org/show_bug.cgi?id=199918

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor):
        (WI.SourceCodeTextEditor.prototype.close):
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
        (WI.SourceCodeTextEditor.prototype.textEditorUpdatedFormatting):
        (WI.SourceCodeTextEditor.prototype._handleFormatterDidChange): Added.
        Listen for `WI.SourceCode.Event.FormatterDidChange` events as there may be multiple content
        views for the same `WI.SourceCode`. Previously, if there were, only the active one would
        properly update it's "line -> column -> breakpoint" mapping, causing an error to be thrown
        when the non-active content views tried to retrieve the breakpoint for the new line/column.

2019-07-17  Olivier Blin  <olivier.blin@softathome.com>

        Web Inspector: application/xml content not shown
        https://bugs.webkit.org/show_bug.cgi?id=199861

        Reviewed by Devin Rousso.

        application/xml content from XHR requests was not shown in the
        inspector, an error message was displayed instead.

        application/xml content should be treated as text, since
        application/xml is the standard mimetype for XML content.
        Apache serves XML content with the application/xml mimetype by
        default.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.fileExtensionForMIMEType):
        Report "xml" extension for "application/xml" mimetype.
        (WI.shouldTreatMIMETypeAsText):
        Treat XML files as text.

2019-07-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Changes panel should be strictly LTR
        https://bugs.webkit.org/show_bug.cgi?id=199767

        Reviewed by Joseph Pecoraro.

        Changes panel is primarily CSS code and CSS is strictly LTR.

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel):

2019-07-15  Youenn Fablet  <youenn@apple.com>

        Enable a debug WebRTC mode without any encryption
        https://bugs.webkit.org/show_bug.cgi?id=199177
        <rdar://problem/52074986>

        Reviewed by Eric Carlson.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:

2019-07-15  Greg Doolittle <gr3g@apple.com>

        Web Inspector: AXI: Audit: Typos in Accessibility audits
        https://bugs.webkit.org/show_bug.cgi?id=199716
        <rdar://problem/52721711>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/AuditManager.js:

2019-07-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Device Settings: update Safari user agent from 12.2 to 13.0
        https://bugs.webkit.org/show_bug.cgi?id=199758

        Reviewed by Maciej Stachowiak.

        * UserInterface/Base/Main.js:
        (WI._handleDeviceSettingsToolbarButtonClicked):

2019-07-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Changes: dismissing a blank property makes style rule to show in Changes panel
        https://bugs.webkit.org/show_bug.cgi?id=199760

        Reviewed by Devin Rousso.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        Call updatePropertiesModifiedState even when _updateOwnerStyleText returns early.

2019-07-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: always show all navigation bar items, but disable those that wouldn't work
        https://bugs.webkit.org/show_bug.cgi?id=199594

        Reviewed by Ross Kirsling.

        Reorder the navigation items of the Elements tab (left to right):
         - Show rulers
         - Force print media styles
         - Force Dark Appearance / Force Light Appearance
         - Show compositing borders
         - Enable paint flashing
         - Show shadow DOM nodes
        This way, "related" (e.g. print styles and dark/light appearance both relate to CSS media)
        toggles are grouped closer together.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype._defaultAppearanceDidChange):
        (WI.DOMTreeContentView.prototype._toggleAppearance):

        * Localizations/en.lproj/localizedStrings.js:

2019-07-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Layers: Uncaught Exception: Request with id = 2 failed. {"code":-32601,"message":"'Page' domain was not found","data":[{"code":-32601,"message":"'Page' domain was not found"}]}
        https://bugs.webkit.org/show_bug.cgi?id=199555

        Reviewed by Joseph Pecoraro.

        Use modern inspected target support checking, and defer agent commands until a target is
        available.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype._showPaintRectsSettingChanged):
        (WI.Layers3DContentView.prototype._updateCompositingBordersButtonState):
        (WI.Layers3DContentView.prototype._toggleCompositingBorders):

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype._toggleCompositingBorders):
        (WI.DOMTreeContentView.prototype._updateCompositingBordersButtonToMatchPageSettings):
        (WI.DOMTreeContentView.prototype._showPaintRectsSettingChanged):
        (WI.DOMTreeContentView.prototype._showPrintStylesChanged):
        (WI.DOMTreeContentView.prototype._showRulersChanged):
        Drive-by: apply the same changes to the Elements tab for when the Layers tab isn't enabled.

2019-07-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: replace WTF::Vector with std::initializer_list in CallTracer to avoid dynamic allocations
        https://bugs.webkit.org/show_bug.cgi?id=199611

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async swizzle):
        Drive-by: handle the situation where a parameter is an array of deduplicated strings, which
                  would otherwise be treated as an array of numbers.

2019-07-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version (iOS 13.0)
        https://bugs.webkit.org/show_bug.cgi?id=199631
        <rdar://problem/47538193>

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/Legacy/13.0/InspectorBackendCommands.js: Added.
        * Versions/Inspector-iOS-13.0.json: Added.

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: special breakpoints and event targets should be sorted into separate "areas"
        https://bugs.webkit.org/show_bug.cgi?id=199554

        Reviewed by Joseph Pecoraro.

        Move the special All Requests breakpoint down to be right above all other URL breakpoints.
        Move the `window` object tree element below other DOM node tree elements.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._insertDebuggerTreeElement):

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM Debugger: there should be different icons for each type of DOM breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=199552

        Reviewed by Joseph Pecoraro.

        [S] for Subtree Modified
        [A] for Attribute Modified
        [R] for Node Removed

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        * UserInterface/Views/DOMBreakpointTreeElement.css: Added.
        (.breakpoint.dom.breakpoint-for-subtree-modified:not(.breakpoint-paused-icon) .icon):
        (.breakpoint.dom.breakpoint-for-attribute-modified:not(.breakpoint-paused-icon) .icon):
        (.breakpoint.dom.breakpoint-for-node-removed:not(.breakpoint-paused-icon) .icon):

        * UserInterface/Main.html:
        * UserInterface/Images/DOMBreakpointAttributeModified.svg: Added.
        * UserInterface/Images/DOMBreakpointNodeRemoved.svg: Added.
        * UserInterface/Images/DOMBreakpointSubtreeModified.svg: Added.

2019-07-08  Devin Rousso  <drousso@apple.com>

        Uncaught Exception: Unexpected enum value: CPU
        https://bugs.webkit.org/show_bug.cgi?id=199564

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        Filter the list of auto-capture instruments based on what's actually supported, instead of
        directly using the saved list from the `WI.Setting`.

2019-07-08  Devin Rousso  <drousso@apple.com>

        Enabling the Layers tab hides the paint flashing button
        https://bugs.webkit.org/show_bug.cgi?id=199549

        Reviewed by Joseph Pecoraro.

        Still show the Compositing Borders and Paint Flashing navigation items in the Elements tab
        even when the Layers tab is enabled (just like the Layers details sidebar).

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype._updateCompositingBordersButtonToMatchPageSettings):

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Elements: pasting in the Styles sidebar adds a text node to the DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=199588

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI._paste):
        Bail if `event.defaultPrevented`, as that means that something else has handled (and likely
        overrode) this event.

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: the "x" in the Exception icon overlaps the border
        https://bugs.webkit.org/show_bug.cgi?id=199553

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/Exception.svg:
        * UserInterface/Images/Function.svg:
        * UserInterface/Images/TailDeletedFunction.svg:

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: there should be a different icon for URL breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=199550

        Reviewed by Joseph Pecoraro.

        Use the same (down|up) arrow icon for the Network Tab and the Network timeline.

        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement):
        * UserInterface/Views/URLBreakpointTreeElement.css:
        (.breakpoint.url:not(.breakpoint-paused-icon) .icon): Added.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):

        * UserInterface/Images/URLBreakpoint.svg: Added.

2019-07-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: CPU: the Duration string isn't localized
        https://bugs.webkit.org/show_bug.cgi?id=199582
        <rdar://problem/51698165>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype._layoutEnergyChart):

        * Localizations/en.lproj/localizedStrings.js:

2019-07-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: unbalanced quotes and parenthesis aren't displayed as property closed after editing values
        https://bugs.webkit.org/show_bug.cgi?id=199090
        <rdar://problem/51965431>

        Reviewed by Devin Rousso.

        `}` gets added by WI.tokenizeCSSValue (called by SpreadsheetStyleProperty.prototype._renderValue)
        when it encounters unbalanced quotes. Fix unbalanced quotes by re-rendering the value from the model,
        not the DOM content.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidCommit):
        For consistency, render property name from the model as well.

2019-07-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: current call frame indicator not visible in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=199047
        <rdar://problem/51922895>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline .item.call-frame .status > .status-image):
        (.tree-outline .item.call-frame.selected .status > .status-image):
        Replace the CSS variables used for `fill` with their actual color value (in `light` mode),
        as the semantic "name" of the variable doesn't really match its usage. As an example, the
        current call frame shouldn't rely on the value of `--border-color`, as it's not a "border".

2019-07-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: use a CSS transition when showing/hiding DOM breakpoint gutter
        https://bugs.webkit.org/show_bug.cgi?id=199411

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeContentView.css:
        (.content-view.dom-tree .tree-outline.dom):

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: allow nodes to be copied and pasted
        https://bugs.webkit.org/show_bug.cgi?id=199182

        Reviewed by Matt Baker.

        Copy is already supported, so there's nothing that needs to be done there.

        Pasting is as simple as calling `insertAdjacentHTML("afterend", ...)` on the selected node.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._paste): Added.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.handlePasteEvent): Added.

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM Debugger: descendant breakpoints should be able to be enabled/disabled/deleted from a collapsed parent
        https://bugs.webkit.org/show_bug.cgi?id=199332

        Reviewed by Matt Baker.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.get domBreakpoints):
        (WI.DOMDebuggerManager.prototype.domBreakpointsForNode):
        (WI.DOMDebuggerManager.prototype.domBreakpointsInSubtree): Added.
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._detachDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._detachBreakpointsForFrame):
        (WI.DOMDebuggerManager.prototype._speculativelyResolveDOMBreakpointsForURL):
        (WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
        Provide a way of getting a "summary" array of `DOMBreakpoint`s for all descendant nodes.
        Rework the data structure for holding `DOMBreakpoint`s to use a `Multimap` so no duplicates
        can be added (it uses a `Set` instead of an `Array`).

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.get hasBreakpoint):
        (WI.DOMTreeElement.prototype.set breakpointStatus):
        (WI.DOMTreeElement.prototype.bindRevealDescendantBreakpointsMenuItemHandler): Added.
        (WI.DOMTreeElement.prototype._subtreeBreakpointChanged): Added.
        (WI.DOMTreeElement.prototype._updateBreakpointStatus):
        (WI.DOMTreeElement.prototype._statusImageContextmenu):
        (WI.DOMTreeElement.prototype.subtreeBreakpointCountDidChange): Deleted.
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):
        (WI.appendContextMenuItemsForDOMNodeBreakpoints):
        Keep track of the actual descendant `DOMNodeTreeElement` that have breakpoints, rather than
        just a count, so that the "Reveal Descendant Breakpoints" action is able to access them.
        Change "Reveal Descendant Breakpoints" to reveal and select all descendant breakpoints
        instead of just the first one.
        Drive-by: don't remove specific (event) listener breakpoints when invoking the
                  "Delete Descendant Breakpoints" action, as that's not obvious from the UI.

        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype.appendContextMenuItems):
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement.prototype.populateContextMenu):
        Remove the separator before "Delete Breakpoint" so all breakpoint actions are in the same section.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Multimap.js:
        (Multimap.prototype.get size): Added.

2019-07-02  Matt Baker  <mattbaker@apple.com>

        REGRESSION (r238563): Web Inspector: Selection is erratic when holding Up/Down on Network Table
        https://bugs.webkit.org/show_bug.cgi?id=193841
        <rdar://problem/47559124>

        Reviewed by Devin Rousso.

        Selecting and revealing a row after reloading Table data, but before the
        layout that populates visible rows, could cause the Table to always be
        scrolled so that the revealed row is first.

        This patch fixes `revealRow` by calculating the position of the row being
        revealed in the absence of its DOM element, so that the Table is only
        scrolled when necessary.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.revealRow):
        (WI.Table.prototype._resizeColumnsAndFiller):
        Drive-by fix: use realOffsetWidth for consistency.
        (WI.Table.prototype._updateVisibleRows):
        (WI.Table.prototype._calculateOffsetHeight):
        (WI.Table.prototype._calculateScrollTop):

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debug: "Reset Web Inspector" should also clear the saved window size and attachment side
        https://bugs.webkit.org/show_bug.cgi?id=198956

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.reset): Added.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):

2019-07-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: missing demo audits for WebInspectorAudit functions
        https://bugs.webkit.org/show_bug.cgi?id=198719

        Reviewed by Matt Baker.

        Other than the LayoutTests, there's no way to see an example of the functionality of many of
        the exposed `WebInspectorAudit` functions. There should be a demo audit for every exposed
        function so they're more discoverable.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype._addDefaultTests):
        (WI.AuditManager.prototype._addDefaultTests.removeWhitespace): Added.
        Move all demo audit test functions to be actual JavaScript functions, which are then
        stringified and stripped of unnecessary white-space.

        * Localizations/en.lproj/localizedStrings.js:

2019-07-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r245498): Timelines: CPU: discontinuities are filled in by the next record
        https://bugs.webkit.org/show_bug.cgi?id=198927

        Reviewed by Matt Baker.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording):
        (WI.TimelineRecording.prototype.start):
        (WI.TimelineRecording.prototype.capturingStarted): Added.
        (WI.TimelineRecording.prototype.capturingStopped): Added.
        (WI.TimelineRecording.prototype.reset):
        (WI.TimelineRecording.prototype.addRecord):
        (WI.TimelineRecording.prototype.discontinuitiesInTimeRange):
        (WI.TimelineRecording.prototype.addDiscontinuity): Deleted.
        Notify the `TimelineRecording` when capturing has started/stopped.
        Adjust the first record after a discontinuity to have it's `startTime` match the `endTime`
        of the most recent discontinuity.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.addRecord):
        * UserInterface/Models/CPUTimeline.js:
        (WI.CPUTimeline.prototype.addRecord):
        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.adjustStartTime): Added.
        (WI.CPUTimelineRecord.prototype.adjustStartTimeToLastRecord): Deleted.
        * UserInterface/Models/MemoryTimeline.js:
        (WI.MemoryTimeline.prototype.addRecord):
        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord.prototype.adjustStartTime): Added.
        (WI.MemoryTimelineRecord.prototype.adjustStartTimeToLastRecord): Deleted.
        * UserInterface/Models/NetworkTimeline.js:
        (WI.NetworkTimeline.prototype.addRecord):

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.layout):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.layout):
        Include discontinuities that exactly match the start/end time of the record immediately
        before/after the discontinuity.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineCapturingStateChanged):
        (WI.TimelineRecordingContentView.prototype._recordingReset):
        Move the logic for handling discontinuity start/end times to the `TimelineRecording`.

        * UserInterface/Base/Utilities.js:

2019-06-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Remove trailing white-space
        https://bugs.webkit.org/show_bug.cgi?id=199346

        Reviewed by Matt Baker.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype._initiatorCallFramesFromPayload):
        * UserInterface/Images/Import.svg:
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input):
        * UserInterface/Views/DataGrid.css:
        (.data-grid .resizer):
        * UserInterface/Views/DatabaseContentView.css:
        (.storage-view):
        * UserInterface/Views/GoToLineDialog.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/GradientSlider.css:
        (.gradient-slider > .add-area):
        (.gradient-slider-knob > :matches(img, div)):
        * UserInterface/Views/ResourceDetailsSection.css:
        * UserInterface/Views/ScrubberNavigationItem.css:
        (.navigation-bar .item.scrubber > input[disabled]):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (.popover .expandable):
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.timeline-record-type-script.garbage-collected > .segment,):
        * UserInterface/Workers/HeapSnapshot/HeapSnapshotWorker.js:
        (HeapSnapshotWorker.prototype.createSnapshot):

2019-06-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Remove duplicate "Private" section and fix white space

        Unreviewed code style fix.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):

2019-06-27  Beth Dakin  <bdakin@apple.com>

        Upstream use of MACCATALYST
        https://bugs.webkit.org/show_bug.cgi?id=199245
        rdar://problem/51687723

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig:

2019-06-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: throw an error if console.count/console.countReset is called with an object that throws an error from toString
        https://bugs.webkit.org/show_bug.cgi?id=199252

        Reviewed by Joseph Pecoraro.

        Add entries for `console.countReset` and `console.timeLog`.

        Rename `title` to `label` for `console.time`, `console.timeLog`, and `console.timeEnd` to
        better match the spec.

        * UserInterface/Models/NativeFunctionParameters.js:

2019-06-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update legacy backend commands after enum name change
        https://bugs.webkit.org/show_bug.cgi?id=199250

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:

2019-06-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Elements: the forced pseudo-class indicator isn't visible when hovering
        https://bugs.webkit.org/show_bug.cgi?id=199166

        Reviewed by Matt Baker.

        Make the pseudo-class indicator into its own element instead of being a `::before`.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.updateSelectionArea):
        (WI.DOMTreeElement.prototype.updateTitle):
        (WI.DOMTreeElement.prototype._updatePseudoClassIndicator): Added.
        (WI.DOMTreeElement.prototype.get pseudoClassesEnabled): Deleted.
        (WI.DOMTreeElement.prototype._nodePseudoClassesDidChange): Deleted.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom):
        (.tree-outline.dom li .pseudo-class-indicator): Added.
        (body[dir=ltr] .tree-outline.dom li .pseudo-class-indicator): Added.
        (body[dir=rtl] .tree-outline.dom li .pseudo-class-indicator): Added.
        (.tree-outline.dom:focus li.selected .pseudo-class-indicator): Added.
        (.tree-outline.dom li.pseudo-class-enabled > .selection-area::before): Deleted.
        (body[dir=ltr] .tree-outline.dom li.pseudo-class-enabled > .selection-area::before): Deleted.
        (body[dir=rtl] .tree-outline.dom li.pseudo-class-enabled > .selection-area::before): Deleted.
        (.tree-outline.dom:focus li.selected.pseudo-class-enabled > .selection-area::before): Deleted.

        * UserInterface/Views/FormattedValue.css:
        (.formatted-node > .tree-outline.dom):
        Adjust the indent of any `DOMTreeOutline` so there's more room for the pseudo-class
        indicator, such as in the Console.

2019-06-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: show shadow DOM by default
        https://bugs.webkit.org/show_bug.cgi?id=199128

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:

        * UserInterface/Test/Test.js:
        (WI.loaded):
        Overriding the default value isn't necessary since the default is now true.

2019-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r246621): Web Inspector: Styles: property may get removed when editing after deleting value
        https://bugs.webkit.org/show_bug.cgi?id=199143
        <rdar://problem/52042815>

        Reviewed by Matt Baker.

        r246621 affected when WI.CSSStyleDeclaration.Event.PropertiesChanged event is fired, which caused
        SpreadsheetCSSStyleDeclarationEditor to possibly enter a state when `focused` property is
        incorrectly set to false.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved): Removed.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyWillRemove): Added.
        Renamed from "removed" to "willRemove" since we need to call it before the property DOM element
        is detached from the document.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.remove):
        Don't set focused to false when the removed property wasn't focused.
        This code need to exist because removing focused element from the DOM doesn't trigger blur event.

2019-06-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Implement console.timeLog
        https://bugs.webkit.org/show_bug.cgi?id=199184

        Reviewed by Devin Rousso.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendMessageTextAndArguments):
        Time messages (like timeLog) do not include their messageText
        in their parameters list. So to behave more like normal logs
        build a parameter list that includes it at the front.

2019-06-23  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r246684): Dark Mode: dashboard buttons should have no background
        https://bugs.webkit.org/show_bug.cgi?id=199136
        <rdar://problem/52035798>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        (.toolbar .dashboard .item.button,):

2019-06-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: show green highlight for newly added properties only when name and value are present
        https://bugs.webkit.org/show_bug.cgi?id=199131

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):

2019-06-22  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r241980): Web Inspector: Styles: Pressing Tab/Enter on last property no longer focuses on selector on next rule
        https://bugs.webkit.org/show_bug.cgi?id=199125
        <rdar://problem/52011182>

        Reviewed by Matt Baker.

        Since SpreadsheetSelectorField's focus handler was removed in r241980, focusing on the selector element
        doesn't start editing it.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.startEditingRuleSelector):

2019-06-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: unbalanced quotes and parenthesis aren't displayed as property closed after editing values
        https://bugs.webkit.org/show_bug.cgi?id=199090
        <rdar://problem/51965431>

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
        Unbalanced quotes and parenthesis are fixed inside of CSSProperty's rawValue setter.
        Render the value from the model, not the view.

2019-06-21  Matt Baker  <mattbaker@apple.com>

        Web Inspector: remove unused DataGrid style .force-focus
        https://bugs.webkit.org/show_bug.cgi?id=199112
        <rdar://problem/51993412>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/HeapAllocationsTimelineView.css:
        (.timeline-view.heap-allocations > .data-grid:not(:focus) tr.selected.invalid):
        (.timeline-view.heap-allocations > .data-grid:not(:focus, .force-focus) tr.selected.invalid): Deleted.

        * UserInterface/Views/ResourceTreeElement.css:
        (.item.resource.resource-type-websocket:not(.selected) .status .ready-state.open,):
        (.item.resource.resource-type-websocket:not(.selected) .status .ready-state.connecting,):
        Missed in https://bugs.webkit.org/show_bug.cgi?id=190480.

2019-06-21  Matt Baker  <mattbaker@apple.com>

        Web Inspector: remove .legacy-mac/.latest-mac CSS classes, standardize on .latest-mac UI
        https://bugs.webkit.org/show_bug.cgi?id=199109
        <rdar://problem/51991129>

        Reviewed by Timothy Hatcher.

        Drop legacy macOS version support from Web Inspector UI.

        * UserInterface/Base/Main.js:

        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        (body.latest-mac .toolbar .dashboard .item.button): Deleted.

        * UserInterface/Views/Toolbar.css:
        (.toolbar):
        (.toolbar .item.button,):
        (.toolbar .search-bar > input[type="search"]):
        (.toolbar .search-bar > input[type="search"]:focus):
        (@media (-webkit-min-device-pixel-ratio: 2)):
        (.toolbar .item.button:active):
        (body.window-inactive .toolbar .item.button,):
        (@media (prefers-color-scheme: dark)):
        (.toolbar .search-bar > input[type="search"]::placeholder):
        (body.window-inactive .toolbar .search-bar > input[type="search"]::placeholder):
        (body.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button):
        (.toolbar .dashboard-container):
        (body .toolbar): Deleted.
        (body.legacy-mac .toolbar .item.button,): Deleted.
        (body.legacy-mac .toolbar .search-bar > input[type="search"]): Deleted.
        (body.legacy-mac .toolbar .search-bar > input[type="search"]:focus): Deleted.
        (body.legacy-mac .toolbar .item.button:active): Deleted.
        (body.window-inactive.legacy-mac .toolbar .item.button,): Deleted.
        (body.latest-mac .toolbar .item.button,): Deleted.
        (body.latest-mac .toolbar .search-bar > input[type="search"]): Deleted.
        (body.latest-mac .toolbar .search-bar > input[type="search"]:focus): Deleted.
        (body.latest-mac .toolbar .item.button:active): Deleted.
        (body.latest-mac.window-inactive .toolbar .item.button,): Deleted.
        (body.latest-mac .toolbar .search-bar > input[type="search"]::placeholder): Deleted.
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::placeholder): Deleted.
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button): Deleted.
        (body.latest-mac .toolbar .dashboard-container): Deleted.

2019-06-20  Matt Baker  <mattbaker@apple.com>

        Web Inspector: rename shadowRootPushed parameter to match protocol
        https://bugs.webkit.org/show_bug.cgi?id=199098

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.shadowRootPushed):

2019-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Error "null is not an object (evaluating 'syntaxTree.containersOfPosition')" when setting a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=199082

        Reviewed by Matt Baker.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        The script syntax tree may be fetched even if the resource hasn't finished parsing (or had
        a syntax error), so it's possible for it to be `null`.

2019-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Dark Mode: inactive tab bar item should get darker on hover
        https://bugs.webkit.org/show_bug.cgi?id=199022

        Reviewed by Darin Adler.

        * UserInterface/Views/TabBar.css:
        (.tab-bar:not(.animating) > .item:not(.selected, .disabled):hover):
        (@media not (prefers-color-scheme: dark) .tab-bar:not(.animating) > .item:not(.selected, .disabled):hover > .icon):
        (@media (prefers-color-scheme: dark) .tab-bar):
        (@media (prefers-color-scheme: dark) .tab-bar > .item):
        (@media (prefers-color-scheme: dark) .tab-bar > .item:not(.disabled).selected):
        (@media (prefers-color-scheme: dark) .tab-bar:not(.animating) > .item:not(.selected):hover):
        (@media (prefers-color-scheme: dark) body.window-inactive .tab-bar):
        (@media (prefers-color-scheme: dark) body.window-inactive .tab-bar > .item):
        (@media (prefers-color-scheme: dark) body.window-inactive .tab-bar > .item.selected):

        * UserInterface/Views/Toolbar.css:
        (@media (prefers-color-scheme: dark) body .toolbar):

2019-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: setting a breakpoint on a non-JavaScript line should immediately show as unresolved
        https://bugs.webkit.org/show_bug.cgi?id=199033

        Reviewed by Matt Baker.

        Remove the `shouldSpeculativelyResolve` parameter, as it was resolving breakpoints even in
        the case that there were no resolved locations for the given breakpoint.

        In the case that there are resolved locations, the breakpoint would've already been resolved
        by the time that `shouldSpeculativelyResolve` would've taken effect, so it's unnecessary.

        This parameter was only used when setting a breakpoint from a `SourceCodeTextEditor` gutter.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype._setBreakpoint):
        (WI.DebuggerManager.prototype._setBreakpoint.didSetBreakpoint):

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorBreakpointAdded):

2019-06-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Edit -> Tag doesn't do anything for html, head, and body elements
        https://bugs.webkit.org/show_bug.cgi?id=199052
        <rdar://problem/51923906>

        Reviewed by Matt Baker.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.populateDOMNodeContextMenu):
         - Don't show an "Edit > Tag" for <html>, <head>, and <body> nodes
         - Disable any "Edit" submenu item if it's target is already being edited
         - Prevent "Add" submenu items from being shown for text nodes

2019-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Debugger: current call frame indicator isn't vertically centered
        https://bugs.webkit.org/show_bug.cgi?id=199015

        Reviewed by Matt Baker.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline .item.call-frame .status):

2019-06-19  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r240946): Web Inspector: Styles: Pasting multiple properties has issues
        https://bugs.webkit.org/show_bug.cgi?id=198505
        <rdar://problem/51374780>

        Reviewed by Matt Baker.

        Since r240946, setting WI.CSSStyleDeclaration.prototype.text updates the text immediately.
        When WI.CSSStyleDeclaration.prototype.update gets called after setting text, it exits early
        without firing WI.CSSStyleDeclaration.Event.PropertiesChanged.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.set text):

2019-06-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused _pendingFilter from NetworkTableContentView
        https://bugs.webkit.org/show_bug.cgi?id=199026

        Reviewed by Devin Rousso.

        This flag is no longer set as of https://trac.webkit.org/changeset/225895.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._processPendingEntries):

2019-06-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: undefined is not an object (evaluating 'sourceCodePosition.lineNumber')
        https://bugs.webkit.org/show_bug.cgi?id=199019

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.linkifyLocation):

2019-06-19  Zhifei Fang  <zhifei_fang@apple.com>

        Correct the error object link color in dark mode.
        https://bugs.webkit.org/show_bug.cgi?id=198033

        Reviewed by Devin Rousso.

        * UserInterface/Views/ErrorObjectView.css:
        (@media (prefers-dark-interface)):
        (.error-object-link-container):

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: detail view shouldn't stay open when the related entry is removed
        https://bugs.webkit.org/show_bug.cgi?id=198951

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._mainResourceDidChange):
        Hide the detail view if the main resource changes and we aren't preserving the log.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.reloadVisibleColumnCells):
        Only attempt to populate cells for rows that the `_dataSource` actually has. Without this,
        the `_delegate` may be asked to populate a cell for a row it doesn't have, which would error.

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: parseQueryParameters fails to successfully parse query parameter values that contain "="
        https://bugs.webkit.org/show_bug.cgi?id=198971
        <rdar://problem/51852782>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/URLUtilities.js:
        (parseQueryString):

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Heap: subsequent snapshots taken manually don't appear in the list
        https://bugs.webkit.org/show_bug.cgi?id=198941

        Reviewed by Joseph Pecoraro.

        Since heap snapshot records can be added at any time, including when not actively recording,
        when the "Entire Recording" range is selected, make sure to set the `filterEndTime` to be an
        effectively infinite number so that records added later aren't filtered out.

        This isn't done for other timeline views as they may have graphs that don't expect to render
        from time 0 till infinity, not to mention being unable to add records when not recording.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._updateTimelineViewTimes):

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: Canvas: cannot select saved recordings
        https://bugs.webkit.org/show_bug.cgi?id=198953

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.treeElementToggled):
        Don't early return if the `TreeElement` isn't `selectable` as the owner `TreeOutline` may
        want to dispatch an event that it was clicked.

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: the initial state should be selected when processing a new/imported recording if the navigation sidebar is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=198952

        Reviewed by Joseph Pecoraro.

        Prevent any content from being generated until `initialLayout` is called, as otherwise it's
        possible for the `CanvasNavigationSidebar` to update the current action index before the
        preview element has been created, which would throw an error.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.initialLayout):
        (WI.RecordingContentView.prototype._updateSliderValue):
        (WI.RecordingContentView.prototype._handleRecordingProcessedAction):
        Drive-by: update the slider max each time the selected action index is changed.

2019-06-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: imported recordings aren't selectable from the overview if there are no canvases in the page
        https://bugs.webkit.org/show_bug.cgi?id=198955

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._addSavedRecording):
        Hide the content placeholder when a recording is imported. It won't be shown again because
        the `subviews` list will never be empty, as there's no way to remove an imported recording.

        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.addContentViewForItem):
        (WI.CollectionContentView.prototype.removeContentViewForItem):
        (WI.CollectionContentView.prototype.showContentPlaceholder): Added.
        (WI.CollectionContentView.prototype.hideContentPlaceholder): Added.
        (WI.CollectionContentView.prototype.initialLayout):
        (WI.CollectionContentView.prototype._selectItem):
        (WI.CollectionContentView.prototype._showContentPlaceholder): Deleted.
        (WI.CollectionContentView.prototype._hideContentPlaceholder): Deleted.
        Make `showContentPlaceholder`/`hideContentPlaceholder` protected for any subclasses to call.

2019-06-17  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: remove ellipses from "Break on" context menu item title
        https://bugs.webkit.org/show_bug.cgi?id=198944

        Reviewed by Devin Rousso.

        Update context menu title to comply with Apple HI guidelines.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ContextMenuUtilities.js:

2019-06-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: adding a DOM/Event/URL breakpoint should enable breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=198932

        Reviewed by Matt Baker.

        Match the behavior of JavaScript breakpoints, which enable breakpoints globally when a new
        breakpoint is set or an existing breakpoint is enabled.

        This avoids the situation where setting a DOM breakpoint or a specific event listener
        breakpoint appears to not "work" because breakpoints are globally disabled. There is no
        "breakpoints disabled" banner in the Elements tab, so the user could be completely unaware
        of this, and therefore be confused as to why these breakpoints aren't being hit.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype._updateEventBreakpoint):

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint):

2019-06-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: remove extra space above Breakpoints section when breakpoints are disabled
        https://bugs.webkit.org/show_bug.cgi?id=198933

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .warning-banner):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .warning-banner):

2019-06-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: split the General panel into sub panels so it's less crowded
        https://bugs.webkit.org/show_bug.cgi?id=198803

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype.initialLayout):
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Many of the settings in General only affect a specific part of Web Inspector, and therefore
        aren't really "general".

        (WI.SettingsTabContentView.prototype._createElementsSettingsView): Added.
         - Element Selection
         - CSS Changes

        (WI.SettingsTabContentView.prototype._createSourcesSettingsView): Added.
         - Debugger
         - Source Maps

        (WI.SettingsTabContentView.prototype._createConsoleSettingsView): Added.
         - Traces (renamed from "Console")
         - WebRTC Logging
         - Media Logging
         - MSE Logging

        * Localizations/en.lproj/localizedStrings.js:

2019-06-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: the Inspector Style Sheet is missing when grouped by path
        https://bugs.webkit.org/show_bug.cgi?id=198860

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype.get styleSheets):
        (WI.CSSManager.prototype.inspectorStyleSheetsForFrame):
        (WI.CSSManager.prototype.preferredInspectorStyleSheetForFrame):
        (WI.CSSManager.prototype._inspectorStyleSheetsForFrame): Deleted.
        Expose a way to fetch all inspector stylesheets for a given frame.
        Make sure to associate inspector stylesheets with their frame.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._addResourcesRecursivelyForFrame):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCSSStyleSheetAdded):
        Add paths for inspector stylesheet creation/fetching when grouping by path.
        Sort inspector stylesheets as the first item of an origin/frame when grouping by path.

2019-06-17  Jamal Nasser  <jamaln@mail.com>

        Web Inspector: Go To Line dialog is white when in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=198596

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/GoToLineDialog.css:
        (@media (prefers-color-scheme: dark)):
        (.go-to-line-dialog):
        (.go-to-line-dialog > div > input):
        (.go-to-line-dialog > div > input::placeholder):
        (.go-to-line-dialog > div::before):

2019-06-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: searching doesn't use the case sensitive or regex global settings
        https://bugs.webkit.org/show_bug.cgi?id=198897

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.customPerformSearch):

2019-06-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r246178): extra spaces added in at-rules when formatting CSS
        https://bugs.webkit.org/show_bug.cgi?id=198806

        Reviewed by Joseph Pecoraro.

        * UserInterface/Workers/Formatter/CSSFormatter.js:
        (CSSFormatter.prototype._format):
        Add more specific tests for at-rules, and add/remove whitespace depending on the type of
        at-rule (e.g. `@supports` vs `@media`), as well as where the scanner is in the parameters of
        the at at-rule (e.g. `@supports |` vs `@media (|`).

        * UserInterface/Workers/Formatter/FormatterContentBuilder.js:
        (FormatterContentBuilder):
        (FormatterContentBuilder.prototype.get lastToken): Added.
        (FormatterContentBuilder.prototype.get currentLine):
        (FormatterContentBuilder.prototype.removeLastNewline):
        (FormatterContentBuilder.prototype.removeLastWhitespace):
        (FormatterContentBuilder.prototype._popFormattedContent):
        (FormatterContentBuilder.prototype._append):
        Update `lastTokenWasNewline` and `lastTokenWasWhitespace` when removing newlines/whitespace.
        Memoize the `currentLine` so it's less expensive to re-fetch.

2019-06-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: indent type and size settings aren't respected everywhere
        https://bugs.webkit.org/show_bug.cgi?id=198804

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        When creating a `CodeMirror` instance, default to using the global `Setting`s as the options.
        If an override is specified in `options`, it will take precedence and the `CodeMirror` will
        ignore any changes to the `Setting` as well.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor):
        (WI.TextEditor.prototype.close): Deleted.

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):
        * UserInterface/Views/BreakpointActionView.js:
        (WI.BreakpointActionView.prototype._updateBody):
        * UserInterface/Views/ConsolePrompt.js:
        (WI.ConsolePrompt):
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WI.ScopeChainDetailsSidebarPanel.prototype._addWatchExpressionButtonClicked):
        Remove overrides that aren't necessary for `CodeMirror` to fit in the container element:
         - `showWhitespaceCharacters`
         - `indentWithTabs`
         - `indentUnit`

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.close):
        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView.prototype.closed): Deleted.
        * UserInterface/Views/TextContentView.js:
        (WI.TextContentView.prototype.closed): Deleted.
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView.prototype.closed):
        Delete the logic for removing event listeners from global `Setting`, as it didn't work
        anyways, since none of the event listeners were added using a `thisObject`.

2019-06-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: sticky header disappears when over scrolling
        https://bugs.webkit.org/show_bug.cgi?id=198833

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings .navigation-bar):
        (.content-view.settings > .settings-view): Added.
        (.content-view.settings): Deleted.

2019-06-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: imported recordings do not have JavaScript call trees
        https://bugs.webkit.org/show_bug.cgi?id=197490
        <rdar://problem/50589158>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.initializeCallingContextTrees):
        Make sure to actually save the provided stack traces and samples in the export data.

        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.fromJSON):
        (WI.ScriptTimelineRecord.prototype.toJSON):
        Drive-by: include `extraDetails`, which contains useful information like "default prevented".

2019-06-10  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r244268): Web Inspector: Styles: navigating from Computed to Styles doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=198508
        <rdar://problem/51375503>

        Reviewed by Matt Baker.

        It didn't work because the detached sidebar panel tried to access its parent view (this.parentSidebar).

        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel.prototype.computedStyleDetailsPanelShowProperty): Added.
        (WI.ComputedStyleDetailsSidebarPanel):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.computedStyleDetailsPanelShowProperty): Deleted.
        Move computedStyleDetailsPanelShowProperty to ComputedStyleDetailsSidebarPanel since it's the only
        panel where it's needed.

2019-06-10  Alexey Shvayka  <shvaikalesh@gmail.com>

        Web Inspector: "Copy Path to Property" doesn't work with multiline keys
        https://bugs.webkit.org/show_bug.cgi?id=198691

        Reviewed by Matt Baker.

        Correctly escape line terminators to prevent doubleQuotedString from returning malformed strings.

        * UserInterface/Base/Utilities.js: Use JSON.stringify.

2019-06-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r246025): prototypes in object previews are visible even when setting `showOnlyJSON`
        https://bugs.webkit.org/show_bug.cgi?id=198721

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree.properties-only.json-only .object-tree-property.prototype-property): Added.
        (.object-tree.properties-only.json-only .object-tree-property .prototype-property): Deleted.

2019-06-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: longhand CSS properties overridden by shorthands miss strikethrough
        https://bugs.webkit.org/show_bug.cgi?id=198629
        <rdar://problem/51504160>

        Reviewed by Devin Rousso.

        Longhand CSS properties (e.g. "font-size") overriden by shorthands (e.g. "font") now have strikethroughs.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.set overridingProperty):
        (WI.CSSProperty):

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._updateStyleCascade):
        Call _associateRelatedProperties before _markOverriddenProperties because
        _associateRelatedProperties sets relatedShorthandProperty property, which
        is now used by _markOverriddenProperties.

        (WI.DOMNodeStyles.prototype._markOverriddenProperties.isOverriddenBy):
        (WI.DOMNodeStyles.prototype._markOverriddenProperties):

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: remove always disabled details sidebar navigation item
        https://bugs.webkit.org/show_bug.cgi?id=198393

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r245833): Timelines: CPU: JavaScript label is missing and JavaScript section of pie chart is black
        https://bugs.webkit.org/show_bug.cgi?id=198627

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.displayNameForSampleType):
        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-javascript):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-javascript): Added.
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-script): Deleted.
        * UserInterface/Views/CPUUsageCombinedView.css:
        (.cpu-usage-combined-view > .graph > .range-chart .sample-type-javascript): Added.
        (.cpu-usage-combined-view > .graph > .range-chart .sample-type-script): Deleted.
        Use the enum string added in r245833 (`sample-type-javascript`) instead of what was there
        before (`sample-type-script`).

        * UserInterface/Views/Variables.css:
        (:root):
        Rename `--cpu-script-*` to `--cpu-javascript-*`.

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Formatter: pretty-print CSS using a Worker
        https://bugs.webkit.org/show_bug.cgi?id=197829
        <rdar://problem/36891532>

        Reviewed by Timothy Hatcher.

        * UserInterface/Proxies/FormatterWorkerProxy.js:
        (WI.FormatterWorkerProxy.prototype.formatCSS): Added.
        * UserInterface/Workers/Formatter/FormatterWorker.js:
        (FormatterWorker.prototype.formatCSS): Added.
        * UserInterface/Workers/Formatter/CSSFormatter.js: Added.
        (CSSFormatter):
        (CSSFormatter.prototype.get success):
        (CSSFormatter.prototype.get formattedText):
        (CSSFormatter.prototype.get sourceMapData):
        (CSSFormatter.prototype._format):

        * UserInterface/Workers/Formatter/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype.get currentLine): Added.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._canUseFormatterWorker):
        (WI.TextEditor.prototype._startWorkerPrettyPrint):

        * .eslintrc:

2019-06-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: Elements: print/rulers/compositing/paint navigation items shouldn't be visible if the inspected target doesn't have a PageAgent
        https://bugs.webkit.org/show_bug.cgi?id=198410

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype._showRulersChanged):

== Rolled over to ChangeLog-2019-06-05 ==
