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

        Web Inspector: Elements: context menu items in DOM tree should work when not clicking directly on the node representation
        https://bugs.webkit.org/show_bug.cgi?id=197541

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.populateDOMNodeContextMenu): Added.
        (WI.DOMTreeElement.prototype._populateTagContextMenu): Deleted.
        (WI.DOMTreeElement.prototype._populateTextContextMenu): Deleted.
        (WI.DOMTreeElement.prototype._populateNodeContextMenu): Deleted.
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):

2019-05-17  Joonghun Park  <pjh0718@gmail.com>

        Implement CSS `display: flow-root` (modern clearfix)
        https://bugs.webkit.org/show_bug.cgi?id=165603

        Reviewed by Zalan Bujtas.

        This change follows https://drafts.csswg.org/css-display-3/#valdef-display-flow-root as below.

        'display: flow-root' generates a block container box, and lays out its contents using flow layout.
        It always establishes a new block formatting context for its contents.

        * UserInterface/External/CodeMirror/css.js:

2019-05-17  Ross Kirsling  <ross.kirsling@sony.com>

        REGRESSION(r244350): Web Inspector: Storage tab data grids aren't editable.
        https://bugs.webkit.org/show_bug.cgi?id=198003

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMStorageContentView.js:
        (WI.DOMStorageContentView):
        Fix typo.

2019-05-17  Jamal Nasser  <jamaln@mail.com>

        Web Inspector: Dark Mode: Fix colors in network table waterfall container
        https://bugs.webkit.org/show_bug.cgi?id=197955

        Reviewed by Devin Rousso.

        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-event):
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-activity):
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area.dom-fullscreen):

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

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'resource.parentFrame.securityOrigin')
        https://bugs.webkit.org/show_bug.cgi?id=196572
        <rdar://problem/49578338>

        Reviewed by Timothy Hatcher.

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

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

        Web Inspector: REGRESSION: unable to expand/collapse non-selectable WI.TreeOutline
        https://bugs.webkit.org/show_bug.cgi?id=197591

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.treeElementToggled):

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

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'url.startsWith')
        https://bugs.webkit.org/show_bug.cgi?id=196662
        <rdar://problem/49659633>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendLocationLink):
        (WI.ConsoleMessageView.prototype._linkifyLocation): Deleted.

        * UserInterface/Base/Main.js:
        (WI.linkifyLocation):
        (WI.linkifySourceCode): Added.
        Split the logic into two functions, as there's no need to re-fetch the `SourceCode` from a
        given url if you already have the `SourceCode` in the caller.

2019-05-08  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r244952.

        Caused inspector to appear blank.

        Reverted changeset:

        "Web Inspector: Provide UIString descriptions to improve
        localizations"
        https://bugs.webkit.org/show_bug.cgi?id=195132
        https://trac.webkit.org/changeset/244952

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

        Web Inspector: Provide UIString descriptions to improve localizations
        https://bugs.webkit.org/show_bug.cgi?id=195132
        <rdar://problem/48457817>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/LoadLocalizedStrings.js:
        (WI.UIString):
        (WI.repeatedUIString.timelineRecordLayout):
        (WI.repeatedUIString.timelineRecordPaint):
        (WI.repeatedUIString.timelineRecordComposite):
        (WI.repeatedUIString.allExceptions):
        (WI.repeatedUIString.uncaughtExceptions):
        (WI.repeatedUIString.assertionFailures):
        (WI.repeatedUIString.allRequests):
        (WI.repeatedUIString.fetch):
        (WI.repeatedUIString.revealInDOMTree):
        * UserInterface/Models/LayoutTimelineRecord.js:
        (WI.LayoutTimelineRecord.displayNameForEventType):
        * UserInterface/Models/RenderingFrameTimelineRecord.js:
        (WI.RenderingFrameTimelineRecord.displayNameForTaskType):
        * UserInterface/Models/Resource.js:
        (WI.Resource.displayNameForType):
        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.layout):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.displayNameForSampleType):
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement.displayNameForType):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement.prototype.populateContextMenu):
        (WI.DOMNodeTreeElement):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._populateTagContextMenu):
        (WI.DOMTreeElement.prototype._populateNodeContextMenu):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointMouseDown):
        (WI.DebuggerSidebarPanel):
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.shortDisplayNameForResourceType):
        (WI.NetworkTableContentView.prototype.initialLayout):
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointMouseDown):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._renderSelector):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):

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

        Web Inspector: Styles: use the same green color for modified properties as in Changes panel
        https://bugs.webkit.org/show_bug.cgi?id=197538

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/ChangesDetailsSidebarPanel.css:
        (.changes-panel .css-property-line.added):
        (.changes-panel .css-property-line.removed):
        (.changes-panel .css-property-line.added::before):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.modified):
        (.spreadsheet-style-declaration-editor .property.modified:not(.selected)):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):

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

        Web Inspector: DOM: dragging a node to the console should log the node
        https://bugs.webkit.org/show_bug.cgi?id=197330

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype._ondragstart):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        (WI.LogContentView.prototype._handleDragOver): Added.
        (WI.LogContentView.prototype._handleDrop): Added.
        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):
        (WI.QuickConsole.prototype._handleDragOver): Added.
        (WI.QuickConsole.prototype._handleDrop): Added.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        Drive-by: update the format to be more unique.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: DOM: rename "low power" to "display composited"
        https://bugs.webkit.org/show_bug.cgi?id=197296

        Reviewed by Joseph Pecoraro.

        Removed specific ChangeLog entries since it is almost entirely mechanical changes.

        * UserInterface/Protocol/DOMObserver.js:
        * UserInterface/Controllers/DOMManager.js:
        * UserInterface/Controllers/TimelineManager.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Models/MediaInstrument.js:
        * UserInterface/Models/MediaTimelineRecord.js:
        * UserInterface/Models/TimelineRecording.js:
        * UserInterface/Views/DOMEventsBreakdownView.js:
        * UserInterface/Views/DOMEventsBreakdownView.css:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/NetworkTableContentView.css:
        * UserInterface/Views/TimelineIcons.css:
        * UserInterface/Views/TimelineTabContentView.js:
        * UserInterface/Images/PowerEfficientPlaybackStateChanged.svg: Added.
        * UserInterface/Images/LowPower.svg: Removed.
        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Record actions performed on WebGL2RenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=176008
        <rdar://problem/34213884>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        (WI.Recording.displayNameForSwizzleType):
        (WI.Recording.prototype.async swizzle):
        (WI.Recording.prototype.createContext):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.constantNameForParameter):
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.async swizzle):
        Treat all actions with a snapshot as being a "visible" action.

        * UserInterface/Views/CanvasTabContentView.css:
        (.content-view.tab.canvas .navigation-bar > .item .canvas:matches(.webgl, .webgl2, .webgpu, .webmetal) .icon): Added.
        (.content-view.tab.canvas .navigation-bar > .item .canvas.webgl): Deleted.
        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.shown):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.shown):
        (WI.RecordingContentView.prototype.initialLayout):
        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM.createParameterElement):

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

        Web Inspector: Dark Mode: borders between section should be lighter than background
        https://bugs.webkit.org/show_bug.cgi?id=197551

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DetailsSection.css:
        (.details-section .details-section):

2019-04-29  Alex Christensen  <achristensen@webkit.org>

        <rdar://problem/50299396> Fix internal High Sierra build
        https://bugs.webkit.org/show_bug.cgi?id=197388

        * Configurations/Base.xcconfig:

2019-04-26  Jessie Berlin  <jberlin@webkit.org>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=197313

        Reviewed by Alex Christensen.

        * Configurations/Version.xcconfig:

2019-04-25  Alex Christensen  <achristensen@webkit.org>

        Start using C++17
        https://bugs.webkit.org/show_bug.cgi?id=197131

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2019-04-24  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: don't start property selection when pressing right mouse button
        https://bugs.webkit.org/show_bug.cgi?id=197242
        <rdar://problem/50180380>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):

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

        Web Inspector: Network: importing a HAR with an active detail view shows no content
        https://bugs.webkit.org/show_bug.cgi?id=197223

        Reviewed by Timothy Hatcher.

        When hiding the detail view, we force a `layout` of the Network table, which causes the
        cached row count to be set to `0`, which prevents the `reloadDataAddedToEndOnly` from
        rendering anything since the `WI.Table` thinks it has no rows.

        Given that all of the users of `WI.Table` are backed by an array, we don't need to cache the
        number of rows since `.length` is an extremely cheap operation. In turn, this guarantees
        that we are always rendering with an accurate value.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get numberOfRows):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype._removeRows):

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

        Web Inspector: REGRESSION(r238168): Network: preserve log doesn't show main frame main resource changes
        https://bugs.webkit.org/show_bug.cgi?id=197220
        <rdar://problem/49960464>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype._addCollection):
        (WI.NetworkTableContentView.prototype._resetCollection): Added.
        (WI.NetworkTableContentView.prototype._changeCollection):
        (WI.NetworkTableContentView.prototype._mainResourceDidChange):
        We want to add the frame's main resource in the case that it's the main frame, but we also
        want to clear the main collection of data (e.g. if viewing an imported HAR).
        Drive-by: `_groupByDOMNodeNavigationItem` was renamed in a previous patch.

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

        Web Inspector: Network: support drag/drop for importing
        https://bugs.webkit.org/show_bug.cgi?id=197221

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTabContentView.js:
        (WI.NetworkTabContentView.prototype.async.handleFileDrop): Added.
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.processHAR): Added.
        (WI.NetworkTableContentView.prototype._importHAR):

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.async readText):
        Only `await` if the result is a `Promise`.

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

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'this.ownerDocument.frameIdentifier')
        https://bugs.webkit.org/show_bug.cgi?id=196420
        <rdar://problem/49444205>

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.prototype.get frame): Added.
        (WI.DOMNode.prototype.get frameIdentifier): Deleted.
        Modify the existing `frameId` to represent the owner frame of the node, rather than the
        frame it holds (in the case of an `<iframe>`).

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.domBreakpointsForNode):
        (WI.DOMDebuggerManager.prototype._detachDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._nodeInserted):
        (WI.DOMDebuggerManager.prototype._nodeRemoved):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._populateTagContextMenu):
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._selectExecutionContext):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._highlightNodesWithSelector):

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

        Web Inspector: Canvas: no obvious way of switching to the overview when viewing an imported recording
        https://bugs.webkit.org/show_bug.cgi?id=197178
        <rdar://problem/50106641>

        Reviewed by Timothy Hatcher.

        Expand the idea of "imported" recordings to include "saved" recordings, ones whose
        underlying <canvas> was destroyed.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        (WI.CanvasTabContentView.prototype._addRecording):
        (WI.CanvasTabContentView.prototype._handleRecordingSavedOrStopped): Added.
        (WI.CanvasTabContentView.prototype.initialLayout): Deleted.
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped): Deleted.
        Make the "Saved Recordings" folder a child of the "Overview" so that the "Overview" path
        component is always visible/clickable.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype.contentViewAdded):
        (WI.CanvasOverviewContentView.prototype.attached):
        (WI.CanvasOverviewContentView.prototype.detached):
        (WI.CanvasOverviewContentView.prototype._addSavedRecording): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingSaved): Added.
        (WI.CanvasOverviewContentView.prototype._handleSavedRecordingClicked): Added.
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas.saved-recordings): Added.
        (.content-view.canvas-overview .content-view.canvas.saved-recordings .tree-outline): Added.
        (.content-view.canvas-overview .content-view.canvas.saved-recordings .tree-outline > .item.recording > .icon): Added.
        Add a card for "Saved Recordings" that mimics the style of regular canvas cards.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.get savedRecordings): Added.
        (WI.CanvasManager.prototype.async processJSON):
        (WI.CanvasManager.prototype.disable):
        (WI.CanvasManager.prototype._removeCanvas):
        (WI.CanvasManager.prototype.get importedRecordings): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: REGRESSION: Sources: auto-continue breakpoint triangle is incorrectly positioned
        https://bugs.webkit.org/show_bug.cgi?id=197179

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/BreakpointTreeElement.css:
        (.item.breakpoint .status): Added.
        (.item.breakpoint .status > .status-image.auto-continue::after):

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

        Web Inspector: Timelines: CPU: remove extra border under last section
        https://bugs.webkit.org/show_bug.cgi?id=197120

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview):
        (.timeline-view.cpu > .content > .overview:not(:last-child)): Added.

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

        Web Inspector: Timelines: adjust default Media timeline column widths
        https://bugs.webkit.org/show_bug.cgi?id=197114

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: REGRESSION (r244155): pressing down expands folders in trees
        https://bugs.webkit.org/show_bug.cgi?id=197051
        <rdar://problem/50006414>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableItem):
        Skip hidden items when traversing the tree.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.ondelete):
        Reveal all items about to be deleted so that the above change won't skip any siblings.

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

        Web Inspector: Canvas: enable WebGL2 for inspector page
        https://bugs.webkit.org/show_bug.cgi?id=196932
        <rdar://problem/49916213>

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.process.getContent):
        Add additional checks for `ImageBitmapRenderingContext` and `WebGLRenderingContext`.

2019-04-17  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Navigating to resource sometimes shows different resource
        https://bugs.webkit.org/show_bug.cgi?id=195978
        <rdar://problem/49043191>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.cancelRestoringState):
        Reset _pendingViewStateCookie so _checkElementsForPendingViewStateCookie could exit early.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype.initialLayout):
        (WI.ResourceSidebarPanel.prototype._mainFrameMainResourceDidChange):
        (WI.ResourceSidebarPanel.prototype._createMainFrameTreeElement):
        Don't try to change content view on initialLayout.

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

        Web Inspector: CPU Usage Timeline - Include # of Network Requests in the Statistics section
        https://bugs.webkit.org/show_bug.cgi?id=197039
        <rdar://problem/49996299>

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype._computeStatisticsData):
        (WI.CPUTimelineView.prototype._clearStatistics):
        Add the number of network requests started in the selected range.

2019-04-17  Timothy Hatcher  <timothy@apple.com>

        Rename `supported-color-schemes` to `color-scheme`.
        https://bugs.webkit.org/show_bug.cgi?id=197016
        rdar://problem/49980259

        Reviewed by Simon Fraser.

        * UserInterface/Views/Main.css:
        (:root):

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

        Web Inspector: Canvas: imported recordings aren't processed when the navigation sidebar is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=196921
        <rdar://problem/49910815>

        Reviewed by Timothy Hatcher.

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

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

        Web Inspector: Extension scripts with parse errors do not show up in Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=196996
        <rdar://problem/47054804>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.scriptDidFail):
        Create a LocalScript that can be linked to but ignore it
        if we already have a Resource for the URL.

        * UserInterface/Protocol/DebuggerObserver.js:
        (WI.DebuggerObserver.prototype.scriptFailedToParse):
        Let DebuggerManager potentially create a script for this.

        * UserInterface/Models/Script.js:
        (WI.Script):
        Local scripts provide a null id and id is not required below.

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

        Web Inspector: Worker imported scripts not showing up in Open Quickly dialog if inspector open after workers exist
        https://bugs.webkit.org/show_bug.cgi?id=196986

        Reviewed by Devin Rousso.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addScriptsForTarget):
        We were unnecessary skipping Scripts that do not have a sourceURL but do
        have a URL, which ends up being Worker populated scripts.

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

        REGRESSION(r238168) Web Inspector: <iframe src=...> request does not show up in Network Tab
        https://bugs.webkit.org/show_bug.cgi?id=193505
        <rdar://problem/47325957>

        Reviewed by Devin Rousso.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._handleFrameWasAdded):
        Handle new frames by adding the frame's main resource.

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

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'this._contentViewContainer.currentContentView.selectionPathComponents')
        https://bugs.webkit.org/show_bug.cgi?id=196936
        <rdar://problem/49917789>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype.showHeapSnapshotTimelineRecord):
        (WI.HeapAllocationsTimelineView.prototype.get navigationItems):
        (WI.HeapAllocationsTimelineView.prototype.get selectionPathComponents):
        Drive-by: when selecting a record, force it to be visible before selecting it, as otherwise
        the selection events won't be fired.

        * UserInterface/Views/HeapAllocationsTimelineOverviewGraph.js:
        (WI.HeapAllocationsTimelineOverviewGraph.prototype.layout):
        Drive-by: ensure that clicking on a [S] heap snapshot record icon actually selects the record.

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

        Unprefix -webkit-sticky
        https://bugs.webkit.org/show_bug.cgi?id=196962
        <rdar://problem/40903458>

        Reviewed by Simon Fraser.

        Replace all `-webkit-sticky` with `sticky`.

        * UserInterface/Models/CSSKeywordCompletions.js:
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view-container > .content-view.audit-test-case > header):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group.contains-test-case > header):
        * UserInterface/Views/ChangesDetailsSidebarPanel.css:
        (.changes-panel .resource-section > .header):
        * UserInterface/Views/DetailsSection.css:
        (.details-section > .header):
        * UserInterface/Views/NetworkDetailView.css:
        (.network-detail .navigation-bar):
        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings .navigation-bar):
        * UserInterface/Views/Table.css:
        (.table > .header):

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

        Web Inspector: remove unused WI.DOMTreeDataGrid
        https://bugs.webkit.org/show_bug.cgi?id=196958
        <rdar://problem/49931383>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DOMTreeDataGrid.css: Removed.
        * UserInterface/Views/DOMTreeDataGrid.js: Removed.
        * UserInterface/Views/DOMTreeDataGridNode.js: Removed.
        * UserInterface/Main.html:

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

        Web Inspector: Storage: values truncated in Local/Session table
        https://bugs.webkit.org/show_bug.cgi?id=178318
        <rdar://problem/34998581>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid):
        (WI.DataGrid.prototype._copyTextForDataGridNode):
        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid):
        Refactor `WI.DataGrid` constructor to allow for more optional arguments.
        Introduce a new optional argument `copyCallback` that can be used to override the text that
        would be copied for any `WI.DataGridNode` in any column.

        * UserInterface/Views/DOMStorageContentView.js:
        (WI.DOMStorageContentView):
        (WI.DOMStorageContentView.prototype.itemAdded):
        (WI.DOMStorageContentView.prototype.itemUpdated):
        (WI.DOMStorageContentView.prototype._populate):
        (WI.DOMStorageContentView.prototype._dataGridCopy): Added.
        Save the full non-truncated value as part of the `WI.DataGridNode`'s `data`. When copying,
        use the full non-truncated value instead of what was shown in the DOM.

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

        Web Inspector: DOM Nodes should not show $0 when selected in Console area
        https://bugs.webkit.org/show_bug.cgi?id=196953

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        Enable showing the last selected element.

        * UserInterface/Views/DOMTreeOutline.js:
        Make parameters explicit. Drop "selectable" which was always true.
        And add a new option for adding a class name.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom.show-last-selected li.last-selected > span::after):
        (.tree-outline.dom.show-last-selected:focus li.last-selected > span::after):
        Only show the "= $0" for a DOM tree that has enabled showing the last selected element.

        * UserInterface/Views/FormattedValue.css:
        (.formatted-node > .tree-outline.dom li.selected .selection-area):
        Don't show the selection-area for a console formatted node.

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

        Web Inspector: update sheet rect whenever inspector window size changes
        https://bugs.webkit.org/show_bug.cgi?id=196942
        <rdar://problem/49920241>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._windowResized):
        (WI._updateSheetRect): Added.

2019-04-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Unreviewed, fix typo in a comment.

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

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

        Web Inspector: Heap: don't use recursion when calculating root paths
        https://bugs.webkit.org/show_bug.cgi?id=196890
        <rdar://problem/49870751>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot.prototype.shortestGCRootPath):
        (HeapSnapshot.prototype._determineGCRootPaths):
        (HeapSnapshot.prototype._gcRootPathes.visitNode): Deleted.
        (HeapSnapshot.prototype._gcRootPathes): Deleted.

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

        Web Inspector: SameSite parsing should be stricter
        https://bugs.webkit.org/show_bug.cgi?id=196927
        <rdar://problem/42291601>

        Reviewed by Devin Rousso.

        * UserInterface/Models/Cookie.js:
        (WI.Cookie.parseSameSiteAttributeValue):

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

        Web Inspector: CPU Usage Timeline - Energy impact popover flickers
        https://bugs.webkit.org/show_bug.cgi?id=196931
        <rdar://problem/49569122>

        Reviewed by Devin Rousso.

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

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

        Web Inspector: REGRESSION(r244268): Canvas: navigation sidebar no longer appears
        https://bugs.webkit.org/show_bug.cgi?id=196920
        <rdar://problem/49910618>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype.showNavigationSidebarPanel):
        Now that we no longer call `addSubview` when adding a sidebar panel, we can't check to see
        if `parentSidebar` has been set, as that is just an alias for `parentView`.

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

        Web Inspector: DOMDebugger: move breakpoint storage to use `WI.ObjectStore`
        https://bugs.webkit.org/show_bug.cgi?id=196231
        <rdar://problem/49236864>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpointsForNode):
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.addURLBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._saveDOMBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype._saveEventBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype._saveURLBreakpoints): Deleted.

        * UserInterface/Models/DOMBreakpoint.js:
        (WI.DOMBreakpoint.prototype.saveIdentityToCookie):
        (WI.DOMBreakpoint.prototype.toJSON): Added.
        (WI.DOMBreakpoint.prototype.get serializableInfo): Deleted.
        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):
        (WI.EventBreakpoint.prototype.toJSON): Added.
        (WI.EventBreakpoint.prototype.get serializableInfo): Deleted.
        * UserInterface/Models/URLBreakpoint.js:
        (WI.URLBreakpoint.prototype.saveIdentityToCookie):
        (WI.URLBreakpoint.prototype.toJSON): Added.
        (WI.URLBreakpoint.prototype.get serializableInfo): Deleted.
        Replace `get serializableInfo` with `toJSON` as required by `WI.ObjectStore`.

        * UserInterface/Base/ObjectStore.js:
        (WI.ObjectStore._open):
        Increment version.

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

        Web Inspector: drag/drop over the sidebar should load an imported file in Canvas/Audit tab
        https://bugs.webkit.org/show_bug.cgi?id=196873
        <rdar://problem/49858190>

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._handleDragOver): Added.
        (WI._handleDrop): Added.
        (WI._dragOver): Deleted.
        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView):
        (WI.AuditTabContentView.prototype.async handleFileDrop): Added.
        (WI.AuditTabContentView.prototype._handleDragOver): Deleted.
        (WI.AuditTabContentView.prototype._handleDrop): Deleted.
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.async handleFileDrop): Added.
        (WI.CanvasTabContentView.prototype._handleDragOver): Deleted.
        (WI.CanvasTabContentView.prototype._handleDrop): Deleted.
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.prototype.async handleFileDrop): Added.
        Check whether the current tab is able to handle a file drop, and if so, don't prevent the
        drag from occuring. This now allows the user to drop anywhere on the Web Inspector area to
        import files, so long as the relevant tab is currently selected.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.async processJSON): Added.
        (WI.CanvasManager.prototype.processJSON): Deleted.
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.async processJSON): Added.
        (WI.TimelineManager.prototype.processJSON): Deleted.
        Make `async` to match other `processJSON` functions.

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

        Web Inspector: Heap: logging an object from a snapshot shouldn't use the "special" style if the object is reachable
        https://bugs.webkit.org/show_bug.cgi?id=196889
        <rdar://problem/49870693>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WI.HeapSnapshotInstanceDataGridNode.logHeapSnapshotNode):

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

        Web Inspector: Debugger: deleting a special breakpoint should disable it
        https://bugs.webkit.org/show_bug.cgi?id=196737
        <rdar://problem/49740680>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype.ondelete):

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

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'this.selectedTreeElement.reveal')
        https://bugs.webkit.org/show_bug.cgi?id=196804
        <rdar://problem/49800708>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.update):

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

        Web Inspector: Uncaught Exception: Can't find variable: WebGL2RenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=196874
        <rdar://problem/49858912>

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.createContext):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process.getContent):

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

        Web Inspector: sidebar panels shouldn't be added as subviews unless visible
        https://bugs.webkit.org/show_bug.cgi?id=196888
        <rdar://problem/49870659>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/Sidebar.js:
        (WI.Sidebar.prototype.insertSidebarPanel):
        (WI.Sidebar.prototype.removeSidebarPanel):
        (WI.Sidebar.prototype.set selectedSidebarPanel):

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

        Web Inspector: Elements: event listener change events should only be fired for the selected node and it's ancestors
        https://bugs.webkit.org/show_bug.cgi?id=196887
        <rdar://problem/49870627>

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.prototype.getEventListeners):

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

        Web Inspector: replace all uses of `this` with `WI` in Main.js/Test.js
        https://bugs.webkit.org/show_bug.cgi?id=196795
        <rdar://problem/49796618>

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        * UserInterface/Test/Test.js:

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

        Web Inspector: REGRESSION: Heap: snapshots taken manually don't appear in the list
        https://bugs.webkit.org/show_bug.cgi?id=196900
        <rdar://problem/49880278>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView):
        (WI.HeapAllocationsTimelineView.prototype.layout):
        (WI.HeapAllocationsTimelineView.prototype._importButtonNavigationItemClicked):
        (WI.HeapAllocationsTimelineView.prototype._takeHeapSnapshotClicked):
        Drive-by: only show heap snapshots for the selected range.

        * UserInterface/Views/TimelineView.js:
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineViewNeedsEntireSelectedRange): Added.
        Drive-by: taking (or importing) a heap snapshot should select the entire range so that the
        new record will appear in the list of heap snapshots.

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

        Web Inspector: REGRESSION (r244157): Timelines: ruler size appears wrong on first layout
        https://bugs.webkit.org/show_bug.cgi?id=196901
        <rdar://problem/49880539>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/View.js:
        (WI.View.prototype._layoutSubtree):
        Ensure that the forced override of the layout reason during the initial layout doesn't
        affect subviews.

        * UserInterface/Views/ConsoleDrawer.js:
        (WI.ConsoleDrawer.prototype.sizeDidChange): Added.
        (WI.ConsoleDrawer.prototype.layout): Deleted.
        * UserInterface/Views/ConsolePrompt.js:
        (WI.ConsolePrompt.prototype.sizeDidChange): Added.
        (WI.ConsolePrompt.prototype.layout): Deleted.
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.sizeDidChange): Added.
        (WI.DOMTreeContentView.prototype.layout):
        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype.sizeDidChange): Added.
        (WI.NavigationBar.prototype.layout):
        (WI.NavigationBar.prototype._updateContent): Added.
        (WI.NavigationBar.prototype._updateContent.forceItemHidden): Added.
        (WI.NavigationBar.prototype._updateContent.isDivider): Added.
        (WI.NavigationBar.prototype._updateContent.calculateVisibleItemWidth): Added.
        (WI.NavigationBar.prototype.layout.forceItemHidden): Deleted.
        (WI.NavigationBar.prototype.layout.isDivider): Deleted.
        (WI.NavigationBar.prototype.layout.calculateVisibleItemWidth): Deleted.
        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.sizeDidChange): Added.
        (WI.TabBrowser.prototype.layout): Deleted.
        Move logic in `layout` to `sizeDidChange` where applicable.

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

        Web Inspector: REGRESSION(r244195): Timelines: unable to take heap snapshot
        https://bugs.webkit.org/show_bug.cgi?id=196832
        <rdar://problem/49828862>

        Reviewed by Simon Fraser.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._addRecord):
        Heap snapshots can be taken outside of a timeline recording, so remove the early return (and
        assertion) that checks for an active recording before adding the heap snapshot record.

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

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        Rather than have a binary state of capturing/not-capturing, we should use a four state:
         1. inactive (when the backend has stopped capturing)
         2. starting (when the frontend requests capturing to start)
         3. active (when the backend has started capturing)
         4. stopping (when the frontend requests capturing to stop)

        Capturing is considered "on" when not in an "inactive" state. Prevent the frontend from
        starting/stopping capturing unless we're in a "stable" ("inactive" or "active") state, not a
        "transition" ("starting" or "stopping") state.

        One "side effect" of this change is that since the capturing is considered active until the
        backend has stopped capturing, we will continue to process records in the frontend even if
        the frontend has requested to stop capturing. <https://webkit.org/b/152904>

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.get capturingState): Added.
        (WI.TimelineManager.prototype.reset):
        (WI.TimelineManager.prototype.get activeRecording):
        (WI.TimelineManager.prototype.set autoCaptureOnPageLoad):
        (WI.TimelineManager.prototype.isCapturing):
        (WI.TimelineManager.prototype.startCapturing):
        (WI.TimelineManager.prototype.stopCapturing):
        (WI.TimelineManager.prototype.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.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype.memoryTrackingUpdated):
        (WI.TimelineManager.prototype.memoryTrackingCompleted):
        (WI.TimelineManager.prototype.heapTrackingStarted):
        (WI.TimelineManager.prototype.heapTrackingCompleted):
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._updateCapturingState): Added.
        (WI.TimelineManager.prototype._processRecord):
        (WI.TimelineManager.prototype._processEvent):
        (WI.TimelineManager.prototype._loadNewRecording):
        (WI.TimelineManager.prototype._addRecord):
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._legacyAttemptStartAutoCapturingForFrame):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype._garbageCollected):
        (WI.TimelineManager.prototype._memoryPressure):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):
        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent):
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged):
        (WI.TimelineManager.prototype.unloadRecording): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStopped): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStopped): Deleted.

        * UserInterface/Protocol/ScriptProfilerObserver.js:
        (WI.ScriptProfilerObserver.prototype.trackingComplete):
        (WI.ScriptProfilerObserver.prototype.programmaticCaptureStarted):
        (WI.ScriptProfilerObserver.prototype.programmaticCaptureStopped):
        * UserInterface/Protocol/TimelineObserver.js:
        (WI.TimelineObserver.prototype.programmaticCaptureStarted):
        (WI.TimelineObserver.prototype.programmaticCaptureStopped):
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * UserInterface/Protocol/CPUProfilerObserver.js:
        (WI.CPUProfilerObserver.prototype.trackingComplete):
        * UserInterface/Protocol/MemoryObserver.js:
        (WI.MemoryObserver.prototype.trackingComplete):
        Send an end timestamp to match other instruments.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DebuggerManager.prototype._timelineCapturingWillStart): Deleted.
        (WI.DebuggerManager.prototype._timelineCapturingStopped): Deleted.
        * UserInterface/Models/DefaultDashboard.js:
        (WI.DefaultDashboard):
        (WI.DefaultDashboard.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DefaultDashboard.prototype._capturingStopped): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingWillStart): Deleted.
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingStopped): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart): Deleted.
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped): Deleted.
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineOverview.prototype._capturingStarted): Deleted.
        (WI.TimelineOverview.prototype._capturingStopped): Deleted.
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineRecordingContentView.prototype._recordingUnloaded):
        (WI.TimelineRecordingContentView.prototype._capturingStarted): Deleted.
        (WI.TimelineRecordingContentView.prototype._capturingStopped): Deleted.
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):
        (WI.TimelineTabContentView.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineTabContentView.prototype._capturingStartedOrStopped): Deleted.
        Use the new single event for all Timelines capture state changes.
        Prevent the record button from being clicked when capturing is in a transition state.

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

        Unreviewed, rolling out r244158.

        Casued 8 inspector/timeline/ test failures.

        Reverted changeset:

        "Web Inspector: Timelines: can't reliably stop/start a
        recording"
        https://bugs.webkit.org/show_bug.cgi?id=196778
        https://trac.webkit.org/changeset/244158

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

        Web Inspector: save sheet should be anchored underneath the tab bar when detached
        https://bugs.webkit.org/show_bug.cgi?id=196722
        <rdar://problem/49613280>

        Reviewed by Timothy Hatcher.

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

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

        Web Inspector: Timelines: can't reliably stop/start a recording
        https://bugs.webkit.org/show_bug.cgi?id=196778
        <rdar://problem/47606798>

        Reviewed by Timothy Hatcher.

        Rather than have a binary state of capturing/not-capturing, we should use a four state:
         1. inactive (when the backend has stopped capturing)
         2. starting (when the frontend requests capturing to start)
         3. active (when the backend has started capturing)
         4. stopping (when the frontend requests capturing to stop)

        Capturing is considered "on" when not in an "inactive" state. Prevent the frontend from
        starting/stopping capturing unless we're in a "stable" ("inactive" or "active") state, not a
        "transition" ("starting" or "stopping") state.

        One "side effect" of this change is that since the capturing is considered active until the
        backend has stopped capturing, we will continue to process records in the frontend even if
        the frontend has requested to stop capturing. <https://webkit.org/b/152904>

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.get capturingState): Added.
        (WI.TimelineManager.prototype.reset):
        (WI.TimelineManager.prototype.get activeRecording):
        (WI.TimelineManager.prototype.set autoCaptureOnPageLoad):
        (WI.TimelineManager.prototype.isCapturing):
        (WI.TimelineManager.prototype.startCapturing):
        (WI.TimelineManager.prototype.stopCapturing):
        (WI.TimelineManager.prototype.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.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype.memoryTrackingUpdated):
        (WI.TimelineManager.prototype.memoryTrackingCompleted):
        (WI.TimelineManager.prototype.heapTrackingStarted):
        (WI.TimelineManager.prototype.heapTrackingCompleted):
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._updateCapturingState): Added.
        (WI.TimelineManager.prototype._processRecord):
        (WI.TimelineManager.prototype._processEvent):
        (WI.TimelineManager.prototype._loadNewRecording):
        (WI.TimelineManager.prototype._addRecord):
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._legacyAttemptStartAutoCapturingForFrame):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._mainResourceDidChange):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype._garbageCollected):
        (WI.TimelineManager.prototype._memoryPressure):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):
        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent):
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged):
        (WI.TimelineManager.prototype.unloadRecording): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStopped): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStopped): Deleted.

        * UserInterface/Protocol/ScriptProfilerObserver.js:
        (WI.ScriptProfilerObserver.prototype.trackingComplete):
        (WI.ScriptProfilerObserver.prototype.programmaticCaptureStarted):
        (WI.ScriptProfilerObserver.prototype.programmaticCaptureStopped):
        * UserInterface/Protocol/TimelineObserver.js:
        (WI.TimelineObserver.prototype.programmaticCaptureStarted):
        (WI.TimelineObserver.prototype.programmaticCaptureStopped):
        It is possible to determine when programmatic capturing starts/stops in the frontend based
        on the state when the backend causes the state to change, such as if the state is "inactive"
        when the frontend is told that the backend has started capturing.

        * UserInterface/Protocol/CPUProfilerObserver.js:
        (WI.CPUProfilerObserver.prototype.trackingComplete):
        * UserInterface/Protocol/MemoryObserver.js:
        (WI.MemoryObserver.prototype.trackingComplete):
        Send an end timestamp to match other instruments.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DebuggerManager.prototype._timelineCapturingWillStart): Deleted.
        (WI.DebuggerManager.prototype._timelineCapturingStopped): Deleted.
        * UserInterface/Models/DefaultDashboard.js:
        (WI.DefaultDashboard):
        (WI.DefaultDashboard.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DefaultDashboard.prototype._capturingStopped): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingWillStart): Deleted.
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingStopped): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart): Deleted.
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped): Deleted.
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineOverview.prototype._capturingStarted): Deleted.
        (WI.TimelineOverview.prototype._capturingStopped): Deleted.
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineRecordingContentView.prototype._recordingUnloaded):
        (WI.TimelineRecordingContentView.prototype._capturingStarted): Deleted.
        (WI.TimelineRecordingContentView.prototype._capturingStopped): Deleted.
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):
        (WI.TimelineTabContentView.prototype._handleTimelineCapturingStateChanged): Added.
        (WI.TimelineTabContentView.prototype._capturingStartedOrStopped): Deleted.
        Use the new single event for all Timelines capture state changes.
        Prevent the record button from being clicked when capturing is in a transition state.

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

        Web Inspector: REGRESSION: Audit: result UI shown on first open if an audit was previously selected
        https://bugs.webkit.org/show_bug.cgi?id=196723
        <rdar://problem/49722252>

        Reviewed by Timothy Hatcher.

        When opening Web Inspector for the first time, we will trigger resize `layout`s on the main
        content area as Web Inspector is resized to it's old window size.

        Rather than treating this layout as a `View.LayoutReason.Resize`, we should treat the
        first `layout` (e.g. `initialLayout`) as a `View.LayoutReason.Dirty` instead, as there was
        previously no content.

        * UserInterface/Views/View.js:
        (WI.View.prototype._layoutSubtree):
        (WI.View.prototype._setLayoutReason):

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView):
        Drive-by: ensure that this class is not instantiated directly.

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

        Web Inspector: Debugger: current call frame indicator is indented when there is more than one thread
        https://bugs.webkit.org/show_bug.cgi?id=196580
        <rdar://problem/49582138>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline .item.call-frame .status):
        (.tree-outline.single-thread .item.call-frame .status): Added.

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

        Web Inspector: REGRESSION (r238602): Elements: deleting the last child of a collapsed parent selects the parent's next sibling
        https://bugs.webkit.org/show_bug.cgi?id=192711
        <rdar://problem/46738990>

        Reviewed by Timothy Hatcher.

        Original patch by Matt Baker <mattbaker@apple.com>.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.removeSelectedItems):
        When looking for a new item to select, start with the item preceding the
        selection, instead of the item following the selection. This matches
        pre-multiple selection behavior, as well as Mail and Xcode.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.onexpand):
        Drive-by fix: when a hidden node is selected, its selection area is drawn
        with a height of 0px. Update the selection area once the hidden node's
        parent is expanded. AFAIK, this has always been broken.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.ondelete):
        After a delete the `SelectionController` may have chosen a child of a
        collapsed parent as the new selected item. If the item isn't the closing tag (e.g. after
        deleting the last child), reveal it.

        (WI.DOMTreeOutline.prototype.selectionControllerPreviousSelectableItem):

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.get previousSelectableSibling): Added.
        (WI.TreeElement.prototype.get nextSelectableSibling): Added.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableItem):
        Set `skipUnrevealed` to false, so that children of collapsed parent nodes
        are considered when looking for an item to selected after a delete. Hidden `TreeElement`s
        are still ignored as they aren't `selectable`.

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

        Web Inspector: Elements tab: multiple selection lost after navigating to another tab
        https://bugs.webkit.org/show_bug.cgi?id=192681
        <rdar://problem/46709392>

        Reviewed by Timothy Hatcher.

        Orginal patch by Matt Baker <mattbaker@apple.com>.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.selectItem):
        Simplify internal logic by removing an early return.

        (WI.SelectionController.prototype.selectItems): Added.
        (WI.SelectionController.prototype.selectAll):
        Provide a means to select multiple items in a single operation.
        If `_lastSelectedItem` is not in the items to select, the last
        item being selected will become the last selected item.

        (WI.SelectionController.prototype._deselectAllAndSelect):
        Drive-by fix: correct a logic error. If no items are selected, the item
        passed as an argument should still become selected.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectTreeElements): Added.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.get closeTagTreeElement): Added.
        (WI.DOMTreeElement.prototype._updateChildren):
        Make the close tag `TreeElement` available from the open tag `TreeElement`.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.update):
        Restore selected `TreeElement`s after updating.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Test.html:

2019-04-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab: Classes toggle should use accent color on hover
        https://bugs.webkit.org/show_bug.cgi?id=196266

        Reviewed by Devin Rousso.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle::before):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle:matches(.selected, :hover)):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle:matches(.selected, :hover)::before):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle:not(.selected):hover::before):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle.selected:active::before):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle.selected): Deleted.
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle:not(.selected):hover): Deleted.

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

        Web Inspector: REGRESSION: Audit: default audits aren't added when an existing audit is present
        https://bugs.webkit.org/show_bug.cgi?id=196663
        <rdar://problem/49660757>

        Reviewed by Timothy Hatcher.

        Rather than have a button that allows the user to re-add the default audits, prevent them
        from being deletable in the first place. "Deleting" a default audit will instead mark it as
        disabled (and beep if it is already disabled).

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.loadStoredTests):
        (WI.AuditManager.prototype.removeTest):
        (WI.AuditManager.prototype._addDefaultTests): Added.
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded): Deleted.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._updateStartStopButtonNavigationItemState):
        (WI.AuditNavigationSidebarPanel.prototype._updateNoAuditsPlaceholder):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit.has-results > .content > .message-text-view.no-enabled-audits): Added.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view): Deleted.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > .message): Deleted.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > button): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        REGRESSION(r237196): Web Inspector: Computed panel shouldn't update when it isn't visible
        https://bugs.webkit.org/show_bug.cgi?id=196667
        <rdar://problem/49664912>

        Reviewed by Timothy Hatcher.

        Explicitly define `hidden` and `shown` methods instead of relying on SidebarPanel's `visible` getter.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.visibilityDidChange): Deleted.
        (WI.GeneralStyleDetailsSidebarPanel.prototype.hidden): Added.
        (WI.GeneralStyleDetailsSidebarPanel.prototype.shown): Added.

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

        Web Inspector: TestSuite test cases should have their own timeout to ensure tests fail with output instead of timeout by test runner
        https://bugs.webkit.org/show_bug.cgi?id=162814
        <rdar://problem/28574102>

        Reviewed by Brian Burg.

        A 10s timer is started for every test case added to an async suite. The timer is cleared
        when the test finishes, but if the timer fires, the test is forcibly ended with an error.

        This timer can be configured by setting a `timeout` value when adding the test case. Values
        are expected to be in milliseconds. The value `-1` will prevent a timer from being set.

        This change also relaxes the expectation that any individual test case failure will stop the
        rest of the suite from running. Since timers are set per test case, it is possible to
        recover from a "bad" test case to still run the remaining test cases.

        NOTE: there may be unexpected behaviour if a test times out, as the timer doesn't actually
        stop the execution of the test, so it may still run and log information, which may appear
        "out of nowhere" in the middle of other tests.

        * UserInterface/Test/TestSuite.js:
        (TestSuite.prototype.get passCount):
        (AsyncTestSuite.prototype.runTestCases):
        (SyncTestSuite.prototype.runTestCases):

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

        Web Inspector: Single click on links in non-read-only TextEditors should not follow links
        https://bugs.webkit.org/show_bug.cgi?id=123364
        <rdar://problem/15323913>

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WI._updateModifierKeys):
        Add classes to the body whenever alt, shift, or ctrl are pressed.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        Add a `read-only` class if the `CodeMirror` is readonly.

        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (.cm-s-default .cm-link,):
        (.read-only.cm-s-default .cm-link:hover,):
        (.cm-s-default .cm-link:hover,): Deleted.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set readOnly):
        (WI.TextEditor.prototype._openClickedLinks):

2019-04-03  Myles C. Maxfield  <mmaxfield@apple.com>

        Remove support for -apple-trailing-word
        https://bugs.webkit.org/show_bug.cgi?id=196525

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * UserInterface/Models/CSSKeywordCompletions.js:

2019-04-03  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Uncaught Exception: TypeError: this._computedStyleSection.focus is not a function. (In 'this._computedStyleSection.focus()', 'this._computedStyleSection.focus' is undefined)
        https://bugs.webkit.org/show_bug.cgi?id=192108
        <rdar://problem/46685392>

        Reviewed by Devin Rousso.

        This patch fixes the uncaught exception. Tabbing to and from "Properties" section continues
        working the same way as before the patch.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.focusFirstSection): Deleted.
        (WI.ComputedStyleDetailsPanel.prototype.focusLastSection): Deleted.

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

        Web Inspector: Elements: DOM breakpoint icon should stroke when hovering selection area
        https://bugs.webkit.org/show_bug.cgi?id=196516
        <rdar://problem/49540494>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMTreeContentView.css:
        (body:not(.window-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, .hovered) .status-image.breakpoint,): Added.
        (body:not(.window-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, .hovered) .status-image.breakpoint.subtree): Added.
        (body:not(.window-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, :hover) .status-image.breakpoint): Deleted.
        (body:not(.window-inactive) .content-view.dom-tree .tree-outline.dom:focus li:matches(.selected, :hover) .status-image.breakpoint.subtree): Deleted.

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

        Web Inspector: Debugger: modernize serialization of breakpoints and the maps that hold them
        https://bugs.webkit.org/show_bug.cgi?id=196230
        <rdar://problem/49236485>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.breakpointsForSourceCode):
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype._setBreakpoint):
        (WI.DebuggerManager.prototype._setBreakpoint.didSetBreakpoint):

        * UserInterface/Models/Breakpoint.js:
        (WI.Breakpoint):
        (WI.Breakpoint.fromJSON): Added.
        (WI.Breakpoint.prototype.toJSON):
        (WI.Breakpoint.prototype.set resolved):
        (WI.Breakpoint.prototype.recreateAction):
        (WI.Breakpoint.prototype.saveIdentityToCookie):
        (WI.Breakpoint.prototype._isSpecial): Added.
        (WI.Breakpoint.set resolved.isSpecialBreakpoint): Deleted.
        (WI.Breakpoint.serializeOptions): Deleted.

        * UserInterface/Models/BreakpointAction.js:
        (WI.BreakpointAction):
        (WI.BreakpointAction.fromJSON): Added.
        (WI.BreakpointAction.prototype.toProtocol): Added.

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

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._prepareEditorForInitialContent):
        (WI.SourceCodeTextEditor.prototype._breakpointsEnabledDidChange):

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

        Web Inspector: DOMDebugger: disabling a breakpoint for a specific event listener removes it from the UI
        https://bugs.webkit.org/show_bug.cgi?id=196453
        <rdar://problem/49489318>

        Reviewed by Joseph Pecoraro.

        Allow breakpoints for specific event listeners to be disabled, rather than immeditately
        removing/deleting them when they are about to become disabled. This preserves the existing
        functionality, but now allows for the tree element to stay in the UI in a disabled state.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype.setBreakpointForEventListener):
        (WI.DOMManager.prototype.removeBreakpointForEventListener):
        (WI.DOMManager.prototype.removeEventListenerBreakpointsForNode): Added.
        (WI.DOMManager.prototype._updateEventBreakpoint): Added.
        (WI.DOMManager.prototype._handleEventBreakpointDisabledStateChanged): Added.

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

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNodeBreakpoints):

        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement.prototype.ondelete):

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

        Web Inspector: Canvas: auto-record after page load sometimes shows the wrong UI
        https://bugs.webkit.org/show_bug.cgi?id=196320
        <rdar://problem/49356686>

        Reviewed by Joseph Pecoraro.

        It was previously possible that the timing of a recording being started and the preview
        image being loaded would not always be in the same order.

        Utilize the existing `View.prototype.layout` mechanics to ensure that updates are coalesced
        and that the changes are always applied in a particular order.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.refreshPreview): Added.
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype.layout):
        (WI.CanvasContentView.prototype.shown):
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype._refreshPixelSize):
        (WI.CanvasContentView.prototype.refresh): Deleted.
        (WI.CanvasContentView.prototype._recordingStarted): Deleted.
        (WI.CanvasContentView.prototype._recordingProgress): Deleted.
        (WI.CanvasContentView.prototype._recordingStopped): Deleted.
        (WI.CanvasContentView.prototype._shaderProgramAdded): Deleted.
        (WI.CanvasContentView.prototype._shaderProgramRemoved): Deleted.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._refreshPreviews):

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

        Web Inspector: Canvas: add compatibility support for WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=196412
        <rdar://problem/49439417>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.displayNameForContextType):
        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-12.2.json:

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

        Web Inspector: "Copy as HTML" appears twice when showing a context menu for a logged node
        https://bugs.webkit.org/show_bug.cgi?id=196271
        <rdar://problem/49290676>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ObjectTreeBaseTreeElement.js:
        (WI.ObjectTreeBaseTreeElement.prototype._appendMenusItemsForObject):

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Debugger: breakpoints don't populate in inspector2 on first load
        https://bugs.webkit.org/show_bug.cgi?id=196063
        <rdar://problem/49097787>

        Reviewed by Joseph Pecoraro.

        In the case that a breakpoint becomes resolved after the resource has finished loaded, there
        won't be an already existing `TreeElement` for the breakpoint to replace.

        This can realistically only happen if the IndexedDB lookup is super slow, or the resource is
        extremely fast (e.g. a `data` url).

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):
        (WI.DebuggerSidebarPanel.prototype._addDebuggerObject): Deleted.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpointsForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):

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

        Web Inspector: CPU Usage Timeline - Adjust Energy Impact Threshholds
        https://bugs.webkit.org/show_bug.cgi?id=196421
        <rdar://problem/49125703>

        Reviewed by Devin Rousso.

        - Low - Keep Below 3% to continue to encourage idle pages stay below 3%
          Might want to reduce to 2.5 or 2 after fixing bug 196419.

        - High - Make Above 30% instead of 50% to encourage long running interactivity to stay below 30%
          Depends on interaction, but sustained (1-2min) at 30%+ will certainly impact battery.

        - Very High - Make above 100% instead of 150%
          CPU Usage spikes around page load and is quite often still under 100% despite many threads.
          Drop this a bit as we dropped High down.

        Reduce the size of the Medium section, and increase the High section
        Having 70% of the chart be "Medium" is just too much Medium, and
        we've now made it more possible to be in the High range.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.get mediumEnergyThreshold):
        (WI.CPUTimelineView.prototype.get highEnergyThreshold):
        (WI.CPUTimelineView.prototype.get lowEnergyGraphBoundary):
        (WI.CPUTimelineView.prototype.get mediumEnergyGraphBoundary):
        (WI.CPUTimelineView.prototype.get highEnergyGraphBoundary):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout.bestThreadLayoutMax):
        (WI.CPUTimelineView.prototype._layoutEnergyChart):

2019-03-29  Myles C. Maxfield  <mmaxfield@apple.com>

        Delete WebMetal implementation in favor of WebGPU
        https://bugs.webkit.org/show_bug.cgi?id=195418

        Reviewed by Dean Jackson.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.displayNameForContextType):
        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-12.2.json:

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

        Web Inspector: Storage: some cookie column headers are not localized
        https://bugs.webkit.org/show_bug.cgi?id=196406
        <rdar://problem/48467422>

        Reviewed by Joseph Pecoraro.

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

        * Localizations/en.lproj/localizedStrings.js:

2019-03-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show Resource Initiator in Network Tab detail views
        https://bugs.webkit.org/show_bug.cgi?id=196316
        <rdar://problem/49352679>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype._initiatorCallFramesFromPayload):
        Initialize call frames from the initiator payload.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get initiatorCallFrames):
        Initialization and accessor.

        * UserInterface/Views/CallFrameTreeElement.js:
        (WI.CallFrameTreeElement):
        Selecting a native element won't do anything so just don't allow selection.

        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers .go-to-link):
        (.resource-headers .call-stack):
        (.resource-headers .call-stack:hover):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView):
        (WI.ResourceHeadersContentView.prototype.hidden):
        (WI.ResourceHeadersContentView.prototype._refreshSummarySection):
        Add an "Initiator" line in the summary with a way to view the whole
        initiator backtrace if one exists.

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

        Web Inspector: Sources: fix typo in CSS selector to always show add breakpoint button
        https://bugs.webkit.org/show_bug.cgi?id=196241

        Reviewed by Matt Baker.

        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.paused-reason, .breakpoints).collapsed > .header > .options,):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.paused-reason, .breakpoins).collapsed > .header > .options,): Deleted.

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

        Web Inspector: Page Weight indicator clears on pages with zero length resources (macrumors.com)
        https://bugs.webkit.org/show_bug.cgi?id=196170

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DefaultDashboard.js:
        (WI.DefaultDashboard.prototype._resourceSizeDidChange):
        Catch NaN earlier.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.updateWithMetrics):
        When we receive exact metrics transition the estimated size to zero,
        since we won't receive any more updates for the resource.

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

        Web Inspector: Canvas: WebGL action icon shouldn't invert when selected
        https://bugs.webkit.org/show_bug.cgi?id=196135

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._classNameForAction):
        (WI.RecordingActionTreeElement._classNameForAction.classNameForActionName): Deleted.
        Remove unnecessary logging and memoization.

        * UserInterface/Views/RecordingActionTreeElement.css:
        (.tree-outline:focus .item.recording-action.selected:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) > .icon): Added.
        (@media (prefers-color-scheme: dark)):
        (.item.recording-action:not(.invalid, .initial-state, .has-context-replacer, .name-unknown) > .icon): Added.
        (.tree-outline:focus .item.recording-action.selected:not(.invalid, .initial-state, .has-context-replacer) > .icon): Deleted.
        (.item.recording-action.has-context-replacer > .icon): Deleted.
        (.item.recording-action:not(.invalid, .initial-state, .has-context-replacer) > .icon): Deleted.
        Simplify styles between light and dark mode.

2019-03-24  Simon Welsh  <simon@welsh-au.com>

        Web Inspector: testCellRoleForRequiredChidren accessibility audit checks for rows in cells
        https://bugs.webkit.org/show_bug.cgi?id=195988

        Reviewed by Timothy Hatcher.

        The audit now checks that rows contain cells, allowing any of the four
        cell-based roles.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):
        (WI.AuditManager):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded.const.testCellRoleForRequiredChidren): Deleted.

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

        Web Inspector: Canvas: missing icons for WebGL2 contexts
        https://bugs.webkit.org/show_bug.cgi?id=196136

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled > .glyph): Added.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas:matches(.canvas-2d, .bitmaprenderer) .icon): Added.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas:matches(.webgl, .webgl2, .webgpu, .webmetal) .icon): Added.
        (@media (prefers-color-scheme: dark)):
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas.canvas-2d .icon): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.casnvas.webgl .icon): Deleted.
        Use the 2D icon for BitmapRenderer and the 3D icon for WebGL2, WebMetals, and WebGPU.
        Drive-by: the start/stop button text was too dark when disabled in dark mode.

        * UserInterface/Models/Canvas.js:
        Drive-by: "gpu" => "webgpu", to match the protocol string.

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

        Web Inspector: Sources: "Reveal in Resources Tab" still shown when Sources tab is enabled
        https://bugs.webkit.org/show_bug.cgi?id=196134

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.populateContextMenu):
        Drive-by: find the first call frame that has a source code location, rather than naively
        always using the top call frame.

        * UserInterface/Views/SearchResultTreeElement.js:
        (WI.SearchResultTreeElement.prototype.populateContextMenu):

2019-03-22  Keith Rollin  <krollin@apple.com>

        Enable ThinLTO support in Production builds
        https://bugs.webkit.org/show_bug.cgi?id=190758
        <rdar://problem/45413233>

        Reviewed by Daniel Bates.

        Enable building with Thin LTO in Production when using Xcode 10.2 or
        later. This change results in a 1.45% progression in PLT5. Full
        Production build times increase about 2-3%. Incremental build times
        are more severely affected, and so LTO is not enabled for local
        engineering builds.

        LTO is enabled only on macOS for now, until rdar://problem/49013399,
        which affects ARM builds, is fixed.

        To change the LTO setting when building locally:

        - If building with `make`, specify WK_LTO_MODE={none,thin,full} on the
          command line.
        - If building with `build-webkit`, specify --lto-mode={none,thin,full}
          on the command line.
        - If building with `build-root`, specify --lto={none,thin,full} on the
          command line.
        - If building with Xcode, create a LocalOverrides.xcconfig file at the
          top level of your repository directory (if needed) and define
          WK_LTO_MODE to full, thin, or none.

        * Configurations/Base.xcconfig:

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

        Web Inspector: Timelines - Cannot export on about:blank - suggested filename containing a colon silently fails
        https://bugs.webkit.org/show_bug.cgi?id=196109

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.sanitizeFilename):
        (WI.FileUtilities.inspectorURLForFilename):
        New utility functions.

        * UserInterface/Test.html:
        Include FileUtilities.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.export):
        * UserInterface/Debug/ProtocolTrace.js:
        (WI.ProtocolTrace.prototype.get saveData):
        (WI.ProtocolTrace):
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._handleContextMenu):
        (WI.ConsoleMessageView):
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/HeapSnapshotContentView.js:
        (WI.HeapSnapshotContentView.prototype._exportSnapshot):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.get saveData):
        (WI.LogContentView.prototype._handleContextMenuEvent):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._exportHAR):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._exportRecording):
        (WI.RecordingContentView.prototype._exportReduction):
        * UserInterface/Views/ScriptContentView.js:
        (WI.ScriptContentView.prototype.get saveData):
        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView.prototype.get saveData):
        * UserInterface/Views/TextContentView.js:
        (WI.TextContentView.prototype.get saveData):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView.prototype.get saveData):
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._exportTimelineRecording):
        Update "web-inspector:///" URL building code to use the utility.

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

        Web Inspector: Use CSS variables for text color in Computed panel
        https://bugs.webkit.org/show_bug.cgi?id=196117

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section):
        (.computed-style-section .computed-property-item .property-trace-item .selector):
        (.computed-style-section .computed-property-item .go-to-link):

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

        Web Inspector: Timelines: flatten the overview to show all records, one per line
        https://bugs.webkit.org/show_bug.cgi?id=191901
        <rdar://problem/46423618>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/OverviewTimelineView.js:
        (WI.OverviewTimelineView):
        (WI.OverviewTimelineView.prototype.closed):
        (WI.OverviewTimelineView.prototype.get navigationItems): Added.
        (WI.OverviewTimelineView.prototype.reset):
        (WI.OverviewTimelineView.prototype.layout):
        (WI.OverviewTimelineView.prototype.get _relevantTimelines): Added.
        (WI.OverviewTimelineView.prototype.get _shouldGroupBySourceCode): Added.
        (WI.OverviewTimelineView.prototype._loadExistingRecords): Added.
        (WI.OverviewTimelineView.prototype._insertDataGridNode):
        (WI.OverviewTimelineView.prototype._addResourceToDataGridIfNeeded):
        (WI.OverviewTimelineView.prototype._addSourceCodeTimeline):
        (WI.OverviewTimelineView.prototype._processPendingRepresentedObjects):
        (WI.OverviewTimelineView.prototype._handleGroupBySourceCodeSettingChanged): Added.
        (WI.OverviewTimelineView.prototype._handleGroupBySourceCodeNavigationItemCheckedDidChange): Added.
        (WI.OverviewTimelineView.prototype._handleTimelineRecordAdded): Added.
        (WI.OverviewTimelineView.prototype._sourceCodeTimelineAdded):
        (WI.OverviewTimelineView.prototype._networkTimelineRecordAdded): Deleted.
        Listen for new records on all timelines. Add each record as a new line. Since each timeline
        has different data to display, only show the "name" and "graph" for all records.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._currentContentViewDidChange):
        (WI.TimelineRecordingContentView.prototype._updateImportedView): Deleted.
        When viewing the overview of an imported recording, show the non-grouped overview.

        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.addRecord):
        (WI.TimelineRecording.prototype._keyForRecord):
        Drive-by: show Media timeline events under the owner frame's resource when grouped.

        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.timeline-record-type-script.garbage-collected > .segment, .timeline-record-bar.timeline-record-type-heap-allocations > .segment): Added.
        (.timeline-record-bar.timeline-record-type-script.garbage-collected > .segment): Deleted.

        * UserInterface/Base/Setting.js:
        Add setting for controlling the Timeline overview grouping.

        * UserInterface/Main.html:
        * UserInterface/Views/SourceCodeTimelineTreeElement.js: Removed.
        * UserInterface/Views/TimelineRecordingImportedView.js: Removed.
        * UserInterface/Views/TimelineRecordingImportedView.css: Removed.
        Remove unused files.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Sources: the name of the file should not be used as a folder
        https://bugs.webkit.org/show_bug.cgi?id=196064
        <rdar://problem/49097710>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.createFoldersAsNeededForSubpath):

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel.prototype._addResource):
        Drive-by: sort resources in each folder by name when grouping by path.

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

        Web Inspector: Canvas: rework how Canvas.enable/Canvas.disable is used so that events are not sent when the Canvas tab isn't enabled
        https://bugs.webkit.org/show_bug.cgi?id=195828
        <rdar://problem/48941756>

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.initializeTarget):
        (WI.CanvasManager.prototype.enable): Added.
        (WI.CanvasManager.prototype.disable): Added.

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

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

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

        Web Inspector: Sources: collapsing a section doesn't shrink the space used by that section
        https://bugs.webkit.org/show_bug.cgi?id=196045

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerPaused):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerResumed):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .details-section):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.paused-reason, .breakpoins).collapsed > .header > .options,):
        (.sidebar > .panel.navigation.sources > .content > .details-section.collapsed > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints > .header > .options .create-breakpoint):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.pause-reason, .call-stack, .breakpoints) > .content,):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints) > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints):not(.collapsed) > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section.call-stack):
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints):
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints .create-breakpoint):
        (.sidebar > .panel.navigation.sources > .content > .pause-reason):
        (.sidebar > .panel.navigation.sources > .content > .details-section:matches(.call-stack, .breakpoints):not(.collapsed) > .content,):
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints .tree-outline .item.event-target-window .icon):
        (.sidebar > .panel.navigation.sources > .content .details-section): Deleted.
        (.sidebar > .panel.navigation.sources > .content .details-section:matches(.paused-reason, .breakpoins).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 > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container)): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .call-stack-container): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container .create-breakpoint): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .resources-container): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .pause-reason-container): Deleted.
        (.sidebar > .panel.navigation.sources > .content > :matches(.call-stack-container, .breakpoints-container, .resources-container)): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints .tree-outline .item.event-target-window .icon): Deleted.
         - Apply the overflow scrolling to the content element of each `WI.DetailsSection`.
         - Ensure that there is a maximum height for each section.
         - When `.collapsed`, don't try to grow/shrink the section based on its contents.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline .item.call-frame):
        (.tree-outline .item.call-frame .status):
        Make the container of the active call frame status indicator relatively positioned so that
        the active call frame status indicator will follow the container when scrolling.

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

        Web Inspector: Timeline should show when events preventDefault() was called on an event or not
        https://bugs.webkit.org/show_bug.cgi?id=176824
        <rdar://problem/34290931>

        Reviewed by Timothy Hatcher.

        Original patch by Joseph Pecoraro <pecoraro@apple.com>.

        * Localizations/en.lproj/localizedStrings.js:
        New string.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._processRecord):
        Include the whole data object as extra details.

        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord):
        (WI.ScriptTimelineRecord.prototype.get eventType):
        Wholesale copy of the extra data instead of just a single property.

        * UserInterface/Views/ScriptDetailsTimelineView.js:
        (WI.ScriptDetailsTimelineView):
        Give the name column more initial space, there is still extra space
        after this adjustment but name is comfortably larger (and the most
        likely to be expanded).

        * UserInterface/Views/ScriptTimelineDataGridNode.js:
        (WI.ScriptTimelineDataGridNode.prototype.get subtitle):
        Include "default prevented" as the event's subtitle if it was prevented.

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

        Web Inspector: Styles Redesign: Editing selector should not hide the rule
        https://bugs.webkit.org/show_bug.cgi?id=178489
        <rdar://problem/35062434>

        Reviewed by Timothy Hatcher.

        Extracts the selector payload parsing logic inside `WI.DOMNodeStyles` into static functions
        so that when the user changes the selector of a `WI.CSSRule`, it's able to process and
        update itself with the new selector. This is mainly useful in the case where the `WI.CSSRule`
        no longer applies to the selected node (meaning it won't be part of that node's
        `WI.DOMNodeStyles`) in that it allows the `WI.SpreadsheetCSSStyleDeclarationSection` to
        display the new selector text and the owner `WI.SpreadsheetRulesStyleDetailsPanel` to keep
        that section visible even though it isn't applicable to the current node anymore.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles):
        (WI.DOMNodeStyles.parseSelectorListPayload): Added.
        (WI.DOMNodeStyles.createSourceCodeLocation): Added.
        (WI.DOMNodeStyles.prototype.refresh):
        (WI.DOMNodeStyles.prototype.refresh.fetchedMatchedStyles):
        (WI.DOMNodeStyles.prototype.refresh.fetchedInlineStyles):
        (WI.DOMNodeStyles.prototype.refresh.fetchedComputedStyle):
        (WI.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        (WI.DOMNodeStyles.prototype._parseRulePayload):
        (WI.DOMNodeStyles.prototype._styleSheetContentDidChange):
        (WI.DOMNodeStyles.prototype.refresh.parseRuleMatchArrayPayload): Deleted.
        (WI.DOMNodeStyles.prototype._createSourceCodeLocation): Deleted.
        (WI.DOMNodeStyles.prototype._parseSelectorListPayload): Deleted.
        Keep track of all `WI.CSSRule` and `WI.CSSStyleDeclaration` that have ever been associated
        with this object, so that if a rule's selector is changed to no longer match, and then is
        changed back to match again, we are able to update that rule instead of creating a new one.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype._handleSectionFilterApplied):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype._handleSectionSelectorWillChange): Added.
        Attempt to preserve the position of any sections that are changed and no longer apply to the
        current node.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetSelectorFieldDidChange):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._renderSelector):
        Drive-by: remove unused CSS classes.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule.prototype.update):
        (WI.CSSRule.prototype._selectorResolved):
        Drive-by: remove unused event.

        * UserInterface/Base/Multimap.js:
        (Multimap.prototype.has): Added.
        (Multimap.prototype.sets): Added.
        (Multimap.prototype.copy): Added.

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

        Web Inspector: no way to filter out all console messages or all evaluations/results
        https://bugs.webkit.org/show_bug.cgi?id=167035
        <rdar://problem/30023523>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        (WI.LogContentView.prototype.didAppendConsoleMessageView):
        (WI.LogContentView.prototype._markScopeBarItemUnread):
        (WI.LogContentView.prototype._markScopeBarItemForMessageLevelUnread): Added.
        (WI.LogContentView.prototype._previousMessageRepeatCountUpdated):
        (WI.LogContentView.prototype._messageSourceBarSelectionDidChange):
        (WI.LogContentView.prototype._scopeBarSelectionDidChange):
        (WI.LogContentView.prototype._filterMessageElements):
        (WI.LogContentView.prototype.performSearch):
        * UserInterface/Views/LogContentView.css:
        (.log-scope-bar > li.unread.evaluations::before): Added.

        * UserInterface/Views/ConsoleCommandView.js:
        (WI.ConsoleCommandView):
        Drive-by: remove unnecessary super-class extends.

        * Localizations/en.lproj/localizedStrings.js:

2019-03-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: enabledProperties don't get invalidated after removing property
        https://bugs.webkit.org/show_bug.cgi?id=196038

        Reviewed by Timothy Hatcher.

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

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

        Web Inspector: DOM: include window as part of any event listener chain
        https://bugs.webkit.org/show_bug.cgi?id=195730
        <rdar://problem/48916872>

        Reviewed by Timothy Hatcher.

        Allow non-nodes (e.g. `window`) to be listed as the target of an event listener.
        Add support for the same concept when showing breakpoint details after pausing on a specific
        event listener in the Debugger/Sources navigation sidebar.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype.initialLayout):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.generateGroupsByEvent):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.generateGroupsByTarget): Added.
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.eventListenersCallback):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshEventListeners.generateGroupsByNode): Deleted.

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup.prototype._targetTextOrLink): Added.
        (WI.EventListenerSectionGroup.prototype._nodeTextOrLink): Deleted.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement):
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger > .content > .breakpoints .tree-outline .item.event-target-window .icon): Added.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .breakpoints .tree-outline .item.event-target-window .icon): Added.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Debugger: virtualize the list of variables in the Scope sidebar
        https://bugs.webkit.org/show_bug.cgi?id=192648
        <rdar://problem/46800949>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WI.ScopeChainDetailsSidebarPanel.prototype._generateCallFramesSection):

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.set hidden):
        (WI.TreeElement.prototype._attach):
        (WI.TreeElement.prototype._detach):
        (WI.TreeElement.prototype.collapse):
        (WI.TreeElement.prototype.expand):
        Move `updateVirtualizedElements` calls to the owner `WI.TreeOutline` to ensure that they get
        called. Make the remaining calls use rAF debouncing to better coalesce updates.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype._updateVirtualizedElements.calculateOffsetFromContainer): Added.
        (WI.TreeOutline.prototype._updateVirtualizedElements):
        (WI.TreeOutline.prototype._calculateVirtualizedValues): Deleted.
        Calculate the `WI.TreeOutline`'s top offset within the scroll container so that it will only
        update when it's within the visual area.

        * UserInterface/Views/Utilities.js:
        (Array.prototype.remove):
        Return whether the item was actually removed from the array.

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

        Web Inspector: Timelines - Export fails for MediaTimelineRecords with originator DOM Node - Cannot serialize cyclic structure
        https://bugs.webkit.org/show_bug.cgi?id=196027

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/MediaTimelineRecord.js:
        (WI.MediaTimelineRecord.prototype.toJSON):
        Remove the originator since that is a WI.DOMNode and cannot
        be JSON serialized.

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

        Web Inspector: Debugger: move breakpoint storage to use `WI.ObjectStore`
        https://bugs.webkit.org/show_bug.cgi?id=192719
        <rdar://problem/46746857>

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype._debuggerBreakpointOptions):
        (WI.DebuggerManager.prototype._setBreakpoint.didSetBreakpoint):
        (WI.DebuggerManager.prototype._setBreakpoint):
        (WI.DebuggerManager.prototype._breakpointDisabledStateDidChange):
        (WI.DebuggerManager.prototype._breakpointEditablePropertyDidChange):
        (WI.DebuggerManager.prototype._saveBreakpoints): Deleted.

        * UserInterface/Models/Breakpoint.js:
        (WI.Breakpoint.prototype.saveIdentityToCookie):
        (WI.Breakpoint.prototype.serializeOptions): Added.
        (WI.Breakpoint.prototype.toJSON): Added.
        (WI.Breakpoint.prototype.get options): Deleted.
        (WI.Breakpoint.prototype.get info): Deleted.
        (WI.Breakpoint.prototype._serializableActions): Deleted.
        * UserInterface/Models/BreakpointAction.js:
        (WI.BreakpointAction.prototype.toJSON): Added.
        (WI.BreakpointAction.prototype.get info): Deleted.

        * UserInterface/Base/ObjectStore.js:
        (WI.ObjectStore.async reset): Added.
        (WI.ObjectStore._open):
        (WI.ObjectStore.prototype.get keyPath): Added.
        (WI.ObjectStore.prototype.async.getAll):
        (WI.ObjectStore.prototype.async.put): Added.
        (WI.ObjectStore.prototype.async.putObject): Added.
        (WI.ObjectStore.prototype.async.add): Deleted.
        (WI.ObjectStore.prototype.async.addObject): Deleted.
        Replace `add` with `put` so that if a key already exists, it is overridden.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.set editing):
        (WI.AuditManager.prototype.async processJSON):

        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype._popoverActionsAddActionButtonClicked):
        Inline some `WI.Breakpoint` static values.

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

        Web Inspector: Sources: disabled breakpoints banner should be sticky
        https://bugs.webkit.org/show_bug.cgi?id=195104
        <rdar://problem/48442259>

        Reviewed by Timothy Hatcher.

        Allow each of the individual sections to be scrolled separately from the entire sidebar.

        Leverage CSS variables set via JavaScript to be able to calculate the maximum height of each
        `WI.TreeOutline` section based on the number of items.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCallStackElementAddedOrRemoved): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerPaused):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerResumed):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .content .details-section): Added.
        (.sidebar > .panel.navigation.sources > .content .details-section.paused-reason.collapsed > .header > .options,): Added.
        (.sidebar > .panel.navigation.sources > .content .details-section.collapsed > .content): Added.
        (.sidebar > .panel.navigation.sources > .content > :matches(.pause-reason-container, .call-stack-container, .breakpoints-container)): Added.
        (.sidebar > .panel.navigation.sources > .content > .call-stack-container): Added.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container): Added.
        (.sidebar > .panel.navigation.sources > .content > .breakpoints-container .create-breakpoint): Added.
        (.sidebar > .panel.navigation.sources > .content > .resources-container): Added.
        (.sidebar > .panel.navigation.sources > .content .tree-outline.single-thread): Added.
        (.sidebar > .panel.navigation.sources > .content .tree-outline.single-thread > .item.thread): Added.
        (@media (min-height: 600px) .sidebar > .panel.navigation.sources > .content): Added.
        (@media (min-height: 600px) .sidebar > .panel.navigation.sources > .content > .pause-reason-container): Added.
        (@media (min-height: 600px) .sidebar > .panel.navigation.sources > .content > :matches(.call-stack-container, .breakpoints-container, .resources-container)): Added.
        (.sidebar > .panel.navigation.sources > .content > .details-section): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .details-section.paused-reason.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 > .tree-outline.single-thread): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread > .item.thread): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .resources): Deleted.

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

        "Reveal in Layers Tab" context menu option should not be available if the Layers Tab has not been enabled
        https://bugs.webkit.org/show_bug.cgi?id=196009

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):

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

        Web Inspector: Console: add a setting for controlling auto-expansion of Trace messages
        https://bugs.webkit.org/show_bug.cgi?id=195690

        Reviewed by Timothy Hatcher.

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: DOM: selecting a node in a different frame should automatically switch the console prompt's execution context
        https://bugs.webkit.org/show_bug.cgi?id=195805
        <rdar://problem/48930866>

        Reviewed by Timothy Hatcher.

        Add an "Auto" execution context item that is selected by default and will update the
        selected execution context whenever the inspected node changes. It will also display the
        preferred name for whatever execution context is currently active.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):
        (WI.QuickConsole.prototype.initializeMainExecutionContextPathComponent):
        (WI.QuickConsole.prototype._preferredNameForFrame): Added.
        (WI.QuickConsole.prototype._selectExecutionContext): Added.
        (WI.QuickConsole.prototype._executionContextPathComponentsToDisplay):
        (WI.QuickConsole.prototype._rebuildExecutionContextPathComponents):
        (WI.QuickConsole.prototype._framePageExecutionContextsChanged):
        (WI.QuickConsole.prototype._frameExecutionContextsCleared):
        (WI.QuickConsole.prototype._activeExecutionContextChanged):
        (WI.QuickConsole.prototype._createExecutionContextPathComponent):
        (WI.QuickConsole.prototype._insertOtherExecutionContextPathComponent):
        (WI.QuickConsole.prototype._removeOtherExecutionContextPathComponent):
        (WI.QuickConsole.prototype._insertExecutionContextPathComponentForFrame):
        (WI.QuickConsole.prototype._removeExecutionContextPathComponentForFrame):
        (WI.QuickConsole.prototype._targetRemoved):
        (WI.QuickConsole.prototype._pathComponentSelected):
        (WI.QuickConsole.prototype._handleInspectedNodeChanged): Added.
        (WI.QuickConsole.prototype.get selectedExecutionContext): Deleted.
        (WI.QuickConsole.prototype.set selectedExecutionContext): Deleted.
        (WI.QuickConsole.prototype._createExecutionContextPathComponentFromFrame): Deleted.
        * UserInterface/Views/QuickConsole.css:
        (.quick-console > .navigation-bar > .hierarchical-path:not(.automatic-execution-context)): Added.
        (.quick-console > .navigation-bar > .hierarchical-path:not(.automatic-execution-context) .execution-context): Added.
        (.quick-console > .navigation-bar > .hierarchical-path:not(.automatic-execution-context) .execution-context .selector-arrows): Added.
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context): Deleted.
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context .selector-arrows): Deleted.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.get inspectedNode): Added.
        (WI.DOMManager.prototype.setInspectedNode):
        Broadcast when the inspected node changes.

        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype.layout):
        When `sizesToFit` is enabled, don't force any items to be hidden.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: refactor WI.TimelineDataGridNode and its subclasses to unify the API surface
        https://bugs.webkit.org/show_bug.cgi?id=195959
        <rdar://problem/49028896>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TimelineDataGridNode.js:
        (WI.TimelineDataGridNode.prototype.get records):
        (WI.TimelineDataGridNode.prototype.get data):
        (WI.TimelineDataGridNode.prototype.refresh):

        * UserInterface/Views/HeapAllocationsTimelineDataGridNode.js:
        (WI.HeapAllocationsTimelineDataGridNode):
        (WI.HeapAllocationsTimelineDataGridNode.prototype.get heapSnapshot): Added.
        (WI.HeapAllocationsTimelineDataGridNode.prototype.get data):
        (WI.HeapAllocationsTimelineDataGridNode.prototype.createCellContent):
        (WI.HeapAllocationsTimelineDataGridNode.prototype.createCells):
        (WI.HeapAllocationsTimelineDataGridNode.prototype._handleHeapSnapshotCollectedNodes):
        (WI.HeapAllocationsTimelineDataGridNode.prototype._handleHeapSnapshotInvalidated):
        (WI.HeapAllocationsTimelineDataGridNode.prototype.get record): Deleted.
        (WI.HeapAllocationsTimelineDataGridNode.prototype.updateTimestamp): Deleted.
        (WI.HeapAllocationsTimelineDataGridNode.prototype._heapSnapshotCollectedNodes): Deleted.
        (WI.HeapAllocationsTimelineDataGridNode.prototype._heapSnapshotInvalidated): Deleted.

        * UserInterface/Views/LayoutTimelineDataGridNode.js:
        (WI.LayoutTimelineDataGridNode):
        (WI.LayoutTimelineDataGridNode.prototype.get data):
        (WI.LayoutTimelineDataGridNode.prototype.createCellContent):
        (WI.LayoutTimelineDataGridNode.prototype.get records): Deleted.

        * UserInterface/Views/MediaTimelineDataGridNode.js:
        (WI.MediaTimelineDataGridNode):
        (WI.MediaTimelineDataGridNode.prototype.get records): Deleted.

        * UserInterface/Views/ProfileNodeDataGridNode.js:
        (WI.ProfileNodeDataGridNode):
        (WI.ProfileNodeDataGridNode.prototype.get profileNode):
        (WI.ProfileNodeDataGridNode.prototype.get data):
        (WI.ProfileNodeDataGridNode.prototype.createCellContent):
        (WI.ProfileNodeDataGridNode.prototype._populate):
        (WI.ProfileNodeDataGridNode.prototype.get records): Deleted.
        (WI.ProfileNodeDataGridNode.prototype.get baseStartTime): Deleted.
        (WI.ProfileNodeDataGridNode.prototype.get rangeStartTime): Deleted.
        (WI.ProfileNodeDataGridNode.prototype.get rangeEndTime): Deleted.
        (WI.ProfileNodeDataGridNode.prototype.updateRangeTimes): Deleted.
        (WI.ProfileNodeDataGridNode.prototype.refresh): Deleted.

        * UserInterface/Views/RenderingFrameTimelineDataGridNode.js:
        (WI.RenderingFrameTimelineDataGridNode):
        (WI.RenderingFrameTimelineDataGridNode.prototype.get data):
        (WI.RenderingFrameTimelineDataGridNode.prototype.createCellContent):
        (WI.RenderingFrameTimelineDataGridNode.prototype.get records): Deleted.

        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        (WI.ResourceTimelineDataGridNode):
        (WI.ResourceTimelineDataGridNode.prototype.get resource):
        (WI.ResourceTimelineDataGridNode.prototype.get data):
        (WI.ResourceTimelineDataGridNode.prototype.createCellContent):
        (WI.ResourceTimelineDataGridNode.prototype.appendContextMenuItems):
        (WI.ResourceTimelineDataGridNode.prototype.filterableDataForColumn):
        (WI.ResourceTimelineDataGridNode.prototype._createNameCellDocumentFragment):
        (WI.ResourceTimelineDataGridNode.prototype._cachedCellContent):
        (WI.ResourceTimelineDataGridNode.prototype._timelineRecordUpdated):
        (WI.ResourceTimelineDataGridNode.prototype._dataGridNodeGoToArrowClicked):
        (WI.ResourceTimelineDataGridNode.prototype._updateStatus):
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar.else.let.graphDataSource.get startTime):
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar.else.let.graphDataSource.get currentTime):
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar.else.let.graphDataSource.get endTime):
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar.else.let.graphDataSource.get _extraTimePadding):
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar):
        (WI.ResourceTimelineDataGridNode.prototype.get records): Deleted.

        * UserInterface/Views/ResourceTimingPopoverDataGridNode.js:
        (WI.ResourceTimingPopoverDataGridNode):
        (WI.ResourceTimingPopoverDataGridNode.prototype.get records): Deleted.

        * UserInterface/Views/ScriptTimelineDataGridNode.js:
        (WI.ScriptTimelineDataGridNode.prototype.get data):
        (WI.ScriptTimelineDataGridNode.prototype.get subtitle):
        (WI.ScriptTimelineDataGridNode.prototype.createCellContent):
        (WI.ScriptTimelineDataGridNode.prototype.get records): Deleted.
        (WI.ScriptTimelineDataGridNode.prototype.get baseStartTime): Deleted.
        (WI.ScriptTimelineDataGridNode.prototype.get rangeStartTime): Deleted.
        (WI.ScriptTimelineDataGridNode.prototype.get rangeEndTime): Deleted.
        (WI.ScriptTimelineDataGridNode.prototype.updateRangeTimes): Deleted.

        * UserInterface/Views/SourceCodeTimelineTimelineDataGridNode.js:
        (WI.SourceCodeTimelineTimelineDataGridNode.prototype.get data):

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView):
        (WI.HeapAllocationsTimelineView.prototype.layout):
        (WI.HeapAllocationsTimelineView.prototype.reset):
        * UserInterface/Views/LayoutTimelineView.js:
        (WI.LayoutTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/MediaTimelineView.js:
        (WI.MediaTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/OverviewTimelineView.js:
        (WI.OverviewTimelineView.prototype._addResourceToDataGridIfNeeded):
        (WI.OverviewTimelineView.prototype._addSourceCodeTimeline):
        * UserInterface/Views/RenderingFrameTimelineView.js:
        (WI.RenderingFrameTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/ScriptDetailsTimelineView.js:
        (WI.ScriptDetailsTimelineView.prototype.layout):
        (WI.ScriptDetailsTimelineView.prototype._processPendingRecords):
        Update Timeline `WI.DataGrid` views to use the new constructor format.

        * UserInterface/Views/ResourceTimelineDataGridNode.css:
        (.resource-timing-popover-content .data-grid td.graph-column):
        Drive-by: add extra padding before/after resource timing bars shown when hovering.

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

        Web Inspector: changes to CSS resources only take affect once editing stops
        https://bugs.webkit.org/show_bug.cgi?id=195774
        <rdar://problem/48905413>

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype._resourceContentDidChange.applyStyleSheetChanges.styleSheetFound):
        (WI.CSSManager.prototype._resourceContentDidChange):
        (WI.CSSManager.prototype._updateResourceContent.fetchedStyleSheetContent):
        (WI.CSSManager.prototype._updateResourceContent):
        Use a `Throttler` instead of a 500ms debounce.

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

        Web Inspector: Search: allow DOM searches to be case sensitive
        https://bugs.webkit.org/show_bug.cgi?id=194673
        <rdar://problem/48087577>

        Reviewed by Timothy Hatcher.

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

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.performSearch.contextNodesReady):

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.performSearch.callback): Deleted.
        (WI.DOMManager.prototype.performSearch): Deleted.
        (WI.DOMManager.prototype.searchResult.mycallback): Deleted.
        (WI.DOMManager.prototype.searchResult): Deleted.
        (WI.DOMManager.prototype.cancelSearch): Deleted.
        Drive-by: remove unused code.

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

        Web Inspector: Sources: provide option to group by path
        https://bugs.webkit.org/show_bug.cgi?id=195203
        <rdar://problem/27340680>

        Reviewed by Timothy Hatcher.

        Create top-level folders for each origin and nest all resources (in a folder chain) underneath.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.closed):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject.searchTreeOutline): Added.
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject):
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addResource):
        (WI.SourcesNavigationSidebarPanel.prototype._addScript):
        (WI.SourcesNavigationSidebarPanel.prototype._addWorkerTargetWithMainResource):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeMouseDown.addOption): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeMouseDown): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceGroupingModeChanged):
        (WI.SourcesNavigationSidebarPanel.prototype._handleFrameMainResourceDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleMainFrameDidChange):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section.paused-reason.collapsed > .header > .options,):
        (.sidebar > .panel.navigation.sources > .content > .details-section.breakpoints > .header > .options .create-breakpoint): Added.
        (.sidebar > .panel.navigation.sources > .content > .resources): Added.
        (.sidebar > .panel.navigation.sources > .content .tree-outline.single-thread): Added.
        (.sidebar > .panel.navigation.sources > .content .tree-outline.single-thread > .item.thread): Added.
        (.sidebar > .panel.navigation.sources > .content > .details-section.scripts:not(.collapsed)): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread): Deleted.
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread > .item.thread): Deleted.
        Drive-by: fix "No Filter Results" message view to not overlap eachother.
        Drive-by: try to be more smart about what tree we focus when selecting a represented object.

        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement):
        (WI.ResourceTreeElement.prototype.get mainTitleText):
        (WI.ResourceTreeElement.prototype._updateTitles):
        * UserInterface/Base/URLUtilities.js:
        (WI.displayNameForURL):
        Provide a way for the display name to use a directory "/" instead of the last path component.
        This is needed in cases where the loaded resource is an implicit "index.*".

        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.createFoldersAsNeededForSubpath): Added.
        * UserInterface/Views/SourceCodeTreeElement.js:
        (WI.SourceCodeTreeElement.prototype.createFoldersAsNeededForSubpath): Deleted.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/Resource.js:

        * UserInterface/Views/DetailsSection.css:
        (.details-section > .header .go-to-arrow):
        Drive-by: vertically center go-to-arrow.

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

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get filterNavigationItems):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._generateSortComparator):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._handleGroupMediaRequestsByDOMNodeCheckedDidChange): Added.
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange): Deleted.
        Rename the `groupByNode` setting to be more specific.

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

        Web Inspector: CPU Usage Timeline - the right edge of each column should align with a CPU measurement
        https://bugs.webkit.org/show_bug.cgi?id=195789
        <rdar://problem/48915271>

        Reviewed by Joseph Pecoraro.

        Right now, each column is rendered such that the middle of the column is aligned with the
        time of the CPU measurement. This could potentially be misleading, as the width/position of
        the bar implies that there was a period of time after the actual time of the CPU measurement
        that should be "attributed" to that same CPU measurement.

           1      2      3
               _______
               [  *  ]
               [  *  ]_______
               [  *  ][  *  ]
        _______[  *  ][  *  ]
        [  *  ][  *  ][  *  ]
        [__*__][__*__][__*__]
         A   B  C   D  E   F

        In this example, one might "attribute" any work done at time B to record 1, when in reality,
        it should be "attributed" to record 2, since the CPU measurement had already been taken by
        the time B was captured, meaning that the work for B hadn't yet been done and could
        therefore not have affected the CPU measurement for record 1.

        We should be rendering the columns such that the CPU measurement aligns with the trailing
        edge of the column, so that all of the work that could be "attributed" to a given CPU
        measurement comes before it.

          1      2      3
            _______       ___
            [    *]       [
            [    *]_______[
            [    *][    *][
        ____[    *][    *][
          *][    *][    *][
        __*][____*][____*][__
         A   B  C   D  E   F

                NOTE: this "rendering" isn't exactly accurate, as the `*` should overlap the `]`.

        Legend:
         - `[     ]` represents a column for a CPU measurement
         - `*` represents the time when the measurement actually takes place

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        (WI.CPUTimelineOverviewGraph.prototype._handleChartClick):
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._recordSelected):

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

        Web Inspector: Provide $event in the console when paused on an event listener
        https://bugs.webkit.org/show_bug.cgi?id=188672

        Reviewed by Timothy Hatcher.

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

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

        Web Inspector: DOM: "Capture Screenshot" should only be shown if the node is attached
        https://bugs.webkit.org/show_bug.cgi?id=195793
        <rdar://problem/48916594>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.prototype.get attached): Added.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._populateTagContextMenu):

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

        Web Inspector: HAR Extension for `serverIPAddress` port number
        https://bugs.webkit.org/show_bug.cgi?id=195695

        Reviewed by Matt Baker.

        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.entry):
        (WI.HARBuilder.port):
        * UserInterface/Models/LocalResource.js:
        (WI.LocalResource.fromHAREntry):

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

        Web Inspector: Changes: style attribute changes aren't being tracked
        https://bugs.webkit.org/show_bug.cgi?id=193859
        <rdar://problem/47568977>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.get modifiedStyles):
        (WI.CSSManager.prototype.addModifiedStyle):
        (WI.CSSManager.prototype._mainResourceDidChange):
        (WI.CSSManager.prototype.get modifiedCSSRules): Deleted.
        (WI.CSSManager.prototype.addModifiedCSSRule): Deleted.
        (WI.CSSManager.prototype.removeModifiedCSSRule): Deleted.
        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule.prototype.get stringId): Deleted.
        (WI.CSSRule.prototype.markModified): Deleted.
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.get stringId):
        (WI.CSSStyleDeclaration.prototype.markModified):
        Inline styles weren't tracked because they didn't have owner rules.
        Track style declarations instead of CSS rules.

        * UserInterface/Views/ChangesDetailsSidebarPanel.css:
        (.sidebar > .panel.changes-panel .css-rule):
        (.sidebar > .panel.changes-panel .css-rule + .css-rule):
        (.changes-panel .selector.style-attribute):
        (.changes-panel .selector:not(.style-attribute)):
        (.changes-panel .css-property-line > .property):
        (.changes-panel .css-property-line.unchanged): Deleted.
        Drive-by: use text-color-secondary for unchanged properties instead of altering opacity.

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        (WI.ChangesDetailsSidebarPanel.prototype._createRuleElement):
        For an inline style declaration, instead of showing a CSS source file location show an appropriate selector for its DOM node.

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

        Web Inspector: HAR Extension for Resource Priority
        https://bugs.webkit.org/show_bug.cgi?id=195693

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.entry):
        (WI.HARBuilder.priority):
        (WI.HARBuilder.networkPriorityFromHARPriority):
        Include priority custom extension.

        * UserInterface/Models/LocalResource.js:
        (WI.LocalResource.fromHAREntry):
        Import priority.

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

        Web Inspector: CPU Usage Timeline - Give long thread names a tooltip if they could be ellipsized
        https://bugs.webkit.org/show_bug.cgi?id=195314

        Reviewed by Devin Rousso.

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

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

        Web Inspector: CPU Usage Timeline - Reduce the intensity of the orange overlay color in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=195772

        Reviewed by Devin Rousso.

        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        (:root):

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

        Web Inspector: Timelines - Import / Export Timeline Recordings
        https://bugs.webkit.org/show_bug.cgi?id=195709
        <rdar://problem/23188921>

        Reviewed by Devin Rousso.

        Timeline exporting saves TimelineRecording and TimelineOverview state.
        The TimelineRecording includes all kinds of model objects, such as
        records, markers, memory pressure events, etc. It also includes raw
        protocol data, such as script profiler samples. TimelineOverview
        includes some of the view state to restore, such as the selected
        time range, zoom level, and selected timeline.

        Timeline importing constructs a new TimelineRecording by replaying
        the records, markers, and other events, as well as re-initializing
        more state. To finally display the imported recording, the content
        view will immediately initialize start/current/end times and the
        overview will restore the view state.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.synthesizeImportError):
        (WI.TimelineManager.prototype.importRecording):
        Import API.

        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        Initialize the samples on the recording via a different path
        so that the data can be saved for exporting.

        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording):
        (WI.TimelineRecording.import):
        (WI.TimelineRecording.prototype.exportData):
        (WI.TimelineRecording.prototype.get capturing):
        (WI.TimelineRecording.prototype.get imported):
        (WI.TimelineRecording.prototype.unloaded):
        (WI.TimelineRecording.prototype.reset):
        (WI.TimelineRecording.prototype.addEventMarker):
        (WI.TimelineRecording.prototype.addRecord):
        (WI.TimelineRecording.prototype.addMemoryPressureEvent):
        (WI.TimelineRecording.prototype.initializeCallingContextTrees):
        (WI.TimelineRecording.prototype.canExport):
        Save data at the TimelineRecording level that can be used for export.
        We only allow exporting a TimelineRecording that has started/stopped
        at least once and is not currently capturing.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.get navigationItems):
        (WI.TimelineRecordingContentView.prototype.get supportsSave):
        (WI.TimelineRecordingContentView.prototype.get saveData):
        (WI.TimelineRecordingContentView.prototype.shown):
        (WI.TimelineRecordingContentView.prototype._capturingStarted):
        (WI.TimelineRecordingContentView.prototype._capturingStopped):
        (WI.TimelineRecordingContentView.prototype._initializeImportedRecording):
        (WI.TimelineRecordingContentView.prototype._exportTimelineRecording):
        (WI.TimelineRecordingContentView.prototype._importButtonNavigationItemClicked):
        (WI.TimelineRecordingContentView.prototype._recordingReset):
        Add Import and Export buttons in the Timeline navigation bar.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype.exportData):
        (WI.TimelineOverview.prototype._instrumentAdded):
        (WI.TimelineOverview.prototype._recordingImported):
        When importing a recording update the TimelineOverview state
        soon afterwards.

        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.fromJSON):
        (WI.CPUTimelineRecord.prototype.toJSON):
        * UserInterface/Models/GarbageCollection.js:
        (WI.GarbageCollection.fromJSON):
        (WI.GarbageCollection.prototype.toJSON):
        * UserInterface/Models/Geometry.js:
        (WI.Quad.fromJSON):
        (WI.Quad.prototype.toJSON):
        * UserInterface/Models/HeapAllocationsTimelineRecord.js:
        (WI.HeapAllocationsTimelineRecord.fromJSON):
        (WI.HeapAllocationsTimelineRecord.prototype.toJSON):
        * UserInterface/Models/LayoutTimelineRecord.js:
        (WI.LayoutTimelineRecord.fromJSON):
        (WI.LayoutTimelineRecord.prototype.toJSON):
        * UserInterface/Models/MediaTimelineRecord.js:
        (WI.MediaTimelineRecord.fromJSON):
        (WI.MediaTimelineRecord.prototype.toJSON):
        * UserInterface/Models/MemoryPressureEvent.js:
        (WI.MemoryPressureEvent.fromJSON):
        (WI.MemoryPressureEvent.prototype.toJSON):
        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord):
        (WI.MemoryTimelineRecord.fromJSON):
        (WI.MemoryTimelineRecord.prototype.toJSON):
        * UserInterface/Models/RenderingFrameTimelineRecord.js:
        (WI.RenderingFrameTimelineRecord.fromJSON):
        (WI.RenderingFrameTimelineRecord.prototype.toJSON):
        * UserInterface/Models/ResourceTimelineRecord.js:
        (WI.ResourceTimelineRecord.fromJSON):
        (WI.ResourceTimelineRecord.prototype.toJSON):
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.fromJSON):
        (WI.ScriptTimelineRecord.prototype.toJSON):
        * UserInterface/Models/TimelineMarker.js:
        (WI.TimelineMarker.fromJSON):
        (WI.TimelineMarker.prototype.toJSON):
        (WI.TimelineMarker.prototype.get type):
        (WI.TimelineMarker.prototype.get details):
        (WI.TimelineMarker.prototype.set time):
        (WI.TimelineMarker):
        * UserInterface/Models/TimelineRecord.js:
        (WI.TimelineRecord.fromJSON):
        (WI.TimelineRecord.prototype.toJSON):
        Import / Export toJSON / fromJSON implementations.
        
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype._cpuTimelineRecordAdded):
        (WI.CPUTimelineOverviewGraph.prototype._processRecord):
        * UserInterface/Views/LayoutTimelineOverviewGraph.js:
        (WI.LayoutTimelineOverviewGraph):
        (WI.LayoutTimelineOverviewGraph.prototype._layoutTimelineRecordAdded):
        (WI.LayoutTimelineOverviewGraph.prototype._processRecord):
        * UserInterface/Views/LayoutTimelineView.js:
        (WI.LayoutTimelineView):
        (WI.LayoutTimelineView.prototype._layoutTimelineRecordAdded):
        (WI.LayoutTimelineView.prototype._processRecord):
        * UserInterface/Views/MediaTimelineView.js:
        (WI.MediaTimelineView):
        (WI.MediaTimelineView.prototype._handleRecordAdded):
        (WI.MediaTimelineView.prototype._processRecord):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph):
        (WI.MemoryTimelineOverviewGraph.prototype._memoryTimelineRecordAdded):
        (WI.MemoryTimelineOverviewGraph.prototype._processRecord):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView):
        (WI.MemoryTimelineView.prototype._memoryTimelineRecordAdded):
        (WI.MemoryTimelineView.prototype._processRecord):
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        (WI.NetworkTimelineOverviewGraph):
        (WI.NetworkTimelineOverviewGraph.prototype.reset):
        (WI.NetworkTimelineOverviewGraph.prototype._networkTimelineRecordAdded):
        (WI.NetworkTimelineOverviewGraph.prototype._processRecord):
        (WI.NetworkTimelineOverviewGraph.prototype._networkTimelineRecordAdded.compareByStartTime): Deleted.
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView):
        (WI.NetworkTimelineView.prototype._networkTimelineRecordAdded):
        (WI.NetworkTimelineView.prototype._processRecord):
        * UserInterface/Views/RenderingFrameTimelineView.js:
        (WI.RenderingFrameTimelineView):
        (WI.RenderingFrameTimelineView.prototype._renderingFrameTimelineRecordAdded):
        (WI.RenderingFrameTimelineView.prototype._processRecord):
        * UserInterface/Views/ScriptDetailsTimelineView.js:
        (WI.ScriptDetailsTimelineView):
        (WI.ScriptDetailsTimelineView.prototype._scriptTimelineRecordAdded):
        (WI.ScriptDetailsTimelineView.prototype._processRecord):
        Add common _processRecord path to each timeline OverviewGraph and TimelineView.
        By calling this in construction we populate graphs with TimelineRecords that
        may have already existed. This is necessary for imports, but this also fixes
        the case where you enable a timeline that had data and it didn't show data.

        * UserInterface/Views/LayoutTimelineOverviewGraph.css:
        (.timeline-overview-graph.layout-overview > .graph-row):
        (.timeline-overview-graph.layout-overview > .graph-row > .timeline-record-bar):
        (.timeline-overview-graph.layout-overview > .graph-row > .timeline-record-bar > .segment):
        (.timeline-overview-graph.layout > .graph-row): Deleted.
        (.timeline-overview-graph.layout > .graph-row > .timeline-record-bar): Deleted.
        (.timeline-overview-graph.layout > .graph-row > .timeline-record-bar > .segment): Deleted.
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.timeline-record-type-layout.paint > .segment,):
        (.timeline-record-bar.timeline-record-type-layout.layout-timeline-record-paint > .segment,): Deleted.
        We simplified some of the sub-record type enum strings. To do this we needed to change
        "layout" to "layout-overview" to avoid a conflict.

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

        Web Inspector: Network - Toggle Between Live Activity and Imported HAR resource collections
        https://bugs.webkit.org/show_bug.cgi?id=195734

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/NetworkHAR.svg: Added.
        * UserInterface/Images/NetworkOverview.svg: Added.
        * UserInterface/Views/NetworkTableContentView.css:
        (.content-view.tab.network > .content-browser > .navigation-bar .hierarchical-path .icon):
        (.network-overview-icon > .icon):
        (.network-har-icon > .icon):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get navigationItems):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.tableIndexForRepresentedObject):
        (WI.NetworkTableContentView.prototype.tableRepresentedObjectForIndex):
        (WI.NetworkTableContentView.prototype.tableNumberOfRows):
        (WI.NetworkTableContentView.prototype.tableCellContextMenuClicked):
        (WI.NetworkTableContentView.prototype.tableSelectionDidChange):
        (WI.NetworkTableContentView.prototype.tablePopulateCell):
        (WI.NetworkTableContentView.prototype._addCollection):
        (WI.NetworkTableContentView.prototype._setActiveCollection):
        (WI.NetworkTableContentView.prototype._addCollectionPathComponent):
        (WI.NetworkTableContentView.prototype._collectionsHierarchicalPathComponentWasSelected):
        (WI.NetworkTableContentView.prototype._changeCollection):
        (WI.NetworkTableContentView.prototype.handleClearShortcut):
        (WI.NetworkTableContentView.prototype._updateWaterfallTimeRange):
        (WI.NetworkTableContentView.prototype._updateWaterfallTimelineRuler):
        (WI.NetworkTableContentView.prototype._canExportHAR):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._populateWithInitialResourcesIfNeeded):
        (WI.NetworkTableContentView.prototype._rowIndexForRepresentedObject):
        (WI.NetworkTableContentView.prototype._updateEntryForResource):
        (WI.NetworkTableContentView.prototype._updateEmptyFilterResultsMessage):
        (WI.NetworkTableContentView.prototype._mainResourceDidChange):
        (WI.NetworkTableContentView.prototype._mainFrameDidChange):
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFinish):
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFail):
        (WI.NetworkTableContentView.prototype._resourceTransferSizeDidChange):
        (WI.NetworkTableContentView.prototype._handleResourceAdded):
        (WI.NetworkTableContentView.prototype._runForMainCollection):
        (WI.NetworkTableContentView.prototype._isShowingMainCollection):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._handleNodeDidFireEvent):
        (WI.NetworkTableContentView.prototype._handleNodeLowPowerChanged):
        (WI.NetworkTableContentView.prototype._updateSort):
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        (WI.NetworkTableContentView.prototype._HARResources):
        (WI.NetworkTableContentView.prototype._importHAR):
        Introduce the concept of collections that can be swapped in/out
        to re-render the Network Table with different contents.

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

        Web Inspector: provide a way to capture a screenshot of a node from within the page
        https://bugs.webkit.org/show_bug.cgi?id=194279
        <rdar://problem/10731573>

        Reviewed by Joseph Pecoraro.

        Add `console.screenshot` functionality, which displays a screenshot of a given object (if
        able) within Web Inspector's Console tab. From there, it can be viewed and saved.

        Currently, `console.screenshot` will
         - capture an image of a `Node` (if provided)
         - capture an image of the viewport if nothing is provided

        * UserInterface/Models/ConsoleMessage.js:
        (WI.ConsoleMessage):
        * UserInterface/Views/ConsoleCommandView.js:
        (WI.ConsoleCommandView.prototype.render):
        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype.render):
        (WI.ConsoleMessageView.prototype.toClipboardString):
        (WI.ConsoleMessageView.prototype._appendMessageTextAndArguments):
        (WI.ConsoleMessageView.prototype._appendSavedResultIndex):
        (WI.ConsoleMessageView.prototype._appendStackTrace):
        (WI.ConsoleMessageView.prototype._makeExpandable):
        (WI.ConsoleMessageView.prototype._handleContextMenu): Added.
        * UserInterface/Views/ConsoleMessageView.css:
        (.console-user-command.special-user-log > .console-message-body): Added.
        (.console-message-body): Added.
        (.console-message-body > span): Added.
        (.console-message-body > span > :matches(.console-message-enclosed, .console-message-preview, .console-message-preview-divider)): Added.
        (.console-message-body > .console-image): Added.
        (.console-message-body > .show-grid): Added.
        (.console-error-level .console-message-body): Added.
        (.console-warning-level .console-message-body): Added.
        (.console-log-level.console-image-container::before): Added.
        (.console-user-command > .console-message-body): Added.
        (.console-warning-level .console-message-body): Added.
        (.console-error-level .console-message-body): Added.
        (.console-user-command > .console-message-body): Added.
        (.console-user-command.special-user-log > .console-message-text): Deleted.
        (.console-message-text): Deleted.
        (.console-message-text > span): Deleted.
        (.console-message-text > span > :matches(.console-message-enclosed, .console-message-preview, .console-message-preview-divider)): Deleted.
        (.console-error-level .console-message-text): Deleted.
        (.console-warning-level .console-message-text): Deleted.
        (.console-user-command > .console-message-text): Deleted.
        (.console-warning-level .console-message-text): Deleted.
        (.console-error-level .console-message-text): Deleted.
        (.console-user-command > .console-message-text): Deleted.
        * UserInterface/Views/LogContentView.css:
        (.search-in-progress .console-item:not(.filtered-out-by-search).special-user-log .console-message-text .highlighted): Added.
        (.search-in-progress .console-item:not(.filtered-out-by-search).special-user-log .console-message-body .highlighted): Deleted.
        Renamed variables/classes to be more semantically correct when the content is an image.
         - `_messageTextElement` to `_messageBodyElement` (JS)
         - `.console-message-text` to `.console-message-body` (CSS)

        * UserInterface/Controllers/JavaScriptLogViewController.js:
        (WI.JavaScriptLogViewController.prototype.renderPendingMessages):

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

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.screenshotString): Added.

        * UserInterface/Models/NativeFunctionParameters.js:
        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:

        * UserInterface/Images/ConsoleImage.svg: Copied from UserInterface/Images/Canvas.svg.
        * Localizations/en.lproj/localizedStrings.js:

2019-03-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Jump to effective property button doesn't hide after overridden property become effective
        https://bugs.webkit.org/show_bug.cgi?id=195770
        <rdar://problem/48903634>

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property .select-effective-property): Added.
        (.spreadsheet-style-declaration-editor .property.overridden .select-effective-property): Deleted.
        Hide `.select-effective-property` element for properties that aren't overridden.

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

        Web Inspector: REGRESSION: Canvas: the first processed action should be selected as soon as it's available if no previous selected action exists
        https://bugs.webkit.org/show_bug.cgi?id=195732
        <rdar://problem/48875214>

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._handleRecordingProcessedAction):
        Rather than wait until the entire recording is ready, set the selected action as soon as the
        first action is ready (assuming there isn't already a selected action).

2019-03-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network - HAR Import
        https://bugs.webkit.org/show_bug.cgi?id=195642
        <rdar://problem/34820974>

        Reviewed by Devin Rousso.

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

        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.dateFromHARDate):
        (WI.HARBuilder.protocolFromHARProtocol):
        (WI.HARBuilder.responseSourceFromHARFetchType):
        Reverse parsers from HAR to WI.Resource types.

        * UserInterface/Models/LocalResource.js: Added.
        (WI.LocalResource):
        (WI.LocalResource.headersArrayToHeadersObject):
        (WI.LocalResource.fromHAREntry):
        (WI.LocalResource.prototype.hasContent):
        (WI.LocalResource.prototype.setContent):
        (WI.LocalResource.prototype.requestContentFromBackend):
        A Resource subclass with data fully supplied in the frontend.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.synthesizeImportError):
        (WI.NetworkManager.prototype.localResourceForURL):
        (WI.NetworkManager.prototype.processHAR):
        Process a HAR and extract local resources.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype._handleResourceAdded):
        (WI.NetworkTableContentView.prototype._importHAR):
        Add an import button. When an import succeeds reset the
        table and only show imported resources (ignoring page
        loaded resources).

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

        Web Inspector: Console: getEventListeners should work for any EventTarget
        https://bugs.webkit.org/show_bug.cgi?id=195713

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/NativeFunctionParameters.js:

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

        Web Inspector: Styles: `::-webkit-scrollbar*` rules aren't shown
        https://bugs.webkit.org/show_bug.cgi?id=195123
        <rdar://problem/48450148>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.displayNameForPseudoId): Added.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.static uniqueOrderedStyles): Added.
        (WI.DOMNodeStyles.prototype.get uniqueOrderedStyles):

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype._handleSectionFilterApplied):
        Rather than iterate over the `WI.DOMNode`'s list of pseudo-elements (which is only ::before
        and ::after), we iterate over the `WI.DOMNodeStyle`'s list of pseudo-element rules. This is
        an object where the key is a `CSS.PseudoId` and the value is an object containing all the
        matched rules and ordered styles for that pseudo-type. We can preserve the current
        functionality by using the ::before/::after `WI.DOMNode` when we encounter one of those
        pseudo-ids.

        An additional benefit of this change is that `::before`/`::after` styles will still appear
        in the Rules panel even if they don't have a `content` property set (e.g. when the
        `::before`/`::after` pseudo-element doesn't exist). This is because the styles are no longer
        fetched from those pseudo-element nodes directly, but rather as a matched style for the
        parent node. As such, editing a `content` property to become invalid/disablde in a
        `::before`/`::after` rule won't make the entire rule disappeaer.

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

        Web Inspector: we should show artificial context menus on mousedown instead of click
        https://bugs.webkit.org/show_bug.cgi?id=195494

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ContextMenu.js:
        (WI.ContextMenu):
        (WI.ContextMenu.prototype.show):
        (WI.ContextMenu.prototype.addBeforeShowCallback): Added.
        (WI.ContextMenu.prototype.handleEvent):
        Provide a way to register a callback that will be called right as the "contextmenu" event is
        handled, but before the context menu is actually shown. Since "mousedown" events are also
        fired when/before a "contextmenu" event is fired, each of the below callers has to maintain
        some state indicating "we are about to show a context menu, so ignore all "mousedown" events
        until that time". Without this, the below callers wouldn't be able to tell when the context
        menu is finally shown.

        * UserInterface/Base/SearchUtilities.js:
        (WI.SearchUtilities.createSettingsButton):
        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._handleCanvasElementButtonMouseDown): Added.
        (WI.CanvasContentView.prototype._handleViewShaderButtonMouseDown): Added.
        (WI.CanvasContentView.prototype._handleViewRecordingButtonMouseDown): Added.
        (WI.CanvasContentView.prototype._canvasElementButtonClicked): Deleted.
        (WI.CanvasContentView.prototype._handleViewShaderButtonClicked): Deleted.
        (WI.CanvasContentView.prototype._handleViewRecordingButtonClicked): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointMouseDown): Added.
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked): Deleted.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointMouseDown): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointClicked): Deleted.
        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype._handleMouseDown):
        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype._handleMouseDown):

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

        Web Inspector: Debugger: pausing in an inline script on a page with a URL query creates an Extra Script
        https://bugs.webkit.org/show_bug.cgi?id=195705
        <rdar://problem/48853820>

        Reviewed by Antoine Quint.

        * UserInterface/Models/Script.js:
        (WI.Script.prototype._resolveResource):
        If the page's URL has a query parameter, the payload we receive for any inline <script>s
        doesn't include the query parameter as part of its URL. As such, if there isn't an existing
        resource with a URL that exactly matches the URL of the script and if the URL of the main
        resource for the script's target starts with the URL of the script, we assume that the
        script "belongs" to the target's main resource and associate the script with it as such.

2019-03-13  Keith Rollin  <krollin@apple.com>

        Add support for new StagedFrameworks layout
        https://bugs.webkit.org/show_bug.cgi?id=195543

        Reviewed by Alexey Proskuryakov.

        When creating the WebKit layout for out-of-band Safari/WebKit updates,
        use an optional path prefix when called for.

        Opportunistic cleanup: remove unused
        OTHER_LDFLAGS_VERSIONED_FRAMEWORK_PATH variable, which otherwise would
        have needlessly been updated to also incorporate the new prefix.

        * Configurations/Base.xcconfig:
        * Configurations/WebKitTargetConditionals.xcconfig: Added.

2019-03-13  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r240946): Web Inspector: Styles: removing selected property doesn't update overridden status
        https://bugs.webkit.org/show_bug.cgi?id=195389
        <rdar://problem/48658929>

        Reviewed by Matt Baker.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeStyleText):
        Call DOMNodeStyles.prototype.refresh after the callback. No updates
        to CSSStyleDeclaration happen until the callback is called.

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

        Web Inspector: Protocol Logging: log messages with backtrace if inspector^2 is open
        https://bugs.webkit.org/show_bug.cgi?id=195687

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer.prototype._processEntry):

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

        Web Inspector: REGRESSION(r242737): unnecessary semicolon added when populating WI.TreeOutline stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=195689

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline._generateStyleRulesIfNeeded):

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

        Web Inspector: Network - HAR Export duplicates blocked/send time if there was no dns/connect block
        https://bugs.webkit.org/show_bug.cgi?id=195655
        <rdar://problem/48831152>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.timings):

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

        Web Inspector: Sources: allow image collections to be filtered by type
        https://bugs.webkit.org/show_bug.cgi?id=195630

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceCollectionContentView.js:
        (WI.ResourceCollectionContentView):
        (WI.ResourceCollectionContentView.prototype.get navigationItems): Added.
        (WI.ResourceCollectionContentView.prototype.contentViewAdded):
        (WI.ResourceCollectionContentView.prototype.contentViewRemoved): Added.
        (WI.ResourceCollectionContentView.prototype._updateImageTypeScopeBar): Added.
        (WI.ResourceCollectionContentView.prototype._handleImageTypeSelectionChanged): Added.
        * UserInterface/Views/ResourceCollectionContentView.css: Asdded.
        (.resource-collection-image-type-scope-bar.default-item-selected):

        * UserInterface/Views/CollectionContentView.css:
        (.content-view.collection > .content-view[hidden]): Added.

        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem.prototype.set hidden):
        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype.set scopeBarItems):
        (WI.MultipleScopeBarItem.prototype.set selectedScopeBarItem):
        (WI.MultipleScopeBarItem.prototype.get _visibleScopeBarItems): Added.
        (WI.MultipleScopeBarItem.prototype._selectElementSelectionChanged):
        (WI.MultipleScopeBarItem.prototype._handleItemHiddenChanged): Added.
        Dispatch an event when an item is hidden so that any owner `WI.MultipleScopeBarItem` can
        rerender it's <select> without that item.

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

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

        Web Inspector: Keyboard shortcut for settings tab too greedy on non-US keyboards
        https://bugs.webkit.org/show_bug.cgi?id=192947
        <rdar://problem/46886779>

        Reviewed by Devin Rousso.

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

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

        Web Inspector: Elements: provide node context menu items for event listeners sorted by node
        https://bugs.webkit.org/show_bug.cgi?id=195633

        Reviewed by Matt Baker.

        * UserInterface/Base/DOMUtilities.js:
        (WI.linkifyNodeReferenceElement):
        (WI.bindInteractionsForNodeToElement): Added.
        Split logic for adding event listeners into a separate function so it can be used on
        existing DOM without modifying it.

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

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

        Web Inspector: DOM Debugger: remove left padding when the last DOM breakpoint is removed
        https://bugs.webkit.org/show_bug.cgi?id=195522

        Reviewed by Matt Baker.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype._updateBreakpointStatus):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.get hasBreakpoint): Added.

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

        Web Inspector: Canvas: export recording as HTML
        https://bugs.webkit.org/show_bug.cgi?id=195311
        <rdar://problem/48588673>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async swizzle):
        (WI.Recording.prototype.toHTML): Added.
        (WI.Recording.prototype.toHTML.escapeHTML): Added.
        (WI.Recording.prototype.toHTML.processObject): Added.
        (WI.Recording.prototype.toHTML.processValue): Added.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype._exportRecording):
        (WI.RecordingContentView.prototype._exportReduction): Added.
        (WI.RecordingContentView.prototype._updateExportButton): Added.
        (WI.RecordingContentView.prototype._handleExportNavigationItemClicked): Added.
        (WI.RecordingContentView.prototype._handleRecordingProcessedAction):

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView):
        * UserInterface/Views/HeapSnapshotContentView.js:
        (WI.HeapSnapshotContentView):
        Drive-by: s/`toolTip`/`tooltip`.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Audit: there should be a centralized place for reusable code
        https://bugs.webkit.org/show_bug.cgi?id=195265
        <rdar://problem/47040673>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async start):
        (WI.AuditManager.prototype._topLevelTestForTest): Added.
        (WI.AuditManager.prototype._topLevelTestForTest.walk): Added.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        (WI.AuditTestBase.prototype.async setup): Added.
        (WI.AuditTestBase.toJSON):

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async.fromPayload):
        (WI.AuditTestCase.prototype.async run.async parseResponse):
        Allow additional data to be passed back to the result's `data` for testing.

        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup.async.fromPayload):

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

        Web Inspector: Timelines - Improve handling of past recordings (readonly)
        https://bugs.webkit.org/show_bug.cgi?id=195594

        Reviewed by Devin Rousso.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._clearTimeline):
        Don't allow clearing of a readonly recording.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.prototype._toggleRecordingOnSpacebar):
        Don't do anything when viewing a readonly recording.

        (WI.TimelineTabContentView.prototype._recordButtonClicked):
        Start a new recording if viewing a readonly recording.

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

        Web Inspector: REGRESSION: Network Cookies Table does not load
        https://bugs.webkit.org/show_bug.cgi?id=195599

        Reviewed by Devin Rousso.

        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype.tableIndexForRepresentedObject):
        (WI.ResourceCookiesContentView.prototype.tableRepresentedObjectForIndex):
        Include needed delegate methods.

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

        Web Inspector: use -webkit-{margin,padding}-{start,end} instead of [dir={ltr/rtl}] rules
        https://bugs.webkit.org/show_bug.cgi?id=195569
        <rdar://problem/48778727>

        Reviewed by Matt Baker.

        * UserInterface/Debug/UncaughtExceptionReporter.css:
        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        * UserInterface/Views/BreakpointActionView.css:
        * UserInterface/Views/BreakpointPopoverController.css:
        * UserInterface/Views/CPUTimelineView.css:
        * UserInterface/Views/CallFrameTreeElement.css:
        * UserInterface/Views/CallFrameView.css:
        * UserInterface/Views/DOMTreeContentView.css:
        * UserInterface/Views/DOMTreeOutline.css:
        * UserInterface/Views/DashboardContainerView.css:
        * UserInterface/Views/DataGrid.css:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DebuggerSidebarPanel.css:
        * UserInterface/Views/DefaultDashboardView.css:
        * UserInterface/Views/DetailsSection.css:
        * UserInterface/Views/FilterBar.css:
        * UserInterface/Views/FindBanner.css:
        * UserInterface/Views/FontResourceContentView.css:
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        * UserInterface/Views/HierarchicalPathComponent.css:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.css:
        * UserInterface/Views/Main.css:
        * UserInterface/Views/NetworkTableContentView.css:
        * UserInterface/Views/OpenResourceDialog.css:
        * UserInterface/Views/RecordingActionTreeElement.css:
        * UserInterface/Views/ScopeRadioButtonNavigationItem.css:
        * UserInterface/Views/SettingsTabContentView.css:
        * UserInterface/Views/ThreadTreeElement.css:
        * UserInterface/Views/Toolbar.css:
        * UserInterface/Views/TreeOutline.css:
        * UserInterface/Views/TypeTreeElement.css:
        * UserInterface/Views/TypeTreeView.css:
        * UserInterface/Views/URLBreakpointPopover.css:
        * UserInterface/Views/WebSocketContentView.css:

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.static _getClassNames):
        Replace class `.action` with `.recording-action` for better uniqueness/clarity.

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

        Web Inspector: DOMDebugger: protocol error on first open
        https://bugs.webkit.org/show_bug.cgi?id=195248
        <rdar://problem/48538465>

        Unreviewed followup of r242743 to fix test inspector/dom-debugger/dom-breakpoints.html.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
        Still attempt to resolve the DOM breakpoint if it already has a `domNodeIdentifier` so that
        it will get added to the node's frame's DOM breakpoint map. Without this, some breakpoints
        might get "missed" when calling `WI.domDebuggerManager.removeDOMBreakpointsForNode`.

2019-03-11  Justin Fan  <justin_fan@apple.com>

        [Web GPU] Update GPUSwapChainDescriptor, GPUSwapChain and implement GPUCanvasContext
        https://bugs.webkit.org/show_bug.cgi?id=194406
        <rdar://problem/47892466>

        Reviewed by Myles C. Maxfield.

        Name updates for Web GPU renaming in inspector.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.displayNameForContextType):

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

        Web Inspector: Editing Timelines shows two CPU Timelines
        https://bugs.webkit.org/show_bug.cgi?id=195578

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.availableTimelineTypes):
        The CPU Instrument is already in the default list.

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

        Web Inspector: DOMDebugger: protocol error on first open
        https://bugs.webkit.org/show_bug.cgi?id=195248
        <rdar://problem/48538465>

        Reviewed by Joseph Pecoraro.

        Don't try to call `DOMDebugger` commands until a target has been initialized.
        Still attempt to resolve DOM breakpoints whenever the main resource/frame changes.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype.initializeTarget): Added.
        (WI.DOMDebuggerManager.supportsEventBreakpoints):
        (WI.DOMDebuggerManager.prototype.get supported):
        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.addURLBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._speculativelyResolveDOMBreakpointsForURL): Added.
        (WI.DOMDebuggerManager.prototype._resolveDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._saveDOMBreakpoints):
        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
        (WI.DOMDebuggerManager.prototype._mainFrameDidChange):
        (WI.DOMDebuggerManager.prototype._mainResourceDidChange):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint.breakpointRemoved): Deleted.
        (WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype._updateDOMBreakpoint.breakpointUpdated): Deleted.
        (WI.DOMDebuggerManager.prototype._resolveEventBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._resolveURLBreakpoint): Deleted.

        * UserInterface/Base/Multimap.js: Added.
        (Multimap):
        (Multimap.prototype.get):
        (Multimap.prototype.add):
        (Multimap.prototype.delete):
        (Multimap.prototype.clear):
        (Multimap.prototype.keys):
        (Multimap.prototype.*values):
        (Multimap.prototype.*[Symbol.iterator]):
        (Multimap.prototype.toJSON):
        * .eslintrc:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        Helper data structure for managing Maps of Sets (e.g. all DOM breakpoints for a URL).

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

        Web Inspector: CPU Usage Timeline - Enable by default
        https://bugs.webkit.org/show_bug.cgi?id=195471

        Reviewed by Devin Rousso.

        Remove experimental setting and include the CPU timeline in the
        default set of timelines.

        * UserInterface/Base/Setting.js:
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.defaultTimelineTypes):
        * UserInterface/Main.html:
        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.selected):
        (.timeline-overview-graph.cpu > .column-chart > svg > rect): Deleted.
        (body[dir=rtl] .timeline-overview-graph.cpu > .column-chart): Deleted.
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        * UserInterface/Views/LegacyCPUTimelineView.css: Removed.
        * UserInterface/Views/LegacyCPUTimelineView.js: Removed.
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        * UserInterface/Views/Variables.css:
        (:root):

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

        Web Inspector: CPU Usage Timeline - Better Thread chart layout values
        https://bugs.webkit.org/show_bug.cgi?id=195547

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.layout.bestThreadLayoutMax):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype._showGraphOverlay):
        Include a separate layoutMax for the combined view and a thread layoutMax
        for the thread groups.

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

        Web Inspector: CPU Usage Timeline - Add legend and graph hover effects
        https://bugs.webkit.org/show_bug.cgi?id=195390

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New strings for the legends.

        * UserInterface/Main.html:
        Combined files.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        Tweaked colors, including individual stroke and fill colors for each CPU section.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.total-usage):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.main-thread-usage):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.worker-thread-usage):
        Updated colors.

        * UserInterface/Views/CPUUsageCombinedView.css: Renamed from Source/WebInspectorUI/UserInterface/Views/CPUUsageStackedView.css.
        (.cpu-usage-combined-view > .details > .legend-container):
        (.cpu-usage-combined-view > .details > .legend-container > .row):
        (.cpu-usage-combined-view > .details > .legend-container > .row + .row):
        (.cpu-usage-combined-view > .details > .legend-container > .row > .swatch):
        * UserInterface/Views/CPUUsageCombinedView.js: Renamed from Source/WebInspectorUI/UserInterface/Views/CPUUsageStackedView.js.
        (WI.CPUUsageCombinedView.appendLegendRow):
        (WI.CPUUsageCombinedView):
        (WI.CPUUsageCombinedView.prototype.get graphElement):
        (WI.CPUUsageCombinedView.prototype.get chart):
        (WI.CPUUsageCombinedView.prototype.get rangeChart):
        (WI.CPUUsageCombinedView.prototype.clear):
        (WI.CPUUsageCombinedView.prototype.updateChart):
        (WI.CPUUsageCombinedView.prototype.updateMainThreadIndicator):
        (WI.CPUUsageCombinedView.prototype.clearLegend):
        (WI.CPUUsageCombinedView.prototype.updateLegend):
        (WI.CPUUsageCombinedView.prototype._updateDetails):
        * UserInterface/Views/CPUUsageIndicatorView.css: Removed.
        * UserInterface/Views/CPUUsageIndicatorView.js: Removed.
        Combined the Indicator and StackedAreaChart into a single view
        that share a left details section.

        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.get graphElement):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.updateChart):
        (WI.CPUUsageView.prototype.clearLegend):
        (WI.CPUUsageView.prototype.updateLegend):
        (WI.CPUUsageView.prototype._updateDetails):
        Include a legend in the left details section.

        * UserInterface/Views/AreaChart.js:
        (WI.AreaChart):
        (WI.AreaChart.prototype.addPointMarker):
        (WI.AreaChart.prototype.clearPointMarkers):
        (WI.AreaChart.prototype.clear):
        (WI.AreaChart.prototype.layout):
        * UserInterface/Views/StackedAreaChart.js:
        (WI.StackedAreaChart):
        (WI.StackedAreaChart.prototype.addPointMarker):
        (WI.StackedAreaChart.prototype.clearPointMarkers):
        (WI.StackedAreaChart.prototype.clear):
        (WI.StackedAreaChart.prototype.layout):
        Add point markers for the area charts.

        * UserInterface/Views/CPUTimelineView.css:
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.get cpuUsageViewHeight):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.initialLayout.appendLegendRow):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineView.prototype._handleMouseClick):
        (WI.CPUTimelineView.prototype._handleGraphMouseMove):
        (WI.CPUTimelineView.prototype._showGraphOverlayNearTo):
        (WI.CPUTimelineView.prototype._updateGraphOverlay):
        (WI.CPUTimelineView.prototype._showGraphOverlay.xScale):
        (WI.CPUTimelineView.prototype._showGraphOverlay.yScale):
        (WI.CPUTimelineView.prototype._showGraphOverlay.addOverlayPoint):
        (WI.CPUTimelineView.prototype._showGraphOverlay):
        (WI.CPUTimelineView.prototype._clearOverlayMarkers.clearGraphOverlayElement):
        (WI.CPUTimelineView.prototype._clearOverlayMarkers):
        (WI.CPUTimelineView.prototype._hideGraphOverlay):
        Include graph overlay markers.

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

        Web Inspector: eliminate manual syncing of numeric constants used by JavaScript and CSS
        https://bugs.webkit.org/show_bug.cgi?id=194883
        <rdar://problem/48257785>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.static get recordingAutoCaptureInputMargin): Added.
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input):

        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.static get memoryCategoryViewHeight): Added.
        (WI.MemoryTimelineView.prototype.initialLayout): Added.
        (WI.MemoryTimelineView.prototype.layout):
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.static get nodeWaterfallDOMEventSize): Added.
        (WI.NetworkTableContentView.prototype.initialLayout):
        * UserInterface/Views/NetworkTableContentView.css:
        (.content-view.network .network-table): Deleted.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline._generateStyleRulesIfNeeded):
        * UserInterface/Views/TreeOutline.css:
        (.tree-outline, .tree-outline .children):
        (.tree-outline .item):

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.supportsRecordingAutoCapture):
        Drive-by: fix usage of InspectorBackend.domains.{CanvasAgent => Canvas}

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

        REGRESSION(r242622): Web Inspector: Fix asserts "Overridden property is missing overridingProperty"
        https://bugs.webkit.org/show_bug.cgi?id=195515
        <rdar://problem/48737315>

        Reviewed by Matt Baker.

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

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

        Web Inspector: Styles: overridden CSS property should have go-to button to jump to effective property
        https://bugs.webkit.org/show_bug.cgi?id=185930
        <rdar://problem/40506252>

        Reviewed by Matt Baker.

        Introduce a new experimental jump to effective property button. The button is a small arrow button
        next to an overridden CSS property. Clicking the button scrolls to the effective CSS property and
        selects it.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty):
        (WI.CSSProperty.prototype.update):
        (WI.CSSProperty.prototype.get overridingProperty):
        (WI.CSSProperty.prototype.set overridingProperty):
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._markOverriddenProperties):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.overridden .select-effective-property):
        (.spreadsheet-style-declaration-editor .property.overridden:hover .select-effective-property,):
        (.spreadsheet-style-declaration-editor .property.overridden:hover .select-effective-property::after,):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertySelectByProperty):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorSelectProperty):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationSectionSelectProperty):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):

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

        Web Inspector: Protocol: add type checking when commands are called via invoke
        https://bugs.webkit.org/show_bug.cgi?id=195310
        <rdar://problem/48588679>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackend.Command.prototype.invoke.deliverFailure): Added.
        (InspectorBackend.Command.prototype.invoke):
        (InspectorBackend.Command.prototype._invokeWithArguments):

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

        Web Inspector: REGRESSION(r242118): WI.ScopeBar missing background
        https://bugs.webkit.org/show_bug.cgi?id=195299

        Reviewed by Joseph Pecoraro.

        Rework the way `color`, `background-color`, and `border-color` are set for `WI.ScopeBar` to
        use CSS variables instead. Divides the variables into three categories:
         - default: these are the values that the `WI.ScopeBar` would use normally
         - override: these are values that take precidence over the default (e.g. set by other elements)
            - falls back to default when no value is set
         - actual: this is the resulting value that will be used when displaying
            - this way, other elements can "mirror" the styling of the `WI.ScopeBar`

        * UserInterface/Views/ScopeBar.css:
        (.scope-bar):
        (.scope-bar > li):
        (.scope-bar > li::before):
        (.scope-bar > li:matches(.selected, :hover)):
        (.scope-bar > li:not(.selected):hover::after):
        (.scope-bar > li.selected:active::after):
        (.scope-bar > li.multiple > select):
        (body[dir=ltr] .scope-bar > li.multiple > select):
        (body[dir=rtl] .scope-bar > li.multiple > select):
        (.scope-bar > li.multiple:not(.selected) > select): Added.
        (.scope-bar > li.multiple > .arrows):
        (.scope-bar > li::before): Deleted.
        (.scope-bar.default-item-selected > li.multiple.selected::before): Deleted.
        (.scope-bar > li:matches(.selected, :hover)::before): Deleted.
        (.scope-bar > li.selected:active::before): Deleted.
        (.scope-bar > li.multiple.selected > select): Deleted.
        (body[dir=ltr] .scope-bar > li.multiple > .arrows): Deleted.
        (body[dir=rtl] .scope-bar > li.multiple > .arrows): Deleted.
        (.scope-bar > li.multiple:matches(.selected, :hover, :active) > .arrows): Deleted.
        (.scope-bar > li:matches(.selected, :active)): Deleted.
        (@media (prefers-color-scheme: dark)): Deleted.
        Switch to using `::after` since `::before` is more commonly used.

        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype._handleMouseDown):
        Drive-by: fix the <select> alignment by re-firing the "mousedown" event on it.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.layout):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header > nav > .scope-bar > li):
        (.content-view.audit-test-group > header > nav > .scope-bar > li:not(:hover, .selected)):
        (.content-view.audit-test-group > header > nav > .scope-bar > li > img): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.pass > img): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.warn > img): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.fail > img): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.error > img): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.unsupported > img): Added.
        (.content-view.audit-test-group > section > .audit-test-case:first-child, .content-view.audit-test-group > section > .audit-test-case.filtered ~ .audit-test-case:not(.filtered), .content-view.audit-test-group > section > .audit-test-group + .audit-test-case, .content-view.audit-test-group > section > .audit-test-case + .audit-test-group): Added.
        (.content-view.audit-test-group > section > .audit-test-case:not(.filtered) ~ .audit-test-case:not(.filtered)): Added.
        (.content-view.audit-test-group > header > nav > .scope-bar > li::before): Deleted.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.pass::before): Deleted.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.warn::before): Deleted.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.fail::before): Deleted.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.error::before): Deleted.
        (.content-view.audit-test-group > header > nav > .scope-bar > li.unsupported::before): Deleted.
        (.content-view.audit-test-group > section > .audit-test-case:first-child, .content-view.audit-test-group > section > .audit-test-group + .audit-test-case, .content-view.audit-test-group > section > .audit-test-case + .audit-test-group): Deleted.
        Replace the `::before` image with an actual `<img>` now that the `WI.ScopeBar` itself uses
        a pseudo-element for the background styling.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        * UserInterface/Views/LogContentView.css:
        (.log-scope-bar > li:not(.unread) > .indicator): Added.
        (.log-scope-bar > li.unread > .indicator): Added.
        (.log-scope-bar > li.unread:hover > .indicator): Added.
        (.log-scope-bar > li.unread.errors > .indicator): Added.
        (.log-scope-bar > li.unread.warnings > .indicator): Added.
        (.log-scope-bar > li.unread.logs > .indicator): Added.
        (.log-scope-bar > li.unread::before): Deleted.
        (body[dir=ltr] .log-scope-bar > li.unread::before): Deleted.
        (body[dir=rtl] .log-scope-bar > li.unread::before): Deleted.
        (.log-scope-bar > li.unread:hover::before): Deleted.
        (.log-scope-bar > li.unread.errors::before): Deleted.
        (.log-scope-bar > li.unread.warnings::before): Deleted.
        (.log-scope-bar > li.unread.logs::before): Deleted.
        Replace the `::before` unread indicator with an actual `<div>` now that the `WI.ScopeBar`
        itself uses a pseudo-element for the background styling.

        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple): Deleted.
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows): Deleted.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Drive-by: fix typo.

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

        Web Inspector: CSS: there should be a way to inline-replace a variable with it's value
        https://bugs.webkit.org/show_bug.cgi?id=195335

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/InlineSwatch.js:
        (WI.InlineSwatch):
        (WI.InlineSwatch.prototype.didDismissPopover):
        (WI.InlineSwatch.prototype._swatchElementClicked):
        (WI.InlineSwatch.prototype._swatchElementClicked.optionsForType): Added.
        Shift-clicking a variable swatch replaces the text with the variable's value.
        Drive-by: try to create a readonly swatch for the variable's value (e.g. a color indicator).

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        If the value of a variable swatch changes, re-render the value.

        * UserInterface/Views/CodeMirrorTextMarkers.js:
        (createCodeMirrorTextMarkers):
        (createCodeMirrorColorTextMarkers):
        (createCodeMirrorGradientTextMarkers):
        (createCodeMirrorBezierTextMarkers):
        (createCodeMirrorSpringTextMarkers):
        Refactor function parameters for more flexibility.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Elements: highlight the node when hovering event listeners sorted by node
        https://bugs.webkit.org/show_bug.cgi?id=195368

        Reviewed by Joseph Pecoraro.

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

2019-03-06  Matt Baker  <mattbaker@apple.com>

        Web Inspector: system accent color follow-ups
        https://bugs.webkit.org/show_bug.cgi?id=195190

        Reviewed by Devin Rousso.

        * UserInterface/Views/ButtonToolbarItem.css:
        (.toolbar .item.button:not(.disabled):matches(:focus, .activate.activated)):
        (@media (prefers-color-scheme: dark)):
        (.toolbar .item.button:not(.disabled):active:matches(:focus, .activate.activated)): Deleted.
        Drop pressed toolbar button style. It's extremely subtle and not worth the hassle.

        * UserInterface/Views/LogContentView.css:
        (.console-messages:focus .console-item.selected::after):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/ScopeBar.css:
        (.scope-bar > li.selected:active::before):

        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.selected > .segment):

2019-03-06  Matt Baker  <mattbaker@apple.com>

        REGRESSION: Elements tab: Uncaught Exception: No node with given id found
        https://bugs.webkit.org/show_bug.cgi?id=194299
        <rdar://problem/47828647>

        Reviewed by Devin Rousso.

        When removing the selection, TreeOutline subclasses should have more
        control over which item becomes selected after the selection is removed.
        DOMTreeOutline should track the items that are being removed, and prevent
        them or their descendants from becoming selected.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.ondelete):
        (WI.DOMTreeOutline.prototype.canSelectTreeElement):

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerLastSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableItem):
        (WI.TreeOutline.prototype.canSelectTreeElement):

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

        Web Inspector: CPU Usage Timeline - Allow clicking a bar in the overview to select a tight time range around it
        https://bugs.webkit.org/show_bug.cgi?id=195321

        Reviewed by Devin Rousso.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.closestRecordTo):
        Helper to get the closest record to a timestamp.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .stacked-column-chart):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.selected):
        Style a selected record with the active color.

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.get samplingRatePerSecond):
        (WI.CPUTimelineOverviewGraph.prototype.reset):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        (WI.CPUTimelineOverviewGraph.prototype.updateSelectedRecord):
        (WI.CPUTimelineOverviewGraph.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineOverviewGraph.prototype._handleGraphMouseClick):
        A click in the overview which hits a rect triggers a selection of
        the associated timeline record.

        * UserInterface/Views/StackedColumnChart.js:
        (WI.StackedColumnChart.prototype.addColumnSet):
        (WI.StackedColumnChart.prototype.layout):
        Allow setting an additional class name with a column set.
        It will set the class name on each rect in that column.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._recordSelected):
        When selecting a CPU record, make a selection range of 2 neighboring
        columns in each direction.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler.prototype._handleClick):
        When a sub-element has handled the click stop further event propagation.

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.prototype.get selected):
        Drive-by style fix.

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

        Web Inspector: TimelineOverview clicks do not always behave as expected
        https://bugs.webkit.org/show_bug.cgi?id=195319

        Reviewed by Devin Rousso.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler.prototype._shouldIgnoreMicroMovement):
        (WI.TimelineRuler.prototype._handleMouseDown):
        (WI.TimelineRuler.prototype._handleMouseMove):
        Ignore moves that haven't gone more than 4px. Once the threshold is
        passed allow all moves. This improves the click behavior since
        previously click would never re-dispatch if there was any movement.

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

        Web Inspector: CPU Usage Timeline - Statistics and Sources sections
        https://bugs.webkit.org/show_bug.cgi?id=195202

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Base/Utilities.js:
        (Map.prototype.getOrInitialize):
        Helper to get and if not found initialize with a value.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > th):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > td.number):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table > tr > td.label):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .show-more):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .filter:hover):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .active):
        (.timeline-view.cpu > .content > .overview > .chart > .container.stats > table .active + .active):
        (@media (prefers-color-scheme: dark)):
        Colors for the statistics sections.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.reset):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype._clearStatistics):
        (WI.CPUTimelineView.prototype._clearSources):
        Updates for additional sections.
        Include a cache of the statisiticsData so we can relayout parts of the UI and
        avoid an entire UI update.

        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype._layoutBreakdownChart):
        (WI.CPUTimelineView.prototype._layoutStatisticsAndSources):
        (WI.CPUTimelineView.prototype._layoutStatisticsSection.createEllipsisElement):
        (WI.CPUTimelineView.prototype._layoutStatisticsSection):
        (WI.CPUTimelineView.prototype._layoutSourcesSection.firstNonNativeCallFrame):
        (WI.CPUTimelineView.prototype._layoutSourcesSection.keyForSourceCodeLocation):
        (WI.CPUTimelineView.prototype._layoutSourcesSection.labelForLocation):
        (WI.CPUTimelineView.prototype._layoutSourcesSection.createEllipsisElement):
        (WI.CPUTimelineView.prototype._layoutSourcesSection):
        Extract layouts into helper methods to avoid an enormous layout method.

        (WI.CPUTimelineView.prototype._computeSamplingData.incrementTypeCount):
        (WI.CPUTimelineView.prototype._computeSamplingData):
        Compute additional data when going through script events.

        (WI.CPUTimelineView.prototype._resetSourcesFilters):
        (WI.CPUTimelineView.prototype._addSourcesFilter):
        (WI.CPUTimelineView.prototype._removeSourcesFilter):
        (WI.CPUTimelineView.prototype._updateSourcesFilters):
        Helpers for updating the source filters.

        (WI.CPUTimelineView.prototype._createTableRow):
        (WI.CPUTimelineView.prototype._insertTableRow):
        Helpers for creating rows in the statistics / sources tables.

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

        Web Inspector: Simplify chart <rect>s with x/y attributes instead of transform(x, y)
        https://bugs.webkit.org/show_bug.cgi?id=195352

        Reviewed by Matt Baker.

        * UserInterface/Views/ColumnChart.js:
        (WI.ColumnChart.prototype.layout):
        (WI.ColumnChart):
        * UserInterface/Views/RangeChart.js:
        (WI.RangeChart.prototype.layout):
        (WI.RangeChart):
        * UserInterface/Views/StackedColumnChart.js:
        (WI.StackedColumnChart.prototype.layout):
        (WI.StackedColumnChart):

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

        Web Inspector: CSS Changes: only show changes for the given node
        https://bugs.webkit.org/show_bug.cgi?id=194608
        <rdar://problem/48050206>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype.inspect):
        (WI.ChangesDetailsSidebarPanel.prototype.supportsDOMNode):
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        Make this panel a subclass of `WI.DOMDetailsSidebarPanel` so it has access to the selected
        DOM node in the Elements tab.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Create new general setting for controlling this change.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Canvas: color swatches aren't shown for valid inputs with leading/trailing whitespace
        https://bugs.webkit.org/show_bug.cgi?id=195298

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM):
        (WI.RecordingActionTreeElement._createSwatchForColorParameters):
        Trim the color string since it can be an arbitrary string, seeing as it is captured before
        the <canvas> has a chance to parse/fix it.

2019-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: recordsInTimeRange sometimes does not get the expected record when includeRecordBeforeStart
        https://bugs.webkit.org/show_bug.cgi?id=195317

        Reviewed by Devin Rousso.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsOverlappingTimeRange):

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

        Web Inspector: Canvas: remove event listeners once a recording is ready
        https://bugs.webkit.org/show_bug.cgi?id=195324

        Reviewed by Matt Baker.

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.prototype.async swizzle):
        (WI.Recording.prototype.async _process):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement):
        (WI.RecordingActionTreeElement.prototype._handleValidityChanged):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype._handleRecordingProcessedAction):

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

2019-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Attempting to select records in the bottom 16px of the timeline overview graph fails
        https://bugs.webkit.org/show_bug.cgi?id=195318

        Reviewed by Devin Rousso.

        The bottom few pixels of the overview are reserved for the scroll-container
        which may show a scrollbar if the overview needs to scroll. When the scrollbars
        are not visible we can allow pointer events to click through the invisible
        scroll-container and allow record selection.

        * UserInterface/Views/TimelineOverview.css:
        (.timeline-overview:not(.has-scrollbar) > .scroll-container):
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._handleScrollEvent):
        (WI.TimelineOverview.prototype._handleWheelEvent):
        (WI.TimelineOverview._handleGestureStart):

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

        Web Inspector: iPod user agent UIString should have a lowercase "T"
        https://bugs.webkit.org/show_bug.cgi?id=195312
        <rdar://problem/48586853>

        Reviewed by Matt Baker.

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

2019-03-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline - Adjust sizes in timeline overview
        https://bugs.webkit.org/show_bug.cgi?id=195313

        Reviewed by Devin Rousso.

        Reduce the height slightly to save some precious vertical space.
        Also increase the size of the minimum bar height so that it doesn't
        look like there are no events when there is low CPU.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (body .sidebar > .panel.navigation.timeline > .timelines-content li.item.cpu,):
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph.prototype.get height):
        Reduce the CPU overview graph height to 60px.

        (WI.CPUTimelineOverviewGraph.prototype.layout):
        Increase the minimum size of a column bar to 4px.

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

        Web Inspector: Reload actions from second level inspector should properly reload the inspected inspector
        https://bugs.webkit.org/show_bug.cgi?id=195306

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Provide a better reload for a Nth level inspector.

        * UserInterface/Debug/Bootstrap.js:
        (WI.runBootstrapOperations):
        Simplify, should not need to check for InspectorFrontendHost.

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

        Web Inspector: MediaSource logging not initialized properly
        https://bugs.webkit.org/show_bug.cgi?id=195307

        Reviewed by Matt Baker.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.initializeLogChannels):
        Typo caused undefined to be included and trigger assertions.

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

        Web Inspector: CSS: class input isn't fully centered
        https://bugs.webkit.org/show_bug.cgi?id=195297

        Reviewed by Matt Baker.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input):
        (body[dir=ltr] .sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input): Deleted.
        (body[dir=rtl] .sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input): Deleted.

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

        Web Inspector: Audit: show the version number in the UI
        https://bugs.webkit.org/show_bug.cgi?id=195292

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype._updateNoAuditsPlaceholder):
        Fix the logic for showing a placeholder when editing or with only disabled tests.

        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit > .content > .message-text-view): Added.
        (.audit-version): Added.
        Don't obstruct the "Edit" button when showing a placeholder.

        * Localizations/en.lproj/localizedStrings.js:

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

        ITMLKit Inspector: Data Bindings / Associated Data for nodes
        https://bugs.webkit.org/show_bug.cgi?id=195290
        <rdar://problem/48304019>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New title and empty message strings.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (.sidebar > .panel.dom-node-details .details-section.dom-node-associated-data > .content .row):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype.initialLayout):
        (WI.DOMNodeDetailsSidebarPanel.prototype.layout):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshDataBindings):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshAssociatedData):
        (WI.DOMNodeDetailsSidebarPanel.prototype._attributesChanged):
        New Node sections only enabled for ITMLKit `WI.sharedApp.hasExtraDomains`.

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView):
        Provide a way, like TreeElement/View to access the ObjectTreeView from an element.

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

        Web Inspector: Canvas: protocol error on first open
        https://bugs.webkit.org/show_bug.cgi?id=195059
        <rdar://problem/48407871>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.initializeTarget):
        (WI.CanvasManager.prototype.static supportsRecordingAutoCapture):
        (WI.CanvasManager.prototype.setRecordingAutoCaptureFrameCount):
        If targets aren't available, wait until they are and then set the auto-capture frame count.

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

        Web Inspector: Toggling Timeline "Stop when page loads" to on should stop (immediately or soon) any active recording if already past the load event
        https://bugs.webkit.org/show_bug.cgi?id=195239

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: Unexpectedly frequent flashing of DOM node attributes
        https://bugs.webkit.org/show_bug.cgi?id=148049
        <rdar://problem/22296830>

        Reviewed by Joseph Pecoraro.

        Save a timestamp of when the CSS animation began, so that if the attribute's node is replaced,
        we can "resume" the CSS animation at the same point with the attribute's new node.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.attributeDidChange):
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        (WI.DOMTreeElement.prototype._createModifiedAnimation):
        (WI.DOMTreeElement.prototype._markNodeChanged): Deleted.
        (WI.DOMTreeElement.prototype._nodeChangedAnimationEnd): Deleted.
        (WI.DOMTreeElement.prototype._fireDidChange): Deleted.

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

        Web Inspector: Debugger: DOM, URL, and Event breakpoints don't grey out when all breakpoints are disabled
        https://bugs.webkit.org/show_bug.cgi?id=195170
        <rdar://problem/48478193>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.onattach):
        (WI.DOMBreakpointTreeElement.prototype.ondetach):
        (WI.DOMBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement):
        (WI.URLBreakpointTreeElement.prototype.onattach):
        (WI.URLBreakpointTreeElement.prototype.ondetach):
        (WI.URLBreakpointTreeElement.prototype._updateStatus):
        Remove the `"resolved"` class when the global "breakpoints enabled" state is changed.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint.breakpointUpdated): Deleted.
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint.breakpointUpdated): Deleted.
        * UserInterface/Models/DOMBreakpoint.js:
        (WI.DOMBreakpoint):
        (WI.DOMBreakpoint.deserialize): Added.
        (WI.DOMBreakpoint.prototype.set disabled):
        (WI.DOMBreakpoint.prototype.set domNodeIdentifier):
        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint.deserialize): Added.
        (WI.EventBreakpoint.prototype.set disabled):
        (WI.EventBreakpoint.fromPayload): Deleted.
        * UserInterface/Models/URLBreakpoint.js:
        (WI.URLBreakpoint.deserialize): Added.
        (WI.URLBreakpoint.prototype.set disabled):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype._handleDOMBreakpointDisabledStateChanged): Added.
        (WI.DOMTreeContentView.prototype._handleDOMBreakpointDOMNodeChanged): Added.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleDOMBreakpointResolvedStateChanged): Added.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDOMBreakpointResolvedStateChanged): Added.
        Drive-by: rename all events with the name `*DidChange` to `*Changed`.
        Drive-by: create static `deserialize` helper functions.

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

        Web Inspector: Sources: breakpoints should be disabled when an audit is running
        https://bugs.webkit.org/show_bug.cgi?id=195105
        <rdar://problem/48441373>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.closed):
        (WI.SourcesNavigationSidebarPanel.prototype._updateTemporarilyDisabledBreakpointsButtons): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped):
        (WI.SourcesNavigationSidebarPanel.prototype._handleAuditManagerTestScheduled): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleAuditManagerTestCompleted): Added.
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .warning-banner + .warning-banner): Added.

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

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

        Web Inspector: Debugger: don't enable breakpoints when source location changes
        https://bugs.webkit.org/show_bug.cgi?id=195081
        <rdar://problem/48422701>

        Reviewed by Joseph Pecoraro.

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

2019-03-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage - Energy Impact Section
        https://bugs.webkit.org/show_bug.cgi?id=195151

        Reviewed by Devin Rousso.

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

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content .subtitle > .info):
        (@media (prefers-color-scheme: dark)):
        (.energy-info-popover-content):
        (.timeline-view.cpu > .content > .overview > .divider):
        (body[dir=ltr] .timeline-view.cpu > .content > .overview > .divider):
        (body[dir=rtl] .timeline-view.cpu > .content > .overview > .divider):
        (.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) svg > path):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.low):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.medium):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.high):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > polygon.needle):
        (.timeline-view.cpu .energy):
        (.timeline-view.cpu .energy .energy-impact):
        (.timeline-view.cpu .energy .energy-impact.low):
        (.timeline-view.cpu .energy .energy-impact.medium):
        (.timeline-view.cpu .energy .energy-impact.high):
        (.timeline-view.cpu .energy .energy-impact-number):
        Styling the chart and text for the different energy impact levels.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.get lowEnergyValue):
        (WI.CPUTimelineView.prototype.get highEnergyValue):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._layoutEnergyChart.mapWithBias):
        (WI.CPUTimelineView.prototype._layoutEnergyChart.valuesForGauge):
        (WI.CPUTimelineView.prototype._layoutEnergyChart):
        (WI.CPUTimelineView.prototype._clearEnergyImpactText):
        New gauge chart and associated popover.
        We do a bit of biasing of the data for each of the sections
        in the gauge chart. Each section biases toward the cap of the
        section so that:
          - we encourage lower power usage (sub 3%)
          - the gauge needle quickly moves past the low value of a range

        * UserInterface/Views/GaugeChart.css: Added.
        (.gauge-chart):
        (body[dir=rtl] .gauge-chart):
        (.gauge-chart > svg > path,):
        (.gauge-chart > svg > polygon.needle):
        (.gauge-chart.empty > svg > polygon.needle):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/GaugeChart.js: Added.
        (WI.GaugeChart.prototype.get size):
        (WI.GaugeChart.prototype.get segments):
        (WI.GaugeChart.prototype.get value):
        (WI.GaugeChart.prototype.set value):
        (WI.GaugeChart.prototype.clear):
        (WI.GaugeChart.prototype.initialLayout):
        (WI.GaugeChart.prototype.layout):
        (WI.GaugeChart.prototype._validateSegments):
        (WI.GaugeChart.prototype._createSegmentPathData):
        GaugeChart with variable number of sections and a
        current value needle. It has a bit of customization
        when drawing the arc at the start of each segment.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        New CPU colors for the different energy impact levels.

2019-03-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Data grid border colors don't match accent colors
        https://bugs.webkit.org/show_bug.cgi?id=195232

        Reviewed by Matt Baker.

        * UserInterface/Views/DataGrid.css:
        (.data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=ltr] .data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=rtl] .data-grid:focus tr.selected td:not(:last-child)):

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

        Web Inspector: Timelines: don't show the auto-stop UI when not inspecting a page
        https://bugs.webkit.org/show_bug.cgi?id=195192

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.get navigationItems):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage: Worker thread that dies might stay at a high value forever
        https://bugs.webkit.org/show_bug.cgi?id=195148

        Reviewed by Matt Baker.

        * UserInterface/Views/CPUTimelineView.js:
        (CPUTimelineView.prototype.layout):
        Handle workers dieing or at least zeroing out between records.

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline - Make Threads section expandable / collapsable
        https://bugs.webkit.org/show_bug.cgi?id=195085

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        New setting to save the Threads expanded/collapsed state.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .details > .subtitle):
        (.timeline-view.cpu > .content > .details > details > .subtitle.threads):
        (.timeline-view.cpu > .content > .details > .subtitle): Deleted.
        (.timeline-view.cpu > .content > .details > .subtitle.threads): Deleted.
        Ensure subtitle styles apply now that one of the subtitles is inside
        of a <details> / <summary> element.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.initialLayout):
        Make the Threads group a <details> / <summary> expandable / collapsed element.

        * UserInterface/Views/Main.css:
        (summary):
        (summary::-webkit-details-marker):
        Default styles for <summary>.

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: View.removeSubview not removing the element properly when not parented
        https://bugs.webkit.org/show_bug.cgi?id=195146

        Reviewed by Matt Baker.

        * UserInterface/Views/View.js:
        (WI.View.prototype.removeSubview):
        Since the element may not be a direct child, just use Element.prototype.remove.

2019-02-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Debugger: disabled breakpoint color is too dark
        https://bugs.webkit.org/show_bug.cgi?id=195103
        <rdar://problem/48440678>

        Reviewed by Devin Rousso.

        Increase the disabled breakpoint contrast, as well as the contrast between
        disabled and auto-continue breakpoints. Disabled breakpoints stand out by
        being somewhat brighter and less saturated. Using the same strategy for
        auto-continue breakpoints is too subtle to provide sufficient contrast.

        We can adopt the technique used by Xcode, and overlay a white triangle
        marker on the breakpoint arrow to indicate an auto-continue breakpoint.

        * UserInterface/Views/BreakpointTreeElement.css:
        (.item.breakpoint .status > .status-image):
        (.item.breakpoint.selected .status > .status-image.resolved):
        Add white outline to make selected breakpoint button stand out.
        (.item.breakpoint .status > .status-image.auto-continue::after):
        (.item.breakpoint .status > .status-image.disabled):
        (.item.breakpoint .status > .status-image.auto-continue): Deleted.


        * UserInterface/Views/DOMTreeContentView.css:
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.subtree):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled,): Deleted.

        * UserInterface/Views/TextEditor.css:
        (.text-editor > .CodeMirror .has-breakpoint .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-auto-continue:not(.execution-line.primary) .CodeMirror-linenumber::after):
        (.text-editor > .CodeMirror .breakpoint-disabled .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-auto-continue:not(.breakpoint-disabled) .CodeMirror-linenumber::before): Deleted.

        * UserInterface/Views/Variables.css:
        (:root):
        Add breakpoint color variables to use across all breakpoint controls.
        Use system colors if available, otherwise fall back to hard-coded values
        based on sampling the default (blue) accent color on Mojave.

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

        Web Inspector: Styles: Control-Space should force completion
        https://bugs.webkit.org/show_bug.cgi?id=194796
        <rdar://problem/48180822>

        Reviewed by Matt Baker.

        Pressing Control-Space when editing CSS property should show completion popover,
        even if the value is empty.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.prototype.startsWith):
        Performance optimization: exit early when `prefix` is empty.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._nameCompletionDataProvider):
        (WI.SpreadsheetStyleProperty.prototype._valueCompletionDataProvider):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleKeyDown):
        (WI.SpreadsheetTextField.prototype._updateCompletions):

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

        Web Inspector: Canvas: enabling auto-capture if the frame count is empty triggers an assertion
        https://bugs.webkit.org/show_bug.cgi?id=195060

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureCheckedDidChange):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Revert -webkit-border-end changes that are unreliable
        https://bugs.webkit.org/show_bug.cgi?id=195149

        Reviewed by Matt Baker.

        * UserInterface/Views/CPUUsageIndicatorView.css:
        (.cpu-usage-indicator-view > .details):
        (body[dir=ltr] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .details):
        * UserInterface/Views/CPUUsageStackedView.css:
        (.cpu-usage-stacked-view > .details):
        (body[dir=ltr] .cpu-usage-stacked-view > .details):
        (body[dir=rtl] .cpu-usage-stacked-view > .details):
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view > .details):
        (body[dir=ltr] .cpu-usage-view > .details):
        (body[dir=rtl] .cpu-usage-view > .details):
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (body[dir=ltr] .memory-category-view > .details):
        (body[dir=rtl] .memory-category-view > .details):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

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

        Reviewed by Matt Baker.

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

2019-02-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a new Scanner TimelineMarker to show up when mousing over TimelineView graphs
        https://bugs.webkit.org/show_bug.cgi?id=195079

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        (Note.prototype.enclosingNodeOrSelfWithClassInArray):
        Helper for a set of classes.

        * UserInterface/Models/TimelineMarker.js:
        Add a new marker type, "Scanner".

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineView.prototype._handleGraphMouseMove):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView):
        (WI.MemoryTimelineView.prototype._graphPositionForMouseEvent):
        (WI.MemoryTimelineView.prototype._handleGraphMouseMove):
        Update a scanner time when mousing over various graphs that span the entire time range.
        These use the containing graph element because there was a single pixel between
        adjacent graphs which would cause the scanner to flicker because the mouse event target
        was not an svg element.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype.hidden):
        (WI.TimelineOverview.prototype.updateScannerTime):
        (WI.TimelineOverview.prototype.clearScanner):
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineViewScannerTimeDidChange):
        (WI.TimelineRecordingContentView.prototype._handleTimelineViewScannerDidClear):
        Update the overview's ruler with scanner changes.

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .marker.scanner):
        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler):
        (WI.TimelineRuler.prototype.clearMarkers):
        (WI.TimelineRuler.prototype.updateScannerTime):
        (WI.TimelineRuler.prototype.clearScanner):
        (WI.TimelineRuler.prototype._updateMarkers):
        Have a special scanner marker that updates.

        * UserInterface/Views/TimelineView.js:
        New events that a TimelineView can dispatch to update the overview.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        Scanner marker colors.

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

        Web Inspector: Use Element.closest for internal code
        https://bugs.webkit.org/show_bug.cgi?id=173747

        Reviewed by Joseph Pecoraro.

        Replace usage of added utility functions on the `Node` prototype with the built-in
        `Element.prototype.closest` as it's more flexible and is capable of doing the same thing.

        * UserInterface/Base/Utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithClass): Deleted.
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray): Deleted.
        (Node.prototype.enclosingNodeOrSelfWithNodeName): Deleted.
        * UserInterface/Base/Main.js:
        (WI.handlePossibleLinkClick):
        (WI._focusedContentBrowser):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.set selectedIndex):
        (WI.CompletionSuggestionsView.prototype.update):
        (WI.CompletionSuggestionsView.prototype._itemClicked):
        * UserInterface/Views/ConsoleGroup.js:
        (WI.ConsoleGroup.prototype._titleClicked):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype._mouseWasClicked):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._startEditingTarget):
        (WI.DOMTreeElement.prototype._populateTagContextMenu):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._startEditing):
        (WI.DataGrid.prototype._editingCancelled):
        (WI.DataGrid.prototype.dataGridNodeFromNode):
        (WI.DataGrid.prototype.dataGridNodeFromPoint):
        (WI.DataGrid.prototype._headerCellClicked):
        (WI.DataGrid.prototype._mouseoverColumnCollapser):
        (WI.DataGrid.prototype._mouseoutColumnCollapser):
        (WI.DataGrid.prototype._clickInColumnCollapser):
        (WI.DataGrid.prototype._contextMenuInHeader):
        (WI.DataGrid.prototype._contextMenuInDataTable):
        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.isEventWithinDisclosureTriangle):
        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype._handleMouseDown):
        (WI.LegacyTabBar.prototype._handleClick):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        (WI.LogContentView.prototype._mousedown):
        (WI.LogContentView.prototype._targetInMessageCanBeSelected):
        (WI.LogContentView.prototype._mousemove):
        (WI.LogContentView.prototype._mouseup):
        (WI.LogContentView.prototype._ondragstart):
        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype._mouseDown):
        (WI.NavigationBar.prototype._mouseMoved):
        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.handleEvent):
        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleClick):
        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._handleContextMenu):
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromNode):

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

        Web Inspector: REGRESSION(r242118): Debugger: event breakpoints have no icon
        https://bugs.webkit.org/show_bug.cgi?id=195119

        Reviewed by Matt Baker.

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

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

        Web Inspector: Dark Mode: unreadable text in bezier curve editor numeric input fields
        https://bugs.webkit.org/show_bug.cgi?id=195018
        <rdar://problem/48378541>

        Reviewed by Matt Baker.

        Simplify some styles using `-webkit-*` properties instead of `[dir=ltr]`/`[dir=rtl]` selectors.

        * UserInterface/Views/BezierEditor.css:
        (.bezier-editor):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .control-line):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .number-input-container):
        (.bezier-editor > .number-input-container > input):
        (body[dir=ltr] .bezier-editor > .bezier-preview-timing): Deleted.
        (body[dir=rtl] .bezier-editor > .bezier-preview-timing): Deleted.
        (body[dir=ltr] .bezier-editor > .number-input-container > input): Deleted.
        (body[dir=rtl] .bezier-editor > .number-input-container > input): Deleted.
        (@media (prefers-color-scheme: dark)): Deleted.
        Remove all custom styling on any <input>s, as they look fine with their default styling.

        * UserInterface/Views/SpringEditor.css:
        (.spring-editor > .spring-preview):
        (.spring-editor > .spring-preview > div):
        (.spring-editor > .spring-timing > div):

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

        Web Inspector: popover colors don't change when transitioning to/from dark mode
        https://bugs.webkit.org/show_bug.cgi?id=195113
        <rdar://problem/48444188>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.dismiss):
        (WI.Popover.prototype._addListenersIfNeeded):

2019-02-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Use system accent color throughout UI
        https://bugs.webkit.org/show_bug.cgi?id=193507
        <rdar://problem/47327971>

        Reviewed by Timothy Hatcher.

        * UserInterface/Images/Breakpoint.png: Removed.
        * UserInterface/Images/Breakpoint.svg: Added.
        * UserInterface/Images/Breakpoint@2x.png: Removed.
        * UserInterface/Images/BreakpointInactive.png: Removed.
        * UserInterface/Images/BreakpointInactive@2x.png: Removed.
        Replace breakpoint pixel art with an SVG image that can be styled in CSS.

        * UserInterface/Images/CSSVariable.svg:
        * UserInterface/Images/CubicBezier.svg:
        * UserInterface/Images/UserInputPrompt.svg:
        Remove fill color since it is now styled in CSS.

        * UserInterface/Views/BezierEditor.css:
        (.bezier-editor > .bezier-preview > div):
        (@media (prefers-color-scheme: dark)):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):
        Use system accent color for control handles.

        * UserInterface/Views/BreakpointTreeElement.css:
        (.item.breakpoint .status > .status-image):
        (.item.breakpoint .status > .status-image.resolved):
        Use system accent color for breakpoint fill, with a dark outline
        to match Xcode and make the button stand out against the selection.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/ButtonNavigationItem.css:
        (.navigation-bar .item.button > .glyph):

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

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        * UserInterface/Views/DOMTreeContentView.css:
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled,):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.subtree):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled): Deleted.
        (.content-view.dom-tree .tree-outline.dom.breakpoints-disabled li .status-image.breakpoint): Deleted.
        (.content-view.dom-tree .tree-outline.dom.breakpoints-disabled li .status-image.breakpoint.disabled): Deleted.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.selected .selection-area):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom:focus li:matches(.selected, .hovered) .selection-area):
        (.tree-outline.dom li.hovered:not(.selected) .selection-area):
        (.tree-outline.dom li.pseudo-class-enabled > .selection-area::before):
        Use the system accent color for the "pseudo-class enabled" marker.
        (@media (prefers-color-scheme: dark)):
        (.tree-outline.dom:focus li.selected .selection-area): Deleted.
        Use --selected-background-color for selection and hover styles, which is
        set to the system highlight color if available.

        * UserInterface/Views/InlineSwatch.css:
        (.inline-swatch:matches(.bezier, .spring, .variable)):
        (.inline-swatch:matches(.bezier, .spring)): Deleted.
        (.inline-swatch.variable): Deleted.

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

        * UserInterface/Views/NetworkDetailView.css:
        (.network .network-detail .navigation-bar .item.radio.button.text-only:before):
        (.network .network-detail .navigation-bar .item.radio.button.text-only.selected):
        (@media (prefers-color-scheme: dark)):
        (.network-detail .item.close > .glyph):

        * UserInterface/Views/QuickConsole.css:
        (.quick-console > .console-prompt > .glyph):
        (.quick-console > .console-prompt::before): Deleted.

        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only):
        (.navigation-bar .item.radio.button.text-only::before):
        (.navigation-bar .item.radio.button.text-only:matches(.selected, :hover)):
        (.navigation-bar .item.radio.button.text-only:matches(.selected, :hover)::before):
        (.navigation-bar .item.radio.button.text-only:not(.selected):hover::before):
        (.navigation-bar .item.radio.button.text-only.selected:active::before):
        (.navigation-bar .item.radio.button.text-only:hover): Deleted.
        (.navigation-bar .item.radio.button.text-only.selected): Deleted.
        (.navigation-bar .item.radio.button.text-only:active): Deleted.
        (.navigation-bar .item.radio.button.text-only.selected:active): Deleted.
        Use system accent color for selection and hover styles. Since it isn't
        yet possible to derive new colors from the accent color in CSS, fake it
        with a ::before pseudo-element that can have have `filter` or `opacity`
        effects applied to it without altering the button text color.

        * UserInterface/Views/RenderingFrameTimelineOverviewGraph.css:
        (.timeline-overview-graph.rendering-frame > .frame-marker):
        Use system accent color for selected frame marker.

        * UserInterface/Views/ScopeBar.css:
        (.scope-bar > li):
        (.scope-bar > li::before):
        (.scope-bar.default-item-selected > li.multiple.selected::before):
        (.scope-bar > li:matches(.selected, :hover)):
        (.scope-bar > li:matches(.selected, :hover)::before):
        (.scope-bar > li:not(.selected):hover::before):
        (.scope-bar > li.selected:active::before):
        (.scope-bar > li:hover): Deleted.
        (.scope-bar > li.selected): Deleted.
        (.scope-bar > li:active): Deleted.
        (.scope-bar > li.selected:active): Deleted.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings .navigation-bar .item.radio.button.text-only:before):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/TextEditor.css:
        (.text-editor > .CodeMirror .has-breakpoint .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-resolved .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .has-breakpoint.multiple-breakpoints .CodeMirror-linenumber::before):
        (@keyframes text-editor-highlight-fadeout):
        (@keyframes text-editor-hovered-expression-highlight-fadeout):
        Replace breakpoint pixel art with a solid color (the system accent
        color) clipped to the shape of a breakpoint.

        * UserInterface/Views/TimelineRecordFrame.css:
        (.timeline-record-frame.selected):

        * UserInterface/Views/URLBreakpointTreeElement.js:

        * UserInterface/Views/Variables.css:
        (:root):
        (body.window-inactive):
        (@media (prefers-color-scheme: dark)):
        (body.mac-platform:not(.sierra, .high-sierra)):
        Add custom property overrides for system colors where supported.

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

        Web Inspector: Search: no results when opening to Search tab
        https://bugs.webkit.org/show_bug.cgi?id=195058
        <rdar://problem/48407699>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch):
        If targets aren't available, wait until they are and then perform the search.

        * UserInterface/Base/Main.js:
        (WI.targetsAvailable): Added.
        Expose getter for indicating whether targets are available.

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

        Web Inspector: CPU Usage Timeline - Main Thread Indicator
        https://bugs.webkit.org/show_bug.cgi?id=194972

        Reviewed by Devin Rousso.

        * UserInterface/Main.html:
        * UserInterface/Base/Utilities.js:
        (value):
        The existing enclosingNode doesn't work for SVG because its names
        are lowercase. Add a simplified version for the svg case.

        * UserInterface/Views/RangeChart.js: Added.
        (WI.RangeChart):
        (WI.RangeChart.prototype.get size):
        (WI.RangeChart.prototype.set size):
        (WI.RangeChart.prototype.addRange):
        (WI.RangeChart.prototype.clear):
        (WI.RangeChart.prototype.layout):
        A new chart that draws rects for given ranges.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsOverlappingTimeRange):
        Helper to specifically get records touching a range. Useful
        for when we have a single pixel spanning (startTime -> endTime)
        and we want to find records in that pixel.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart rect):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-script):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-style):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-layout):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-paint):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.get indicatorViewHeight):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.get scrollableElements):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineView.prototype._handleIndicatorClick):
        (WI.CPUTimelineView.prototype._attemptSelectIndicatatorTimelineRecord):
        (WI.CPUTimelineView.prototype._selectTimelineRecord):
        Place the Main Thread Indicator view beneath the big graph.
        Clicking inside it selects records in the Timeline Overview.

        * UserInterface/Views/CPUUsageIndicatorView.css: Added.
        (.cpu-usage-indicator-view):
        (.cpu-usage-indicator-view > .details):
        (body[dir=ltr] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .graph):
        (.cpu-usage-indicator-view > .graph):
        (.cpu-usage-indicator-view > .graph,):
        * UserInterface/Views/CPUUsageIndicatorView.js: Added.
        (WI.CPUUsageIndicatorView):
        (WI.CPUUsageIndicatorView.prototype.get chart):
        (WI.CPUUsageIndicatorView.prototype.clear):
        (WI.CPUUsageIndicatorView.prototype.updateChart):
        Converts the CPU samples data into a RangeChart. It works to coalesce
        many samples of the same type into a single range to reduce total ranges.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._recordSelected):
        (WI.TimelineRecordingContentView.prototype._recordWasSelected):
        (WI.TimelineRecordingContentView.prototype._selectRecordInTimelineOverview):
        (WI.TimelineRecordingContentView.prototype._selectRecordInTimelineView):
        * UserInterface/Views/TimelineView.js:
        Add a path for a TimelineView to dispatch a record selected event and cause
        have the TimelineRecordingContentView react to it by updating the timeline
        overview and relevent timeline view.

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

        Web Inspector: navigation sidebar says "No Search Results" when a slow search is in progress
        https://bugs.webkit.org/show_bug.cgi?id=170631
        <rdar://problem/29473874>

        Reviewed by Joseph Pecoraro.

        Keep a count of all the backend commands (increment when firing, decrement when a result is
        sent back to the frontend). Once the count comes back to `0`, attempt to show the "No Results"
        placeholder, since we will have finished searching at that point. Since commands can be called
        as a result of other commands, using `Promise.all` isn't possible.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch):
        (WI.SearchSidebarPanel.prototype.performSearch.updateEmptyContentPlaceholderSoon): Deleted.
        (WI.SearchSidebarPanel.prototype.performSearch.updateEmptyContentPlaceholder): Deleted.
        Drive-by: replace `bind` calls with arrow functions, and use for-of loops.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Canvas: if no auto-capture value is specified, don't force the input to have "0" as the value
        https://bugs.webkit.org/show_bug.cgi?id=194950
        <rdar://problem/48276798>

        Reviewed by Joseph Pecoraro.

        Create a getter/setter for the value of the auto-capture frame count <input> so that all
        code follows the same path.

        If the <input> currently has no content and the frame count is 0, only set the placeholder.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype.get _recordingAutoCaptureFrameCountInputElementValue): Added.
        (WI.CanvasOverviewContentView.prototype.set _recordingAutoCaptureFrameCountInputElementValue): Added.
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):

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

        Web Inspector: Console: dragging a selection outside the selected element clears the selection
        https://bugs.webkit.org/show_bug.cgi?id=194660
        <rdar://problem/46719239>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._mousemove):
        Don't clear the selection if the target of the "mousemove" is outside of the view.

        (WI.LogContentView.prototype._updateMessagesSelection):
        Drive-by: clear the saved selected messages when we're just selecting a single message.

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

        Web Inspector: Rename LineChart to AreaChart
        https://bugs.webkit.org/show_bug.cgi?id=195038

        Rubber-stamped by Matt Baker.

        * UserInterface/Main.html:
        New file names.

        * UserInterface/Views/AreaChart.js: Renamed from Source/WebInspectorUI/UserInterface/Views/LineChart.js.
        * UserInterface/Views/StackedAreaChart.js: Renamed from Source/WebInspectorUI/UserInterface/Views/StackedLineChart.js.
        Renamed.

        * UserInterface/Views/CPUTimelineView.css:
        * UserInterface/Views/CPUUsageStackedView.css:
        * UserInterface/Views/CPUUsageStackedView.js:
        * UserInterface/Views/CPUUsageView.css:
        * UserInterface/Views/CPUUsageView.js:
        * UserInterface/Views/LegacyCPUTimelineView.css:
        * UserInterface/Views/MemoryCategoryView.css:
        * UserInterface/Views/MemoryCategoryView.js:
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        Update references.

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

        Web Inspector: hovering a node inside an object preview should highlight it
        https://bugs.webkit.org/show_bug.cgi?id=194862
        <rdar://problem/48246433>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FormattedValue.js:
        (WI.FormattedValue.createElementForNodePreview):
        When provided a way to access the `WI.RemoteObject` for the given preview, add various mouse
        event listeners that highlight the corresponding DOM node.

        * UserInterface/Views/ObjectPreviewView.js:
        (WI.ObjectPreviewView):
        (WI.ObjectPreviewView.prototype._initTitleElement):
        (WI.ObjectPreviewView.prototype._appendPropertyPreviews):
        (WI.ObjectPreviewView.prototype._appendValuePreview):
        Implement various ways of getting the `WI.RemoteObject` for a given preview.
         - When the preview is for the actual `WI.RemoteObject`, simply return it
         - If the preview is a property of the main object, get the `WI.RemoteObject` for that property

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView):
        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
        (WI.ObjectTreePropertyTreeElement.prototype._createTitlePropertyStyle):
        Pass the `WI.RemoteObject` to the preview so that it can utilize it.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager):
        (WI.ConsoleManager.prototype.releaseRemoteObjectWithConsoleClear): Added.
        (WI.ConsoleManager.prototype.messagesCleared): Added.

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

        Web Inspector: CPU Usage Timeline - Thread Breakdown
        https://bugs.webkit.org/show_bug.cgi?id=194788

        Reviewed by Devin Rousso.

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

        * UserInterface/Views/Variables.css:
        (:root):
        New colors for cpu threads / activity breakdown.

        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.get workers):
        (WI.CPUTimelineRecord):
        Distinguish the workers in a CPU timeline record.

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.main-thread-usage):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.worker-thread-usage):
        (.timeline-overview-graph.cpu > .column-chart > svg > rect):
        Stacked column chart for CPU in the overview graph.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview):
        (.timeline-view.cpu > .content > .details > .subtitle.threads):
        (.timeline-view.cpu > .content > .overview > .chart):
        (.timeline-view.cpu > .content > .overview > .chart > .subtitle):
        (.timeline-view.cpu > .content > .overview > .chart > .container):
        (.timeline-view.cpu > .content > .overview .samples,):
        (.timeline-view.cpu .legend):
        (.timeline-view.cpu .legend .row):
        (.timeline-view.cpu .legend .row + .row):
        (.timeline-view.cpu .legend .swatch):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-idle):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-script):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-style):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-layout):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-paint):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-idle):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-script):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-style):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-layout):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-paint):
        (.timeline-view.cpu svg > path):
        (.timeline-view.cpu .main-thread svg > path,):
        (.timeline-view.cpu .worker-thread svg > path,):
        (.timeline-view.cpu .cpu-usage-view.empty):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers > div):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers > div > .label):
        (.timeline-view.cpu > .content): Deleted.
        (.cpu-usage-view .line-chart > svg > path): Deleted.
        (.timeline-view.cpu .legend > .row > .swatch.current): Deleted.
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.displayNameForSampleType):
        (WI.CPUTimelineView.prototype.shown):
        (WI.CPUTimelineView.prototype.clear.clearUsageView):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.initialLayout.createChartContainer):
        (WI.CPUTimelineView.prototype.initialLayout.appendLegendRow):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout.removeGreaterThan):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.yScale):
        (WI.CPUTimelineView.prototype._computeSamplingData.markRecordEntries):
        (WI.CPUTimelineView.prototype._computeSamplingData):
        (WI.CPUTimelineView.prototype._removeWorkerThreadViews):
        (WI.CPUTimelineView.prototype._clearBreakdownLegend):
        (WI.CPUTimelineView.prototype.layout.xScale): Deleted.
        Line charts and Circle Chart for threads and breakdowns.

        * UserInterface/Views/CPUUsageStackedView.css:
        (.cpu-usage-stacked-view):
        (.cpu-usage-stacked-view > .details):
        (body[dir=ltr] .cpu-usage-stacked-view > .details):
        (body[dir=rtl] .cpu-usage-stacked-view > .details):
        (.cpu-usage-stacked-view > .details > .name):
        (body[dir=rtl] .cpu-usage-stacked-view > .graph):
        (.cpu-usage-stacked-view > .graph):
        (.cpu-usage-stacked-view > .graph,):
        * UserInterface/Views/CPUUsageStackedView.js:
        (WI.CPUUsageStackedView):
        (WI.CPUUsageStackedView.prototype.get chart):
        (WI.CPUUsageStackedView.prototype.clear):
        (WI.CPUUsageStackedView.prototype.updateChart):
        (WI.CPUUsageStackedView.prototype._updateDetails):
        Same as CPUUsageView except Stacked for the total.

        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (.cpu-usage-view > .details > .name):
        (.cpu-usage-view > .graph):
        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.get chart):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.updateChart):
        (WI.CPUUsageView.prototype._updateDetails):
        Slight modifications for the new UI.

        * UserInterface/Views/LegacyCPUTimelineView.css:
        (.timeline-view.legacy-cpu .cpu-usage-view .line-chart > svg > path):
        * UserInterface/Views/LegacyCPUTimelineView.js:
        (WI.LegacyCPUTimelineView.prototype.layout):
        Update API calls in the legacy view for minor changes.

        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (.memory-category-view > .details > .name):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.css:
        (body .timeline-view.memory):
        (.timeline-view.memory): Deleted.
        Improvements ported from the CPU timeline views.

        * UserInterface/Views/StackedColumnChart.js: Added.
        (WI.StackedColumnChart):
        (WI.StackedColumnChart.prototype.get size):
        (WI.StackedColumnChart.prototype.set size):
        (WI.StackedColumnChart.prototype.initializeSections):
        (WI.StackedColumnChart.prototype.addColumnSet):
        (WI.StackedColumnChart.prototype.clear):
        (WI.StackedColumnChart.prototype.layout):
        A stacked column chart implementation.

        * UserInterface/Views/View.js:
        (WI.View.prototype.removeUnparentedSubview):
        Add a way to remove a subview that had its `element` moved
        someplace other than a direct child of our element.

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

        Web Inspector: Dark Mode: Network Overview Graph segments have distracting white box shadow
        https://bugs.webkit.org/show_bug.cgi?id=194966

        Reviewed by Devin Rousso.

        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        Make global timeline even/odd colors where odd is the default content background
        color and even is slightly different. These were used in multiple places.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph.cpu:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory > .legend):
        (.timeline-overview-graph.memory:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)): Deleted.
        * UserInterface/Views/NetworkTimelineOverviewGraph.css:
        (.timeline-overview-graph.network > .graph-row > .timeline-record-bar > .segment:not(.inactive)):
        (.timeline-overview-graph.network:nth-child(even) > .graph-row > .timeline-record-bar > .segment:not(.inactive)):
        Use the variable colors now and eliminate dark mode blocks.

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

        Web Inspector: Styles: Command-/ should toggle edited property
        https://bugs.webkit.org/show_bug.cgi?id=194967
        <rdar://problem/48329852>

        Reviewed by Devin Rousso.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.commentOut):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertySelect):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._toggle):
        (WI.SpreadsheetStyleProperty.prototype._select):

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

        Web Inspector: REGRESSION(r242018): Timelines shows no results
        https://bugs.webkit.org/show_bug.cgi?id=195017

        Reviewed by Joseph Pecoraro.

        `simpleGlobStringToRegExp` can return `null` if the provided search query is an empty string.

        * UserInterface/Base/SearchUtilities.js:
        (WI.SearchUtilities.prototype.regExpForString):
        Add assertions that the provided search query is a valid non-empty string.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._updateFilter):
        If the search query is empty, don't attempt to create a `RegExp` for it.

2019-02-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: TreeElement or Table row selected using the keyboard should always be revealed
        https://bugs.webkit.org/show_bug.cgi?id=194918
        <rdar://problem/48289314>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.selectionControllerSelectionDidChange):

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):

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

        Web Inspector: [META] Merge Resources and Debugger into a single Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=183420

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js: Added.
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.shouldPlaceResourcesAtTopLevel):
        (WI.SourcesNavigationSidebarPanel.prototype.get minimumWidth):
        (WI.SourcesNavigationSidebarPanel.prototype.closed):
        (WI.SourcesNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject.isAncestor):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject.getParent):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject):
        (WI.SourcesNavigationSidebarPanel.prototype.resetFilter):
        (WI.SourcesNavigationSidebarPanel.prototype.hasCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype.willDismissPopover):
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addTarget):
        (WI.SourcesNavigationSidebarPanel.prototype._findCallStackTargetTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._updateCallStackTreeOutline):
        (WI.SourcesNavigationSidebarPanel.prototype._addResource):
        (WI.SourcesNavigationSidebarPanel.prototype._addResourcesRecursivelyForFrame):
        (WI.SourcesNavigationSidebarPanel.prototype._addScript):
        (WI.SourcesNavigationSidebarPanel.prototype._addWorkerTargetWithMainResource):
        (WI.SourcesNavigationSidebarPanel.prototype._addDebuggerTreeElementForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._insertDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._compareBreakpointTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._removeBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._removeAllBreakpoints):
        (WI.SourcesNavigationSidebarPanel.prototype._toggleAllBreakpoints):
        (WI.SourcesNavigationSidebarPanel.prototype._breakpointsBeneathTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addIssue):
        (WI.SourcesNavigationSidebarPanel.prototype._removeDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpointsForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._addIssuesForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReason):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonGotoArrow):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceTypeScopeBarSelectionChanged):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointClicked):
        (WI.SourcesNavigationSidebarPanel.prototype._handleFrameMainResourceDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleMainFrameDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointsEnabledDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptsCleared):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerPaused):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerResumed):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerCallFramesDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerActiveCallFrameDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerWaitingToPause):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDOMBreakpointResolvedStateDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleConsoleIssueAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleConsoleCleared):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCSSStyleSheetAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTargetAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTargetRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleExtraDomainsActivated):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .navigation-bar):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-breakpoints):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-breakpoints.activated):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-pause-resume):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-pause-resume.activated):
        (.sidebar > .panel.navigation.sources > .content > .warning-banner):
        (.sidebar > .panel.navigation.sources > .content > .details-section):
        (.sidebar > .panel.navigation.sources > .content > .details-section.paused-reason.collapsed > .header > .options,):
        (.sidebar > .panel.navigation.sources > .content > .details-section.collapsed > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section.scripts:not(.collapsed)):
        (.sidebar > .panel.navigation.sources > .content > .navigation-bar):
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread):
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread > .item.thread):
        (@media (prefers-dark-interface) .sidebar > > .content > .panel.navigation.sources .warning-banner):

        * UserInterface/Views/SourcesTabContentView.js: Added.
        (WI.SourcesTabContentView):
        (WI.SourcesTabContentView.tabInfo):
        (WI.SourcesTabContentView.isTabAllowed):
        (WI.SourcesTabContentView.prototype.get type):
        (WI.SourcesTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.SourcesTabContentView.prototype.canShowRepresentedObject):
        (WI.SourcesTabContentView.prototype.showDetailsSidebarPanels):
        (WI.SourcesTabContentView.prototype.showScopeChainDetailsSidebarPanel):
        (WI.SourcesTabContentView.prototype.revealAndSelectBreakpoint):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.createContentTreeOutline):
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype._checkOutlinesForPendingViewStateCookie):
        Rework `createContentTreeOutline` to allow for additional symbols.
        Add another symbol to ensure that the `WI.TreeOutline` is not used for cookie restoration.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.showResources):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):
        * UserInterface/Views/DefaultDashboardView.js:
        (WI.DefaultDashboardView.prototype._resourcesItemWasClicked):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI.showSourcesTab): Added.
        (WI.isShowingSourcesTab): Added.
        (WI.tabContentViewClassForRepresentedObject):
        (WI._debuggerDidPause):

        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView.isTabAllowed):
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView.isTabAllowed):

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

        * UserInterface/Main.html:
        * UserInterface/Images/Sources.svg: Added.
        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Change the InspectorOverlay to use native rather than canvas
        https://bugs.webkit.org/show_bug.cgi?id=105023
        <rdar://problem/13443692>

        Reviewed by Brian Burg.

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

        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-10.0.json:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        * Versions/Inspector-iOS-12.2.json:
        * Versions/Inspector-iOS-8.0.json:
        * Versions/Inspector-iOS-9.0.json:
        * Versions/Inspector-iOS-9.3.json:
        Remove `Debugger.setOverlayMessage` command as it hasn't been used and is no longer supported.

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

        Web Inspector: provide a way to make searches case sensitive or use a regular expression
        https://bugs.webkit.org/show_bug.cgi?id=192527

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/SearchUtilities.js: Added.
        (WI.SearchUtilities.get defaultSettings):
        (WI.SearchUtilities.createSettings):
        (WI.SearchUtilities.regExpForString):
        (WI.SearchUtilities.createSettingsButton):
        (WI.SearchUtilities.createSettingsButton.toggleActive):
        * UserInterface/Views/Main.css:
        (.search-settings): Added.
        (.search-settings > .glyph): Added.
        (.search-settings:active > .glyph): Added.
        (.search-settings.active > .glyph): Added.
        (.search-settings:active.active > .glyph): Added.
        Create static utility class for handling settings related to searching/filtering.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Create default search settings that apply across WebInspector, unless a more specific
        setting has been created that overrides it (e.g. the navigation sidebar or Search tab).

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel):
        (WI.SearchSidebarPanel.prototype.performSearch.forEachMatch):
        (WI.SearchSidebarPanel.prototype.performSearch.resourceCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.resourcesCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.searchScripts.scriptCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.searchScripts):
        (WI.SearchSidebarPanel.prototype.performSearch.domSearchResults):
        (WI.SearchSidebarPanel.prototype.performSearch.domCallback):
        (WI.SearchSidebarPanel.prototype.performSearch):
        * UserInterface/Views/SearchSidebarPanel.css:
        (.sidebar > .panel.navigation.search > .search-bar):
        (.sidebar > .panel.navigation.search > .search-bar > input[type="search"]):
        Add a (*) settings "gear" after each `<input type="search">` that shows a contextmenu with
        checkboxes for each search setting. Any settings changed for each input take precedence over
        the default settings, but will match the corresponding default setting if it's changed.

        * UserInterface/Views/SearchResultTreeElement.js:
        (WI.SearchResultTreeElement.truncateAndHighlightTitle):
        Use the length of the found text, rather than the length of the query.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._highlightSearchResults):
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._updateFilter):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.performSearch):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.customPerformSearch.searchResultCallback):
        (WI.SourceCodeTextEditor.prototype.customPerformSearch):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.performSearch):
        Use the default search settings when searching/filtering.

        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]:placeholder-shown::-webkit-search-cancel-button): Added.
        Drive-by: prevent the (x) from appearing when no text has been entered.

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

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

        Web Inspector: make debounce Proxy into its own class
        https://bugs.webkit.org/show_bug.cgi?id=194721

        Reviewed by Joseph Pecoraro.

        The `debounce`/`throttle` functions leveraged a `Proxy` to intercept the function call and
        replace it with a "delayed" version. The issue with this is that it set the identifier for
        the timer on the function itself, which is shared across all instances of a given class.
        When different instances call the same delayed function, they'd clobber eachother's attempts
        to delay work.

        * UserInterface/Base/Debouncer.js: Added.
        (Debouncer):
        (Debouncer.prototype.force):
        (Debouncer.prototype.delayForTime):
        (Debouncer.prototype.delayForFrame):
        (Debouncer.prototype.delayForMicrotask):
        (Debouncer.prototype.cancel):
        (Debouncer.prototype._execute):
        * UserInterface/Base/Throttler.js: Added.
        (Throttler):
        (Throttler.prototype.force):
        (Throttler.prototype.fire):
        (Throttler.prototype.cancel):
        (Throttler.prototype._execute):
        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/BezierEditor.js:
        (WI.BezierEditor):
        * UserInterface/Views/ContentBrowser.js:
        (WI.ContentBrowser):
        (WI.ContentBrowser.prototype._contentViewSelectionPathComponentDidChange):
        (WI.ContentBrowser.prototype._contentViewSupplementalRepresentedObjectsDidChange):
        (WI.ContentBrowser.prototype._currentContentViewDidChange):
        (WI.ContentBrowser.prototype._dispatchCurrentRepresentedObjectsDidChangeEvent): Deleted.
        * UserInterface/Views/DOMTreeUpdater.js:
        (WI.DOMTreeUpdater):
        (WI.DOMTreeUpdater.prototype._nodeAttributeModified):
        (WI.DOMTreeUpdater.prototype._nodeInserted):
        (WI.DOMTreeUpdater.prototype._nodeRemoved):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        (WI.NavigationSidebarPanel.prototype.closed):
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.hideEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateFilter):
        (WI.NavigationSidebarPanel.prototype.shown):
        (WI.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype._treeElementDisclosureDidChange):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.hidden):
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRelatedResourcesSection):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):
        (WI.ResourceDetailsSidebarPanel):
        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView):
        * UserInterface/Views/SpringEditor.js:
        (WI.SpringEditor.prototype._resetPreviewAnimation):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.set hidden):
        (WI.TreeElement.prototype.didChange):
        (WI.TreeElement.prototype._attach):
        (WI.TreeElement.prototype._detach):
        (WI.TreeElement.prototype.collapse):
        (WI.TreeElement.prototype.expand):
        (WI.TreeElement.prototype.reveal):
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.get updateVirtualizedElementsDebouncer): Added.
        (WI.TreeOutline.prototype._updateVirtualizedElements): Added.
        (WI.TreeOutline.prototype.updateVirtualizedElements.walk): Deleted.
        (WI.TreeOutline.prototype.updateVirtualizedElements): Deleted.
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView):
        (WI.WebSocketContentView.prototype.shown):
        (WI.WebSocketContentView.prototype._updateFramesSoon):
        (WI.WebSocketContentView.prototype._updateFrames):

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

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

        Unreviewed, fix indentation.

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

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

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

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

        Web Inspector: Timelines: add UI for preventing auto-stop
        https://bugs.webkit.org/show_bug.cgi?id=194956

        Reviewed by Joseph Pecoraro.

        Add a checkbox to the navigation area of the Timelines tab that controls whether recordings
        automatically stop (e.g. after "load" or a period of inactivity).

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.get navigationItems):
        (WI.TimelineRecordingContentView.prototype._handleAutoStopCheckboxCheckedDidChange): Added.
        (WI.TimelineRecordingContentView.prototype._handleTimelinesAutoStopSettingChanged): Added.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingMaxTimeTimeout):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):

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

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

        REGRESSION(r?): Web Inspector: Popovers have inset shadows
        https://bugs.webkit.org/show_bug.cgi?id=192963
        <rdar://problem/46888679>

        Reviewed by Brian Burg.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._drawBackground):
        (WI.Popover.prototype._drawBackground.isolate): Added.
        * UserInterface/Views/Popover.css:
        (.popover):

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

        Web Inspector: Styles Redesign: clicking CSS property or selector should always select its text
        https://bugs.webkit.org/show_bug.cgi?id=180791
        <rdar://problem/36038366>

        Reviewed by Brian Burg.

        * UserInterface/Views/SpreadsheetSelectorField.js:
        (WI.SpreadsheetSelectorField):
        (WI.SpreadsheetSelectorField.prototype.startEditing):
        (WI.SpreadsheetSelectorField.prototype.stopEditing):
        (WI.SpreadsheetSelectorField.prototype._handleMouseDown): Added.
        (WI.SpreadsheetSelectorField.prototype._handleMouseUp): Added.
        (WI.SpreadsheetSelectorField.prototype._handleFocus): Deleted.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .selector.editing:focus, .spreadsheet-css-declaration .selector > .matched): Added.
        (.spreadsheet-css-declaration .selector.spreadsheet-selector-field):
        (.spreadsheet-css-declaration .selector:focus, .spreadsheet-css-declaration .selector > .matched): Deleted.

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

        Web Inspector: Dark Mode: DOM Content Loaded blue marker is too dark
        https://bugs.webkit.org/show_bug.cgi?id=194970
        <rdar://problem/48330126>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRuler.css:
        (@media (prefers-color-scheme: dark)):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        Make the marker lighter for the dark mode.

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

        Web Inspector: Remove unused Timeline record selection code path
        https://bugs.webkit.org/show_bug.cgi?id=194931

        Reviewed by Devin Rousso.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype.userSelectedRecord): Deleted.
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.timelineOverviewUserSelectedRecord): Deleted.
        * UserInterface/Views/TimelineView.js:
        (WI.TimelineView.prototype.userSelectedRecordFromOverview): Deleted.

2019-02-21  Darin Adler  <darin@apple.com>

        Some refinements for Node and Document
        https://bugs.webkit.org/show_bug.cgi?id=194764

        Reviewed by Ryosuke Niwa.

        * UserInterface/Models/NativeFunctionParameters.js: Removed getOverrideStyle
        because this deprecated non-working function is no longer something web authors
        should be thinking about or typing.

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

        Web Inspector: Canvas: recordings with a single frame sometimes missing TreeElement
        https://bugs.webkit.org/show_bug.cgi?id=194687

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        Wait until the entire `Recording` has been processed before setting the selected action.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .recording-content):
        Drive-by: ensure that the recording `TreeOutline` container element has the full height to
        take advantage of for virtualization.

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.set recording):
        Drive-by: clear the `DataGrid` list when changing recordings since we removed all subviews.

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

        Web Inspector: DOM Debugger: node-specific event breakpoints aren't cleared/recalculated on navigation
        https://bugs.webkit.org/show_bug.cgi?id=194874
        <rdar://problem/48253415>

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: macOS user agent option should be available in device settings menu
        https://bugs.webkit.org/show_bug.cgi?id=194885
        <rdar://problem/48259253>

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: RTL: Scripts Timeline loading indicator has incorrect margins
        https://bugs.webkit.org/show_bug.cgi?id=194882

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser .recording-progress > .status > .indeterminate-progress-spinner):

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * WebInspectorUI.xcodeproj/project.pbxproj:

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

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        Support the new snapshot version. The only thing that changes are the
        node flags, and its actually completely compatible with version 1.

        (HeapSnapshot.updateCategoriesAndMetadata):
        List the count of object type instances in each class category.

        (HeapSnapshot.prototype.serializeNode):
        Include whether or not the node is an object type.

        * UserInterface/Proxies/HeapSnapshotNodeProxy.js:
        (WebInspector.HeapSnapshotNodeProxy):
        (WebInspector.HeapSnapshotNodeProxy.deserialize):
        Add a new Node isObjectType property based on the new data.

        * UserInterface/Views/HeapSnapshotClassDataGridNode.js:
        (WebInspector.HeapSnapshotClassDataGridNode.prototype.createCellContent):
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WebInspector.HeapSnapshotClusterContentView.iconStyleClassNameForClassName):
        If a class contains 50% or more object type instances then treat it as such
        instead of defaulting to native.

        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
        We can be more specific than the default if the individual instance is
        known to be an object type.

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

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

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        Support the new snapshot version. The only thing that changes are the
        node flags, and its actually completely compatible with version 1.

        (HeapSnapshot.updateCategoriesAndMetadata):
        List the count of object type instances in each class category.

        (HeapSnapshot.prototype.serializeNode):
        Include whether or not the node is an object type.

        * UserInterface/Proxies/HeapSnapshotNodeProxy.js:
        (WebInspector.HeapSnapshotNodeProxy):
        (WebInspector.HeapSnapshotNodeProxy.deserialize):
        Add a new Node isObjectType property based on the new data.

        * UserInterface/Views/HeapSnapshotClassDataGridNode.js:
        (WebInspector.HeapSnapshotClassDataGridNode.prototype.createCellContent):
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WebInspector.HeapSnapshotClusterContentView.iconStyleClassNameForClassName):
        If a class contains 50% or more object type instances then treat it as such
        instead of defaulting to native.

        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
        We can be more specific than the default if the individual instance is
        known to be an object type.

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

        Web Inspector: Scripts timeline on-going-recording text looks poor in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=194809

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser .recording-progress > .status):

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

        Web Inspector: Provide a way to avoid a recording auto-stop on reload
        https://bugs.webkit.org/show_bug.cgi?id=194793

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        New tooltip.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.willAutoStop):
        (WI.TimelineManager.prototype.relaxAutoStop):
        Getter and relaxer for auto stop behavior.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        Drive-by fix some whitespace issues.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):
        (WI.TimelineTabContentView.prototype._showRecordButton):
        (WI.TimelineTabContentView.prototype._showContinueButton):
        (WI.TimelineTabContentView.prototype._updateNavigationBarButtons):
        (WI.TimelineTabContentView.prototype._capturingStartedOrStopped):
        (WI.TimelineTabContentView.prototype._globalModifierKeysDidChange):
        (WI.TimelineTabContentView.prototype._continueButtonClicked):
        Show a "continue" like icon instead of the usual stop button when
        a recording would auto-stop and the alt key is down. When pressed
        this button will relax the auto-stop and continue the recording
        until explicitly stopped by the user.

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

        Web Inspector: Fix a typo causing assertions in ConsoleManager
        https://bugs.webkit.org/show_bug.cgi?id=194792

        Reviewed by Matt Baker.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.initializeLogChannels):
        Extra comma produced an undefined value in the list.

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

        Web Inspector: Styles: typing ";" shouldn't focus on the next property when there's open parenthesis or comment
        https://bugs.webkit.org/show_bug.cgi?id=194789

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._handleValueBeforeInput):

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

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.get mainThreadUsage):
        (WI.CPUTimelineRecord.prototype.get webkitThreadUsage):
        (WI.CPUTimelineRecord.prototype.get workerThreadUsage):
        (WI.CPUTimelineRecord.prototype.get unknownThreadUsage):
        Build a better record from the protocol events.

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

        Web Inspector: duplicate left double quotation mark (\u201C) in 'Unable to show certificate for “%s“.'
        https://bugs.webkit.org/show_bug.cgi?id=194782
        <rdar://problem/48159683>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.async showCertificate):
        * Localizations/en.lproj/localizedStrings.js:

2019-02-18  Eric Carlson  <eric.carlson@apple.com>

        Add MSE logging configuration
        https://bugs.webkit.org/show_bug.cgi?id=194719
        <rdar://problem/48122151>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/ConsoleMessage.js:
        * UserInterface/Models/IssueMessage.js:
        (WI.IssueMessage):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):

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

        Web Inspector: Move CSS completion logic from SpreadsheetTextField to SpreadsheetStyleProperty
        https://bugs.webkit.org/show_bug.cgi?id=194724

        Reviewed by Devin Rousso.

        Move CSS value completion logic from SpreadsheetTextField, a generic text field,
        to SpreadsheetStyleProperty.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._nameCompletionDataProvider):
        (WI.SpreadsheetStyleProperty.prototype._valueCompletionDataProvider):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsSelectedCompletion):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsClickedCompletion):
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._showSuggestionsView):
        (WI.SpreadsheetTextField.prototype._getCompletionPrefix): Deleted.

2019-02-17  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Frontend performance is very slow reloading theverge.com - 50% of time in TreeOutline _indexOfTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=193605
        <rdar://problem/47403986>

        Reviewed by Devin Rousso.

        SelectionController should track an unordered Set of represented objects
        instead of an ordered set of indexes. This eliminates the costly and
        error-prone updates needed to keep the selected indexes in sync as items
        are added and removed from TreeOutline (and Table, to a far lesser extent).

        The SelectionController interface is largely the same. Class and delegate
        methods have been renamed to reflect the change from indexes to objects.
        SelectionController tracks selected items in selection order. For the
        operations that rely on objects being in insertion order, the controller
        uses a comparator function provided at construction time.

        * UserInterface/Base/IndexSet.js: Removed.
        No longer used. SelectionController now uses a plain Set.

        * UserInterface/Base/Utilities.js:
        (value):
        (get return):
        Add utilities previously supplied by IndexSet and used by SelectionController.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.get lastSelectedItem):
        (WI.SelectionController.prototype.get selectedItems):
        (WI.SelectionController.prototype.set allowsMultipleSelection):
        (WI.SelectionController.prototype.hasSelectedItem):
        (WI.SelectionController.prototype.selectItem):
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.selectAll):
        (WI.SelectionController.prototype.deselectAll):
        (WI.SelectionController.prototype.removeSelectedItems):
        (WI.SelectionController.prototype.reset):
        (WI.SelectionController.prototype.didRemoveItems):
        (WI.SelectionController.prototype.handleKeyDown):
        (WI.SelectionController.prototype.handleItemMouseDown):
        (WI.SelectionController.prototype._deselectAllAndSelect):
        (WI.SelectionController.prototype._selectItemsFromArrowKey):
        (WI.SelectionController.prototype._firstSelectableItem):
        (WI.SelectionController.prototype._lastSelectableItem):
        (WI.SelectionController.prototype._previousSelectableItem):
        (WI.SelectionController.prototype._nextSelectableItem):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype._addRange):
        (WI.SelectionController.prototype._deleteRange):
        (WI.SelectionController.prototype.get numberOfItems): Deleted.
        (WI.SelectionController.prototype.didInsertItem): Deleted.
        (WI.SelectionController.prototype.handleItemMouseDown.normalizeRange): Deleted.
        (WI.SelectionController.prototype._nextSelectableIndex): Deleted.
        (WI.SelectionController.prototype._previousSelectableIndex): Deleted.

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

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.tableIndexForRepresentedObject):
        (WI.CookieStorageContentView.prototype.tableRepresentedObjectForIndex):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.objectForSelection):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableIndexForRepresentedObject):
        (WI.NetworkTableContentView.prototype.tableRepresentedObjectForIndex):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRow):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        (WI.Table.prototype.selectionControllerSelectionDidChange):
        (WI.Table.prototype.selectionControllerFirstSelectableItem):
        (WI.Table.prototype.selectionControllerLastSelectableItem):
        (WI.Table.prototype.selectionControllerPreviousSelectableItem):
        (WI.Table.prototype.selectionControllerNextSelectableItem):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._indexForRepresentedObject):
        (WI.Table.prototype._representedObjectForIndex):
        (WI.Table.prototype.selectionControllerNumberOfItems): Deleted.
        (WI.Table.prototype.selectionControllerNextSelectableIndex): Deleted.
        (WI.Table.prototype.selectionControllerPreviousSelectableIndex): Deleted.
        (WI.Table.prototype._toggleSelectedRowStyle): Deleted.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.compareSiblings):
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get selectedTreeElement):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.get selectedTreeElements):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype.removeChildren):
        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype.getCachedTreeElement):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectionControllerFirstSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerLastSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableItem):
        (WI.TreeOutline.prototype.objectForSelection):
        (WI.TreeOutline._generateStyleRulesIfNeeded):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableIndex): Deleted.
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableIndex): Deleted.
        (WI.TreeOutline._generateStyleRulesIfNeeded._indexesForSubtree.numberOfElementsInSubtree): Deleted.

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

        Web Inspector: Logging a native function to the console, such as `alert`, produces unhandled rejection
        https://bugs.webkit.org/show_bug.cgi?id=194740

        Reviewed by Matt Baker.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.findFunctionSourceCodeLocation):
        In case of a protocol error (common when attempting to get a location
        for a native function) produce the NoSourceFound result.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendLocationLink):
        Simplify with an arrow function.

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

        Web Inspector: Some timelines views work, show Legacy CPU timeline
        https://bugs.webkit.org/show_bug.cgi?id=194738

        Reviewed by Yusuke Suzuki.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):

2019-02-15  Aaron Chu  <aaron_chu@apple.com>

        AX: Audit tab should have built-in accessibility tests.
        https://bugs.webkit.org/show_bug.cgi?id=194005
        <rdar://problem/47657503>

        Updated built-in accessibility audits test suite.

        Reviewed by Devin Rousso.

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

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

        Web Inspector: Dark Mode: commas in CSS selectors are too dim
        https://bugs.webkit.org/show_bug.cgi?id=194729
        <rdar://problem/48128592>

        Reviewed by Matt Baker.

        Use `--text-color-tertiary` for both light and dark modes.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration .selector > span):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Variables.css:
        (:root):

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

        Unreviewed, fix intentation.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header):

2019-02-15  Dean Jackson  <dino@apple.com>

        Allow emulation of user gestures from Web Inspector console
        https://bugs.webkit.org/show_bug.cgi?id=194725
        <rdar://problem/48126604>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        Add some UI for emulating a User Gesture when evaluating in the console. This
        allows the developer to do things that would otherwise require actual interaction
        with the page, such as start playback of media on iOS.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js: Add a new setting for this option.
        * UserInterface/Controllers/JavaScriptLogViewController.js:
        (WI.JavaScriptLogViewController.prototype.consolePromptTextCommitted):
        * UserInterface/Controllers/RuntimeManager.js: Call evaluate with this new option.
        (WI.RuntimeManager.prototype.evaluateInInspectedWindow):
        * UserInterface/Views/LogContentView.js: Add a new checkbox in the upper bar
        that allows the user to toggle the setting.
        (WI.LogContentView):
        (WI.LogContentView.prototype.get navigationItems):
        (WI.LogContentView.prototype._handleEmulateInUserGestureSettingChanged):

        * UserInterface/Views/NetworkTableContentView.js: Two drive-by typo fixes :)
        (WI.NetworkTableContentView): perserve -> preserve
        (WI.NetworkTableContentView.prototype.get navigationItems): checkboxs -> checkboxes

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

        Web Inspector: Styles: valid values in style attributes are reported as unsupported property values
        https://bugs.webkit.org/show_bug.cgi?id=194619
        <rdar://problem/47917373>

        Reviewed by Devin Rousso.

        Payload of inline styles may contain `range` that doesn't match
        the actual text of the payload - it has an extra empty line at the end.
        Mismatching ranges caused data corruption.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):

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

        Web Inspector: remove unused parameter in _parseStylePropertyPayload
        https://bugs.webkit.org/show_bug.cgi?id=194642

        Reviewed by Devin Rousso.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        The `styleText` parameter was never used

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

        Web Inspector: Canvas: all actions after an offscreen path modification are marked as offscreen path errors
        https://bugs.webkit.org/show_bug.cgi?id=194684

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

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

        Web Inspector: Canvas: taking a second recording doesn't select the Initial State by default
        https://bugs.webkit.org/show_bug.cgi?id=194685

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingChanged):

2019-02-14  Commit Queue  <commit-queue@webkit.org>

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

        New test times out (Requested by NVI on #webkit).

        Reverted changeset:

        "Web Inspector: Styles: valid values in style attributes are
        reported as unsupported property values"
        https://bugs.webkit.org/show_bug.cgi?id=194619
        https://trac.webkit.org/changeset/241497

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

        Web Inspector: Styles: valid values in style attributes are reported as unsupported property values
        https://bugs.webkit.org/show_bug.cgi?id=194619
        <rdar://problem/47917373>

        Reviewed by Devin Rousso.

        Payload of inline styles may contain `range` that doesn't match
        the actual text of the payload - it has an extra empty line at the end.
        Mismatching ranges caused data corruption.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):

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

        Web Inspector: Update combined and minified copyright header for 2018-2019
        https://bugs.webkit.org/show_bug.cgi?id=194635

        Reviewed by Devin Rousso.

        * Scripts/copy-user-interface-resources.pl:

2019-02-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update localizable strings.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Experimental setting for CPU Usage Timeline improvements
        https://bugs.webkit.org/show_bug.cgi?id=194556

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/LegacyCPUTimelineView.css: Added.
        * UserInterface/Views/LegacyCPUTimelineView.js: Added.
        Copy of CPUTimelineView.js/css to be used when the setting is not set.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        ContentView to create based on the setting.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        Experimental switch.

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

        Web Inspector: Timeline.prototype.recordsInTimeRange uses a property most records do not have
        https://bugs.webkit.org/show_bug.cgi?id=194549

        Reviewed by Devin Rousso.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsInTimeRange):

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

        Web Inspector: Timelines: clicking on an empty space in the overview should deselect any selected record bar
        https://bugs.webkit.org/show_bug.cgi?id=194365
        <rdar://problem/47868426>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRecordBar.js:
        (WI.TimelineRecordBar.prototype._handleClick):
        Mark the "click" event so that later listeners know it was handled by `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype._instrumentAdded):
        (WI.TimelineOverview.prototype._instrumentRemoved):
        (WI.TimelineOverview.prototype._handleGraphsContainerClick): Added.
        (WI.TimelineOverview.prototype._handleOverviewGraphRecordSelected): Added.
        (WI.TimelineOverview.prototype._recordSelected):
        Listen for "click" on the graph container and deselect all records when fired, unless the
        click was marked by a `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._recordSelected):
        Ensure that all `WI.TimelineView` update their selected record whenever it changes for any
        other `WI.TimelineView` (or if there is no selected record).

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.prototype.didLayoutSubtree): Added.
        Drive-by: since `WI.TimelineRecordBar` are reused when combining, we need to re-determine
        which one holds the currently selected record.

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

        Web Inspector: Remove unused maxUsage in CPUTimelineView
        https://bugs.webkit.org/show_bug.cgi?id=194526

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.shown):

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

        Web Inspector: add context menu items to copy a resource's HTTP request/response data
        https://bugs.webkit.org/show_bug.cgi?id=194261
        <rdar://problem/21693696>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.stringifyHTTPRequest): Added.
        (WI.Resource.prototype.stringifyHTTPResponse): Added.
        Don't include the request/response data, as that can be very large, and can easily be
        accessed by actually selecting the resource in the Resources/Network tab.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Audit: show keyboard shortcut in export tooltip
        https://bugs.webkit.org/show_bug.cgi?id=194454

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView):
        (WI.AuditTestContentView.prototype.get saveData):
        (WI.AuditTestContentView.prototype._exportResult): Added.
        (WI.AuditTestContentView.prototype._handleExportButtonNavigationItemClicked):
        (WI.AuditTestContentView.prototype._exportAudit): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Styles: easier way to select a single line
        https://bugs.webkit.org/show_bug.cgi?id=193305

        Reviewed by Devin Rousso.

        Start property selection after mousedown when mouse cursor moves 8px,
        which is ~1.5 times the width of a text character in the style editor.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowMouseMove): Added.
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._stopSelection):

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

        Web Inspector: Debugger Popover should work with value in template string `${identifier}`
        https://bugs.webkit.org/show_bug.cgi?id=194459
        <rdar://problem/47932564>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        (WI.CodeMirrorTokenTrackingController.prototype._processJavaScriptExpression):
        When walking backwards to get the full expression we were walking outside
        of the interpolation group `outside ${inside}`. Stop walking backwards once
        we cross the boundary.

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

        Web Inspector: Import / Export Heap Snapshots
        https://bugs.webkit.org/show_bug.cgi?id=194448
        <rdar://problem/47928093>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Proxies/HeapSnapshotProxy.js:
        (WI.HeapSnapshotProxy):
        (WI.HeapSnapshotProxy.deserialize):
        (WI.HeapSnapshotProxy.prototype.get imported):
        (WI.HeapSnapshotProxy.prototype.get snapshotStringData):
        (WI.HeapSnapshotProxy.prototype.set snapshotStringData):
        Include an "imported" state on the HeapSnapshot and allow for
        stashing the snapshotStringData on the main thread side.

        * UserInterface/Proxies/HeapSnapshotWorkerProxy.js:
        (WI.HeapSnapshotWorkerProxy.prototype.createImportedSnapshot):
        * UserInterface/Workers/HeapSnapshot/HeapSnapshotWorker.js:
        (HeapSnapshotWorker.prototype.clearSnapshots):
        (HeapSnapshotWorker.prototype.createSnapshot):
        Provide a specialized way to create an imported HeapSnapshot.
        Track imported snapshots separately since they won't want to
        be searched for live/dead objects due to active recording GCs.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        (HeapSnapshot.updateCategoriesAndMetadata):
        (HeapSnapshot.allocationBucketCounts):
        (HeapSnapshot.instancesWithClassName):
        (HeapSnapshot.prototype.nodeWithIdentifier):
        (HeapSnapshot.prototype.dominatedNodes):
        (HeapSnapshot.prototype.retainedNodes):
        (HeapSnapshot.prototype.retainers):
        (HeapSnapshot.prototype.updateDeadNodesAndGatherCollectionData):
        (HeapSnapshot.prototype.serialize):
        (HeapSnapshot.prototype.serializeNode):
        (HeapSnapshot.prototype._buildPostOrderIndexes):
        (HeapSnapshot.prototype._buildDominatorIndexes):
        (HeapSnapshot.prototype._buildRetainedSizes):
        (HeapSnapshot.prototype._gcRootPathes.visitNode):
        (HeapSnapshot.prototype._gcRootPathes):
        Construct a HeapSnapshot knowinng whether or not it is imported.
        Imported snapshots may be the "GCDebugging" snapshot type which
        differs from "Inspector" by the number of node fields. So keep
        the node field count a member instead of a global constant
        in order to work with both snapshot types.

        * UserInterface/Models/HeapAllocationsInstrument.js:
        (WI.HeapAllocationsInstrument.prototype._takeHeapSnapshot):
        * UserInterface/Protocol/ConsoleObserver.js:
        (WI.ConsoleObserver.prototype.heapSnapshot):
        * UserInterface/Protocol/HeapObserver.js:
        (WI.HeapObserver.prototype.trackingStart):
        (WI.HeapObserver.prototype.trackingComplete):
        Stash the original string JSON data on the main thread side
        where we already have the data.

        * UserInterface/Views/HeapAllocationsTimelineOverviewGraph.js:
        (WI.HeapAllocationsTimelineOverviewGraph.prototype.layout):
        Don't show [S] icons for imported snapshots with no timestamp.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView):
        (WI.HeapAllocationsTimelineView.prototype.get navigationItems):
        (WI.HeapAllocationsTimelineView.prototype._importButtonNavigationItemClicked):
        (WI.HeapAllocationsTimelineView.prototype._takeHeapSnapshotClicked):
        Import button that just creates a new snapshot.

        * UserInterface/Views/HeapSnapshotContentView.js:
        (WI.HeapSnapshotContentView):
        (WI.HeapSnapshotContentView.prototype.get navigationItems):
        (WI.HeapSnapshotContentView.prototype.get supportsSave):
        (WI.HeapSnapshotContentView.prototype.get saveData):
        (WI.HeapSnapshotContentView.prototype._exportSnapshot):
        Export button that saves the original data.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForRecord):
        Specialized display string for imported snapshots.

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

        Web Inspector: Add Debug setting to show Internal Object Classes in Heap Snapshot
        https://bugs.webkit.org/show_bug.cgi?id=194445

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WI.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):

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

        Web Inspector: Styles: close unbalanced quotes and parenthesis when editing values
        https://bugs.webkit.org/show_bug.cgi?id=182523
        <rdar://problem/37260209>

        Reviewed by Devin Rousso.

        Close CSS comments, append missing closed quotes and right parenthesis.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.completeUnbalancedValue):
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.set rawValue):

2019-02-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make Timeline markers light gray instead of black in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=194417

        Reviewed by Devin Rousso.

        * UserInterface/Views/RenderingFrameTimelineOverviewGraph.css:
        (.timeline-overview-graph.rendering-frame > .divider):
        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .divider):

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

        Web Inspector: DOM: don't send the entire function string with each event listener
        https://bugs.webkit.org/show_bug.cgi?id=194293
        <rdar://problem/47822809>

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: "Worker not found" uncaught protocol errors
        https://bugs.webkit.org/show_bug.cgi?id=194319

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.terminatePageTarget):
        Remove Worker targets associated with the Page on navigation.
        Eventually we will have to associate Workers with their parent
        frame, but for now a transition can only happen at the Page
        level, so we can eliminate all workers on the page.

        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager.prototype.workerCreated):
        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.WorkerConnection.sendMessageToBackend):
        Allow any WorkerAgent domain message to fail silently. This can
        happen if a Worker is created and destroyed before the frontend
        hears about it and sends messages to the backend for that Worker.

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

        Web Inspector: Styles: PropertiesChanged shouldn't fire when old and new text are both empty
        https://bugs.webkit.org/show_bug.cgi?id=194318

        Reviewed by Devin Rousso.

        Previously, WI.CSSStyleDeclaration.Event.PropertiesChanged fired when
        old text and new text were empty strings.

        * UserInterface/Models/CSSStyleDeclaration.js:

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

        Web Inspector: Lots of time spent updating related resources in ResourceDetailsSidebar when loading a page with lots of resources
        https://bugs.webkit.org/show_bug.cgi?id=159577
        <rdar://problem/27251461>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRelatedResourcesSection):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):

2019-02-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab: selection is broken after deleting the selected node
        https://bugs.webkit.org/show_bug.cgi?id=194300
        <rdar://problem/47829275>

        Reviewed by Devin Rousso.

        Deleting a TreeElement can cause an IndexSet including indexes
        outside the deleted range to be passed to SelectionController,
        corrupting the internal selection state.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._indexesForSubtree.numberOfElementsInSubtree): Added.
        (WI.TreeOutline.prototype._indexesForSubtree):
        Finding the last (rightmost leaf) TreeElement in the subtree used
        TreeElement.prototype.traverseNextElement to do a depth first traversal.
        This method did not stay within the subtree rooted at `treeElement`.

2019-02-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r240947): Resources tab: can't select main frame after refreshing page
        https://bugs.webkit.org/show_bug.cgi?id=194254
        <rdar://problem/47805023>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        TreeOutline should always call the TreeElement `select` and `deselect`
        methods while processing selection changes. Having notifications
        suppressed by `this._suppressNextSelectionDidChangeEvent` should only
        affect the dispatching of TreeOutline events.

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

        Web Inspector: Styles: remove harmless "property was unlocked" asserts
        https://bugs.webkit.org/show_bug.cgi?id=194262

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._handleNameChange):
        (WI.SpreadsheetStyleProperty.prototype._handleValueChange):

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

        Web Inspector: Uncaught Exception: undefined is not an object (evaluating 'classes.includes')
        https://bugs.webkit.org/show_bug.cgi?id=194280
        <rdar://problem/47811159>

        Reviewed by Matt Baker.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype._populateClassToggles):
        Add a fallback value in case the `class` attribute isn't specified for the selected node.

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

        Web Inspector: Resources: missing resource data for document on reload
        https://bugs.webkit.org/show_bug.cgi?id=194243
        <rdar://problem/47559021>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype.set resource):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):

        * UserInterface/Base/Object.js:
        (WI.Object.removeEventListener):
        Drive-by: there's no need to iterate over the entire table to check if `thisObject` exists,
        as that is handled for us by `ListMultimap`, which we later call anyways.

2019-02-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: Resources: WI.TreeOutline assertions when refreshing the page
        https://bugs.webkit.org/show_bug.cgi?id=194242
        <rdar://problem/47802027>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype.removeChildren):
        FolderTreeElements are removed by the base class call to removeChildren.
        Calling `removeChildren` for detached TreeElements is unnecessary.

2019-02-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: clicking a selected call frame doesn't re-scroll
        https://bugs.webkit.org/show_bug.cgi?id=194169
        <rdar://problem/47743864>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._handleMouseDown):
        Add a special case for a single-selection TreeOutline with
        allowsRepeatSelection enabled. Since the element is already
        selected, bypass the SelectionCongroller and dispatch an
        event with event.data.selectedByUser set to true.

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

        Web Inspector: Styles: fix race conditions when editing
        https://bugs.webkit.org/show_bug.cgi?id=192739
        <rdar://problem/46752925>

        Reviewed by Devin Rousso.

        Editing CSS property in the style editor syncronously updates CSSStyleDeclaration on the front-end
        and asyncronously updates the backend by calling CSSAgent.setStyleText. After the new style text is applied
        on the backend, CSSStyleDeclaration (on the front-end) gets updated.

        Unsure there's no race conditions by introducing `_updatesInProgressCount`:

          - Increment it before calling CSSAgent.setStyleText.
          - Decrement it after CSSAgent.setStyleText is finished.

        Prevent updates of CSSStyleDeclaration when _updatesInProgressCount isn't 0.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.set text): Removed.
        (WI.CSSStyleDeclaration.prototype.setText): Added.
        Change the setter to a method since it has side effects including an asynchronous backend call.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeStyleText):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.get nameTextField): Removed.
        (WI.SpreadsheetStyleProperty.prototype.get valueTextField): Removed.
        Drive-by: remove unused code.

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

        Web Inspector: create icons for media event types instead of using a blue circle
        https://bugs.webkit.org/show_bug.cgi?id=190381
        <rdar://problem/45507995>

        Reviewed by Brian Burg.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.isPlayEvent): Added.
        (WI.DOMNode.isPauseEvent): Added.
        (WI.DOMNode.isStopEvent): Added.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.layout):
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown tr > :matches(th, td)):
        (.dom-events-breakdown .graph):
        (.dom-events-breakdown .graph > :matches(img, .area)): Added.
        (.dom-events-breakdown .graph > img): Added.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > img): Added.
        (.dom-events-breakdown .graph > :matches(.point, .area)): Deleted.
        (.dom-events-breakdown .graph > .point): Deleted.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > .point): Deleted.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine):

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

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.ColumnChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194171

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        * UserInterface/Views/ColumnChart.js:
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.set size):
        (WI.ColumnChart.prototype.layout):
        (WI.ColumnChart.prototype.get element): Deleted.
        (WI.ColumnChart.prototype.needsLayout): Deleted.
        (WI.ColumnChart.prototype.updateLayout): Deleted.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.StackedLineChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194119

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/LineChart.js:
        (WI.LineChart.prototype.layout):
        (WI.LineChart):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph):
        * UserInterface/Views/StackedLineChart.js:
        (WI.StackedLineChart):
        (WI.StackedLineChart.prototype.set size):
        (WI.StackedLineChart.prototype.layout):
        (WI.StackedLineChart.prototype.get element): Deleted.
        (WI.StackedLineChart.prototype.get points): Deleted.
        (WI.StackedLineChart.prototype.needsLayout): Deleted.
        (WI.StackedLineChart.prototype.updateLayout): Deleted.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.CircleChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194118

        Reviewed by Matt Baker.

        * UserInterface/Views/CircleChart.js:
        (WI.CircleChart.prototype.get centerElement):
        (WI.CircleChart.prototype.layout):
        (WI.CircleChart.prototype.get element): Deleted.
        (WI.CircleChart.prototype.needsLayout): Deleted.
        (WI.CircleChart.prototype.updateLayout): Deleted.
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView):

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline Detail Views do not reset properly when new time range selection contains nothing
        https://bugs.webkit.org/show_bug.cgi?id=194115
        <rdar://problem/47716693>

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.reset):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.reset):
        (WI.MemoryTimelineView.prototype.clear):
        (WI.MemoryTimelineView.prototype.layout):
        When there are no visible records in the selected range clear our UI.
        Introduce a `clear` method that clears the UI but keeps
        non-range-specific values (e.g. maximums).

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline graphs have drawing issues with multiple discontinuities
        https://bugs.webkit.org/show_bug.cgi?id=194110
        <rdar://problem/47714356>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.layout.xScale): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph.prototype.layout.insertDiscontinuity):
        (WI.MemoryTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.layout.xScale):
        (WI.MemoryTimelineView.prototype.layout.yScale):
        (WI.MemoryTimelineView.prototype.layout):
        Handle if multiple discontinuities exist between records.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline time range selection should show duration alongside start and end
        https://bugs.webkit.org/show_bug.cgi?id=194109
        <rdar://problem/47714279>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._updateTimeRangePathComponents):
        Include the duration when not obvious.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve API and documentation of ColumnChart
        https://bugs.webkit.org/show_bug.cgi?id=193982

        Reviewed by Devin Rousso.

        This used to be named "BarChart". Convert remaining instances
        of "bar" to "column" and clean up related things.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (body[dir=rtl] .timeline-overview-graph.cpu > .column-chart):
        (.timeline-overview-graph.cpu > .column-chart > svg > rect):
        (body[dir=rtl] .timeline-overview-graph.cpu > .bar-chart): Deleted.
        (.timeline-overview-graph.cpu > .bar-chart > svg > rect): Deleted.
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/ColumnChart.js:
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.get columns):
        (WI.ColumnChart.prototype.addColumn):
        (WI.ColumnChart.prototype.clear):
        (WI.ColumnChart.prototype.updateLayout):
        (WI.ColumnChart.prototype.get bars): Deleted.
        (WI.ColumnChart.prototype.addBar): Deleted.
        * UserInterface/Views/StackedLineChart.js:
        (WI.StackedLineChart.prototype.get element):
        (WI.StackedLineChart.prototype.get points):

2019-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline time range selection sometimes shows 0.000, should be just 0
        https://bugs.webkit.org/show_bug.cgi?id=194108
        <rdar://problem/47714273>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        Check under epsilon for the zero case.

2019-01-31  Matt Baker  <mattbaker@apple.com>

        REGRESSION(r?): Web Inspector: Clicking on text doesn't move text caret when editing innerHTML/tagName/attribute
        https://bugs.webkit.org/show_bug.cgi?id=192652
        <rdar://problem/46684612>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.canSelectOnMouseDown):
        Call to Event.preventDefault() should be made here instead of at the
        TreeOutline level.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.selectOnMouseDown): Deleted.
        Remove dead code.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline._handleMouseDown):
        Do not prevent default event handling when the item cannot be selected.
        This matches TreeOutline behavior prior to introducing SelectionController.

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

        Web Inspector: Memory Timeline View should be responsive / resizable
        https://bugs.webkit.org/show_bug.cgi?id=153758
        <rdar://problem/24444320>

        Reviewed by Joseph Pecoraro.

        Leverage the SVG `viewBox` (which was misspelled) to scale the graphs when the width of the
        container changes. The `viewBox` used is equal to the total amount of time that is visible.

        Make `WI.LineChart` (and its container classes) into subclasses of `WI.View` to leverage the
        existing layout system.

        Prevent any work from being done when resizing, as this is now handled by CSS/SVG.

        * UserInterface/Views/LineChart.js:
        (WI.LineChart):
        (WI.LineChart.prototype.set size):
        (WI.LineChart.prototype.addPoint):
        (WI.LineChart.prototype.clear):
        (WI.LineChart.prototype.layout):
        (WI.LineChart.prototype.get element): Deleted.
        (WI.LineChart.prototype.get points): Deleted.
        (WI.LineChart.prototype.needsLayout): Deleted.
        (WI.LineChart.prototype.updateLayout): Deleted.

        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.updateChart): Added.
        (WI.CPUUsageView.prototype.get element): Deleted.
        (WI.CPUUsageView.prototype.layoutWithDataPoints): Deleted.
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (.cpu-usage-view > .graph, .cpu-usage-view > .graph > .line-chart, .cpu-usage-view > .graph > .line-chart > svg): Added.
        (.cpu-usage-view > .graph): Deleted.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.layoutView.xScale):
        (WI.CPUTimelineView.prototype.layout.layoutView.yScale):
        * UserInterface/Views/CPUTimelineView.css:
        (body .timeline-view.cpu): Added.
        (.timeline-view.cpu > .content):
        (.timeline-view.cpu): Deleted.

        * UserInterface/Views/MemoryCategoryView.js:
        (WI.MemoryCategoryView):
        (WI.MemoryCategoryView.prototype.clear):
        (WI.MemoryCategoryView.prototype.updateChart): Added.
        (WI.MemoryCategoryView.prototype.get element): Deleted.
        (WI.MemoryCategoryView.prototype.layoutWithDataPoints): Deleted.
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view):
        (.memory-category-view > .details):
        (.memory-category-view > .graph, .memory-category-view > .graph > .line-chart, .memory-category-view > .graph > .line-chart > svg): Added.
        (.memory-category-view > .graph): Deleted.

        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.layout):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView.xScale):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView.yScale):
        (WI.MemoryTimelineView.prototype._initializeCategoryViews):
        (WI.MemoryTimelineView.prototype._initializeCategoryViews.appendLegendRow):
        * UserInterface/Views/MemoryTimelineView.css:
        (.timeline-view.memory > .content > .overview):
        (.timeline-view.memory > .content > .overview > .divider):
        (.timeline-view.memory > .content > .overview .total-usage, .timeline-view.memory > .content > .overview .max-percentage, .timeline-view.memory > .content > .overview .legend .size): Added.
        (.timeline-view.memory .legend):
        (.timeline-view.memory .legend .row): Added.
        (.timeline-view.memory .legend .row + .row): Added.
        (.timeline-view.memory .legend .swatch): Addd.
        (.timeline-view.memory .legend .swatch.javascript): Addd.
        (.timeline-view.memory .legend .swatch.images): Addd.
        (.timeline-view.memory .legend .swatch.layers): Addd.
        (.timeline-view.memory .legend .swatch.page): Addd.
        (.timeline-view.memory .legend .swatch.current): Addd.
        (.timeline-view.memory > .content): Deleted.
        (.timeline-view.memory > .content > .overview .total-usage, .timeline-view.memory > .content > .overview .max-percentage):
        (body[dir=ltr] .timeline-view.memory .legend): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend): Deleted.
        (.timeline-view.memory .legend > .row): Deleted.
        (.timeline-view.memory .legend > .row > .swatch): Deleted.
        (body[dir=ltr] .timeline-view.memory .legend > .row > .swatch): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend > .row > .swatch): Deleted.
        (.timeline-view.memory .legend > .row > p): Deleted.
        (body[dir=ltr] .timeline-view.memory .legend > .row > :matches(.label, .size)): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend > .row > :matches(.label, .size)): Deleted.
        (.timeline-view.memory .legend > .row > .label): Deleted.
        (.timeline-view.memory .legend > .row > .size): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.javascript): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.images): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.layers): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.page): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.current): Deleted.

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

        Web Inspector: Changes: group CSS rules by resource
        https://bugs.webkit.org/show_bug.cgi?id=193940
        <rdar://problem/47617785>

        Reviewed by Matt Baker.

        Create resource sections with source links in their headers.

        Also:
        - Use read-only WI.SpreadsheetStyleProperty to display inline swatches for colors;
        - Make the red and green background span the entire width of the panel.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ChangesDetailsSidebarPanel.css:
        (.sidebar > .panel.changes-panel):
        (.sidebar > .panel.changes-panel .css-rule):
        (.sidebar > .panel.selected.changes-panel.empty):
        (.changes-panel .resource-section):
        (.changes-panel .resource-section > .header):
        (.changes-panel .resource-section > .header > a:hover):
        (.sidebar > .panel.changes-panel .selector-line,):
        (.changes-panel .css-property-line > .property):
        (.changes-panel .css-property-line.unchanged):
        (.changes-panel .css-property-line.added):
        (.changes-panel .css-property-line.removed):
        (.changes-panel .css-property-line.removed::before):
        (.changes-panel .css-property-line.added::before):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        (WI.ChangesDetailsSidebarPanel.prototype._createRuleElement):
        (WI.ChangesDetailsSidebarPanel.prototype._createLocationLink):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        Allow passing `null` as a delegate.

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

        Web Inspector: change style of device settings override popover content
        https://bugs.webkit.org/show_bug.cgi?id=194049

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.showUserAgentInput):
        (WI._handleDeviceSettingsToolbarButtonClicked.createContainer): Deleted.
        * UserInterface/Views/Main.css:
        (.device-settings-content):
        (.device-settings-content > tr > td:first-child): Added.
        (.device-settings-content .container):
        (.device-settings-content .container > * + *): Added.
        (.device-settings-content .column): Added.
        (.device-settings-content .user-agent select): Added.
        (.device-settings-content .user-agent input): Added.
        (.device-settings-content label + label): Added.
        (.device-settings-content label > input): Added.
        (.device-settings-content .columns): Deleted.
        (.device-settings-content .columns > .column): Deleted.
        (.device-settings-content .columns > .column + .column): Deleted.
        (.device-settings-content .user-agent-value): Deleted.
        (.device-settings-content .user-agent-value > select): Deleted.
        (.device-settings-content .user-agent-value > input): Deleted.
        (body[dir=ltr] .device-settings-content .user-agent-value > input): Deleted.
        (body[dir=rtl] .device-settings-content .user-agent-value > input): Deleted.

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

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'url.startsWith')
        https://bugs.webkit.org/show_bug.cgi?id=194029

        Reviewed by Matt Baker.

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

2019-01-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Enabled Changes panel in Elements tab by default
        https://bugs.webkit.org/show_bug.cgi?id=193986
        <rdar://problem/47647683>

        Reviewed by Matt Baker.

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

2019-01-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: enable computed style cascades by default
        https://bugs.webkit.org/show_bug.cgi?id=193983
        <rdar://problem/47645821>

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.computed-style-properties):
        (.computed-style-properties .property .go-to-arrow):
        (.details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        (.details-section.computed-style-properties > .content):
        (@media (prefers-color-scheme: dark)):
        (.computed-with-traces .computed-style-properties): Deleted.
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)): Deleted.
        (.computed-with-traces .details-section.computed-style-properties > .content): Deleted.
        (.computed-with-traces .computed-style-properties .property .go-to-arrow): Deleted.
        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2019-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unnecessary promise rejection handlers now that we use the global onunhandledrejection handler
        https://bugs.webkit.org/show_bug.cgi?id=193921

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._exportHAR):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.updateFormattedState):

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

        Web Inspector: provide a way to edit page WebRTC settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193863
        <rdar://problem/47572764>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeTarget):
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.createCheckbox):
        (WI._handleDeviceSettingsToolbarButtonClicked.createColumns): Deleted.
        * UserInterface/Views/Main.css:
        (.device-settings-content .container): Added.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab should toggle visibility for all selected nodes
        https://bugs.webkit.org/show_bug.cgi?id=193089
        <rdar://problem/47009256>

        Reviewed by Devin Rousso.

        Update "Toggle Visibility" command in DOM tree for multiple selection.
        When both visible and hidden elements are selected in the DOM tree,
        the toggle command behaves contextually. If one or more elements are
        visible, they are hidden, otherwise they are shown. The context menu
        shows "Hide Elements" or "Show Elements", respectively.

        When only one element is selected, or the context menu target element
        is not selected, the command continues to be "Toggle Visibility".

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.get isNodeHidden): Added.
        (WI.DOMTreeElement.prototype.toggleElementVisibility.inspectedPage_node_injectStyleAndToggleClass):
        (WI.DOMTreeElement.prototype.toggleElementVisibility):
        (WI.DOMTreeElement.prototype._populateTagContextMenu):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.toggleSelectedElementsVisibility):  Added.
        Provide a public method for toggling the visibility of selected DOM nodes.
        Used by the "H" keyboard shortcut and DOMTreeElement context menu.

        (WI.DOMTreeOutline.prototype._hideElements):
        (WI.DOMTreeOutline.prototype._hideElement): Deleted.
        Rename for multiple selection.

2019-01-28  Commit Queue  <commit-queue@webkit.org>

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

        Causes overlapping Timeline records, as some record types
        don't have an endTime (Requested by drousso on #webkit).

        Reverted changeset:

        "WebInspector: Confusingly nested events in the timeline for
        Mutation Observers"
        https://bugs.webkit.org/show_bug.cgi?id=192884
        https://trac.webkit.org/changeset/240351

2019-01-28  Matt Baker  <mattbaker@apple.com>

        REGRESSION(?): Web Inspector: Can have multiple Timelines selected after edit mode
        https://bugs.webkit.org/show_bug.cgi?id=193808
        <rdar://problem/47537734>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didRemoveItems):

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._indexesForSubtree):
        Fix a bug where no IndexSet was returned when passed a TreeElement with
        no children. This caused the Timelines tree selection to be corrupted when
        entering and exiting edit mode, as TreeElements are inserted and removed.

2019-01-28  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add Changes panel to Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=193803

        Reviewed by Devin Rousso.

        Introduce the new experimental Changes Panel. It shows a list of CSS changes
        made via Web Inspector, so the changes could be copied to the source files.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Base/Utilities.js:
        (Array.diffArrays): Added.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.get modifiedCSSRules):
        (WI.CSSManager.prototype.addModifiedCSSRule):
        (WI.CSSManager.prototype.removeModifiedCSSRule):
        (WI.CSSManager.prototype._mainResourceDidChange):

        * UserInterface/Main.html:
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty):
        (WI.CSSProperty.prototype.remove):
        (WI.CSSProperty.prototype.replaceWithText):
        (WI.CSSProperty.prototype.commentOut):
        (WI.CSSProperty.prototype.set text):
        (WI.CSSProperty.prototype.get modified):
        (WI.CSSProperty.prototype.set name):
        (WI.CSSProperty.prototype.set rawValue):
        (WI.CSSProperty.prototype.get initialState):
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        (WI.CSSProperty.prototype._markModified):
        Mark CSSProperty modified *before* making any changes to copy its initial state.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule):
        (WI.CSSRule.prototype.get id):
        (WI.CSSRule.prototype.get initialState):
        (WI.CSSRule.prototype.get stringId):
        (WI.CSSRule.prototype.markModified):

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get initialState):
        (WI.CSSStyleDeclaration.prototype.get enabledProperties):
        (WI.CSSStyleDeclaration.prototype.get properties):
        (WI.CSSStyleDeclaration.prototype.set properties):
        (WI.CSSStyleDeclaration.prototype.propertyForName):
        (WI.CSSStyleDeclaration.prototype.newBlankProperty):
        (WI.CSSStyleDeclaration.prototype.markModified):

        * UserInterface/Views/ChangesDetailsSidebarPanel.css: Added.
        (.sidebar > .panel.changes-panel):
        (.sidebar > .panel.changes-panel:not(.empty)):
        (.sidebar > .panel.changes-panel.empty):
        (.changes-panel ins):
        (.changes-panel del):
        (.changes-panel del.css-property::before):
        (.changes-panel ins.css-property::before):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/ChangesDetailsSidebarPanel.js: Added.
        (WI.ChangesDetailsSidebarPanel):
        (WI.ChangesDetailsSidebarPanel.prototype.inspect):
        (WI.ChangesDetailsSidebarPanel.prototype.supportsDOMNode):
        (WI.ChangesDetailsSidebarPanel.prototype.shown):
        (WI.ChangesDetailsSidebarPanel.prototype.detached):
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        (WI.ChangesDetailsSidebarPanel.prototype._mainResourceDidChange):

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

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

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property):
        (.spreadsheet-style-declaration-editor .property.modified):
        (.spreadsheet-style-declaration-editor .property.modified:not(.selected)):
        (@media (prefers-color-scheme: dark)):

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

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

        Web Inspector: handle CSS Color 4 color syntaxes
        https://bugs.webkit.org/show_bug.cgi?id=193166
        <rdar://problem/47062403>

        Reviewed by Simon Fraser.

        * UserInterface/Models/Color.js:
        (WI.Color.fromString):
        (WI.Color.fromString.splitFunctionString): Added.
        (WI.Color.fromString.parseFunctionAlpha): Added.
        (WI.Color.fromString.parseFunctionComponent): Added.
        (WI.Color.fromString.parseHueComponent): Added.
        (WI.Color.fromString.parsePercentageComponent): Added.

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

        Web Inspector: provide a way to edit the user agent of a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193862
        <rdar://problem/47359292>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        (WI.initializeTarget):
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.updateActivatedState):
        (WI._handleDeviceSettingsToolbarButtonClicked.applyOverriddenUserAgent):
        (WI._handleDeviceSettingsToolbarButtonClicked.applyOverriddenSetting):
        (WI._handleDeviceSettingsToolbarButtonClicked.createContainer):
        (WI._handleDeviceSettingsToolbarButtonClicked.createColumns):
        (WI._handleDeviceSettingsToolbarButtonClicked.calculateTargetFrame):
        (WI._handleDeviceSettingsToolbarButtonClicked.showUserAgentInput):

        * UserInterface/Views/Main.css:
        (.device-settings-content):
        (.device-settings-content .user-agent-value): Added.
        (.device-settings-content .user-agent-value > select): Added.
        (.device-settings-content .user-agent-value > input): Added.
        (body[dir=ltr] .device-settings-content .user-agent-value > input): Added.
        (body[dir=rtl] .device-settings-content .user-agent-value > input): Added.
        (.device-settings-content label > input): Added.
        (body[dir=ltr] .device-settings-content label > input): Deleted.
        (body[dir=rtl] .device-settings-content label > input): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: provide a way to edit page settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193813
        <rdar://problem/47359510>

        Reviewed by Joseph Pecoraro.

        Add toolbar button that shows a popover with the target's (page's) settings when clicked.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        (WI.initializeTarget): Added.
        (WI._handleDeviceSettingsToolbarButtonClicked): Added.
        (WI.didDismissPopover): Added.
        * UserInterface/Views/Main.css:
        (.device-settings-content): Added.
        (.device-settings-content .columns): Added.
        (.device-settings-content .columns > .column): Added.
        (.device-settings-content .columns > .column + .column): Added.
        (body[dir=ltr] .device-settings-content label > input): Added.
        (body[dir=rtl] .device-settings-content label > input): Added.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._update.area):
        (WI.Popover.prototype._update):
        (WI.Popover.prototype._drawBackground):
        (WI.Popover.prototype._bestMetricsForEdge):
        (WI.Popover.prototype._drawFrame):
        If the best area is negative, treat it as the worst area.
        Allow areas to be clamped so long as the clamped edge is not the preferred edge.

        * UserInterface/Base/Test.js:
        (WI.initializeTarget): Added.

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

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

        Web Inspector: Audit: unable to import audits
        https://bugs.webkit.org/show_bug.cgi?id=193861

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async processJSON):

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

        Web Inspector: Uncaught Exception: No node with given id found
        https://bugs.webkit.org/show_bug.cgi?id=193833

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype.layout):
        (WI.CanvasContentView.prototype._refreshPixelSize):
        Drive-by: show the refresh button when viewing a specific canvas.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._removeCanvas):
        Reset to the overview if the canvas is removed.

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

        Web Inspector: Improve Dark Mode appearance within Memory timeline
        https://bugs.webkit.org/show_bug.cgi?id=193804

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineOverview.css:
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item.selected):
        (.timeline-overview > .tree-outline.timelines .item.selected + .item,):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
        (body.window-inactive .timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
        Fix some colors for Timelines edit mode.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview-graph.memory > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend): Deleted.
        Improved colors in CPU / Memory overview graph legends.

        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view > .details):
        * UserInterface/Views/CircleChart.css:
        (.circle-chart > svg > path.background):
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (.memory-category-view > .details > .name):
        * UserInterface/Views/MemoryTimelineView.css:
        (.timeline-view.memory > .content > .overview .total-usage,):
        (.timeline-view.memory .legend > .row > .size):
        Improved colors in CPU / Memory detail views.

        * UserInterface/Views/Variables.css:
        (:root):
        Add a default --text-secondary-color which will end up slightly
        lighter in dark mode where it was already implemented.

        (@media (prefers-color-scheme: dark)):
        Improved max-comparison colors.

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

        Web Inspector: Timelines: DOMContentLoaded and load event lines need to be more obvious
        https://bugs.webkit.org/show_bug.cgi?id=193186
        <rdar://problem/45100694>

        Reviewed by Joseph Pecoraro.

        Shift around z-index values to make Timelines markers appear behind record bars. Widen the
        marker hit region to make it easier to see the tooltip.

        * UserInterface/Views/Variables.css:
        (:root):

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler):
        (.timeline-ruler > .markers):
        (.timeline-ruler > .markers > .marker):
        (body[dir=ltr] .timeline-ruler > .markers > .marker):
        (body[dir=rtl] .timeline-ruler > .markers > .marker):
        (.timeline-ruler > .markers > .marker::before):
        (body[dir=ltr] .timeline-ruler > .markers > .marker::before):
        (body[dir=rtl] .timeline-ruler > .markers > .marker::before):
        (.timeline-ruler > .markers > .marker::after): Added.
        (body[dir=ltr] .timeline-ruler > .markers > .marker::after): Added.
        (body[dir=rtl] .timeline-ruler > .markers > .marker::after): Added.
        (.timeline-ruler > .markers > .marker.current-time):
        (.timeline-ruler > .markers > .marker.current-time::after): Added.
        (.timeline-ruler > .markers > .marker.load-event):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        (.timeline-ruler > .markers > .marker.timestamp):
        (.timeline-ruler > .selection-handle):
        (.timeline-ruler.both-handles-clamped > .selection-handle):
        (.timeline-ruler > .shaded-area):
        (.timeline-ruler > .markers > .marker.current-time::before): Deleted.

        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar):
        (.timeline-record-bar > .segment):

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .legend):
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory > .legend):

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

        Web Inspector: Audit: remove experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=193743
        <rdar://problem/28234022>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Setting.js:
        (WI.Setting):
        (WI.Setting.localStorageKey): Added.
        (WI.Setting.migrateValue):
        Drive-by: add the localStorage key prefix to the key passed into `WI.Setting.migrateValue`.

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

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView.isTabAllowed):

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

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: show uncaught exception view for unhandled promise rejections
        https://bugs.webkit.org/show_bug.cgi?id=193832

        Reviewed by Matt Baker.

        * UserInterface/Debug/UncaughtExceptionReporter.js:
        (handleUnhandledPromiseRejection): Added.

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

        Web Inspector: REGRESSION (r237808): offscreen path warning doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=193830

        Reviewed by Matt Baker.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

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

        Web Inspector: Add another Protocol Version (iOS 12.2)
        https://bugs.webkit.org/show_bug.cgi?id=193810
        <rdar://problem/42981838>

        Reviewed by Matt Baker.

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

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

        Web Inspector: `WI.Setting.migrateValue` doesn't take into account the key prefix
        https://bugs.webkit.org/show_bug.cgi?id=193814

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        (WI.Setting):
        (WI.Setting.migrateValue):
        (WI.Setting._localStorageKey): Added.

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

        Web Inspector: improve invalid Audit/Recording JSON error messages
        https://bugs.webkit.org/show_bug.cgi?id=193476
        <rdar://problem/47303659>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload):
        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup.async fromPayload):
        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload.checkArray):
        (WI.AuditTestCaseResult.async fromPayload):
        * UserInterface/Models/AuditTestGroupResult.js:
        (WI.AuditTestGroupResult.async fromPayload):
        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.synthesizeWarning): Added.
        (WI.AuditManager.synthesizeError):
        (WI.AuditManager.prototype.async processJSON):

        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        (WI.Recording.synthesizeWarning): Added.
        (WI.Recording.synthesizeError):
        * UserInterface/Models/RecordingFrame.js:
        (WI.RecordingFrame.fromPayload):
        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.fromPayload):
        (WI.RecordingAction.prototype.async swizzle):
        (WI.RecordingAction.prototype.apply):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.processJSON):

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Audit: add supports key to test/group for compatibility
        https://bugs.webkit.org/show_bug.cgi?id=193686
        <rdar://problem/47460872>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        (WI.AuditTestBase.prototype.get supported): Added.
        (WI.AuditTestBase.prototype.set supported): Added.
        (WI.AuditTestBase.prototype.set disabled):
        (WI.AuditTestBase.prototype.async start):
        (WI.AuditTestBase.prototype.stop):
        (WI.AuditTestBase.toJSON):
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload):
        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.async fromPayload):
        (WI.AuditTestGroup.prototype.get supported): Added.
        (WI.AuditTestGroup.prototype.set supported): Added.
        Add support for a "supports" key in the test JSON that prevents the test from being run if
        it's value is lower than the frontend/backend version.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondelete):
        (WI.AuditTreeElement.prototype.populateContextMenu):
        (WI.AuditTreeElement.prototype._updateStatus): Added.
        (WI.AuditTreeElement.prototype._showRunningSpinner):
        (WI.AuditTreeElement.prototype._showRunningProgress):
        (WI.AuditTreeElement.prototype._updateTestGroupDisabled):
        (WI.AuditTreeElement.prototype._handleTestCaseCompleted):
        (WI.AuditTreeElement.prototype._handleTestResultCleared):
        (WI.AuditTreeElement.prototype._handleTestGroupCompleted):
        (WI.AuditTreeElement.prototype._handleManagerEditingChanged):
        (WI.AuditTreeElement.prototype.canSelectOnMouseDown): Deleted.
        (WI.AuditTreeElement.prototype._updateLevel): Deleted.
        * UserInterface/Views/AuditTreeElement.css:
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.unsupported, .manager-active) > .status:hover > img): Added.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.unsupported, .editing-audits) > .status:not(:hover)): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status, .tree-outline .item.audit.unsupported + .children .item.audit.unsupported  > .status > img): Added.
        (.tree-outline .item.audit.unsupported:not(.selected) > :matches(.icon, .titles)): Added.
        (.tree-outline .item.audit.unsupported > .status > img): Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.manager-active) > .status:hover > img): Deleted.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:not(:hover)): Deleted.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.
        Hide unsupported tests unless in edit mode, where they are greyed out and cannot be enabled.
        Drive-by: only allow tests to be deleted when in edit mode.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):

        * Localizations/en.lproj/localizedStrings.js:

2019-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline
        https://bugs.webkit.org/show_bug.cgi?id=193730
        <rdar://problem/46797201>

        Reviewed by Devin Rousso.

        CPU Usage is gathered in the backend twice a second, the frequency of the
        ResourceUsageThread in WebCore. The frontend displays cpu usage in a few
        ways in the Timeline.

        We use a column chart in the timeline overview to display the frequency and
        relative distance of samples. This helps show if the samples were close
        together or far apart, which indicates how meaningful they will be at a
        particular scale.

        We use a line chart in the timeline detail view which will be easier to see
        the changes over a particular time range selection.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        * UserInterface/Protocol/CPUProfilerObserver.js:
        (WI.CPUProfilerObserver.prototype.trackingStart):
        (WI.CPUProfilerObserver.prototype.trackingUpdate):
        (WI.CPUProfilerObserver.prototype.trackingComplete):
        (WI.CPUProfilerObserver):
        New files and default registration.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get CPUProfilerAgent):
        New Agent.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.availableTimelineTypes):
        (WI.TimelineManager.prototype.cpuProfilerTrackingStarted):
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager.prototype.memoryTrackingStart): Renamed.
        (WI.TimelineManager.prototype.memoryTrackingUpdate): Renamed.
        (WI.TimelineManager.prototype.memoryTrackingComplete): Renamed.
        * UserInterface/Models/CPUInstrument.js:
        (WI.CPUInstrument):
        (WI.CPUInstrument.supported):
        (WI.CPUInstrument.prototype.get timelineRecordType):
        (WI.CPUInstrument.prototype.startInstrumentation):
        (WI.CPUInstrument.prototype.stopInstrumentation):
        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord):
        (WI.CPUTimelineRecord.prototype.get timestamp):
        (WI.CPUTimelineRecord.prototype.get usage):
        * UserInterface/Models/Instrument.js:
        (WI.Instrument.createForTimelineType):
        * UserInterface/Models/TimelineRecord.js:
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.addRecord):
        Expose a new CPU instrument and timeline.

        * UserInterface/Views/ColumnChart.js: Added.
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.get element):
        (WI.ColumnChart.prototype.get bars):
        (WI.ColumnChart.prototype.get size):
        (WI.ColumnChart.prototype.set size):
        (WI.ColumnChart.prototype.addBar):
        (WI.ColumnChart.prototype.clear):
        (WI.ColumnChart.prototype.needsLayout):
        (WI.ColumnChart.prototype.updateLayout):
        View that will draw vertical bars with independent widths.
        This is meant to be used similiar to WI.LineChart.

        * UserInterface/Images/CPUInstrument.svg: Added.
        * UserInterface/Views/Variables.css:
        (:root):
        CPU timeline colors and icon.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (body .sidebar > .panel.navigation.timeline > .timelines-content li.item.cpu,):
        (.timeline-overview-graph.cpu):
        (.timeline-overview-graph.cpu > .legend):
        (body[dir=ltr] .timeline-overview-graph.cpu > .legend):
        (body[dir=rtl] .timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend):
        (body[dir=rtl] .timeline-overview-graph.cpu > .bar-chart):
        (.timeline-overview-graph.cpu > .bar-chart > svg > g > rect):
        * UserInterface/Views/CPUTimelineOverviewGraph.js: Added.
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.get height):
        (WI.CPUTimelineOverviewGraph.prototype.reset):
        (WI.CPUTimelineOverviewGraph.prototype.layout.xScale):
        (WI.CPUTimelineOverviewGraph.prototype.layout.yScale):
        (WI.CPUTimelineOverviewGraph.prototype.layout.yScaleForRecord):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        (WI.CPUTimelineOverviewGraph.prototype._updateLegend):
        (WI.CPUTimelineOverviewGraph.prototype._cpuTimelineRecordAdded):
        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu):
        (.timeline-view.cpu > .content):
        (.timeline-view.cpu > .content .subtitle):
        (.timeline-view.cpu > .content > .details):
        (.timeline-view.cpu > .content > .details > .timeline-ruler):
        (body[dir=ltr] .timeline-view.cpu > .content > .details > .timeline-ruler):
        (body[dir=rtl] .timeline-view.cpu > .content > .details > .timeline-ruler):
        (.timeline-view.cpu > .content > .details > .subtitle):
        (.cpu-usage-view .line-chart > svg > path):
        (.timeline-view.cpu .legend > .row > .swatch.current):
        * UserInterface/Views/CPUTimelineView.js: Added.
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.shown):
        (WI.CPUTimelineView.prototype.hidden):
        (WI.CPUTimelineView.prototype.closed):
        (WI.CPUTimelineView.prototype.reset):
        (WI.CPUTimelineView.prototype.get scrollableElements):
        (WI.CPUTimelineView.prototype.get showsFilterBar):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.xScale):
        (WI.CPUTimelineView.prototype.layout.yScale):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._cpuTimelineRecordAdded):
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (body[dir=ltr] .cpu-usage-view > .details):
        (body[dir=rtl] .cpu-usage-view > .details):
        (.cpu-usage-view > .graph):
        (body[dir=rtl] .cpu-usage-view > .graph):
        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.get element):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.layoutWithDataPoints):
        (WI.CPUUsageView.prototype._updateDetails):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        * UserInterface/Views/TimelineIcons.css:
        (.cpu-icon .icon):
        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.createForTimeline):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForTimelineType):
        (WI.TimelineTabContentView.genericClassNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForRecord):
        (WI.TimelineTabContentView.displayNameForRecord):
        Timeline views for CPU usage.

        * UserInterface/Views/MemoryCategoryView.js:
        (WI.MemoryCategoryView):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.createChartContainer):
        (WI.MemoryTimelineView):
        (WI.MemoryTimelineView.prototype._clearMaxComparisonLegend):
        Minor updates to style and comments.

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

        Web Inspector: Refactor WI.CSSStyleDeclaration.prototype.update
        https://bugs.webkit.org/show_bug.cgi?id=193737

        Reviewed by Matt Baker.

        Remove unused event data from the WI.CSSStyleDeclaration.Event.PropertiesChanged event.

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

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

        WebInspector: Confusingly nested events in the timeline for Mutation Observers
        https://bugs.webkit.org/show_bug.cgi?id=192884
        <rdar://problem/46854178>

        Reviewed by Joseph Pecoraro.

        If a microtask event (e.g. `ObserverCallback`) is contained within a `EvaluatedScript`
        event, move that microtask event to be a sibling of the `EvaluateScript`, subtracting the
        microtask's time taken from the `EvaluateScript`'s time. If there are no other children
        after this move, then remove the `EvaluateScript` altogether.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.eventRecorded.fixMicrotaskPlacement): Added.
        (WI.TimelineManager.prototype.eventRecorded):
        (WI.TimelineManager.prototype._mergeScriptProfileRecords):

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

        Web Inspector: Network Waterfall column should redraw when adding/removing new columns
        https://bugs.webkit.org/show_bug.cgi?id=193696
        <rdar://problem/47464149>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TableColumn.js:
        (WI.TableColumn.prototype.get needsReloadOnResize):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.initialLayout):
        Mark the waterfall column as sensitive to any resizes.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.showColumn):
        (WI.Table.prototype.hideColumn):
        Update column widths and reload any columns that may be sensitive to resizes.

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

        Web Inspector: InspectorInstrumentation::willEvaluateScript should include column number
        https://bugs.webkit.org/show_bug.cgi?id=116191
        <rdar://problem/13905910>

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: expose Audit and Recording versions to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=193262
        <rdar://problem/47130684>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.registerVersion): Added.

        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        Add Interface version values.

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

        Web Inspector: Styles: refactor properties/allProperties/visibleProperties/allVisibleProperties
        https://bugs.webkit.org/show_bug.cgi?id=193615

        Reviewed by Devin Rousso.

        Remove unused visibleProperties.

        Rename:
        - properties to enabledProperties;
        - allProperties to properties;
        - allVisibleProperties to visibleProperties.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._prependSemicolonIfNeeded):
        (WI.CSSProperty):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get enabledProperties):
        (WI.CSSStyleDeclaration.prototype.get properties):
        (WI.CSSStyleDeclaration.prototype.propertyForName):
        (WI.CSSStyleDeclaration.prototype.newBlankProperty):
        (WI.CSSStyleDeclaration.prototype.shiftPropertiesAfter):
        (WI.CSSStyleDeclaration.prototype._rangeAfterPropertyAtIndex):
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):
        (WI.DOMNodeStyles.prototype._markOverriddenProperties):
        (WI.DOMNodeStyles.prototype._associateRelatedProperties):
        (WI.DOMNodeStyles.prototype._isPropertyFoundInMatchingRules):
        (WI.DOMNodeStyles):
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics):
        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype._computePropertyTraces):
        * UserInterface/Views/ComputedStyleSection.js:
        (WI.ComputedStyleSection.prototype.get propertiesToRender):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get propertiesToRender):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):

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

        Web Inspector: Network Table appears broken after filter - rows look collapsed
        https://bugs.webkit.org/show_bug.cgi?id=192730
        <rdar://problem/46853158>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._applyColumnWidthsToColumnsIfNeeded):
        Affect the filler row like the other applyColumnWidths calls since this
        now may be the initial call to size visible columns.

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

        Web Inspector: Audit: use plural strings for Passed, Failed, and Unsupported
        https://bugs.webkit.org/show_bug.cgi?id=193675
        <rdar://problem/46628680>

        Reviewed by Joseph Pecoraro.

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

        * Localizations/en.lproj/localizedStrings.js:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

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

        Web Inspector: Uncaught Exception: TypeError: undefined is not an object (evaluating 'resource.finished')
        https://bugs.webkit.org/show_bug.cgi?id=193589

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.get supportsSave):
        (WI.NetworkTableContentView.prototype._HARResources):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Fix TreeOutline TypeError:​ this._indexesForSubtree is not a function
        https://bugs.webkit.org/show_bug.cgi?id=193501
        <rdar://problem/47323967>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.removeChildAtIndex):

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

        Web Inspector: Audit: create new IDL type for exposing special functionality in test context
        https://bugs.webkit.org/show_bug.cgi?id=193149
        <rdar://problem/46801218>

        Reviewed by Joseph Pecoraro.

        Add `AuditAgent` getters and plumbing.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get AuditAgent): Added.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async start):

        * .eslintrc:

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

        Web Inspector: Event breakpoints: typing uppercase "DOM" doesn't show completions for events that start with "DOM"
        https://bugs.webkit.org/show_bug.cgi?id=193384

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover.prototype.show):

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

        Web Inspector: Event breakpoints: text field and completion popover fonts should match
        https://bugs.webkit.org/show_bug.cgi?id=193249

        Reviewed by Matt Baker.

        * UserInterface/Views/EventBreakpointPopover.css:
        (.popover .event-breakpoint-content > .event-type > input): Added.
        (.popover .event-breakpoint-content > .event-type > input::placeholder): Added.
        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype._showSuggestionsView):
        Subtract the <input> border and padding from the bounds position so the <input> text lines
        up with the `WI.CompletionSuggestionsView` text.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView):
        Drive-by: force `dir=ltr` to match the `text-align: left;` CSS styling.

2019-01-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: pressing Down key on empty value field shouldn't discard completion popover
        https://bugs.webkit.org/show_bug.cgi?id=193098
        <rdar://problem/47016036>

        Reviewed by Devin Rousso.

        Hide CompletionSuggestionsView when SpreadsheetTextField moves, e.g. by scrolling or resizing the sidebar.
        Update CompletionSuggestionsView position after pressing Up or Down key, because SpreadsheetTextField may
        move from wrapping text.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.hide):
        (WI.CompletionSuggestionsView.prototype.show):
        (WI.CompletionSuggestionsView.prototype.showUntilAnchorMoves): Removed.
        (WI.CompletionSuggestionsView.prototype.hideWhenElementMoves): Added.
        (WI.CompletionSuggestionsView.prototype._stopMoveTimer): Added.
        (WI.CompletionSuggestionsView):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype.set suggestionHint):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsSelectedCompletion):
        (WI.SpreadsheetTextField.prototype._handleKeyDownForSuggestionView):
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._showSuggestionsView): Added.

        (WI.SpreadsheetTextField.prototype._reAttachSuggestionHint):
        Drive-by: abstract out repeating code into a private method.

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

        Web Inspector: Settings: group titles should vertically align with the first editor
        https://bugs.webkit.org/show_bug.cgi?id=193391

        Reviewed by Dean Jackson.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor): Added.
        (.content-view.settings > .settings-view > .container > .editor-group > .editor:first-child > *): Added.
        (.content-view.settings > .settings-view > .container > .editor-group > .editor select):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="number"]):

2019-01-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: deleting an audit puts selection in a selected but invisible state
        https://bugs.webkit.org/show_bug.cgi?id=192917
        <rdar://problem/46875285>

        Reviewed by Devin Rousso.

        SelectionController should not be notified of removed children until the
        child items have been removed from the TreeOutline. Doing so at this stage
        is unsafe, since this method checks `this.selectedTreeElement`, which could
        return the adjusted index from the SelectionController before anything has
        actually been removed from the TreeOutline.

        The number of calls to SelectionController.prototype.didRemoveItems is also
        reduced somewhat, since we're no longer calling it for every TreeElement.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype.removeChildren):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._indexesForSubtree): Added.        

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

        Web Inspector: Audit: allow audits to be enabled/disabled
        https://bugs.webkit.org/show_bug.cgi?id=192210
        <rdar://problem/46423583>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.get editing): Added.
        (WI.AuditManager.prototype.set editing): Added.
        (WI.AuditManager.prototype.stop):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):
        Since default audits aren't stored, keep a list of disabled default tests in a `WI.Setting`.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        (WI.AuditTestBase.prototype.get disabled): Added.
        (WI.AuditTestBase.prototype.set disabled): Added.
        (WI.AuditTestBase.prototype.async start):
        (WI.AuditTestBase.prototype.stop):
        (WI.AuditTestBase.toJSON):

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase):
        (WI.AuditTestCase.async fromPayload):
        (WI.AuditTestCase.prototype.toJSON):

        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.async fromPayload):
        (WI.AuditTestGroup.prototype.get disabled): Added.
        (WI.AuditTestGroup.prototype.set disabled): Added.
        (WI.AuditTestGroup.prototype.toJSON):
        (WI.AuditTestGroup.prototype.async run):
        (WI.AuditTestGroup.prototype._handleTestDisabledChanged): Added.
        (WI.AuditTestGroup.prototype._handleTestProgress):
        Propagate `disabled` changes to all sub-tests, unless the change was caused by one of the
        sub-tests, in which case we are now in an intermediate state.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype.hasCustomFilters): Added.
        (WI.AuditNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters): Added.
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._updateStartStopButtonNavigationItemState):
        (WI.AuditNavigationSidebarPanel.prototype._updateEditButtonNavigationItemState): Added.
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditManagerEditingChanged): Added.
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestScheduled):
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        (WI.AuditNavigationSidebarPanel.prototype._handleEditButtonNavigationItemClicked): Added.
        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit > .content):
        (.sidebar > .panel.navigation.audit > .content > .tree-outline): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled):active): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled).activated): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled).activated:active): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits.disabled): Added.
        (.finish-editing-audits-placeholder.message-text-view .navigation-item-help .navigation-bar): Added.
        Leverage custom filters to ensure that disabled audits arent shown when not editing and that
        result tree elements aren't shown while editing.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.shown):

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.canSelectOnMouseDown): Added.
        (WI.AuditTreeElement.prototype._updateTestGroupDisabled): Added.
        (WI.AuditTreeElement.prototype._handleTestDisabledChanged): Added.
        (WI.AuditTreeElement.prototype._handleManagerEditingChanged): Added.
        * UserInterface/Views/AuditTreeElement.css:
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:not(:hover)): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Added.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:not(:hover)): Deleted.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.
        Prevent selection and running when editing.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline .children.expanded:not([hidden])): Added.
        (.tree-outline .children.expanded): Deleted.

        * UserInterface/Base/ObjectStore.js:
        (WI.ObjectStore._open):
        Batch operations together to help avoid multiple simultaneous `indexedDB.open` calls. This
        should also help preserve the order of operations, as once the database is open, operations
        are executed in the order they were enqueued.

        (WI.ObjectStore.prototype.async.addObject):
        Pass a unique `Symbol` to the `toJSON` call on the given object so that the object can save
        additional values that wouldn't normally be saved. This doesn't conflict with normal usage
        of `toJSON` (e.g. `JSON.stringify`) because that case also passes in a value:
         - `undefined`, if it was called directly on the object
         - the key for this object in the containing object
         - the index of this object in the containing array
        In any case, the value can never equal the unique `Symbol`, so it's guaranteed that the code
        will only run for `WI.ObjectStore` operations.

        (WI.ObjectStore.prototype.async.clear): Added.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Protocol Logging: log messages as objects if inspector^2 is open
        https://bugs.webkit.org/show_bug.cgi?id=193284

        Reviewed by Joseph Pecoraro.

        If inspector^2 is closed, stringify all messages.
        If inspector^2 is open, log each message JSON object without modifying it.

        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer.prototype._processEntry):

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

        Web Inspector: Styles: clicking on property that soon to be discarded shouldn't start selection
        https://bugs.webkit.org/show_bug.cgi?id=193218
        <rdar://problem/47098303>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        A style property may get removed on blur event, so propertyElement may get removed from the DOM right when mousedown event happens.

        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._stopSelection):

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

        Web Inspector: Styles: Undo reverts all changes at once
        https://bugs.webkit.org/show_bug.cgi?id=177676
        <rdar://problem/34745031>

        Reviewed by Devin Rousso.

        Command-Z used to revert all changes at once because Web Inspector never
        set any history checkpoints in the style editor.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._handleBlur):

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

        Web Inspector: Use prefers-color-scheme instead of prefers-dark-interface
        https://bugs.webkit.org/show_bug.cgi?id=193265

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/AuditTestContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BezierEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BreakpointActionView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BreakpointPopoverController.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ButtonNavigationItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ButtonToolbarItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CallFrameView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CodeMirrorOverrides.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ComputedStyleSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ConsoleMessageView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ConsolePrompt.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DataGrid.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DebuggerDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DetailsSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DividerNavigationItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Editing.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FindBanner.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FontResourceContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FormattedValue.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/HoverMenu.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ImageResourceContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/LogContentView.css:
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/Main.css:
        (:root):

        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NetworkDetailView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NetworkTableContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NewTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ObjectPreviewView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/OpenResourceDialog.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ProgressView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/QuickConsole.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceSecurityContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceSizesContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ScopeBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SearchBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SearchSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SettingsTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ShaderProgramContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ShaderProgramTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TabBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Table.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineDataGrid.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineIcons.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineOverview.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Toolbar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TreeOutline.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/URLBreakpointPopover.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/WebSocketContentView.css:
        (@media (prefers-color-scheme: dark)):

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

        Web Inspector: Audit: run arrow shouldn't be visible when running tests
        https://bugs.webkit.org/show_bug.cgi?id=192209
        <rdar://problem/46423615>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondetach):
        (WI.AuditTreeElement.prototype._updateLevel):
        (WI.AuditTreeElement.prototype._handleAuditManagerTestScheduled): Added.
        (WI.AuditTreeElement.prototype._handleAuditManagerTestCompleted): Added.
        * UserInterface/Views/AuditTreeElement.css: Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.manager-active) > .status:hover > img): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group) > .status:hover > img): Deleted.
        (.tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.

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

        Web Inspector: extend XHR breakpoints to work with fetch
        https://bugs.webkit.org/show_bug.cgi?id=185843
        <rdar://problem/40431027>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.supportsURLBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.get urlBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.urlBreakpointForURL): Added.
        (WI.DOMDebuggerManager.prototype.addURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.removeURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._resolveURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._saveURLBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype._urlBreakpointDisabledStateDidChange): Added.
        (WI.DOMDebuggerManager.prototype.get xhrBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype.xhrBreakpointForURL): Deleted.
        (WI.DOMDebuggerManager.prototype.addXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype.removeXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._updateXHRBreakpoint.breakpointUpdated): Deleted.
        (WI.DOMDebuggerManager.prototype._updateXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._resolveXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._saveXHRBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype._xhrBreakpointDisabledStateDidChange): Deleted.

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

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):

        * UserInterface/Models/URLBreakpoint.js: Renamed from Source/WebInspectorUI/UserInterface/Models/XHRBreakpoint.js.
        * UserInterface/Views/URLBreakpointPopover.css: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointPopover.css.
        * UserInterface/Views/URLBreakpointPopover.js: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointPopover.js.
        * UserInterface/Views/URLBreakpointTreeElement.css: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointTreeElement.css.
        * UserInterface/Views/URLBreakpointTreeElement.js: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointTreeElement.js.

        * UserInterface/Base/Setting.js:
        (WI.Setting.migrateValue): Added.

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

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Network: show secure connection details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191539
        <rdar://problem/45979891>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.get security): Added.
        (WI.Resource.prototype.updateForResponse):
        (WI.Resource.prototype.updateWithMetrics):
        (WI.Resource.prototype.get responseSecurity): Deleted.

        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView):
        (WI.ResourceSecurityContentView.prototype.initialLayout):
        (WI.ResourceSecurityContentView.prototype.layout):
        (WI.ResourceSecurityContentView.prototype._refreshConnectionSection): Added.
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        (WI.ResourceSecurityContentView.prototype._handleResourceMetricsDidChange): Added.
        * UserInterface/Views/ResourceSecurityContentView.css:
        (body[dir] .resource-security > section:matches(.connection, .certificate) > .details): Added.
        (@media (prefers-dark-interface) body[dir] .resource-security > section:matches(.connection, .certificate) > .details): Added.
        (body[dir] .resource-security > section.certificate > .details): Deleted.
        (@media (prefers-dark-interface) body[dir] .resource-security > section.certificate > .details): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: "white" isn't recognized as a color keyword
        https://bugs.webkit.org/show_bug.cgi?id=193173
        <rdar://problem/47068595>

        Reviewed by Joseph Pecoraro.

        Attempt to parse "atom" token types as colors.

        Display color picker only for color-aware properties. For instance,
        display it for "color: white" but not for "-apple-pay-button-style: white".

        * UserInterface/Models/CSSKeywordCompletions.js:
        (addKeywordsForName):
        (WI.CSSKeywordCompletions.forProperty):
        (WI.CSSKeywordCompletions.isColorAwareProperty):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):
        (WI.SpreadsheetStyleProperty.prototype._addColorTokens):

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

        Web Inspector: subclasses of WI.ClusterContentView don't save/restore content views after the initial view
        https://bugs.webkit.org/show_bug.cgi?id=192451
        <rdar://problem/46800958>

        Reviewed by Devin Rousso.

        * UserInterface/Models/BackForwardEntry.js:
        (WI.BackForwardEntry.prototype.prepareToHide):
        * UserInterface/Views/ClusterContentView.js:
        (WI.ClusterContentView.prototype.get shouldSaveStateOnHide):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.prototype.get shouldSaveStateOnHide):
        Allow ClusterContentViews to save its state whenever its hidden,
        this means it can be properly restored to the last state it had
        instead of the initial state it was shown with.

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

        Web Inspector: Audit: disable breakpoints when running Audit
        https://bugs.webkit.org/show_bug.cgi?id=193158
        <rdar://problem/47057083>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype._startDisablingBreakpointsTemporarily):
        (WI.DebuggerManager.prototype._stopDisablingBreakpointsTemporarily):
        (WI.DebuggerManager.prototype._handleAuditManagerTestScheduled): Added.
        (WI.DebuggerManager.prototype._handleAuditManagerTestCompleted): Added.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingWillStart):
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingStopped):
        (WI.DebuggerSidebarPanel.prototype._handleAuditManagerTestScheduled): Added.
        (WI.DebuggerSidebarPanel.prototype._handleAuditManagerTestCompleted): Added.
        (WI.DebuggerSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .warning-banner + .warning-banner): Added.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test/Test.js:
        (WI.loaded):
        Move `WI.auditManager` higher in the managers list so that it can be used in
        `WI.DebuggerManager`'s constructor.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Add a Setting Toggle for Source Maps
        https://bugs.webkit.org/show_bug.cgi?id=193148

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.downloadSourceMap):
        Don't download source maps if the setting is disabled.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Settings toggle for source maps. Enabled by default.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Include `globalThis` in default JavaScript completions
        https://bugs.webkit.org/show_bug.cgi?id=193147

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        Add `globalThis` which is a new global value.

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

        Web Inspector: conic-gradient color picker doesn't accurately show color when saturation value is not 100%
        https://bugs.webkit.org/show_bug.cgi?id=192729
        <rdar://problem/46746815>

        Reviewed by Joseph Pecoraro.

        Rework `WI.ColorWheel` to use similar canvas drawing logic as `WI.LegacyColorWheel` so that
        it's able to adjust the saturation value as the pixels gets closer to the center.

        * UserInterface/Models/Color.js:
        (WI.Color.rgb2hsl): Added.
        (WI.Color.hsl2rgb): Added.
        (WI.Color.cmyk2rgb):
        (WI.Color.prototype.isKeyword):
        (WI.Color.prototype._toRGBString):
        (WI.Color.prototype._toRGBAString):
        (WI.Color.prototype._toHSLString):
        (WI.Color.prototype._toHSLAString):
        (WI.Color.prototype._rgbaToHSLA):
        (WI.Color.prototype._hslaToRGBA):
        (WI.Color.rgb2hsv): Deleted.
        (WI.Color.hsv2rgb): Deleted.
        (WI.Color.prototype._rgbToHSL): Deleted.
        (WI.Color.prototype._hslToRGB): Deleted.
        Adjust the conversion functions of `WI.Color` to be more accurate.

        * UserInterface/Views/ColorWheel.js:
        (WI.ColorWheel):
        (WI.ColorWheel.prototype.set dimension):
        (WI.ColorWheel.prototype.set brightness):
        (WI.ColorWheel.prototype.get tintedColor):
        (WI.ColorWheel.prototype.set tintedColor):
        (WI.ColorWheel.prototype._updateColorForMouseEvent):
        (WI.ColorWheel.prototype._updateCanvas): Added.
        (WI.ColorWheel.prototype._updateGradient): Deleted.
        * UserInterface/Views/ColorWheel.css:
        (.color-wheel > canvas): Added.
        (.color-wheel > .gradient): Deleted.

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.prototype.set color):
        (WI.ColorPicker.prototype.sliderValueDidChange):
        (WI.ColorPicker.prototype._updateSliders):
        (WI.ColorPicker.prototype._showColorComponentInputs):
        (WI.ColorPicker.supportsConicGradient): Deleted.

        * UserInterface/Main.html:

        * UserInterface/Views/LegacyColorWheel.js: Removed.

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

        Web Inspector: Styles: selection lost when inspector is blurred
        https://bugs.webkit.org/show_bug.cgi?id=192124
        <rdar://problem/46800965>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (body:matches(.window-docked-inactive, .window-inactive) .spreadsheet-style-declaration-editor .property.selected):
        Selection should be gray when Web Inspector window isn't focused.

        * UserInterface/Views/SpreadsheetStyleProperty.js:

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

        Web Inspector: Styles: it shouldn't be possible to delete read-only properties
        https://bugs.webkit.org/show_bug.cgi?id=193099
        <rdar://problem/47016335>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        Drive-by: Forward Delete should work the same way as Delete (Backspace).

2019-01-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Implement `queryObjects` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=176766
        <rdar://problem/34890689>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):
        Add `queryObjects` to the list of command line functions.

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles Redesign: remove unused CSS style icons
        https://bugs.webkit.org/show_bug.cgi?id=192999
        <rdar://problem/46912094>

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/StyleRuleIcons.css: Removed.
        * UserInterface/Images/StyleRule.svg: Removed.
        * UserInterface/Images/StyleRuleInheritedElement.svg: Removed.
        * UserInterface/Images/StyleRulePseudoElement.svg: Removed.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2018-12-21  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: editing focus lost when inspector is blurred
        https://bugs.webkit.org/show_bug.cgi?id=192123
        <rdar://problem/46800966>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetSelectorField.js:
        (WI.SpreadsheetSelectorField.prototype._handleBlur):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._handleBlur):

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: experimental setting editors are misaligned in other locales
        https://bugs.webkit.org/show_bug.cgi?id=192971
        <rdar://problem/46718451>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container):
        (.content-view.settings > .settings-view > .container > .title):

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: update scroll position when revealing a virtualized WI.DataGridNode
        https://bugs.webkit.org/show_bug.cgi?id=192992
        <rdar://problem/46886427>

        Reviewed by Joseph Pecoraro.

        When `reveal`ing a `WI.DataGridNode`, if it is not currently in the DOM tree (e.g. it's been
        virtualized by it's owner `WI.DataGrid`), we need to scroll to it's position so that it gets
        added to the DOM tree before it can be revealed/selected.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.layout):
        (WI.DataGrid.prototype.updateVisibleRows):
        (WI.DataGrid.prototype._updateVisibleRows): Deleted.

        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.reveal):

2018-12-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Type profiler popovers have black text on dark background
        https://bugs.webkit.org/show_bug.cgi?id=192916
        <rdar://problem/46863518>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SourceCodeTextEditor.css:
        (.popover .debugger-popover-content > .body):
        * UserInterface/Views/TypeTreeElement.css:
        (.item.type-tree-element.prototype):
        (.item.type-tree-element.prototype:hover,):
        * UserInterface/Views/TypeTreeView.css:
        (.type-tree):
        * UserInterface/Views/Variables.css:
        (:root):

2018-12-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Pressing Esc when editing name/value should select entire property
        https://bugs.webkit.org/show_bug.cgi?id=192919

        Reviewed by Devin Rousso.

        - Esc still hides the completion popover.
        - Esc still discards changes.
        - When there's no completion popover, Esc selects outer scope.
          I.e., it goes from editing name/value to selecting the entire property.
        - Pressing Esc for newly added properties discards those properties.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyDidPressEsc):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidPressEsc):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._discardChange):
        (WI.SpreadsheetTextField.prototype._handleKeyDown):

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Charles Proxy errors opening har files exported from Safari (invalid startedDateTime)
        https://bugs.webkit.org/show_bug.cgi?id=192959
        <rdar://problem/46863411>

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableCellContextMenuClicked):
        (WI.NetworkTableContentView.prototype._updateExportButton):
        (WI.NetworkTableContentView.prototype._canExportHAR):
        Disallow HAR export if we don't have load data, such as the requestSentDate for
        the main resource or sub-resources.

        (WI.NetworkTableContentView.prototype._HARResources):
        Only export resources that have load data.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Autoformat doesn't work on icloud.com (javascript-packed.js)
        https://bugs.webkit.org/show_bug.cgi?id=192946
        <rdar://problem/42546126>

        Rubber-stamped by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        (whitespaceRatio):
        (isTextLikelyMinified):
        Check the first 2500 and the last 2500 characters whitespace ratio.
        If either is below 20% then treat as minified.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Elements tab does not show DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=192910
        <rdar://problem/46680585>

        Reviewed by Brian Burg.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchEvent):
        Better logging for errors.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/AppController.js:
        (WI.AppController.prototype.activateExtraDomains):
        Let Targets get a chance to activate extra domains.
        Perform a little more work in these cases.

        * UserInterface/Protocol/Target.js:
        (WI.Target):
        (WI.Target.prototype.activateExtraDomain):
        Expose agents for domains that are active.
        Expose agents for extra domains when they are activated.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Computed Style Box Model section throws exceptions
        https://bugs.webkit.org/show_bug.cgi?id=192911
        <rdar://problem/46861112>

        Reviewed by Matt Baker.

        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createBoxPartElement):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createContentAreaElement):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics):
        ITMLKit doesn't always provide a display/position/width/height etc properties.
        Protect against this, and just show an empty message in the box model section
        if those properties do not exist.

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: UIString should take an optional key and description to aid localization
        https://bugs.webkit.org/show_bug.cgi?id=153962
        <rdar://problem/24542505>

        Reviewed by Brian Burg.

        * UserInterface/Base/LoadLocalizedStrings.js:
        (WI.UIString):

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

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

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audits: don't cache default audits
        https://bugs.webkit.org/show_bug.cgi?id=192918
        <rdar://problem/46626543>

        Reviewed by Brian Burg.

        Instead of adding the default audits to the "audits" `WI.ObjectStore`, which preserves them
        across WebInspector sessions, load them every time WebInspector is opened (unless there are
        existing audits) so that the localized strings are able to respond to locale changes.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.removeTest):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Dark Mode: unreadable background color for tables containing object previews
        https://bugs.webkit.org/show_bug.cgi?id=192887
        <rdar://problem/46855270>

        Reviewed by Brian Burg.

        * UserInterface/Views/LogContentView.css:
        (.console-messages:focus .console-item .data-grid tr.selected td:not(:last-child)): Added.
        (@media (prefers-dark-interface) .console-item .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .console-messages:focus .console-item.selected .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .console-messages:focus .console-item .data-grid tr.selected td:not(:last-child)): Added.

        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.css:
        (.content-view.indexed-database-object-store > .data-grid tr.selected):
        (.content-view.indexed-database-object-store > .data-grid:focus tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid:focus tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid:focus tr.selected td:not(:last-child)): Added.

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: fix descriptions for default tests
        https://bugs.webkit.org/show_bug.cgi?id=192764
        <rdar://problem/46729437>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):

        * Localizations/en.lproj/localizedStrings.js:

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: "E" icon on debugger dashboard is too close to current function name
        https://bugs.webkit.org/show_bug.cgi?id=192915

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerDashboardView.css:
        (.dashboard.debugger > .location):
        (body[dir=ltr] .dashboard.debugger > .location :matches(.function-icon, .event-listener-icon)):
        (body[dir=rtl] .dashboard.debugger > .location :matches(.function-icon, .event-listener-icon)):
        (.dashboard.debugger > .location .function-icon): Deleted.
        (body[dir=ltr] .dashboard.debugger > .location .function-icon): Deleted.
        (body[dir=rtl] .dashboard.debugger > .location .function-icon): Deleted.

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: ThreadTreeElement status icon is hard to see when hovered
        https://bugs.webkit.org/show_bug.cgi?id=192097
        <rdar://problem/46318421>

        Reviewed by Matt Baker.

        * UserInterface/Views/ThreadTreeElement.css:
        (.tree-outline > .item.thread .status-button.resume):
        (.tree-outline > .item.thread .status-button.resume:active):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'effectiveDOMNode.enabledPseudoClasses')
        https://bugs.webkit.org/show_bug.cgi?id=192783

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype._forcedPseudoClassCheckboxChanged):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._updatePseudoClassCheckboxes):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r237195): Timelines: selecting a rendering frame row moves the time selection
        https://bugs.webkit.org/show_bug.cgi?id=192773
        <rdar://problem/46782446>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._recordSelected):
        The Frames timeline uses `frameIndex` instead of `startTime`/`endTime`, so when trying to
        ensure that the selected record is within the filtered range, use `frameIndex` instead.
        The associated `WI.TimelineRuler` will already be using an index-based approach for
        selection, so this will match.

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: the recording auto-capture input shouldn't start focused
        https://bugs.webkit.org/show_bug.cgi?id=192454

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: shift-clicking a color-swatch to change formats starts editing the color
        https://bugs.webkit.org/show_bug.cgi?id=192784
        <rdar://problem/46801028>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):

2018-12-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab: arrow key after undoing a DOM node delete selects the wrong element
        https://bugs.webkit.org/show_bug.cgi?id=192871
        <rdar://problem/46849060>

        Reviewed by Devin Rousso.

        Undoing a DOM node removal reinserts the node into the DOMTreeOutline.
        When the reinserted node precedes the selected node in the tree, the
        SelectionController should update `_lastSelectedIndex`.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide localization support for % pass display
        https://bugs.webkit.org/show_bug.cgi?id=192870
        <rdar://problem/46779245>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.initialLayout):
        (WI.AuditTestGroupContentView.prototype.layout):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .percentage-pass > span): Added.
        (@media (prefers-dark-interface) .content-view.audit-test-group > header > .percentage-pass): Added.
        (@media (prefers-dark-interface) .content-view.audit-test-group > header > .percentage-pass > span): Added.
        (.content-view.audit-test-group > header > .percentage-pass:not(:empty)::after): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Computed: make UI more usable when the panel is narrow
        https://bugs.webkit.org/show_bug.cgi?id=192578
        <rdar://problem/46615753>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item .property-traces):
        (.computed-style-section .computed-property-item.expanded .disclosure-button):
        (.computed-style-section .computed-property-item .property-trace-item):
        (.computed-style-section .computed-property-item .property-trace-item::before):
        (.computed-style-section .computed-property-item .property):
        (.computed-style-section .computed-property-item .property-trace-item .selector):
        Allow CSS property values and selectors to take more than one line.

        (.computed-style-section .property-trace-item .property .name,):
        * UserInterface/Views/ComputedStyleSection.js:
        (WI.ComputedStyleSection.prototype._createTrace):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):

2018-12-18  Simon Fraser  <simon.fraser@apple.com>

        Web Inspector: Timelines: correctly label Intersection Observer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=192669
        <rdar://problem/46702490>

        Reviewed by Joseph Pecoraro.

        Add InspectorInstrumentation::willFireObserverCallback() and use it to wrap calls
        to Intersection Observer, Performance Observer and Mutation Observer callbacks so 
        that they get correctly labeled in the Inspector timeline.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._processRecord):
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.iconClassNameForRecord):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: "Clear Filters" button gets clipped when window is vertically small
        https://bugs.webkit.org/show_bug.cgi?id=192868
        <rdar://problem/46780400>

        Reviewed by Matt Baker.

        * UserInterface/Views/Main.css:
        (.message-text-view):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: selected text is too light when Inspector window is inactive
        https://bugs.webkit.org/show_bug.cgi?id=190542
        <rdar://problem/45238712>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CodeMirrorOverrides.css:
        (.CodeMirror .CodeMirror-selected):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: column sort controls in Layers tab sidebar don't render correctly in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=192845

        Reviewed by Devin Rousso.

        * UserInterface/Views/DataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th.sortable:active):
        Drive-by: replace obnoxiously light background of the pressed header with a more subtle gray.

        (.data-grid th.sort-ascending > div:first-child::after, .data-grid th.sort-descending > div:first-child::after):
        Invert colors of the arrow glyph.

2018-12-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Layers: increase default column width for other localizations
        https://bugs.webkit.org/show_bug.cgi?id=192812
        <rdar://problem/46628625>

        Reviewed by Brian Burg.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel.prototype._buildDataGrid):
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):

2018-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: m3u8 content not shown, it should be text
        https://bugs.webkit.org/show_bug.cgi?id=192731
        <rdar://problem/46747728>

        Reviewed by Devin Rousso.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.shouldTreatMIMETypeAsText):
        Support m3u8/m3u files as text.

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: path view is misaligned
        https://bugs.webkit.org/show_bug.cgi?id=192761

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording :matches(img, canvas)):
        (.content-view:not(.tab).recording canvas.path):

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: add plural result strings
        https://bugs.webkit.org/show_bug.cgi?id=192769
        <rdar://problem/46628680>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView.prototype.showNoResultDataPlaceholder):

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

        * Localizations/en.lproj/localizedStrings.js:

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: add singular "space" UIString
        https://bugs.webkit.org/show_bug.cgi?id=192766
        <rdar://problem/46776948>

        Reviewed by Brian Burg.

        * UserInterface/Views/SettingEditor.js:
        (WI.SettingEditor):
        (WI.SettingEditor.prototype.get label):
        (WI.SettingEditor.prototype.set label): Added.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView.addSpacesSetting): Added.
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView.addSpacesSetting.updateLabel): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: toggling selected properties may cause data corruption
        https://bugs.webkit.org/show_bug.cgi?id=192396
        <rdar://problem/46478383>

        Reviewed by Devin Rousso.

        Uncommenting a property after a commented out property used to insert an unnecessary semicolon,
        and not updating ranges of the following properties.

        For example:

            /* color: red; */
            /* font-size: 12px */

        Uncommenting `font-size` would result in something like this:

            /* color: red; */; font-size: 12px
                             ^
                             unnecessary semicolon

        Now the semicolon doesn't get inserted and the white space is preserved better:

            /* color: red; */
            font-size: 12px

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        (WI.CSSProperty.prototype._appendSemicolonIfNeeded): Removed.
        (WI.CSSProperty.prototype._prependSemicolonIfNeeded): Added.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._handleNameChange):
        (WI.SpreadsheetStyleProperty.prototype._handleValueChange):
        Style declaration should be locked while editing. Add asserts to ensure this.

2018-12-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Uncaught Exception: TypeError: null is not an object (evaluating 'treeElement.listItemElement.classList')
        https://bugs.webkit.org/show_bug.cgi?id=192090
        <rdar://problem/46318614>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        Check that `listItemElement` is valid before accessing it to update class
        names. The selection can change before the TreeElement has been attached.

2018-12-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cookies view should use model objects instead of raw payload data
        https://bugs.webkit.org/show_bug.cgi?id=189533
        <rdar://problem/44364183>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        * UserInterface/Models/Cookie.js:
        (WI.Cookie):
        (WI.Cookie.fromPayload):
        (WI.Cookie.parseSetCookieResponseHeader):
        (WI.Cookie.prototype.get type):
        (WI.Cookie.prototype.get name):
        (WI.Cookie.prototype.get value):
        (WI.Cookie.prototype.get header):
        (WI.Cookie.prototype.get expires):
        (WI.Cookie.prototype.get maxAge):
        (WI.Cookie.prototype.get path):
        (WI.Cookie.prototype.get domain):
        (WI.Cookie.prototype.get secure):
        (WI.Cookie.prototype.get httpOnly):
        (WI.Cookie.prototype.get sameSite):
        (WI.Cookie.prototype.get size):
        (WI.Cookie.prototype.get url):
        (WI.Cookie.prototype.expirationDate):
        Cleanup Cookie object; add pubic getters for data, `url` property,
        static `fromPayload` method, and calculate `_size` if missing.

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.tableDidRemoveRows):
        (WI.CookieStorageContentView.prototype._reloadCookies):
        Create Cookie objects from the payload instead of using raw payload data.

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove DOM.BackendNodeId and associated commands/events
        https://bugs.webkit.org/show_bug.cgi?id=192478

        Reviewed by Matt Baker.

        * Versions/Inspector-iOS-8.0.json:
        * Versions/Inspector-iOS-9.0.json:
        * Versions/Inspector-iOS-9.3.json:
        * Versions/Inspector-iOS-10.0.json:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: experimental settings reload button disappears after changing more than one setting
        https://bugs.webkit.org/show_bug.cgi?id=192645
        <rdar://problem/46626204>

        Reviewed by Joseph Pecoraro.

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

2018-12-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: deleting multiple DOM nodes doesn't select the nearest node after deletion
        https://bugs.webkit.org/show_bug.cgi?id=192116
        <rdar://problem/46344339>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.removeSelectedItems):
        Finding a new index to select should go through the delegate instead of
        naively advancing the index.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._populateNodeContextMenu):
        (WI.DOMTreeElement.prototype.ondelete): Deleted.
        The menu item for removing the DOM node is now managed by the parent
        DOMTreeOutline, since its UI and behavior now depend on whether there
        are multiple elements selected.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        (WI.DOMTreeOutline.prototype.ondelete.level):
        (WI.DOMTreeOutline.prototype.ondelete):
        Implement `ondelete` to remove selected DOM nodes using the delete and
        backspace keys. Also used by the DOMTreeOutline's context menu handler.

2018-12-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection becomes corrupted when deleting selected cookies
        https://bugs.webkit.org/show_bug.cgi?id=192388
        <rdar://problem/46472364>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.didRemoveItems):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype.didRemoveItem): Deleted.
        Replace `didRemoveItem` with a method taking an IndexSet. Calling the
        single-index version while iterating over multiple rows in ascending
        order is unsafe, a detail best left to the SelectionController.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype._removeRows):
        Notify SelectionController of removed rows.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.insertChild):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        Remove the child from the element's `children` after calling `_forgetTreeElement`,
        which needs to calculate the child's index to pass to the SelectionController.

        (WI.TreeOutline.prototype.removeChildren):
        Remove child items during iteration so that `children` doesn't contain
        detached TreeElements while calling `_forgetTreeElement`.

        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):

2018-12-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r238599): unable to select specific timeline
        https://bugs.webkit.org/show_bug.cgi?id=192443
        <rdar://problem/46608087>

        Reviewed by Joseph Pecoraro.

        When determining the trailing horizontal edge for TreeElement mouse
        events, TreeOutline should not assume that its containing DOM element
        is only as wide as its <ol> element.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromEvent):

2018-12-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Move TreeOutlineGroup coordination out of TreeElement
        https://bugs.webkit.org/show_bug.cgi?id=192487
        <rdar://problem/46543431>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):

        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup):
        (WI.TreeOutlineGroup.prototype.itemAdded):
        (WI.TreeOutlineGroup.prototype.itemRemoved):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        (WI.TreeOutlineGroup.prototype._treeOutlineSelectionDidChange):
        (WI.TreeOutlineGroup.groupForTreeOutline): Deleted.
        (WI.TreeOutlineGroup.prototype.didSelectTreeElement): Deleted.
        make the group responsible for listening to selection changes from the
        TreeOutlines it manages, and synchronizing the selection between them.

2018-12-10  Dean Jackson  <dino@apple.com>

        Use text/javascript as recommended by the HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=192525
        <rdar://problem/46569636>

        Reviewed by Jon Lee.

        The HTML specification says we should use text/javascript for
        JavaScript files:
        https://html.spec.whatwg.org/multipage/scripting.html#scriptingLanguages:javascript-mime-type

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._attemptToDetermineMIMEType):

2018-12-06  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: collapsing a DOM node with the left arrow doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=192353
        <rdar://problem/46455019>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.deselect):
        Don't early return when the element is not the selected tree element.
        This condition no longer holds now that TreeOutline supports multiple selection.

2018-12-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: SelectionController should not extend the selection when allowsMultipleSelection is false
        https://bugs.webkit.org/show_bug.cgi?id=192390
        <rdar://problem/46473624>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.selectItem):

2018-12-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add style editing debug mode
        https://bugs.webkit.org/show_bug.cgi?id=192282
        <rdar://problem/46399176>

        Reviewed by Matt Baker.

        Introduce a style editing debug mode to help to troubleshoot complex bugs in the style editor.

          - Log CSS changes;
          - Display red border for locked style declarations.

        * UserInterface/Base/Setting.js:
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor.debug-style-locked::after):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateDebugLockStatus):

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: changing selection no longer highlights the selected node
        https://bugs.webkit.org/show_bug.cgi?id=192354
        <rdar://problem/46444438>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):
        (WI.TreeOutline.prototype._handleMouseDown):

2018-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(r238330): Timeline auto-capture does not work after page transition
        https://bugs.webkit.org/show_bug.cgi?id=192248
        <rdar://problem/46390199>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.transitionPageTarget):
        Let the TimelineManager perform work on page transitions.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.initializeTarget):
        Initialize the autocapture state of the target.

        (WI.TimelineManager.prototype.transitionPageTarget):
        When transitioning pages perform a legacy (frontend based) timeline capture.

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: $0 is shown for all selected elements
        https://bugs.webkit.org/show_bug.cgi?id=192119
        <rdar://problem/46327554>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype._revealAndSelectRepresentedObject):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.layout):
        (WI.DOMTreeContentView.prototype._domTreeSelectionDidChange):
        Update the selected DOM node using the TreeOutline's selection change
        event, instead of in `onselect`, which wasn't always called.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.onselect): Deleted.
        (WI.DOMTreeElement.prototype.ondeselect): Deleted.
        Eliminate `onselect` and `ondeselect`. TreeOutline clients should use
        the TreeOutline.Event.SelectedDidChange event instead.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.last-selected > span::after):
        (.tree-outline.dom:focus li.last-selected > span::after):
        (.tree-outline.dom li.selected > span::after): Deleted.
        (.tree-outline.dom:focus li.selected > span::after): Deleted.
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.updateSelection): Deleted.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):
        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype._addTreeElement):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.showDefaultContentViewForTreeElement):
        (WI.NavigationSidebarPanel.prototype._treeElementWasFiltered):
        (WI.NavigationSidebarPanel):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._populateResourceTreeOutline):
        (WI.OpenResourceDialog.prototype._handleKeydownEvent):
        * UserInterface/Views/SourceCodeTreeElement.js:
        (WI.SourceCodeTreeElement.prototype.descendantResourceTreeElementTypeDidChange):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.revealAndSelect):
        (WI.TreeElement.prototype.deselect):
        Remove `suppressOnDeselect` and rename `suppressOnSelect` to `suppressNotification`.
        Now that `ondeselect` has been removed `suppressOnDeselect` is no longer
        meaningful, as TreeOutline generates a single `SelectedDidChange` event
        when the selected item changes. In the case of `revealAndSelect`, both
        arguments had the same value.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        Add a unique class name to the last selected TreeElement to distinguish
        it from other selected elements.

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: ⌘-A should select all visible nodes
        https://bugs.webkit.org/show_bug.cgi?id=192120
        <rdar://problem/46344435>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):
        Remove an early return, allowing `WI.SelectionController` to handle ⌘-A
        and select all items.

2018-12-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: tests should support async operations
        https://bugs.webkit.org/show_bug.cgi?id=192171
        <rdar://problem/46423562>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.supportsAwaitPromise): Added.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty.addErrorForValueType): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse.async resultArrayForEach): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse): Added.
        (WI.AuditTestCase.prototype.async run):
        (WI.AuditTestCase.prototype.async run.checkResultProperty.addErrorForValueType): Deleted.
        (WI.AuditTestCase.prototype.async run.checkResultProperty): Deleted.
        (WI.AuditTestCase.prototype.async run.async resultArrayForEach): Deleted.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload):
        (WI.AuditTestCaseResult.prototype.toJSON):

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

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: save the expanded state of test groups
        https://bugs.webkit.org/show_bug.cgi?id=192346
        <rdar://problem/46440704>

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement):
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.onexpand): Added.
        (WI.AuditTreeElement.prototype.oncollapse): Added.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: sidebar briefly shows "No Filter Results" before populating default audits
        https://bugs.webkit.org/show_bug.cgi?id=192341
        <rdar://problem/46436550>

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype.applyFiltersToTreeElement): Deleted.
        Delay the construction of the "Results" folder until it's needed, since adding a hidden
        `WI.TreeElement` will cause the placeholder to appear.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: navigating while tests are running should stop and clear all results
        https://bugs.webkit.org/show_bug.cgi?id=192317
        <rdar://problem/46435222>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async start):
        (WI.AuditManager.prototype._handleFrameMainResourceDidChange):

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        Drive-by: pass the index of the saved result.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: "Add Default Audits" shown when there are no filter results
        https://bugs.webkit.org/show_bug.cgi?id=192105

        Reviewed by Matt Baker.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        (WI.NavigationSidebarPanel.prototype.get hasActiveFilters): Added.
        (WI.NavigationSidebarPanel.prototype.suppressFilteringOnTreeElements):
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.hideEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateFilter):
        (WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults.checkTreeOutlineForEmptyFilterResults):
        (WI.NavigationSidebarPanel.prototype._filterDidChange):
        (WI.NavigationSidebarPanel.prototype._updateFilter): Deleted.
        (WI.NavigationSidebarPanel.prototype._createEmptyContentPlaceholderIfNeeded): Deleted.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        Drive-by: change capitalization for consistency with other navigation sidebars.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: add singular localized string for "Record first %s frames"
        https://bugs.webkit.org/show_bug.cgi?id=192189

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):
        (WI.CanvasOverviewContentView.prototype.initialLayout): Deleted.
        Drive-by: update the auto-capture navigation item when the view is first created so there is
        no flashing of in the navigation bar (before `initialLayout` is called).

        * UserInterface/Views/CheckboxNavigationItem.js:
        (WI.CheckboxNavigationItem):
        (WI.CheckboxNavigationItem.prototype.set label): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-03  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Multiple Selection: restoring selection when opening WebInspector puts the TreeElement into a permanent selected state
        https://bugs.webkit.org/show_bug.cgi?id=192091
        <rdar://problem/46321795>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):
        Fix a bug where selected indexes were overwritten by the inserted index.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.insertChild):
        Update the SelectionController with the newly inserted index before
        attaching the TreeElement. Attaching the TreeElement can cause it to
        become selected, which would add the index to the SelectionController,
        only to have it immediately incremented by the call to `didInsertItem`.
        Additionally, change `insertionIndex` to be the index of the inserted
        item instead of the inserted item's previous sibling.

        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._indexOfTreeElement.previousElement): Deleted.
        Eliminate TreeElement index caching, which could become stale and cause
        the wrong index to be calculated. Additionally, instead of walking up the
        parent chain to determine the index, start at the root and use existing
        method `traverseNextTreeElement`.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: test tree elements should start out collapsed
        https://bugs.webkit.org/show_bug.cgi?id=192107

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):

2018-12-03  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: can't select properties of read-only rules
        https://bugs.webkit.org/show_bug.cgi?id=192266

        Reviewed by Devin Rousso.

        Implement multiple properties selection for read-only rules (such as User Agent Stylesheets)
        in the Styles panel.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        Keep selection on layout.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingFirstProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingLastProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseEnter):
        SpreadsheetCSSStyleDeclarationEditor is used by ComputedStyleDetailsPanel, which doesn't have:
          - spreadsheetCSSStyleDeclarationEditorPropertyBlur
          - spreadsheetCSSStyleDeclarationEditorPropertyMouseEnter

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.startEditingName):
        (WI.SpreadsheetStyleProperty.prototype.startEditingValue):

2018-11-30  Brian Burg  <bburg@apple.com>

        Web Inspector: resource combining should be more robust against missing WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=192255
        <rdar://problem/46042879>

        Reviewed by Joseph Pecoraro.

        * Scripts/copy-user-interface-resources.pl:
        (combineOrStripResourcesForWebKitAdditions):

2018-11-30  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Jumping from Computed to Styles should select property
        https://bugs.webkit.org/show_bug.cgi?id=192198

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.highlighted): Deleted.
        (@keyframes style-property-highlight): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.highlightProperty):
        Remove unnecessary `__propertyView` property.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.detached):
        (WI.SpreadsheetStyleProperty.prototype.highlight): Deleted.

2018-11-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Multiple Selection: selecting a breakpoint will change the selection to it's parent on the first click
        https://bugs.webkit.org/show_bug.cgi?id=192093
        <rdar://problem/46318466>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        TreeElement shouldn't manage the TreeOutline's selection barrier.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get processingSelectionChange):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectTreeElementInternal):
        The selection re-entry barrier `processingSelectionChange` should be
        managed internally by TreeOutline, and exposed as a read-only property.
        Fix a bug where the barrier was cleared before dispatching the change
        notification, which can cause re-entry as a side effect.

2018-11-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: reload button needs horizontal spacing
        https://bugs.webkit.org/show_bug.cgi?id=192231
        <rdar://problem/46274363>

        Reviewed by Matt Baker.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container button):
        (.content-view.settings > .settings-view > .container > .title):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]):
        (body[dir=ltr] .content-view.settings > .settings-view > .container > .title): Deleted.
        (body[dir=rtl] .content-view.settings > .settings-view > .container > .title): Deleted.
        (body[dir=ltr] .content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]): Deleted.
        (body[dir=rtl] .content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]): Deleted.
        Drive-by: replace `dir=*` attribute rules with `-webkit-margin-*` properties.

2018-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception opening Web Inspector to Debugger Tab
        https://bugs.webkit.org/show_bug.cgi?id=192174

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        Dispatch the callback with a timeout if there is no backend target yet
        so it doesn't get lost.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype.runAfterPendingDispatches):
        Change the ambiguous name "script" to the more familiar "callback".

2018-11-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace all unicode characters with the escaped character code
        https://bugs.webkit.org/show_bug.cgi?id=192216
        <rdar://problem/46275637>

        Reviewed by Brian Burg.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/BreakpointPopoverController.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/Canvas.js:
        * UserInterface/Models/RecordingAction.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Views/AuditTestCaseContentView.js:
        * UserInterface/Views/AuditTestContentView.js:
        * UserInterface/Views/AuditTestGroupContentView.js:
        * UserInterface/Views/CallFrameView.js:
        * UserInterface/Views/CanvasContentView.js:
        * UserInterface/Views/CanvasOverviewContentView.css:
        * UserInterface/Views/ConsoleMessageView.css:
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/DOMEventsBreakdownView.js:
        * UserInterface/Views/DataGrid.css:
        * UserInterface/Views/DataGrid.js:
        * UserInterface/Views/DatabaseTableContentView.js:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DebuggerSidebarPanel.js:
        * UserInterface/Views/ErrorObjectView.js:
        * UserInterface/Views/EventBreakpointPopover.js:
        * UserInterface/Views/InlineSwatch.js:
        * UserInterface/Views/LayerTreeDataGridNode.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        * UserInterface/Views/Layers3DContentView.js:
        * UserInterface/Views/LayoutTimelineDataGridNode.js:
        * UserInterface/Views/NetworkTableContentView.css:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/ObjectPreviewView.js:
        * UserInterface/Views/ProfileDataGridNode.js:
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        * UserInterface/Views/ScriptDetailsTimelineView.css:
        * UserInterface/Views/TextEditor.css:
        * UserInterface/Views/TreeOutline.css:

2018-11-29  Matt Baker  <mattbaker@apple.com>

        Web Inspector: RTL: disclosure triangles should be flipped and aligned right
        https://bugs.webkit.org/show_bug.cgi?id=192089
        <rdar://problem/46316753>

        Reviewed by Devin Rousso.

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

        * UserInterface/Views/ConsoleMessageView.css:
        (.console-message.expandable .console-top-level-message::before):
        (body[dir=rtl] .console-message.expandable .console-top-level-message::before):

        * UserInterface/Views/ErrorObjectView.css:
        (.error-object > .formatted-error::before):
        (body[dir=rtl] .error-object > .formatted-error::before):
        (.error-object .content):

        * UserInterface/Views/LogContentView.css:
        (.console-group-title::before):
        (body[dir=ltr] .console-group-title::before):
        (body[dir=rtl] .console-group-title::before):

        * UserInterface/Views/ObjectTreeView.css:
        (body[dir=rtl] .object-tree > :matches(.title, .object-preview)::before):

        * UserInterface/Views/TypeTreeElement.css:
        (body[dir=rtl] .item.type-tree-element.parent > .disclosure-button):

2018-11-28  Dean Jackson  <dino@apple.com>

        [ES Modules] Allow .mjs content when loaded from file://
        https://bugs.webkit.org/show_bug.cgi?id=192100
        <rdar://problem/46320065>

        Reviewed by Sam Weinig.

        Add a mapping from .mjs to application/javascript.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):

2018-11-29  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: selecting more than one DOM node causes the scope highlight to contrast
        https://bugs.webkit.org/show_bug.cgi?id=192118
        <rdar://problem/46325664>

        Reviewed by Devin Rousso.

        Use an alpha blended border for the "selected" DOM scope highlight,
        matching the "hovered" scope highlight.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.selected + ol.children.expanded):

2018-11-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(?): all "Show *" develop menu items cause the page to crash
        https://bugs.webkit.org/show_bug.cgi?id=192016
        <rdar://problem/46284417>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.contentLoaded):
        (WI.whenTargetsAvailable):
        Don't evaluate any InspectorFrontendAPI commands until the frontend
        has initialized a main target and the user interface.

2018-11-28  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: enable selection of multiple properties by default
        https://bugs.webkit.org/show_bug.cgi?id=192109
        <rdar://problem/46323565>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        Remove the checkbox.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property):
        (.spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        (.spreadsheet-style-declaration-editor .property.selected):
        (.spreadsheet-style-declaration-editor .property.selected:focus):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected:focus): Deleted.
        Remove `.multiple-properties-selection` class.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleFocus): Deleted.

2018-11-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: empty results folder is shown after clearing filters
        https://bugs.webkit.org/show_bug.cgi?id=192106

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.applyFiltersToTreeElement): Added.

2018-11-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused DataGrid and TreeOutline code
        https://bugs.webkit.org/show_bug.cgi?id=191622
        <rdar://problem/46052014>

        Reviewed by Devin Rousso.

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

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.insertChildElement):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.update):

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.removeChildren):
        (WI.DataGridNode.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/ErrorObjectView.css:
        (.error-object:not(.expanded) .content):
        (.error-object .content):
        (.error-object:not(.expanded) .tree-outline): Deleted.
        (.error-object .tree-outline): Deleted.

        * UserInterface/Views/ErrorObjectView.js:
        (WI.ErrorObjectView):
        (WI.ErrorObjectView.prototype.get treeOutline): Deleted.
        Use a simple container since TreeOutline features aren't used,
        and remove unused property `treeOutline`.

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

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.removeChildren):
        (WI.TreeElement.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.removeChildrenRecursive): Deleted.
        (WI.TreeOutline.prototype.reattachIfIndexChanged): Deleted.
        Removed `element` parameter now that the only use case has been removed.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab should allow selecting/deleting multiple DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=192059
        <rdar://problem/46294827>

        Reviewed by Devin Rousso.

        Enable multiple DOM node selection in the DOMTreeContentView.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.get allowsEmptySelection):
        (WI.SelectionController.prototype.set allowsEmptySelection):
        Allow clients to control whether the last selected item can be deselected.
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.didInsertItem):
        Rewritten to prevent infinite loop.
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype._adjustIndexesAfter): Deleted.

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

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.updateSelectionArea):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.updateSelection):
        Updating the selection area DOM element should not assume that only one
        TreeElement is selected at a time.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.get allowsEmptySelection):
        (WI.TreeOutline.prototype.set allowsEmptySelection):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.get selectedTreeElements):
        (WI.TreeOutline.prototype._treeKeyDown):

        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        Eliminate use of `TreeElement.prototype.deselect`.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TreeOutline should re-use multiple-selection logic from Table
        https://bugs.webkit.org/show_bug.cgi?id=191483
        <rdar://problem/45953305>

        Reviewed by Devin Rousso.

        Update TreeOutline to use SelectionController. Adopting SelectionController
        in TreeOutline is not as straightforward as it was in Table. Selected items
        are tracked by index, and TreeElement lacks an explicit index. As a consequence
        TreeElement indexes are calcualted as needed and cached. The cache is cleared
        whenever an element is added or removed.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype.handleKeyDown):
        Drive-by syntax error fix.
        (WI.SelectionController.prototype._adjustIndexesAfter):
        (WI.SelectionController):

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.canSelectOnMouseDown):
        (WI.DOMTreeElement.prototype.selectOnMouseDown): Deleted.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype._onmousedown):
        Item selection is now handled by SelectionController.

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.canSelectOnMouseDown):
        (WI.ShaderProgramTreeElement.prototype.selectOnMouseDown): Deleted.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.canSelectOnMouseDown):
        (WI.TreeElement.prototype._attach):
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):
        Route item selection through the parent TreeOutline, in order to go though
        the TreeOutline's SelectionController.

        (WI.TreeElement.treeElementMouseDown): Deleted.
        Moved handler to TreeOutline, which owns the SelectionController that
        needs to respond to mouse events.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get allowsMultipleSelection):
        (WI.TreeOutline.prototype.set allowsMultipleSelection):
        (WI.TreeOutline.prototype.get selectedTreeElement):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.insertChild):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._treeKeyDown):
        (WI.TreeOutline.prototype.selectionControllerNumberOfItems):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableIndex):
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableIndex):
        (WI.TreeOutline.prototype.selectTreeElementInternal):
        (WI.TreeOutline._generateStyleRulesIfNeeded._indexOfTreeElement.previousElement):
        (WI.TreeOutline._generateStyleRulesIfNeeded):

2018-11-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Experimental Computed panel is unreadable in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=192053

        Reviewed by Matt Baker.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item.expanded):
        (.computed-style-section .computed-property-item.expanded + .computed-property-item):
        (@media (prefers-dark-interface)):

2018-11-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Computed panel: allow to expand properties to show list of overridden values
        https://bugs.webkit.org/show_bug.cgi?id=191984

        Reviewed by Devin Rousso.

        Introduce the new experimental Computed Style Cascades.

        Each property now can expand to show a list of overridden values, their corresponding
        selectors, and source locations.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.get uniqueOrderedStyles):
        Move `uniqueOrderedStyles` function unmodified from SpreadsheetRulesStyleDetailsPanel so it can be used by ComputedStyleDetailsPanel, too.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.computed-with-traces .computed-style-properties):
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        (.computed-with-traces .details-section.computed-style-properties > .content):
        (.computed-with-traces .computed-style-properties .property .go-to-arrow):

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.applyFilter):
        (WI.ComputedStyleDetailsPanel.prototype.focusFirstSection):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        (WI.ComputedStyleDetailsPanel.prototype._computePropertyTraces):
        (WI.ComputedStyleDetailsPanel.prototype._computedStyleShowAllCheckboxValueChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handlePropertiesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleEditorFilterApplied):
        (WI.ComputedStyleDetailsPanel):
        Use the new Computed section (WI.ComputedStyleSection) only when it's enabled in the experimental settings.
        Otherwise, use the current Computed section.

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

        * UserInterface/Views/ComputedStyleSection.css: Added.
        (.computed-style-section):
        (.computed-style-section .computed-property-item):
        (.computed-style-section .computed-property-item.expanded):
        (.computed-style-section .computed-property-item.expanded + .computed-property-item):
        (.computed-style-section .computed-property-item .disclosure-button):
        (.computed-style-section .computed-property-item .property-traces):
        (.computed-style-section .computed-property-item.expanded .property-traces):
        (.computed-style-section .computed-property-item.expanded .disclosure-button):
        (.computed-style-section .computed-property-item .property-trace-item):
        (.computed-style-section .computed-property-item .property-trace-item .property.overridden .value):
        (.computed-style-section .property-trace-item-left,):
        (.computed-style-section .property-trace-item-right):
        (.computed-style-section .computed-property-item .property-trace-item .value):
        (.computed-style-section .property .value):
        (.computed-style-section .computed-property-item .property):
        (.computed-style-section .computed-property-item .property .name):
        (.computed-style-section .computed-property-item .property-trace-item .selector):
        (.computed-style-section .computed-property-item .origin):
        (.computed-style-section .computed-property-item .go-to-link):
        (.computed-style-section .property-trace-item .property .name,):
        (.computed-style-section .property-trace-item .property .value + span):
        (.computed-style-properties.details-section > .content,):

        * UserInterface/Views/ComputedStyleSection.js: Added.
        (WI.ComputedStyleSection):
        (WI.ComputedStyleSection.prototype.get style):
        (WI.ComputedStyleSection.prototype.set style):
        (WI.ComputedStyleSection.prototype.get styleTraces):
        (WI.ComputedStyleSection.prototype.set styleTraces):
        (WI.ComputedStyleSection.prototype.set showsImplicitProperties):
        (WI.ComputedStyleSection.prototype.set alwaysShowPropertyNames):
        (WI.ComputedStyleSection.prototype.set propertyVisibilityMode):
        (WI.ComputedStyleSection.prototype.set hideFilterNonMatchingProperties):
        (WI.ComputedStyleSection.prototype.get propertiesToRender):
        (WI.ComputedStyleSection.prototype.layout):
        (WI.ComputedStyleSection.prototype.detached):
        (WI.ComputedStyleSection.prototype.hidden):
        (WI.ComputedStyleSection.prototype.applyFilter):
        (WI.ComputedStyleSection.prototype.spreadsheetStylePropertyShowProperty):
        (WI.ComputedStyleSection.prototype._createTrace):
        (WI.ComputedStyleSection.prototype._handlePropertiesChanged):

        * UserInterface/Views/ExpandableView.js: Added.
        (WI.ExpandableView):
        (WI.ExpandableView.prototype.get element):
        (WI.ExpandableView.prototype._onDisclosureButtonClick):
        (WI.ExpandableView.prototype._update):

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

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.layout):
        Replace `_renderOrigin` with WI.StyleOriginView so it could be used by WI.ComputedStyleSection.

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

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._isEditable):
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        Introduce `readOnly` option so WI.SpreadsheetStyleProperty could be used by WI.ComputedStyleSection.

        * UserInterface/Views/StyleOriginView.js: Added.
        (WI.StyleOriginView):

2018-11-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add support for forcing color scheme appearance in DOM tree.
        https://bugs.webkit.org/show_bug.cgi?id=191820
        rdar://problem/46153172

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.get defaultAppearance): Added.
        (WI.CSSManager.prototype.get forcedAppearance): Added.
        (WI.CSSManager.prototype.set forcedAppearance): Added.
        (WI.CSSManager.prototype.canForceAppearance): Added.
        (WI.CSSManager.prototype.defaultAppearanceDidChange): Added.
        * UserInterface/Images/Appearance.svg: Added.
        * UserInterface/Protocol/PageObserver.js:
        (WI.PageObserver.prototype.defaultAppearanceChanged): Added.
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype._defaultAppearanceDidChange): Added.
        (WI.DOMTreeContentView.prototype._toggleAppearance): Added.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cookies table needs copy keyboard shortcut and context menu support
        https://bugs.webkit.org/show_bug.cgi?id=191482
        <rdar://problem/45953002>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.handleCopyEvent):
        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
        As with Delete, if the target row is selected, all selected rows are copied.
        Otherwise only the target row is copied. This distinction will be surfaced
        in the UI in https://webkit.org/b/191095.

        (WI.CookieStorageContentView.prototype.tablePopulateCell):
        (WI.CookieStorageContentView.prototype._cookiesAtIndexes):
        (WI.CookieStorageContentView.prototype._formatCookiesAsText):
        (WI.CookieStorageContentView.prototype._formatCookiePropertyForColumn):
        (WI.CookieStorageContentView):
        Break Cookie property formatting into a helper method, which is used for
        formatting Table cells and creating plain text for the clipboard.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.get columns):

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection should be handled by a SelectionController
        https://bugs.webkit.org/show_bug.cgi?id=191977
        <rdar://problem/46253093>

        Reviewed by Devin Rousso.

        Add a SelectionController class, which manages an IndexSet of selected
        items, and provides operations for adding and removing items from the
        selection. Complex behaviors such as shift-clicking to select a range of
        items, and updating the selection using the keyboard, are forwarded to
        the controller using special-purpose methods that accept DOM Event objects.

        * UserInterface/Base/Utilities.js:

        * UserInterface/Controllers/SelectionController.js: Added.
        (WI.SelectionController):
        (WI.SelectionController.prototype.get delegate):
        (WI.SelectionController.prototype.get lastSelectedItem):
        (WI.SelectionController.prototype.get selectedItems):
        (WI.SelectionController.prototype.get allowsMultipleSelection):
        (WI.SelectionController.prototype.set allowsMultipleSelection):
        (WI.SelectionController.prototype.get numberOfItems):
        (WI.SelectionController.prototype.hasSelectedItem):
        (WI.SelectionController.prototype.selectItem):
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.selectAll):
        (WI.SelectionController.prototype.deselectAll):
        (WI.SelectionController.prototype.removeSelectedItems):
        (WI.SelectionController.prototype.reset):
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype.handleKeyDown):
        (WI.SelectionController.prototype.handleItemMouseDown.normalizeRange):
        (WI.SelectionController.prototype.handleItemMouseDown):
        (WI.SelectionController.prototype._deselectAllAndSelect):
        (WI.SelectionController.prototype._selectItemsFromArrowKey):
        (WI.SelectionController.prototype._nextSelectableIndex):
        (WI.SelectionController.prototype._previousSelectableIndex):
        (WI.SelectionController.prototype._updateSelectedItems):

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

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRow):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.get allowsMultipleSelection):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.selectAll):
        (WI.Table.prototype.deselectAll):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        (WI.Table.prototype.selectionControllerSelectionDidChange):
        (WI.Table.prototype.selectionControllerNumberOfItems):
        (WI.Table.prototype.selectionControllerNextSelectableIndex):
        (WI.Table.prototype.selectionControllerPreviousSelectableIndex):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._toggleSelectedRowStyle):
        (WI.Table.prototype._selectRowsFromArrowKey): Deleted.
        (WI.Table.prototype._handleMouseDown.normalizeRange): Deleted.
        (WI.Table.prototype._deselectAllAndSelect): Deleted.
        (WI.Table.prototype._notifySelectionDidChange): Deleted.
        (WI.Table.prototype._updateSelectedRows): Deleted.

2018-11-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: "No Filter Results" in navigation sidebar should have a button to clear filters
        https://bugs.webkit.org/show_bug.cgi?id=191916

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.resetFilter): Added.
        (WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults.checkTreeOutlineForEmptyFilterResults):

        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar.prototype.clear):

        * UserInterface/Views/FilterBarButton.js:
        (WI.FilterBarButton.prototype.toggle):

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype.resetFilter): Added.
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel.prototype.resetFilter): Added.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView.prototype.showFilteredPlaceholder):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._showEmptyFilterResultsMessage):

        * UserInterface/Views/Main.css:
        (.message-text-view > .message + button): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: automatically add to tab bar when the experimental setting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191659

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Base/Main.js:
        (WI.loaded):
        Drive-by: use existing constants instead of hard-coded strings for consistency.

2018-11-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: add Media timeline
        https://bugs.webkit.org/show_bug.cgi?id=191625

        Reviewed by Matt Baker.

        Add a new timeline to Timelines for media related events (e.g. event/fullscreen/low-power).
        Mimics what is visible by using the same instrumentation points as the Network tab when
        "Group Media Requests" is enabled.

        * UserInterface/Models/MediaInstrument.js: Added.
        (WI.MediaInstrument):
        (WI.MediaInstrument.supported):
        (WI.MediaInstrument.prototype.get timelineRecordType):
        (WI.MediaInstrument.prototype.startInstrumentation):
        (WI.MediaInstrument.prototype.stopInstrumentation):

        * UserInterface/Models/MediaTimelineRecord.js: Added.
        (WI.MediaTimelineRecord):
        (WI.MediaTimelineRecord.prototype.get eventType):
        (WI.MediaTimelineRecord.prototype.get domNode):
        (WI.MediaTimelineRecord.prototype.get domEvent):
        (WI.MediaTimelineRecord.prototype.get isLowPower):
        (WI.MediaTimelineRecord.prototype.get displayName):
        (WI.MediaTimelineRecord.prototype.saveIdentityToCookie):

        * UserInterface/Views/MediaTimelineDataGridNode.js: Added.
        (WI.MediaTimelineDataGridNode):
        (WI.MediaTimelineDataGridNode.prototype.get records):
        (WI.MediaTimelineDataGridNode.prototype.get data):
        (WI.MediaTimelineDataGridNode.prototype.createCellContent):
        (WI.MediaTimelineDataGridNode.prototype.iconClassNames):
        (WI.MediaTimelineDataGridNode.prototype.filterableDataForColumn):

        * UserInterface/Views/MediaTimelineOverviewGraph.js: Added.
        (WI.MediaTimelineOverviewGraph):
        (WI.MediaTimelineOverviewGraph.prototype.reset):
        (WI.MediaTimelineOverviewGraph.prototype.shown):
        (WI.MediaTimelineOverviewGraph.prototype.hidden):
        (WI.MediaTimelineOverviewGraph.prototype.layout):
        (WI.MediaTimelineOverviewGraph.prototype.updateSelectedRecord):
        (WI.MediaTimelineOverviewGraph.prototype._handleRecordAdded):
        * UserInterface/Views/MediaTimelineOverviewGraph.css: Added.
        (.timeline-overview-graph.media > .timeline-record-bar):
        (.timeline-overview-graph.media > .timeline-record-bar > .segment):

        * UserInterface/Views/MediaTimelineView.js: Added.
        (WI.MediaTimelineView):
        (WI.MediaTimelineView.prototype.get secondsPerPixel):
        (WI.MediaTimelineView.prototype.get selectionPathComponents):
        (WI.MediaTimelineView.prototype.closed):
        (WI.MediaTimelineView.prototype.reset):
        (WI.MediaTimelineView.prototype.dataGridSortComparator.compareDOMNodes):
        (WI.MediaTimelineView.prototype.dataGridSortComparator.):
        (WI.MediaTimelineView.prototype.dataGridSortComparator):
        (WI.MediaTimelineView.prototype.layout):
        (WI.MediaTimelineView.prototype._processPendingRecords):
        (WI.MediaTimelineView.prototype._handleRecordAdded):
        (WI.MediaTimelineView.prototype._handleSelectionPathComponentSiblingSelected):
        * UserInterface/Views/MediaTimelineView.css: Added.
        (.timeline-view.media > .data-grid):

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.layout):
        * UserInterface/Views/DOMNodeEventsContentView.js:
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        * UserInterface/Views/NetworkDOMNodeDetailView.js:
        (WI.NetworkDOMNodeDetailView):
        (WI.NetworkDOMNodeDetailView.prototype.showContentViewForIdentifier):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get filterNavigationItems):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._showDetailView):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForNodeEntry):
        Remove passing of `startTimestamp` to `WI.DOMEventsBreakdownView`, as we should be showing
        absolute timestamps for each event, not relative to the start of the recording.

        * UserInterface/Views/TimelineIcons.css:
        (.media-icon .icon): Added.
        (.dom-event-record .icon): Added.
        (.dom-event-record.fullscreen .icon): Added.
        (.low-power-record .icon): Added.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.availableTimelineTypes):
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged): Added.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler.prototype.clearMarkers):
        (WI.TimelineRuler.prototype._handleClick):
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._timelineRulerMouseClicked):
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.reset):
        (WI.TimelineRecording.prototype.addEventMarker):
        (WI.TimelineRecording.prototype.addRecord):
        (WI.TimelineRecording.prototype._keyForRecord):
        Drive-by: rework the logic for "click" event pass-through to the graph underneath.

        * UserInterface/Models/Instrument.js:
        (WI.Instrument.createForTimelineType):

        * UserInterface/Models/TimelineRecord.js:

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForTimelineType):
        (WI.TimelineTabContentView.genericClassNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForRecord):
        (WI.TimelineTabContentView.displayNameForRecord):
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.timeline-record-type-media > .segment): Added.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.createForTimeline):

        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/DOMEvent.svg: Added.
        * UserInterface/Images/DOMEventFullscreen.svg: Added.
        * UserInterface/Images/LowPower.svg: Added.
        * UserInterface/Images/MediaInstrument.svg: Added.

2018-11-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove parameters from TreeOutline SelectionDidChange event
        https://bugs.webkit.org/show_bug.cgi?id=191770

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CallFrameTreeController.js:
        (WI.CallFrameTreeController.prototype._treeSelectionDidChange):
        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._treeSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange): Deleted.
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._canvasTreeOutlineSelectionDidChange):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._treeSelectionDidChange):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel._treeSelectionDidChange):
        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid.prototype._popoverCallStackTreeSelectionDidChange):
        (WI.TimelineDataGrid):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.prototype._recordingsTreeSelectionDidChange):
        Use `event.target.selectedTreeElement` instead of `event.data.selectedElement`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._timelinesTreeSelectionDidChange):
        (WI.TimelineOverview.prototype._timelinesTreeSelectionDidChange.updateGraphSelectedState): Deleted.
        Refactor away the single place `event.data.deselectedElement` was used.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):
        Remove `selectedElement` and `deselectedElement` from event data.

2018-11-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: removing and re-adding the tab will duplicate tests
        https://bugs.webkit.org/show_bug.cgi?id=191843

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.loadStoredTests):
        If we already have tests, don't attempt to load any stored tests.

2018-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Reload Web Inspector" button no longer partially works
        https://bugs.webkit.org/show_bug.cgi?id=191773
        <rdar://problem/46139932>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        (sheetElement.innerHTML):
        * UserInterface/Views/SettingsTabContentView.js:

2018-11-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: add button to show system certificate dialog
        https://bugs.webkit.org/show_bug.cgi?id=191458
        <rdar://problem/45977019>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.supportsShowCertificate): Added.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.showCertificate): Added.

        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        * UserInterface/Views/ResourceSecurityContentView.css:
        (.resource-security .details > .show-certificate > .key): Added.
        (.resource-security .details > .show-certificate > .key > .error): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: add default tests
        https://bugs.webkit.org/show_bug.cgi?id=191758

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.loadStoredTests):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded): Added.
        If there are no previously saved tests in the database, automatically add the default set.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view): Added.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > .message): Added.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > button): Added.
        When the last test is removed, show a placeholder message that allows the user to re-add the
        default set of tests.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype._createEmptyContentPlaceholderIfNeeded):

        * Localizations/en.lproj/localizedStrings.js:

2018-11-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: minor style improvements
        https://bugs.webkit.org/show_bug.cgi?id=191727

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager):
        (WI.AuditManager.prototype._handleFrameMainResourceDidChange): Added.
        Clear test results when the main frame navigates, but don't clear the saved results.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):
        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.async fromPayload):
        (WI.AuditTestCaseResult.prototype.get resolvedDOMNodes): Added.
        (WI.AuditTestCaseResult.prototype.toJSON):
        Capture the full CSS path for any returned DOM nodes when the test finishes running, so that
        if the node moves around the path isn't modified as well.

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):
        Always show the URL for the test when viewing a saved result.

        * UserInterface/Views/AuditTestContentView.css:
        (.content-view-container > .content-view.audit-test > header p):
        (.content-view.audit-test > header):
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > header): Added.
        (.content-view.audit-test-case > header h1 > img):
        (.content-view.audit-test-case > header > .metadata > .source): Added.
        (.content-view.audit-test-case > header > .metadata > .duration):
        (.content-view.audit-test-case > section table > tr > td:first-child):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header):
        Horizontally align items in the header for visual consistency.

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include default filtering of InspectorBackend.dumpInspectorProtocolMessages with multi target backend
        https://bugs.webkit.org/show_bug.cgi?id=191785

        Reviewed by Matt Baker.

        * UserInterface/Debug/Bootstrap.js:
        (dumpMessagesCurrentState):
        (applyDumpMessagesState):
        (WI.runBootstrapOperations):
        Include tri-state for the logs button.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.set filterMultiplexingBackendInspectorProtocolMessages):
        (InspectorBackendClass.prototype.get filterMultiplexingBackendInspectorProtocolMessages):
        (InspectorBackendClass.prototype._startOrStopAutomaticTracing):
        Add new filtering state (the Setting already got added in the past).

        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer):
        (WI.LoggingProtocolTracer.prototype.set filterMultiplexingBackend):
        (WI.LoggingProtocolTracer.prototype.get filterMultiplexingBackend):
        (WI.LoggingProtocolTracer.prototype._processEntry):
        Perform new filtering.

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Local Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191740
        <rdar://problem/45470897>

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchResponse):
        Hide the TargetAgent does not exist message. This is necessary so that WebKitLegacy
        tests don't include this line in output each test.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.resetMainExecutionContext):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        Behave more like Main.js and initialize a MultiplexingBackendTarget when the
        TargetAgent is available.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        Use the main target, a.k.a. the page connection. The backend target's
        messages don't have any responses, so this was effectively not waiting
        at all.

2018-11-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TreeOutline shouldn't select first child of an expanded element on right arrow key
        https://bugs.webkit.org/show_bug.cgi?id=191766

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):

2018-11-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should recalculate scrollable height when resized
        https://bugs.webkit.org/show_bug.cgi?id=191328
        <rdar://problem/45854412>

        Reviewed by Devin Rousso.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._hideDetailView):
        Force table columns to layout after hiding the detail view.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.showColumn):
        Call `_resizeColumnsAndFiller` instead of `resize`. The latter also cleared
        `_cachedWidth`, which isn't unnecessary since the width hasn't changed.

        (WI.Table.prototype.layout):
        previously `_resizeColumnsAndFiller` always occurred after `_updateVisibleRows`,
        it was just a matter of whether the cached width and height were cleared first.
        That now happens in `sizeDidChange`.

        (WI.Table.prototype.sizeDidChange):
        (WI.Table.prototype._updateVisibleRows):
        (WI.Table.prototype.resize): Deleted.
        Internally this cleared the cached width and height, which moved to `sizeDidChange`.
        Externally this was used by NetworkTableContentView to force columns to
        layout after hiding the details view. Calling `updateLayout` on the table
        accomplishes the same thing using the standard View API.

        (WI.Table.prototype._resizeColumnsAndFiller):
        Only update the cached width, since the height will already have been
        updated. The number of rows doesn't change during this method, so that
        check was removed.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236540): Debugger: breakpoints are sorted alphabetically instead of numerically
        https://bugs.webkit.org/show_bug.cgi?id=191560

        Reviewed by Joseph Pecoraro.

        When sorting breakpoints, if the `WI.TreeElement`s being compared both contain instances of
        `WI.Breakpoint`, sort by `WI.SourceCodeLocation` instead of title.

        We only do this for `WI.Breakpoint` because they are the only debuggable item that has a
        `WI.SourceCodeLocation` (e.g. `WI.EventBreakpoint` is just an event name string).

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._compareBreakpointTreeElements): Added.
        (WI.DebuggerSidebarPanel.prototype._addIssue):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement.comparator): Deleted.
        (WI.DebuggerSidebarPanel.prototype._compareTreeElements): Deleted.

2018-11-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: shift-clicking on a property should extend selection
        https://bugs.webkit.org/show_bug.cgi?id=191575
        <rdar://problem/46012855>

        Reviewed by Devin Rousso.

        When there's at least one property is selected, Shift-clicking another property should extend the selection.
        Pressing Up or Down keys while holding Shift also extends the selection.

        Remove unnecessary `_startedSelection`. Use `hasSelectedProperties` and `_isMousePressed` instead.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        `_isMousePressed` was set to `true` by mistake, causing numerous assertion fails.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set focusIndex):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.hasSelectedProperties): Renamed from _hasSelectedProperties.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.extendSelectedProperties): Added.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseLeave): Removed.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        Implement Shift-ArrowUp/ArrowDown keys.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseLeave): Removed.
        This was only used to set _startedSelection.

        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        Remove _startedSelection and use hasSelectedProperties method instead.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        Remove spreadsheetStylePropertyMouseLeave since it is no longer used.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: send a call stack with each action instead of an array of call frames
        https://bugs.webkit.org/show_bug.cgi?id=191628

        Reviewed by Dean Jackson.

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async swizzle):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.fromPayload):
        (WI.RecordingAction.prototype.async swizzle):

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: add drag+drop for importing Audits and Recordings
        https://bugs.webkit.org/show_bug.cgi?id=191566

        Reviewed by Joseph Pecoraro.

        Reorganize the file loading logic for the Audit and Canvas tabs/managers. Add "drop" event
        handlers to the tabs that add and show the corresponding object for the imported data.

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView):
        (WI.AuditTabContentView.prototype._handleDragOver): Added.
        (WI.AuditTabContentView.prototype._handleDrop): Added.
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._handleDragOver): Added.
        (WI.CanvasTabContentView.prototype._handleDrop): Added.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async processJSON): Added.
        (WI.AuditManager.prototype.export):
        (WI.AuditManager.prototype.import): Deleted.
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.processJSON): Added.
        (WI.CanvasManager.prototype.importRecording): Deleted.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype._handleImportButtonNavigationItemClicked):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._handleImportButtonNavigationItemClicked): Added.
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._handleImportButtonNavigationItemClicked): Added.

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.save): Added.
        (WI.FileUtilities.importText): Added.
        (WI.FileUtilities.importJSON): Added.
        (WI.FileUtilities.async readText): Added.
        (WI.FileUtilities.async readJSON): Added.
        (WI.saveDataToFile): Deleted.
        (WI.loadDataFromFile): Deleted.
        * UserInterface/Base/Main.js:
        (WI._contextMenuRequested):
        (WI._save):
        (WI._saveAs):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._exportHAR):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._exportRecording):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._save):
        Move file related functions into a static class container.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include target identifier in protocol logging
        https://bugs.webkit.org/show_bug.cgi?id=191478

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchResponse):
        (InspectorBackend.Connection.prototype._dispatchEvent):
        (InspectorBackend.Connection.prototype._sendMessageToBackend):
        Call tracer log methods with the connection.

        * UserInterface/Debug/CapturingProtocolTracer.js:
        * UserInterface/Protocol/ProtocolTracer.js:
        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer):
        (WI.LoggingProtocolTracer.prototype.logFrontendException):
        (WI.LoggingProtocolTracer.prototype.logFrontendRequest):
        (WI.LoggingProtocolTracer.prototype.logWillHandleResponse):
        (WI.LoggingProtocolTracer.prototype.logDidHandleResponse):
        (WI.LoggingProtocolTracer.prototype.logDidHandleEvent):
        Include the connection in log methods.

        (WI.LoggingProtocolTracer.prototype.logProtocolError):
        Removed, this is never called.
                
        (WI.LoggingProtocolTracer.prototype._processEntry):
        Include the target identifier in entry messages.

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        This starts introducing multi-target support into the Web Inspector frontend.
        Specifically a backend connection that is persistent, but has the ability to
        connect to and transition between Page targets received through that backend
        connection.

        This patch introduces the concept of a "Backend Target" which is the single
        connection that the frontend contains to a backend. The old way of connecting
        directly to a target is still supported. In that case the frontend constructs
        a DirectBackendTarget for the debuggable type the frontend was spawns for.
        However, if the frontend opens and has a TargetAgent, then it is likely
        connected to a multi-target supporting backend and instead constructs a
        MultiplexingBackendTarget, and will receive further information about
        sub-targets to connect to. The only sub-target at the moment is a Page
        sub-target.

        As part of bringing up multi-target support this adds a few measures to
        handle situations where the frontend is playing fast and loose with agents.
        When the frontend does `FooAgent.method` it intends that to be performed
        on the "main" target being debugged. Likewise when the frontend loops
        over targets it expects them to be the debuggable targets. This patch
        profiles a new implementation of `WI.mainTarget` and `WI.targets` to
        match the assumptions being made by the frontend.

          - In a direct-target world, there is a single target which
            should be used for global agents and in WI.targets.

          - In a multi-target world, the page target is the one that
            should be used for global agents and WI.targets is the list
            of sub-targets (excluding the MultiplexingBackendTarget).

        In a multi-target world, there are now commonly two Targets. The
        MultiplexingBackendTarget and a PageTarget sub-target. In the future
        this may include more targets, such as ServiceWorkers, DedicatedWorkers,
        and perhaps even frames.

        In a multi-target world, the frontend is immediately told about targets
        as soon as it opens (via Target.targetCreated). In order to support
        this, frontend initialization happens without a main target being available.
        So this makes a few small changes to frontend initialization to perform
        a bit of work once we know what the main target is.

        During a page transition the frontend is told to destroy existing targets
        and is soon after told about any new page targets (via Target.targetDestroyed
        and Target.targetCreated). The frontend special cases this page transition.
        It expects only one Page target to be alive at any time, accessible through
        WI.pageTarget. When a page transition happens the WI.pageTarget changes, and
        the frontend performs a bit of work to prepare the UI to handle the transition:
        `<Manager>.transitionPageTarget` / WI.Notification.TransitionPageTarget.
        For the most part the UI behaves fine as long once there are main frame
        change and main resource change events, but those other events allow
        the frontend to respond to the specific page transition cases.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.initializePageTarget):
        (WI.transitionPageTarget):
        (WI.terminatePageTarget):
        (WI.resetMainExecutionContext):
        (WI.redirectGlobalAgentsToConnection):
        (WI.contentLoaded):
        New global functions for target initialization
        and page transitioning.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.initializePageTarget):
        (WI.transitionPageTarget):
        (WI.terminatePageTarget):
        (WI.resetMainExecutionContext):
        (WI.redirectGlobalAgentsToConnection):
        New global functions for target initialization.
        Tests continue to be a direct connection to the Page.

        * UserInterface/Protocol/TargetObserver.js:
        (WI.TargetObserver.prototype.targetCreated):
        (WI.TargetObserver.prototype.targetDestroyed):
        (WI.TargetObserver.prototype.dispatchMessageFromTarget):
        New observer goes to the manager.

        * UserInterface/Controllers/TargetManager.js:
        (WI.TargetManager):
        (WI.TargetManager.prototype.get targets):
        (WI.TargetManager.prototype.get allTargets):
        (WI.TargetManager.prototype.targetForIdentifier):
        (WI.TargetManager.prototype.targetCreated):
        (WI.TargetManager.prototype.targetDestroyed):
        (WI.TargetManager.prototype.dispatchMessageFromTarget):
        (WI.TargetManager.prototype.createMultiplexingBackendTarget):
        (WI.TargetManager.prototype.createDirectBackendTarget):
        (WI.TargetManager.prototype._addTarget):
        (WI.TargetManager.prototype._removeTarget):
        (WI.TargetManager.prototype._createTarget):
        (WI.TargetManager.prototype._checkAndHandlePageTargetTransition):
        (WI.TargetManager.prototype._checkAndHandlePageTargetTermination):
        (WI.TargetManager.prototype.addTarget): Deleted.
        (WI.TargetManager.prototype.removeTarget): Deleted.
        (WI.TargetManager.prototype.initializeMainTarget): Deleted.
        TargetManager is where we handle creating and destroying targets
        and their connections. In order to simplify things a bit we make
        `WI.targets`, which goes through `get targets()` an array instead
        of a Set. And this includes only the sub-targets.

        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager.prototype.workerCreated):
        (WI.WorkerManager.prototype.workerTerminated):
        Workers are still special-target-like things that multiplex through
        WorkerAgent instead of TargetAgent. We'd like to promote these to
        be full targets in the future.

        * UserInterface/Protocol/DirectBackendTarget.js: Renamed from Source/WebInspectorUI/UserInterface/Protocol/MainTarget.js.
        (WI.DirectBackendTarget):
        (WI.DirectBackendTarget.connectionInfoForDebuggable):
        (WI.DirectBackendTarget.prototype.get mainResource):
        (WI.DirectBackendTarget.prototype.set mainResource):
        This is the only "MainTarget" class. It is the backend target for a direct connection.

        * UserInterface/Protocol/MultiplexingBackendTarget.js:
        (WI.MultiplexingBackendTarget):
        (WI.MultiplexingBackendTarget.prototype.initialize):
        (WI.MultiplexingBackendTarget.prototype.get name):
        (WI.MultiplexingBackendTarget.prototype.get executionContext):
        (WI.MultiplexingBackendTarget.prototype.get mainResource):
        This is the new backend target for a multi-target connection.
        We don't expect it to be treated like other targets, so we don't
        expect anyone to ask it for resources/executionContext/name info.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.TargetManager.prototype.evaluateInInspectedWindow):
        This can be triggered by watch expressions before any target, and
        therefore execution context, is available. Just return null, when
        an execution context is available those clients will try again.

        * UserInterface/Debug/Bootstrap.js:
        Provide an WI.isEngineeringBuild boolean that can be used for various
        debugging features.

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

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.dispatch):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        (InspectorBackend.Agent):
        `InspectorBackend.mainConnection` was renamed `InspectorBackend.backendConnection`.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection):
        (InspectorBackend.Connection.prototype._dispatchResponse):
        (InspectorBackend.Connection.prototype._sendCommandToBackendWithCallback):
        (InspectorBackend.Connection.prototype._sendCommandToBackendExpectingPromise):
        (InspectorBackend.BackendConnection):
        (InspectorBackend.BackendConnection.prototype.sendMessageToBackend):
        (InspectorBackend.WorkerConnection):
        (InspectorBackend.TargetConnection):
        (InspectorBackend.TargetConnection.sendMessageToBackend):
        Use a global sequence id to make filtering a bit easier in protocol tracing.
        TargetConnection is identical to WorkerConnection except it uses TargetAgent
        instead of WorkerAgent to perform multiplexing.

        * UserInterface/Protocol/JavaScriptContextTarget.js:
        (WI.JavaScriptContextTarget):
        * UserInterface/Protocol/PageTarget.js:
        (WI.PageTarget):
        (WI.PageTarget.prototype.get displayName):
        Specialized target types.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._targetAdded):
        (WI.DebuggerSidebarPanel.prototype._targetRemoved):
        (WI.DebuggerSidebarPanel.prototype._updateCallStackTreeOutline):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._targetAdded):
        (WI.SourceCodeTextEditor.prototype._targetRemoved):
        (WI.SourceCodeTextEditor.prototype._callFramesDidChange):
        (WI.SourceCodeTextEditor.prototype._updateThreadIndicatorWidget):
        (WI.SourceCodeTextEditor.prototype._reinsertAllThreadIndicators):
        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype.initializeMainExecutionContextPathComponent):
        (WI.QuickConsole.prototype._targetAdded):
        (WI.QuickConsole.prototype._targetRemoved):
        We make target added get called with all targets, including the
        MultiplexingBackendTarget and PageTargets, both of which would
        not have happened before. Before it was only WorkerTargets. Make
        these sites a little more robust for the type of target they expect
        to be able to handle.

        * UserInterface/Base/Object.js:
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype.transitionPageTarget):
        (WI.DOMManager.prototype.requestDocument):
        (WI.DOMManager.prototype._setDocument):
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.transitionPageTarget):
        (WI.NetworkManager.prototype.executionContextCreated):
        (WI.NetworkManager.prototype._processMainFrameResourceTreePayload):
        * UserInterface/Models/DefaultDashboard.js:
        (WI.DefaultDashboard):
        (WI.DefaultDashboard.prototype._mainResourceDidChange):
        (WI.DefaultDashboard.prototype._transitionPageTarget):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._mainResourceDidChange):
        (WI.NetworkTableContentView.prototype._transitionPageTarget):
        Special case handling when performing a page transition.

        * UserInterface/Views/SettingsTabContentView.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        Document reloads are not supported right now.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: don't start with auto-capture enabled
        https://bugs.webkit.org/show_bug.cgi?id=191553

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input):

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network Graphs are missing minimum sizes, might have no graph at all
        https://bugs.webkit.org/show_bug.cgi?id=191208

        Reviewed by Joseph Pecoraro.

        `WI.NetworkTableContentView` used to rely on the `WI.timelineManager.persistentNetworkTimeline`
        for events when a new resource is added. It also listened for `WI.Frame.Event.MainResourceDidChange`
        on it's own, which was also listened to by `WI.timelineManager.persistentNetworkTimeline`.
        Due to the order in which these listeners are added, the new main resource would get added
        to the `WI.timelineManager.persistentNetworkTimeline` (and the `WI.NetworkTableContentView`
        shortly after), and right after that the `WI.NetworkTableContentView` would reset the graph
        in it's own listener for `WI.Frame.Event.MainResourceDidChange`.

        This patch removes `WI.timelineManager.persistentNetworkTimeline` and instead makes it so
        that `WI.NetworkTableContentView` listens for resource added and main frame changed events
        on its own (similar to other views that follow this pattern), ensuring that there are no
        event races.

        Also relaxes the "requirement" that prevented 0 width blocks from being drawn, allowing
        requests served from memory/disk to appear in the graph (their time is effectively 0).

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._updateWaterfallTimeRange): Added.
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFinish):
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFail):
        (WI.NetworkTableContentView.prototype._handleResourceAdded): Added.
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._handleNodeDidFireEvent):
        (WI.NetworkTableContentView.prototype._handleNodeLowPowerChanged):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .waterfall .block:matches(.mouse-tracking, .filler) + .block:not(.mouse-tracking, .filler)): Added.
        (.network-table .waterfall .block.filler + .block): Deleted.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype._mainResourceDidChange):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype.get persistentNetworkTimeline): Deleted.

2018-11-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support select all (Cmd-A)
        https://bugs.webkit.org/show_bug.cgi?id=190299
        <rdar://problem/45029170>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.selectAll):
        (WI.Table.prototype._handleKeyDown):

2018-11-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table with no selection should select the first/last row on down/up arrow key
        https://bugs.webkit.org/show_bug.cgi?id=190100
        <rdar://problem/44879243>

        Reviewed by Devin Rousso.

        Pressing the up or down arrow key when nothing is selected should select
        the last or first row, respectively. After selecting the row make sure
        it is visible by calling the new Table method `revealRow`.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.revealRow):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._selectRowsFromArrowKey):

2018-11-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Command-A should select all properties
        https://bugs.webkit.org/show_bug.cgi?id=191435
        <rdar://problem/45921373>

        Reviewed by Devin Rousso.

        When focused on a style property, Command-A on Mac (Control-A on other platforms)
        should select all properties of the style rule.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):

2018-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure certificate details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191447
        <rdar://problem/30019476>

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get responseSecurity): Added.
        (WI.Resource.prototype.get loadedSecurely): Added.
        (WI.Resource.prototype.updateForResponse):

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.initialLayout):
        (WI.NetworkResourceDetailView.prototype.showContentViewForIdentifier):
        * UserInterface/Views/NetworkResourceDetailView.css:
        (.content-view.resource-details .go-to-arrow): Added.
        (.content-view.resource-details.showing-find-banner .search-highlight): Added.

        * UserInterface/Views/ResourceSecurityContentView.js: Added.
        (WI.ResourceSecurityContentView):
        (WI.ResourceSecurityContentView.prototype.initialLayout):
        (WI.ResourceSecurityContentView.prototype.layout):
        (WI.ResourceSecurityContentView.prototype.closed):
        (WI.ResourceSecurityContentView.prototype.get supportsSearch):
        (WI.ResourceSecurityContentView.prototype.get numberOfSearchResults):
        (WI.ResourceSecurityContentView.prototype.get hasPerformedSearch):
        (WI.ResourceSecurityContentView.prototype.set automaticallyRevealFirstSearchResult):
        (WI.ResourceSecurityContentView.prototype.performSearch):
        (WI.ResourceSecurityContentView.prototype.searchCleared):
        (WI.ResourceSecurityContentView.prototype.revealPreviousSearchResult):
        (WI.ResourceSecurityContentView.prototype.revealNextSearchResult):
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs):
        (WI.ResourceSecurityContentView.prototype._revealSearchResult):
        (WI.ResourceSecurityContentView.prototype._handleResourceResponseReceived):
        * UserInterface/Views/ResourceSecurityContentView.css: Added.
        (body[dir] .resource-security > section.certificate > .details):
        (.resource-security .details .key):
        (.resource-security .dns-name + .dns-name > .key,):
        (.resource-security .show-more):
        (@media (prefers-dark-interface) body[dir] .resource-security > section.certificate > .details):
        (@media (prefers-dark-interface) .resource-security .details .key):

        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype._refreshRequestCookiesSection):
        (WI.ResourceCookiesContentView.prototype._refreshResponseCookiesSection):
        (WI.ResourceCookiesContentView.prototype._markIncompleteSectionWithMessage): Deleted.
        (WI.ResourceCookiesContentView.prototype._markIncompleteSectionWithLoadingIndicator): Deleted.
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._refreshSummarySection):
        (WI.ResourceHeadersContentView.prototype._refreshRedirectHeadersSections):
        (WI.ResourceHeadersContentView.prototype._refreshRequestHeadersSection):
        (WI.ResourceHeadersContentView.prototype._refreshResponseHeadersSection):
        (WI.ResourceHeadersContentView.prototype._refreshQueryStringSection):
        (WI.ResourceHeadersContentView.prototype._refreshRequestDataSection):
        (WI.ResourceHeadersContentView.prototype._markIncompleteSectionWithMessage): Deleted.
        (WI.ResourceHeadersContentView.prototype._markIncompleteSectionWithLoadingIndicator): Deleted.
        (WI.ResourceHeadersContentView.prototype._appendKeyValuePair): Deleted.
        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers .h1-status > .key,):
        (body[dir] .resource-headers > section.error > .details): Deleted.
        (.resource-headers > section.error .key): Deleted.
        (.resource-headers .details): Deleted.
        (.resource-headers .details .pair): Deleted.
        (body[dir=rtl] .resource-headers .details .pair): Deleted.
        (.resource-headers .details .key): Deleted.
        (.resource-headers .value): Deleted.
        (.resource-headers .go-to-arrow): Deleted.
        (.resource-headers.showing-find-banner .search-highlight): Deleted.
        * UserInterface/Views/ResourceDetailsSection.js:
        (WI.ResourceDetailsSection.prototype.markIncompleteSectionWithMessage): Added.
        (WI.ResourceDetailsSection.prototype.markIncompleteSectionWithLoadingIndicator): Added.
        (WI.ResourceDetailsSection.prototype.appendKeyValuePair): Added.
        * UserInterface/Views/ResourceDetailsSection.css:
        (.resource-details > section > .details): Added.
        (.resource-details > section > .details > .pair): Added.
        (body[dir=rtl] .resource-details > section > .details > .pair): Added.
        (.resource-details > section > .details > .pair > .key): Added.
        (.resource-details > section > .details > .pair > .value): Added.
        (body[dir] .resource-details > section.error > .details): Added.
        (.resource-details > section.error > .details > .pair > .key): Added.
        Move commonly used functions/styles from container classes onto this object.

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

2018-11-12  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support shift-extending the row selection
        https://bugs.webkit.org/show_bug.cgi?id=189718
        <rdar://problem/44577942>

        Reviewed by Devin Rousso.

        Allow the table selection to be extended by shift-clicking a row, or by
        holding shift and pressing either the up or down arrow key. If both command
        and shift are pressed, shift is ignored. The selection behavior is modeled
        after AppKit's NSTableView.

        * UserInterface/Base/IndexSet.js:
        (WI.IndexSet.prototype.addRange):
        (WI.IndexSet.prototype.deleteRange):
        (WI.IndexSet.prototype.equals):
        (WI.IndexSet.prototype.difference):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype._handleKeyDown):
        Holding shift and pressing either the up or down arrow key extends the
        selection to the next unselected row adjacent to the anchor row, or causes
        the anchor row to be deselected, decreasing the selection. The table chooses
        the action to take based on the direction of movement (up or down), and
        the currently selected rows.

        (WI.Table.prototype._selectRowsFromArrowKey):
        (WI.Table.prototype._handleMouseDown.normalizeRange):
        (WI.Table.prototype._handleMouseDown):
        Clicking a row while holding down shift extends the selection to include
        the rows between the anchor row (exclusive) and clicked row (inclusive).
        The anchor row is equal to the value of `_selectedRowIndex` prior to
        clicking a new row.

        (WI.Table.prototype._deselectAllAndSelect):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._toggleSelectedRowStyle):
        (WI.Table.prototype._updateSelectedRows):
        Helper method for updating the selection to the specified rows, and updating
        DOM styles for rows that are added to or removed from the selection.

2018-11-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: inline swatches don't work when Multiple Properties Selection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191165
        <rdar://problem/45737972>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        `click` is fired after `mouseup` and inline swatches are activated by `click` event.
        Changing this to `click` allows swatches to activate before editing starts.

        (WI.SpreadsheetTextField.prototype._handleMouseDown):
        Clicking on the field that is being edited should't restart editing. It should move the text caret.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * UserInterface/Images/ApplicationCache.png:
        * UserInterface/Images/ApplicationCache@2x.png:
        * UserInterface/Images/ApplicationCacheManifest.png:
        * UserInterface/Images/ApplicationCacheManifest@2x.png:
        * UserInterface/Images/Breakpoint.png:
        * UserInterface/Images/Breakpoint@2x.png:
        * UserInterface/Images/BreakpointInactive.png:
        * UserInterface/Images/BreakpointInactive@2x.png:
        * UserInterface/Images/ClippingCSS.png:
        * UserInterface/Images/ClippingCSS@2x.png:
        * UserInterface/Images/ClippingCSSLarge.png:
        * UserInterface/Images/ClippingCSSLarge@2x.png:
        * UserInterface/Images/ClippingGeneric.png:
        * UserInterface/Images/ClippingGeneric@2x.png:
        * UserInterface/Images/ClippingGenericLarge.png:
        * UserInterface/Images/ClippingGenericLarge@2x.png:
        * UserInterface/Images/ClippingJS.png:
        * UserInterface/Images/ClippingJS@2x.png:
        * UserInterface/Images/ClippingJSLarge.png:
        * UserInterface/Images/ClippingJSLarge@2x.png:
        * UserInterface/Images/ColorIcon.png:
        * UserInterface/Images/ColorIcon@2x.png:
        * UserInterface/Images/Cookie.png:
        * UserInterface/Images/Cookie@2x.png:
        * UserInterface/Images/Database.png:
        * UserInterface/Images/Database@2x.png:
        * UserInterface/Images/DatabaseTable.png:
        * UserInterface/Images/DatabaseTable@2x.png:
        * UserInterface/Images/DocumentCSS.png:
        * UserInterface/Images/DocumentCSS@2x.png:
        * UserInterface/Images/DocumentCSSLarge.png:
        * UserInterface/Images/DocumentCSSLarge@2x.png:
        * UserInterface/Images/DocumentFont.png:
        * UserInterface/Images/DocumentFont@2x.png:
        * UserInterface/Images/DocumentFontLarge.png:
        * UserInterface/Images/DocumentFontLarge@2x.png:
        * UserInterface/Images/DocumentGL.png:
        * UserInterface/Images/DocumentGL@2x.png:
        * UserInterface/Images/DocumentGeneric.png:
        * UserInterface/Images/DocumentGeneric@2x.png:
        * UserInterface/Images/DocumentGenericLarge.png:
        * UserInterface/Images/DocumentGenericLarge@2x.png:
        * UserInterface/Images/DocumentImage.png:
        * UserInterface/Images/DocumentImage@2x.png:
        * UserInterface/Images/DocumentImageLarge.png:
        * UserInterface/Images/DocumentImageLarge@2x.png:
        * UserInterface/Images/DocumentJS.png:
        * UserInterface/Images/DocumentJS@2x.png:
        * UserInterface/Images/DocumentJSLarge.png:
        * UserInterface/Images/DocumentJSLarge@2x.png:
        * UserInterface/Images/DocumentMarkup.png:
        * UserInterface/Images/DocumentMarkup@2x.png:
        * UserInterface/Images/DocumentMarkupLarge.png:
        * UserInterface/Images/DocumentMarkupLarge@2x.png:
        * UserInterface/Images/FolderGeneric.png:
        * UserInterface/Images/FolderGeneric@2x.png:
        * UserInterface/Images/GradientStop.png:
        * UserInterface/Images/GradientStop@2x.png:
        * UserInterface/Images/GradientStopSelected.png:
        * UserInterface/Images/GradientStopSelected@2x.png:
        * UserInterface/Images/HoverMenuButton.png:
        * UserInterface/Images/HoverMenuButton@2x.png:
        * UserInterface/Images/InstructionPointer.png:
        * UserInterface/Images/InstructionPointer@2x.png:
        * UserInterface/Images/LocalStorage.png:
        * UserInterface/Images/LocalStorage@2x.png:
        * UserInterface/Images/SessionStorage.png:
        * UserInterface/Images/SessionStorage@2x.png:
        * UserInterface/Images/SliderThumb.png:
        * UserInterface/Images/SliderThumb@2x.png:
        * UserInterface/Images/SliderThumbPressed.png:
        * UserInterface/Images/SliderThumbPressed@2x.png:
        * UserInterface/Images/WebSocket.png:
        * UserInterface/Images/WebSocket@2x.png:
        * UserInterface/Images/WebSocketLarge.png:
        * UserInterface/Images/WebSocketLarge@2x.png:
        * UserInterface/Images/WorkerScript.png:
        * UserInterface/Images/WorkerScript@2x.png:
        * UserInterface/Images/WorkerScriptLarge.png:
        * UserInterface/Images/WorkerScriptLarge@2x.png:

2018-11-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Pressing Tab or Enter should start editing focused property
        https://bugs.webkit.org/show_bug.cgi?id=191510
        <rdar://problem/45970897>

        Reviewed by Dean Jackson.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Start moving toward better multi-target support
        https://bugs.webkit.org/show_bug.cgi?id=191345

        Reviewed by Devin Rousso.

        This change continues the move toward better multi-target support
        by explicitly using explicit target agents in more places, and
        converting generalized feature checks into target agnostic versions
        that use the new InspectorBackend.domains, which does not vary based
        on the connected targets / debuggable type.

        I also audited uses of RuntimeAgent, ConsoleAgent, and DebuggerAgent
        for better multi-target support since these agents should already
        have complete multi-target support.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.initialize):
        Move explicitly to target.Agent feature checks with a known target.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange):
        Move explicitly to target.DebuggerAgent for feature checks with a known target.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        Move explicitly to target.NetworkAgent for feature checks with a known target.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.initializeTarget):
        (WI.RuntimeManager.prototype.saveResult):
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.updatePreview):
        (WI.RemoteObject.prototype.getDisplayablePropertyDescriptors):
        (WI.RemoteObject.prototype.deprecatedGetDisplayableProperties):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._createTypeTokenAnnotator):
        (WI.SourceCodeTextEditor.prototype._createBasicBlockAnnotator):
        Move explicitly to target.RuntimeAgent for feature checks with a known target.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.initializeCSSCompletions):
        Move explicitly to target.CSSAgent for feature checks with a known target.

        * UserInterface/Views/ContextMenuUtilities.js:
        Use the DebuggerAgent from the target associated with the DOMNode's
        remote object instead of assuming the main target.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Update the ConsoleAgent setting on all targets that support it.

        * UserInterface/Views/BreakpointActionView.js:
        (WI.BreakpointActionView):
        All backends support BreakpointActionType, the assertion can go away.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.get navigationItems):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.get navigationItems):
        Include additional `window.FooAgent` checks for these since they will need
        to be revisited in the future.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.get domains):
        (InspectorBackendClass.prototype.activateDomain):
        Expose InspectorBackend.domains.<Domain> for feature checking.

        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype._createPopoverContent):
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype._mainResourceDidChange):
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager):
        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingFinished):
        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.functionReturnDivot):
        * UserInterface/Protocol/DebuggerObserver.js:
        (WI.DebuggerObserver):
        * UserInterface/Protocol/NetworkObserver.js:
        (WI.NetworkObserver.prototype.requestWillBeSent):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked):
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView):
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRequestAndResponse):
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView):
        (WI.NetworkManager.prototype.webSocketWillSendHandshakeRequest):
        (WI.DebuggerManager.prototype.debuggerDidResume):
        Feature check in a target agnostic way.

2018-11-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: ResourceQueryController should early return when query is longer than search string
        https://bugs.webkit.org/show_bug.cgi?id=191436

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/ResourceQueryController.js:

        * UserInterface/Models/ResourceQueryMatch.js:
        (WI.ResourceQueryMatch):
        Drive-by fixes.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: undefined is not an object (evaluating 'treeElement.parent.removeChild')
        https://bugs.webkit.org/show_bug.cgi?id=191454

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._scriptsCleared):
        This was intending to iterate the Map's values, which are tree elements.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Potential for watch expressions to never show results
        https://bugs.webkit.org/show_bug.cgi?id=191438

        Reviewed by Matt Baker.

        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WI.ScopeChainDetailsSidebarPanel.prototype._generateWatchExpressionsSection):
        If there was no object don't bail, continue and resolve the Promise.
        In this case we can fallback to show `undefined`. This code might not be
        reachable right now, but is wrong as is.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Popover does not work when paused in Worker
        https://bugs.webkit.org/show_bug.cgi?id=191342

        Reviewed by Devin Rousso.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression.populate):
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression):
        When receiving the result of the popover evaluation associate the RemoteObject with
        the target we used to evaluate (such as the Debugger call frame), not the target
        associated with the editor.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Restrict domains at the target level instead of only at the window level
        https://bugs.webkit.org/show_bug.cgi?id=191344

        Reviewed by Devin Rousso.

        With this change the list of agents available on the target should accurately
        reflect the domains that target supports. We should start moving in the direction
        that if we are checking for, or using, a feature, we should ideally be using
        code that looks like `target.FooAgent.method` and not `window.FooAgent` or
        an unprefixed `FooAgent`. More changes to follow.

        * UserInterface/Controllers/AppControllerBase.js:
        * UserInterface/Base/DebuggableType.js: Added.
        Extract debuggable type enum out into its own file loaded early on.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        Load DebuggableType.js.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        With these changes target.ServiceWorker is only exposed on a ServiceWorker target.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.WorkerConnection):
        With these changes Target.js restricts the domains exposed on the Target so just
        clone all of the agents (we don't need to do anything special).

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.activateDomain):
        Update supported domains per-type. If there is no explicit availability
        then the domain is supported on all types.

        (InspectorBackendClass.prototype.supportedDomainsForDebuggableType):
        Get supported domains per-type.

        (InspectorBackendClass.prototype.get workerSupportedDomains): Deleted.
        (InspectorBackendClass.prototype.workerSupportedDomain): Deleted.
        workerSupportedDomains is now unnecessary.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype._supportedDomainsForTargetType):
        Restrict supported domains for this target based on its type.

        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        Regenerate protocol files now that workerSupportedDomains is unnecessary
        and explicit availability has been added to other domains.

2018-11-07  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r236705): Web Inspector: wrong text color for selected DataGrid row
        https://bugs.webkit.org/show_bug.cgi?id=191405
        <rdar://problem/45893283>

        Reviewed by Matt Baker.

        Selection background color for both Dark Mode mode and Light Mode is dark blue.
        The text color for both cases should be white.

        * UserInterface/Views/DataGrid.css:
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:focus tr.editable.selected .cell-content > input):

2018-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix "Javascript" => "JavaScript" enum in protocol generated objects
        https://bugs.webkit.org/show_bug.cgi?id=191340

        Reviewed by Devin Rousso.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        Insert a missing break statement for the WebGPU case.

        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord.memoryCategoriesFromProtocol):
        Use new enum name.

        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        Update enums with new generator.

2018-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: Web Inspector: Popovers drawing incorrectly in Network Tab (clicking between a few items)
        https://bugs.webkit.org/show_bug.cgi?id=191323

        Reviewed by Devin Rousso.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._drawBackground):
        Save and restore the context state between updates. Something
        was affecting the clearRect, making it so that it didn't actually
        clear the entire rect each time.

2018-11-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: turn off Start button when all tests are removed
        https://bugs.webkit.org/show_bug.cgi?id=191235

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):

2018-11-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection should not require that rows be in the cache
        https://bugs.webkit.org/show_bug.cgi?id=190993
        <rdar://problem/45613812>

        Reviewed by Devin Rousso.

        Deselecting a table row shouldn't depend on it being in the cache. This
        allows us to implement select all, and other kinds of bulk selection
        actions that affect rows that haven't been revealed.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.deselectRow):

2018-11-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: show save/restore stack for recorded 2D Canvases
        https://bugs.webkit.org/show_bug.cgi?id=175283
        <rdar://problem/34040756>

        Reviewed by Matt Baker.

        Instead of using plain objects for holding the `WI.Recording`'s state, use a model object
        so that more data can be passed around. When visualizing the state, show any previously
        saved states in a `WI.DetailsSection` underneath the current state. If there are no saved
        states (meaning there is only the current state), don't use a `WI.DetailsSection`.

        * UserInterface/Models/RecordingState.js: Added.
        (WI.RecordingState):
        (WI.RecordingState.fromContext):
        (WI.RecordingState.async swizzleInitialState):
        (WI.RecordingState.prototype.get source):
        (WI.RecordingState.prototype.has):
        (WI.RecordingState.prototype.get return):
        (WI.RecordingState.prototype.toJSON):
        (WI.RecordingState.prototype.[Symbol.iterator]):

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async _process):
        (WI.Recording.prototype.async _swizzleState): Deleted.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.deriveCurrentState): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D):

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel):
        (WI.RecordingStateDetailsSidebarPanel.prototype.get scrollElement):
        (WI.RecordingStateDetailsSidebarPanel.prototype.sizeDidChange): Added.
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D.isColorProperty): Deleted.
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D.createInlineSwatch): Deleted.
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (.sidebar > .panel.details.recording-state > .content .details-section > .header .source): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr.modified): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr:not(.selected).non-standard .name-column): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr:not(.selected) .unavailable): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid .inline-swatch): Added.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr:not(.selected).non-standard): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr:not(.selected) .unavailable): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid .inline-swatch): Deleted.

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

        * Localizations/en.lproj/localizedStrings.js:

2018-11-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture changes to <canvas> that would affect the recorded context
        https://bugs.webkit.org/show_bug.cgi?id=190854

        Reviewed by Matt Baker.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.isFunctionForType):
        (WI.RecordingAction.constantNameForParameter):
        (WI.RecordingAction.prototype.get contextReplacer): Added.
        (WI.RecordingAction.prototype.async.swizzle):
        (WI.RecordingAction.prototype.apply):
        Create a constant list of actions for each recording type that need to replace the context
        with a different value before being applied (e.g. `width` should be applied to the
        `context`'s `canvas` instead of directly to the `context`).

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D.actionModifiesPath): Added.
        (WI.RecordingContentView.prototype._generateContentCanvas2D):
        (WI.RecordingContentView._actionModifiesPath): Deleted.
        Generate the path context after the actions are applied to the preview context so that the
        final width/height are known and can be used. This is needed because changing the
        width/height causes the content to be erased.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM):
        (WI.RecordingActionTreeElement._classNameForAction):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.tree-outline:focus .item.action.selected:not(.invalid, .initial-state, .has-context-replacer) > .icon): Added.
        (.item.action > .titles .context-replacer::after): Added.
        (.item.action.has-context-replacer > .icon): Added.
        (@media (prefers-dark-interface) .item.action:not(.invalid, .initial-state, .has-context-replacer) > .icon): Added.
        (.tree-outline:focus .item.action.selected:not(.initial-state, .invalid) > .icon): Deleted.
        (@media (prefers-dark-interface) .item.action:not(.initial-state) > .icon): Deleted.
        (@media (prefers-dark-interface) .tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon): Deleted.
        Add the context replacer text to the beginning of the action's name if it exists.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype._refreshPixelSize):
        (WI.CanvasContentView.prototype._updatePixelSize): Deleted.
        Update preview image when the canvas' size changes.

2018-11-02  Matt Baker  <mattbaker@apple.com>

        Web Inspector: support multiple selection/deletion of cookie records
        https://bugs.webkit.org/show_bug.cgi?id=66381
        <rdar://problem/19281525>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView):
        (WI.CookieStorageContentView.prototype.get scrollableElements):
        (WI.CookieStorageContentView.prototype.tableNumberOfRows):
        (WI.CookieStorageContentView.prototype.tableSortChanged):
        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
        (WI.CookieStorageContentView.prototype.tableDidRemoveRows):
        (WI.CookieStorageContentView.prototype.tablePopulateCell):
        (WI.CookieStorageContentView.prototype.initialLayout):
        (WI.CookieStorageContentView.prototype._generateSortComparator):
        (WI.CookieStorageContentView.prototype._refreshButtonClicked):
        (WI.CookieStorageContentView.prototype._reloadCookies):
        (WI.CookieStorageContentView.prototype._updateSort):
        (WI.CookieStorageContentView.prototype._handleTableKeyDown):
        (WI.CookieStorageContentView.prototype.update): Deleted.
        (WI.CookieStorageContentView.prototype._rebuildTable): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.localeCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.numberCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.expiresCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid): Deleted.
        (WI.CookieStorageContentView.prototype._deleteCallback): Deleted.
        Replace DataGrid with Table. The content view serves as the table
        delegate and data source, and handles delete and backspace key events
        to allow deleting the selected cookies. Cookies may also be deleted from
        the table context menu and a new button in the navigation bar.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype._getOrCreateRow):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._isRowSelected): Deleted.
        Make `isSelectedRow` public. It is more convenient and efficient than
        calling `Table.prototype.selectedRows.includes(rowIndex)`.

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: View: introduce a didLayoutSubtree
        https://bugs.webkit.org/show_bug.cgi?id=191176

        Reviewed by Matt Baker.

        Introduce logic to allow subclasses of `WI.View` to perform logic after every `WI.View` in
        their subtree has finished `layout`.

        * UserInterface/Views/View.js:
        (WI.View.prototype.didLayoutSubtree): Added.
        (WI.View.prototype._layoutSubtree):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.layout):
        (WI.NetworkTableContentView.prototype.didLayoutSubtree): Added.

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: remove unnecessary media event tracking
        https://bugs.webkit.org/show_bug.cgi?id=191174

        Reviewed by Joseph Pecoraro.

        Renames "Group by Node" to "Group Media Requests" for clarity.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkDetailViewClose):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype.layout):
        (WI.NetworkTableContentView.prototype._entryForDOMNode):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype._handleResourceEntryMousedownWaterfall):
        (WI.NetworkTableContentView.prototype._handleNodeEntryMousedownWaterfall):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .data-container .cell.name .range): Added.
        (.network-table .data-container .cell.name .range::before): Added.
        (.network-table:focus .data-container li.selected .cell.name .range): Added.
        (@media (prefers-dark-interface) .network-table .data-container .cell.name .range): Added.
        Always display the "Byte Range" title as a "subtitle", regardless of the media requests
        setting being toggled.
        Drive-by: update the position of the waterfall popover whenever the time range changes.
        Drive-by: close the details view if a node is selected and the media requests setting is
        turned off.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.resize): Added.
        (WI.Popover.prototype.handleEvent):

        * Localizations/en.lproj/localizedStrings.js:

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'mouseBlock.addEventListener')
        https://bugs.webkit.org/show_bug.cgi?id=191020

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler):
        Since `undefined` is not a number, it isn't less than `0`, which caused us to divide by
        `undefined` (equivalent to dividing by `0`), resulting in `NaN`.

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Uncaught Exception: TypeError: undefined is not an object (evaluating 'WI.modifierKeys.metaKey') (at ScopeBarItem.js:87:67)
        https://bugs.webkit.org/show_bug.cgi?id=191173

        Reviewed by Devin Rousso.

        WI.modifierKeys was accessed before it was initialized. Move it from WI.contentLoaded to WI.loaded,
        which happens before WI.contentLoaded.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r237652): Web Inspector: dumpInspectorProtocolMessages is always enabled
        https://bugs.webkit.org/show_bug.cgi?id=191161

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.get dumpInspectorProtocolMessages):

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Toggle selected properties by pressing Space or Command+/
        https://bugs.webkit.org/show_bug.cgi?id=181145
        <rdar://problem/36203388>

        Reviewed by Brian Burg.

        Pressing Space key or Command-/ toggles (comments out or uncomments) selected properties.

        This patch only works with "Enable Selection of Multiple Properties" checked. It shouldn't introduce any
        changes when this setting is unchecked.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get selectionRange):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype.update): Renamed from _update.
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):
        (WI.SpreadsheetStyleProperty.prototype.applyFilter):
        (WI.SpreadsheetStyleProperty.prototype.handleCopyEvent):
        Make `update` method public. No other changes were made.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: create a setting for auto-recording newly created contexts
        https://bugs.webkit.org/show_bug.cgi?id=190856

        Reviewed by Brian Burg.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.supportsRecordingAutoCapture): Added.
        (WI.CanvasManager.prototype.setRecordingAutoCaptureFrameCount): Added.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingStarted):
        (WI.Canvas.prototype.recordingFinished):

        * UserInterface/Models/Recording.js:

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype.get navigationItems):
        (WI.CanvasOverviewContentView.prototype.initialLayout): Added.
        (WI.CanvasOverviewContentView.prototype.attached):
        (WI.CanvasOverviewContentView.prototype.detached):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount): Added.
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureCheckedDidChange): Added.
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureEnabledChanged): Added.
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged): Added.
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label): Added.
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input): Added.
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input::-webkit-inner-spin-button): Added.
        (.popover-content > .tree-outline .item.recording > .icon): Deleted.
        (.popover-content > .tree-outline .item.recording:hover): Deleted.
        (.popover-content > .tree-outline .item.recording:hover > .icon): Deleted.
        Drive-by: removed unused CSS rules.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._updateProgressView):
        (WI.CanvasContentView.prototype._updateViewRelatedItems):

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):

        * UserInterface/Views/CheckboxNavigationItem.js:
        (WI.CheckboxNavigationItem):
        (WI.CheckboxNavigationItem.prototype._handleLabelClick): Added.

        * UserInterface/Base/Setting.js:

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: display low-power enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=190641
        <rdar://problem/45319049>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.videoLowPowerChanged): Added.

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

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.prototype.get lowPowerRanges): Added.
        (WI.DOMNode.prototype.videoLowPowerChanged): Added.
        (WI.DOMNode.prototype.canEnterLowPowerMode): Added.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateDomainCell):
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode):
        (WI.NetworkTableContentView.prototype._handleNodeLowPowerChanged): Added.
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area):
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area.dom-fullscreen): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area.low-power): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-fullscreen): Deleted.

        * UserInterface/Views/DOMNodeEventsContentView.js:
        (WI.DOMNodeEventsContentView):
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        (WI.DOMNodeEventsContentView.prototype.closed): Deleted.
        (WI.DOMNodeEventsContentView.prototype._handleDOMNodeDidFireEvent): Deleted.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView):
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype.layout): Added.
        (WI.DOMEventsBreakdownView.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.DOMEventsBreakdownView.prototype._handleDOMNodeLowPowerChanged): Added.
        (WI.DOMEventsBreakdownView.prototype.addEvent): Deleted.
        (WI.DOMEventsBreakdownView.prototype._populateTable.percentOfTotalTime): Deleted.
        (WI.DOMEventsBreakdownView.prototype._populateTable): Deleted.
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown .graph > .area): Added.
        (.dom-events-breakdown .graph > .area.fullscreen):
        (.dom-events-breakdown .graph > .area.low-power): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: save imported audits across WebInspector sessions
        https://bugs.webkit.org/show_bug.cgi?id=190858
        <rdar://problem/45527625>

        Reviewed by Brian Burg.

        * UserInterface/Base/ObjectStore.js: Added.
        (WI.ObjectStore):
        (WI.ObjectStore.supported):
        (WI.ObjectStore._open):
        (WI.ObjectStore.get _databaseName):
        (WI.ObjectStore.prototype.associateObject):
        (WI.ObjectStore.prototype.async getAll):
        (WI.ObjectStore.prototype.async add):
        (WI.ObjectStore.prototype.async addObject):
        (WI.ObjectStore.prototype.async delete):
        (WI.ObjectStore.prototype.async deleteObject):
        (WI.ObjectStore.prototype._resolveKeyPath):
        (WI.ObjectStore.prototype.async _operation.listener):
        (WI.ObjectStore.prototype.async _operation):
        Wrapper for a global `IndexedDB` instance for all of WebInspector (per level). Instances of
        `WI.ObjectStore` are able to control a given `IDBObjectStore` using a promise-based API.

        *NOTE*: due to the constraint that `IDBObjectStore`s are only able to be created when the
        owner `IndexedDB` is "upgrade"d, all `WI.ObjectStore` must be declared before the database
        is opened for the first time. Additionally, any time a new `WI.ObjectStore` is added, the
        `version` needs to be incremented to ensure that the "upgrade" event fires.

        To use any of the `*Object` functions, one must implement a `toJSON` on the object provided.
        This is so that `WI.ObjectStore` is able to add the resulting identifier value to the owner
        object while storing its `toJSON` value in the IndexedDB (e.g. for objects that have cycles).

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.import):
        (WI.AuditManager.prototype.loadStoredTests): Added.
        (WI.AuditManager.prototype.removeTest): Added.
        (WI.AuditManager.prototype._addTest):

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView.prototype.initialLayout): Added.
        Attempt to load stored audits when the Audit tab is first shown (lazy-load).

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved): Added.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.ondelete):
        Only allow top-level audits to be deleted, as that is what matches the `WI.ObjectStore`.

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

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move a few remaining global WI settings to WI.settings
        https://bugs.webkit.org/show_bug.cgi?id=191137

        Reviewed by Brian Burg.

        Move and better name some of the WI.settings created in Main.js
        to WI.settings, alongside other global settings.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        Move settings, and register for settings changes in contentLoaded.

        * UserInterface/Base/Setting.js:
        New settings, and sort values.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        Update setting values for tests.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.initializeTarget):
        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.prototype.get children):
        (WI.DOMNode.prototype.get nextSibling):
        (WI.DOMNode.prototype.get previousSibling):
        (WI.DOMNode.prototype.get childNodeCount):
        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.initialize):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.closed):
        (WI.DOMTreeContentView.prototype._togglePaintFlashing):
        (WI.DOMTreeContentView.prototype._showPaintRectsSettingChanged):
        (WI.DOMTreeContentView.prototype._showShadowDOMSettingChanged):
        (WI.DOMTreeContentView.prototype._toggleShowsShadowDOMSetting):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.close):
        (WI.DOMTreeOutline.prototype._revealAndSelectNode):
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype.initialLayout):
        (WI.LayerTreeDetailsSidebarPanel.prototype._updateDisplayWithLayers):
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.closed):
        (WI.Layers3DContentView.prototype._showPaintRectsSettingChanged):
        (WI.Layers3DContentView.prototype._togglePaintFlashing):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype._resourceCachingDisabledSettingChanged):
        (WI.NetworkTableContentView.prototype._toggleDisableResourceCache):
        * UserInterface/Views/ScriptContentView.js:
        (WI.ScriptContentView):
        (WI.ScriptContentView.prototype.closed):
        (WI.ScriptContentView.prototype._contentDidPopulate):
        (WI.ScriptContentView.prototype._enableControlFlowProfilerSettingChanged):
        (WI.ScriptContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.shown):
        (WI.SourceCodeTextEditor.prototype._proceedPopulateWithContent):
        (WI.SourceCodeTextEditor.prototype._setTypeTokenAnnotatorEnabledState):
        (WI.SourceCodeTextEditor.prototype.set _basicBlockAnnotatorEnabled):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype.closed):
        (WI.TextResourceContentView.prototype._contentDidPopulate):
        (WI.TextResourceContentView.prototype._enableControlFlowProfilerSettingChanged):
        (WI.TextResourceContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        Renamed setting.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: missing contextmenu items for links
        https://bugs.webkit.org/show_bug.cgi?id=191021

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):
        (WI.SpreadsheetStyleProperty.prototype._handleLinkContextMenu): Added.
        If the token is subtype of "link", add contextmenu items to the wrapper element.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL.showResourceWithOptions):
        (WI.appendContextMenuItemsForURL):
        Drive-by: don't assume that `options` will be provided.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: implement copying and deletion of multiple properties
        https://bugs.webkit.org/show_bug.cgi?id=191037
        <rdar://problem/45650078>

        Reviewed by Brian Burg.

        This patch should only work with "Enable Selection of Multiple Properties" checked. It shouldn't introduce any
        changes when this setting is unchecked.

        Mousedown on a property (1) and moving the mouse cursor to another property (2) should select properties 1, 2, and
        all properties between them until mouseup is fired.

        Once selected:
        - Pressing Command-C should copy the selected properties.
        - Pressing Delete should remove the properties.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.get formattedText):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected:focus):
        (@media (prefers-dark-interface)):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.deselectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseEnter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseLeave):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._hasSelectedProperties):
        Property selection is defined as two numbers: anchorIndex and focusIndex.
        The property with focusIndex is actually focused. The focus outline is replaced by a more subtle left blue border.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration.selecting,):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseEnter):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseLeave):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowMouseUp):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        Implement copying the same way it's done for DataGrid: by adding copyHandler property to the focused element.
        Add `tabIndex=-1` so the property element can be focused.

        (WI.SpreadsheetStyleProperty.prototype.get property):
        (WI.SpreadsheetStyleProperty.prototype.get selected):
        (WI.SpreadsheetStyleProperty.prototype.set selected):
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):
        (WI.SpreadsheetStyleProperty.prototype.handleCopyEvent):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidCommit):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
        (WI.SpreadsheetStyleProperty.prototype._handleNamePaste):

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: attempt to re-link DOM nodes for imported results
        https://bugs.webkit.org/show_bug.cgi?id=191044
        <rdar://problem/45687364>

        Reviewed by Brian Burg.

        When importing a `WI.AuditTestCaseResult`, attempt to `querySelector` for each item in
        `data.domNodes`. If a node is found, replace it with that node and show a tree instead.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload): Added.
        (WI.AuditTestCase.fromPayload): Deleted.

        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup.async fromPayload): Added.
        (WI.AuditTestGroup.fromPayload): Deleted.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload): Added.
        (WI.AuditTestCaseResult.fromPayload): Deleted.

        * UserInterface/Models/AuditTestGroupResult.js:
        (WI.AuditTestGroupResult.async fromPayload): Added.
        (WI.AuditTestGroupResult.fromPayload): Deleted.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.import):

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Follow-up review comment to r237652.

        Reviewed by Brian Burg.

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

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Separate target initialization from frontend initialization
        https://bugs.webkit.org/show_bug.cgi?id=191052
        <rdar://problem/45658384>

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        Create the targets after the rest of frontend initialization. This is a step
        toward a frontend opening and being told about multiple targets instead of
        knowing in advance a single target it is connected to. All backend
        messages during frontend initialization now happen with an explicit target.

        * UserInterface/Controllers/ApplicationCacheManager.js:
        (WI.ApplicationCacheManager):
        (WI.ApplicationCacheManager.prototype.initializeTarget):
        (WI.ApplicationCacheManager.prototype.initialize):
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.initializeTarget):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.initializeTarget):
        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager):
        (WI.ConsoleManager.prototype.initializeLogChannels):
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype.initializeTarget):
        * UserInterface/Controllers/DOMStorageManager.js:
        (WI.DOMStorageManager):
        (WI.DOMStorageManager.prototype.initializeTarget):
        * UserInterface/Controllers/DatabaseManager.js:
        (WI.DatabaseManager):
        (WI.DatabaseManager.prototype.initializeTarget):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.restoreBreakpointsSoon): Deleted.
        * UserInterface/Controllers/HeapManager.js:
        (WI.HeapManager.prototype.initializeTarget):
        * UserInterface/Controllers/IndexedDBManager.js:
        (WI.IndexedDBManager):
        (WI.IndexedDBManager.prototype.initializeTarget):
        * UserInterface/Controllers/LayerTreeManager.js:
        (WI.LayerTreeManager.prototype.initializeTarget):
        * UserInterface/Controllers/MemoryManager.js:
        (WI.MemoryManager.prototype.initializeTarget):
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.initializeTarget):
        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager):
        (WI.RuntimeManager.prototype.initializeTarget):
        * UserInterface/Controllers/TargetManager.js:
        (WI.TargetManager):
        (WI.TargetManager.prototype.initializeTargetsWithMainTarget):
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.initializeTarget):
        (WI.TimelineManager.prototype.set enabledTimelineTypes):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager):
        (WI.WorkerManager.prototype.initializeTarget):
        Move Target initialization out of the constructor into a top level
        `initializeTarget` function. This will be expected to be called
        by any target that the frontend connects to.

        (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange):
        Drive-by fix. Update all targets if the setting changes.

        (WI.WorkerManager.prototype.workerCreated):
        Call initialize on the new target.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.initializeCSSCompletions):
        (WI.CSSCompletions.requestCSSCompletions): Deleted.
        Rename requestCSSCompletions to initializeCSSCompletions to try
        and standardize on "initialize" being used for most frontend one
        time initialization tasks. This being one such operation that
        only needs to be performed once on a target that supports it.

        * UserInterface/Protocol/Target.js:
        (WI.Target):
        (WI.Target.prototype.initialize):
        Perform explicit target initialization, such as initializing
        the state of all backend domains / agents. This is done by asking
        each of the managers to do initialization work for this target.

        (WI.Target.prototype.get ApplicationCacheAgent):
        (WI.Target.prototype.get CSSAgent):
        (WI.Target.prototype.get CanvasAgent):
        (WI.Target.prototype.get ConsoleAgent):
        (WI.Target.prototype.get DOMAgent):
        (WI.Target.prototype.get DOMDebuggerAgent):
        (WI.Target.prototype.get DOMStorageAgent):
        (WI.Target.prototype.get DatabaseAgent):
        (WI.Target.prototype.get DebuggerAgent):
        (WI.Target.prototype.get HeapAgent):
        (WI.Target.prototype.get IndexedDBAgent):
        (WI.Target.prototype.get InspectorAgent):
        (WI.Target.prototype.get LayerTreeAgent):
        (WI.Target.prototype.get MemoryAgent):
        (WI.Target.prototype.get NetworkAgent):
        (WI.Target.prototype.get PageAgent):
        (WI.Target.prototype.get RecordingAgent):
        (WI.Target.prototype.get RuntimeAgent):
        (WI.Target.prototype.get ScriptProfilerAgent):
        (WI.Target.prototype.get ServiceWorkerAgent):
        (WI.Target.prototype.get TargetAgent):
        (WI.Target.prototype.get TimelineAgent):
        (WI.Target.prototype.get WorkerAgent):
        Accessors for all of the agents on a Target.

        * UserInterface/Protocol/WorkerTarget.js:
        (WI.WorkerTarget):
        This is now automatically done in the base class.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        New necessary top level hooks, and initialize more like Main.js.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: show metadata for results
        https://bugs.webkit.org/show_bug.cgi?id=190853
        <rdar://problem/45527623>

        Reviewed by Brian Burg.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):
        Capture timestamps around the `RunetimeAgent.evaluate` call, as well as the URL of the page.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.fromPayload):
        (WI.AuditTestCaseResult.prototype.get metadata): Added.
        (WI.AuditTestCaseResult.prototype.toJSON):

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.initialLayout):
        (WI.AuditTestCaseContentView.prototype.layout):
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > header h1): Added.
        (.content-view.audit-test-case > header h1 > img): Added.
        (.content-view.audit-test-case > header > .metadata): Added.
        (.content-view.audit-test-case > header > .metadata > .source > time): Added.
        (.content-view.audit-test-case > header > .metadata > .source > a): Added.
        (.content-view.audit-test-case > header > .metadata > .duration): Added.
        (.content-view.audit-test-case > header > h1): Deleted.
        (.content-view.audit-test-case > header > h1 > img): Deleted.
        Display any metadata information where the `WI.ScopeBar` is for `WI.AuditTestGroupContentView`s.

        * UserInterface/Views/AuditTestContentView.css:
        (.content-view.audit-test > header):
        (.content-view.audit-test > header > .information): Added.
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header):
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .information): Deleted.
        Move common CSS rules to common parent class.

        * UserInterface/Base/Utilities.js:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: create Audit Tab
        https://bugs.webkit.org/show_bug.cgi?id=190754

        Reviewed by Matt Baker.

        Create an Audit tab for running audits on the inspected page. Leverage `Runtime.evaluate`
        for running the audit tests (arbitrary JavaScript), and use the returned value to generate
        a preview UI of the results. All tests/results can be exported/imported to formatted JSON:

        `AuditTestCase` JSON:
            {
                "type": "test-case",
                "name": <string>,
                <optional> "description": <string>,
                "test": <stringified JavaScript function>,
            }

        `AuditTestGroup` JSON:
            {
                "type": "test-group",
                "name": <string>,
                <optional> "description": <string>,
                "tests": [...<AuditTestCase, AuditTestGroup>],
            }

        `AuditTestCaseResult` JSON:
            {
                "type": "test-case-result",
                "name": <string>,
                <optional> "description": <string>,
                "level": <"pass", "warn", "fail", "error", "unsupported">,
                "data": {
                    "domNodes": [...<stringified CSS path>],
                    "domAttributes": [...<string>],
                    "errors": [...<string>],
                },
            }

        `AuditTestGroupResult` JSON:
            {
                "type": "test-group-result",
                "name": <string>,
                <optional> "description": <string>,
                "results": [...<AuditTestCaseResult, AuditTestGroupResult>],
            }

        More keys may be added in the future (especially for `AuditTestCaseResult.data`).

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager):
        (WI.AuditManager.synthesizeError): Added.
        (WI.AuditManager.prototype.get tests): Added.
        (WI.AuditManager.prototype.get results): Added.
        (WI.AuditManager.prototype.get runningState): Added.
        (WI.AuditManager.prototype.start): Added.
        (WI.AuditManager.prototype.stop): Added.
        (WI.AuditManager.prototype.import): Added.
        (WI.AuditManager.prototype.export): Added.
        (WI.AuditManager.prototype._addTest): Added.
        (WI.AuditManager.prototype._addResult): Added.
        (WI.AuditManager.prototype.get testSuites): Deleted.
        (WI.AuditManager.prototype.get reports): Deleted.
        (WI.AuditManager.prototype.async runAuditTestByRepresentedObject): Deleted.
        (WI.AuditManager.prototype.reportForId): Deleted.
        (WI.AuditManager.prototype.removeAllReports): Deleted.
        (WI.AuditManager.prototype.async _runTestCase): Deleted.

        * UserInterface/Models/AuditTestBase.js: Added.
        (WI.AuditTestBases):
        (WI.AuditTestBases.prototype.get name):
        (WI.AuditTestBases.prototype.get description):
        (WI.AuditTestBases.prototype.get runningState):
        (WI.AuditTestBases.prototype.get result):
        (WI.AuditTestBases.prototype.async start):
        (WI.AuditTestBases.prototype.stop):
        (WI.AuditTestBases.prototype.clearResult):
        (WI.AuditTestBases.prototype.saveIdentityToCookie):
        (WI.AuditTestBases.prototype.toJSON):
        (WI.AuditTestBases.prototype.async run):

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase):
        (WI.AuditTestCase.fromPayload): Added.
        (WI.AuditTestCase.prototype.toJSON): Added.
        (WI.AuditTestCase.prototype.async run): Added.
        (WI.AuditTestCase.prototype.async run.setLevel): Added.
        (WI.AuditTestCase.prototype.async run.addError): Added.
        (WI.AuditTestCase.prototype.async run.checkResultProperty.addErrorForValueType): Added.
        (WI.AuditTestCase.prototype.async run.checkResultProperty): Added.
        (WI.AuditTestCase.prototype.async run.async resultArrayForEach): Added.
        (WI.AuditTestCase.prototype.get id): Deleted.
        (WI.AuditTestCase.prototype.get name): Deleted.
        (WI.AuditTestCase.prototype.get suite): Deleted.
        (WI.AuditTestCase.prototype.get setup): Deleted.
        (WI.AuditTestCase.prototype.get tearDown): Deleted.
        (WI.AuditTestCase.prototype.get errorDetails): Deleted.

        * UserInterface/Models/AuditTestGroup.js: Added.
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.fromPayload):
        (WI.AuditTestGroup.prototype.get tests):
        (WI.AuditTestGroup.prototype.stop):
        (WI.AuditTestGroup.prototype.clearResult):
        (WI.AuditTestGroup.prototype.async run):
        (WI.AuditTestGroup.prototype.toJSON):
        (WI.AuditTestGroup.prototype._updateResult):
        (WI.AuditTestGroup.prototype._handleTestCompleted):
        (WI.AuditTestGroup.prototype._handleTestProgress):

        * UserInterface/Models/AuditTestResultBase.js: Added.
        (WI.AuditTestResultBase):
        (WI.AuditTestResultBase.prototype.get name):
        (WI.AuditTestResultBase.prototype.get description):
        (WI.AuditTestResultBase.prototype.get result):
        (WI.AuditTestResultBase.prototype.get didPass):
        (WI.AuditTestResultBase.prototype.get didWarn):
        (WI.AuditTestResultBase.prototype.get didFail):
        (WI.AuditTestResultBase.prototype.get didError):
        (WI.AuditTestResultBase.prototype.get unsupported):
        (WI.AuditTestResultBase.prototype.saveIdentityToCookie):
        (WI.AuditTestResultBase.prototype.toJSON):

        * UserInterface/Models/AuditTestCaseResult.js: Added.
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.fromPayload.checkArray):
        (WI.AuditTestCaseResult.fromPayload):
        (WI.AuditTestCaseResult.prototype.get level):
        (WI.AuditTestCaseResult.prototype.get data):
        (WI.AuditTestCaseResult.prototype.get didPass):
        (WI.AuditTestCaseResult.prototype.get didWarn):
        (WI.AuditTestCaseResult.prototype.get didFail):
        (WI.AuditTestCaseResult.prototype.get didError):
        (WI.AuditTestCaseResult.prototype.get unsupported):
        (WI.AuditTestCaseResult.prototype.toJSON):

        * UserInterface/Models/AuditTestGroupResult.js: Added.
        (WI.AuditTestGroupResult):
        (WI.AuditTestGroupResult.fromPayload):
        (WI.AuditTestGroupResult.prototype.get results):
        (WI.AuditTestGroupResult.prototype.get levelCounts):
        (WI.AuditTestGroupResult.prototype.get didPass):
        (WI.AuditTestGroupResult.prototype.get didWarn):
        (WI.AuditTestGroupResult.prototype.get didFail):
        (WI.AuditTestGroupResult.prototype.get didError):
        (WI.AuditTestGroupResult.prototype.get unsupported):
        (WI.AuditTestGroupResult.prototype.toJSON):

        * UserInterface/Views/AuditTabContentView.js: Added.
        (WI.AuditTabContentView):
        (WI.AuditTabContentView.tabInfo):
        (WI.AuditTabContentView.isTabAllowed):
        (WI.AuditTabContentView.prototype.get type):
        (WI.AuditTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.AuditTabContentView.prototype.canShowRepresentedObject):
        (WI.AuditTabContentView.prototype.shown):
        (WI.AuditTabContentView.prototype.hidden):
        (WI.AuditTabContentView.prototype._handleSpace):

        * UserInterface/Views/AuditNavigationSidebarPanel.js: Added.
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype.closed):
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._updateStartStopButtonNavigationItemState):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestAdded):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestCompleted):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestScheduled):
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        (WI.AuditNavigationSidebarPanel.prototype._handleStartStopButtonNavigationItemClicked):
        (WI.AuditNavigationSidebarPanel.prototype._handleImportButtonNavigationItemClicked):
        * UserInterface/Views/AuditNavigationSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.audit > .content):

        * UserInterface/Views/AuditTreeElement.js: Added.
        (WI.AuditTreeElement):
        (WI.AuditTreeElement.prototype.get result):
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondetach):
        (WI.AuditTreeElement.prototype.onpopulate):
        (WI.AuditTreeElement.prototype.populateContextMenu):
        (WI.AuditTreeElement.prototype._start):
        (WI.AuditTreeElement.prototype._updateLevel):
        (WI.AuditTreeElement.prototype._showRunningSpinner):
        (WI.AuditTreeElement.prototype._showRunningProgress):
        (WI.AuditTreeElement.prototype._handleTestCaseCompleted):
        (WI.AuditTreeElement.prototype._handleTestResultCleared):
        (WI.AuditTreeElement.prototype._handleTestCaseScheduled):
        (WI.AuditTreeElement.prototype._handleTestGroupCompleted):
        (WI.AuditTreeElement.prototype._handleTestGroupProgress):
        (WI.AuditTreeElement.prototype._handleTestGroupScheduled):
        (WI.AuditTreeElement.prototype._handleStatusClick):
        * UserInterface/Views/AuditTreeElement.css: Added.
        (.tree-outline .item.audit > .status):
        (.tree-outline .item.audit > .status > img):
        (.tree-outline .item.audit:matches(.test-case, .test-group) > .status:hover > img):
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:not(:hover)):
        (.tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status):
        (.tree-outline .item.audit > .status > img.pass):
        (.tree-outline .item.audit > .status > img.warn):
        (.tree-outline .item.audit > .status > img.fail):
        (.tree-outline .item.audit > .status > img.error):
        (.tree-outline .item.audit > .status > img.unsupported):
        (.audit.test-case .icon):
        (.audit.test-group .icon):
        (.audit.test-case-result .icon):
        (.audit.test-group-result .icon):

        * UserInterface/Views/AuditTestContentView.js: Added.
        (WI.AuditTestContentView):
        (WI.AuditTestContentView.prototype.get navigationItems):
        (WI.AuditTestContentView.prototype.get headerView):
        (WI.AuditTestContentView.prototype.get contentView):
        (WI.AuditTestContentView.prototype.get supportsSave):
        (WI.AuditTestContentView.prototype.get saveData):
        (WI.AuditTestContentView.prototype.initialLayout):
        (WI.AuditTestContentView.prototype.layout):
        (WI.AuditTestContentView.prototype.shown):
        (WI.AuditTestContentView.prototype.hidden):
        (WI.AuditTestContentView.prototype.get placeholderElement):
        (WI.AuditTestContentView.prototype.set placeholderElement):
        (WI.AuditTestContentView.prototype.showRunningPlaceholder):
        (WI.AuditTestContentView.prototype.showStoppingPlaceholder):
        (WI.AuditTestContentView.prototype.showNoResultPlaceholder):
        (WI.AuditTestContentView.prototype.showNoResultDataPlaceholder):
        (WI.AuditTestContentView.prototype.showFilteredPlaceholder):
        (WI.AuditTestContentView.prototype.hidePlaceholder):
        (WI.AuditTestContentView.prototype.applyFilter):
        (WI.AuditTestContentView.prototype.resetFilter):
        (WI.AuditTestContentView.prototype._exportAudit):
        (WI.AuditTestContentView.prototype._updateExportButtonNavigationItemState):
        (WI.AuditTestContentView.prototype._showPlaceholder):
        (WI.AuditTestContentView.prototype._handleExportButtonNavigationItemClicked):
        (WI.AuditTestContentView.prototype._handleTestChanged):
        * UserInterface/Views/AuditTestContentView.css: Added.
        (.content-view-container > .content-view.audit-test):
        (.content-view-container > .content-view.audit-test > header):
        (.content-view-container > .content-view.audit-test > header h1):
        (.content-view-container > .content-view.audit-test > header p):
        (.content-view.audit-test):
        (.content-view.audit-test h1):
        (.content-view.audit-test > header):
        (.content-view.audit-test > header p):
        (.content-view.audit-test .audit-test.filtered, .content-view.audit-test .audit-test .message-text-view):
        (.content-view.audit-test > section):
        (.content-view.audit-test > section > .message-text-view):
        (.content-view.audit-test.showing-placeholder):
        (.content-view.audit-test.showing-placeholder > section):
        (.content-view.audit-test.showing-placeholder > section > :not(.message-text-view)):
        (@media (prefers-dark-interface) .content-view.audit-test):

        * UserInterface/Views/AuditTestCaseContentView.js: Added.
        (WI.AuditTestCaseContentView):
        (WI.AuditTestCaseContentView.prototype.initialLayout):
        (WI.AuditTestCaseContentView.prototype.layout):
        (WI.AuditTestCaseContentView.prototype.showRunningPlaceholder):
        * UserInterface/Views/AuditTestCaseContentView.css: Added.
        (.content-view-container > .content-view.audit-test-case > header):
        (.content-view-container > .content-view.audit-test-case > section > :not(.message-text-view):first-child):
        (.content-view.audit-test-case > header > h1):
        (.content-view.audit-test-case > header > h1 > img):
        (.content-view.audit-test-case > section > :not(.message-text-view)):
        (.content-view.audit-test-case > section > :not(.message-text-view):last-child):
        (.content-view.audit-test-case > section > :not(.message-text-view) + :not(.message-text-view)):
        (.content-view.audit-test-case > section h1):
        (.content-view.audit-test-case > section table):
        (.content-view.audit-test-case > section table > tr + tr > td):
        (.content-view.audit-test-case > section table > tr > td > :not(.tree-outline)):
        (.content-view.audit-test-case > section table > tr > td:first-child):
        (.content-view.audit-test-case > section > .dom-nodes > table > tr > td:first-child):
        (.content-view.audit-test-case > section code):
        (.content-view.audit-test-case > section mark):

        * UserInterface/Views/AuditTestGroupContentView.js: Added.
        (WI.AuditTestGroupContentView):
        (WI.AuditTestGroupContentView.prototype.initialLayout):
        (WI.AuditTestGroupContentView.prototype.layout):
        (WI.AuditTestGroupContentView.prototype.shown):
        (WI.AuditTestGroupContentView.prototype.hidden):
        (WI.AuditTestGroupContentView.prototype.applyFilter):
        (WI.AuditTestGroupContentView.prototype.resetFilter):
        (WI.AuditTestGroupContentView.prototype.showRunningPlaceholder):
        (WI.AuditTestGroupContentView.prototype._subobjects):
        (WI.AuditTestGroupContentView.prototype._updateLevelScopeBar):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupCompleted):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupProgress):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupScheduled):
        (WI.AuditTestGroupContentView.prototype._handleLevelScopeBarSelectionChanged):
        * UserInterface/Views/AuditTestGroupContentView.css: Added.
        (.content-view-container > .content-view.audit-test-group > header):
        (.content-view.audit-test-group > header):
        (.content-view.audit-test-group.no-matches + .audit-test-group > header):
        (.content-view.audit-test-group > header, .content-view.audit-test-group:not(.filtered):last-child > header):
        (.content-view.audit-test-group.contains-test-case > header):
        (.content-view.audit-test-group.contains-test-case + .audit-test-group.contains-test-case):
        (.content-view.audit-test-group.contains-test-case:not(.contains-test-group) > section, .content-view.audit-test-group.contains-test-case.contains-test-group > section > .audit-test-case):
        (.content-view.audit-test-group > header > .information):
        (.content-view.audit-test-group > header > .information > p):
        (.content-view.audit-test-group > header > nav):
        (.content-view.audit-test-group > header > nav:empty):
        (.content-view.audit-test-group > header > nav:not(:empty):before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li):
        (.content-view.audit-test-group > header > nav > .scope-bar > li:not(:hover, .selected)):
        (.content-view.audit-test-group > header > nav > .scope-bar > li:last-child):
        (.content-view.audit-test-group > header > nav > .scope-bar > li::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.pass::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.warn::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.fail::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.error::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.unsupported::before):
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .percentage-pass:not(:empty)::after):
        (.content-view.audit-test-group > section > .audit-test-case:first-child, .content-view.audit-test-group > section > .audit-test-group + .audit-test-case, .content-view.audit-test-group > section > .audit-test-case + .audit-test-group):
        (.content-view.audit-test-group > section > .audit-test-case:last-child):

        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem):
        (WI.ScopeBarItem.prototype.set selected):
        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype.set selectedScopeBarItem):
        Add an `independent` option that prevents selection changes from deselecting other
        `WI.ScopeBarItem`s in the same `WI.ScopeBar` (`exclusive` takes precedence).

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.highlightAttribute):
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li .highlight):

        * UserInterface/Views/ToggleButtonNavigationItem.js:
        (WI.ToggleButtonNavigationItem.prototype.set toggled):
        Also change the `label` if the `ButtonStyle` has text.

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

        * UserInterface/Views/DividerNavigationItem.css:
        (.navigation-bar .item.divider):

        * UserInterface/Base/Utilities.js:
        (Promise.chain): Added.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        (WI.ContentView.isViewable):

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

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

        * UserInterface/Images/Audit.svg: Added.
        * UserInterface/Images/AuditStart.svg: Added.
        * UserInterface/Images/AuditStop.svg: Added.
        * UserInterface/Images/AuditTestCase.svg: Added.
        * UserInterface/Images/AuditTestCaseResult.svg: Added.
        * UserInterface/Images/AuditTestError.svg: Added.
        * UserInterface/Images/AuditTestFail.svg: Added.
        * UserInterface/Images/AuditTestGroup.svg: Added.
        * UserInterface/Images/AuditTestGroupResult.svg: Added.
        * UserInterface/Images/AuditTestNoResult.svg: Added.
        * UserInterface/Images/AuditTestPass.svg: Added.
        * UserInterface/Images/AuditTestUnsupported.svg: Added.
        * UserInterface/Images/AuditTestWarn.svg: Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide options to WI.cssPath for more verbosity
        https://bugs.webkit.org/show_bug.cgi?id=190987

        Reviewed by Brian Burg.

        * UserInterface/Base/DOMUtilities.js:
        (WI.cssPath):
        (WI.cssPathComponent):
        When the option `full` is true, print every attribute along with every node in the hierarchy
        until the root is reached. This partially duplicates the effect of an XPath, but instead
        uses CSS selectors, making it much more human readable and recognizable.

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: change WI.ColorWheel to use conic-gradient()
        https://bugs.webkit.org/show_bug.cgi?id=189485

        Reviewed by Brian Burg.

        Use the ("new") HSL `WI.ColorPicker` if `conic-gradient` is supported. Otherwise, use the
        ("old") RGB `WI.LegacyColorPicker`.

        * UserInterface/Views/ColorWheel.js:
        (WI.ColorWheel):
        (WI.ColorWheel.prototype.set dimension):
        (WI.ColorWheel.prototype.set brightness):
        (WI.ColorWheel.prototype.get tintedColor):
        (WI.ColorWheel.prototype.set tintedColor):
        (WI.ColorWheel.prototype.get rawColor):
        (WI.ColorWheel.prototype.get _hue): Added.
        (WI.ColorWheel.prototype.get _saturation): Added.
        (WI.ColorWheel.prototype._updateColorForMouseEvent):
        (WI.ColorWheel.prototype._setCrosshairPosition):
        (WI.ColorWheel.prototype._updateGradient): Added.
        (WI.ColorWheel.prototype._pointInCircleForEvent.distance): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent.angleFromCenterToPoint): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent.pointOnCircumference): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent): Deleted.
        (WI.ColorWheel.prototype._tintedColorToPointAndBrightness): Deleted.
        (WI.ColorWheel.prototype._drawRawCanvas): Deleted.
        (WI.ColorWheel.prototype._colorAtPointWithBrightness): Deleted.
        (WI.ColorWheel.prototype._drawTintedCanvas): Deleted.
        (WI.ColorWheel.prototype._draw): Deleted.
        * UserInterface/Views/ColorWheel.css:
        (.color-wheel > .gradient): Added.
        (.color-wheel > .crosshair): Added.

        * UserInterface/Views/LegacyColorWheel.js: Copied from Source/WebInspectorUI/UserInterface/Views/ColorWheel.js.

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.supportsConicGradient): Added.
        (WI.ColorPicker.prototype._updateSliders):

        * UserInterface/Models/Geometry.js:
        (WI.Point.prototype.distance):

        * UserInterface/Main.html:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: make the layers sidebar in the Elements tab always visible
        https://bugs.webkit.org/show_bug.cgi?id=190158

        Reviewed by Brian Burg.

        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor WI.ScopeBarItem for better extensibility
        https://bugs.webkit.org/show_bug.cgi?id=190986

        Reviewed by Brian Burg.

        Renames `withModifier` to `extendSelection` for clarity of usage, and to allow the changes
        in <https://webkit.org/b/190754> (adding an option to allow `WI.ScopeBarItem`s to be
        selected without deselcting any other `WI.ScopeBarItem`s) to use the same variable.

        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem):
        (WI.ScopeBarItem.prototype.set selected):
        (WI.ScopeBarItem.prototype._handleMouseDown):
        (WI.ScopeBarItem.prototype.setSelected): Deleted.

        * UserInterface/Views/ScopeBar.js:
        (WI.ScopeBar):
        (WI.ScopeBar.prototype._populate):
        (WI.ScopeBar.prototype._itemSelectionDidChange):

        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype.set selectedScopeBarItem):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel):

2018-10-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Flash views with red outline on initial layout
        https://bugs.webkit.org/show_bug.cgi?id=191048

        Reviewed by Devin Rousso.

        * UserInterface/Views/View.js:
        (WI.View.prototype._layoutSubtree):
        (WI.View.prototype._drawLayoutFlashingOutline):

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: show warning when path moves offscreen
        https://bugs.webkit.org/show_bug.cgi?id=191016

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.deriveCurrentState):
        (WI.RecordingAction.prototype.get isVisual):
        (WI.RecordingAction.prototype.get warning): Added.
        (WI.RecordingAction.prototype.process.checkInvalidCurrentAxisPoint): Added.
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.prototype.get hasVisibleEffect): Deleted.
        Replace `hasVisibleEffect` with a more general `warning` value, so that it can be used for
        more types of warnings.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action.visual.warning:not(.invalid) > .status > .warning): Added.
        (.item.action.visual.no-visible-effect:not(.invalid) > .status > .warning): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor code for getting properties via WI.RemoteObject
        https://bugs.webkit.org/show_bug.cgi?id=190989

        Reviewed by Matt Baker.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.getPropertyDescriptors): Added.
        (WI.RemoteObject.prototype.getPropertyDescriptorsAsObject): Added.
        (WI.RemoteObject.prototype.getOwnPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype.getAllPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype._getPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype.getOwnPropertyDescriptorsAsObject): Deleted.

        * UserInterface/Views/ErrorObjectView.js:
        (WI.ErrorObjectView.prototype.update):
        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
        (WI.ObjectTreePropertyTreeElement.prototype._updateChildren):
        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView.prototype.update):

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * WebInspectorUI.xcodeproj/project.pbxproj:
        English->en

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: prevent Canvas tab from listening for "space" when not visibile
        https://bugs.webkit.org/show_bug.cgi?id=190988

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.shown):
        (WI.CanvasTabContentView.prototype.hidden): Added.

2018-10-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support deleting rows
        https://bugs.webkit.org/show_bug.cgi?id=189803
        <rdar://problem/44655709>

        Reviewed by Devin Rousso.

        Add methods for removing rows from a Table without reloading the data
        source. This patch adds Table.prototype.removeRow for removing a single
        row, and Table.prototype.removeSelectedRows for removing the entire selection.
        The latter also attempts to select a new row, if possible, before removing
        the selection.

        * UserInterface/Base/IndexSet.js:
        (WI.IndexSet.prototype.copy):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get numberOfRows):
        Cache the number of rows in the table data source. Invalidate cached
        value whenever table data is reloaded. Removing rows immediately updates
        cached value, without incurring a potentially expensive reload.

        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        Remove the selected rows and select a new row, if possible.
        (WI.Table.prototype._updateVisibleRows):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._deselectAllAndSelect):
        Drive-by fix: should work when `rowToSelect` isn't already selected.
        (WI.Table.prototype._removeRows):
        Remove rows and adjust the indexes of rows that are shifted up as a result
        of preceding rows being removed.

2018-10-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: simplify some editing code checks
        https://bugs.webkit.org/show_bug.cgi?id=190970

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/EditingSupport.js:
        (WI.enclosingCodeMirror): Added.
        (WI.isBeingEdited):
        (WI.isEventTargetAnEditableField):

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

2018-10-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: undefined is not an object (evaluating 'this._classListContainer.children')
        https://bugs.webkit.org/show_bug.cgi?id=190966

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.layout):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._classToggleButtonClicked):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._populateClassToggles):
        Don't try to reload the class toggles if the we haven't `layout` yet, as the element won't
        yet exist.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas Recording loading goes significantly slower when "Frame" tree element is expanded
        https://bugs.webkit.org/show_bug.cgi?id=190497

        Reviewed by Joseph Pecoraro.

        Save the `WI.TreeElement` that are in the DOM, and compare that with any `WI.TreeElement`
        that would be added to the DOM. If all of the following are true, don't edit the DOM:
         - no focused `WI.TreeElement` that isn't currently visible (we would scroll otherwise)
         - the set of previously visible `WI.TreeElement`s (e.g. not used for scroll padding) has at
           least one of the `WI.TreeElement`s that would be added from this update
            - this means that the user hasn't scrolled beyond the padding `WI.TreeElement`
         - there are no `WI.TreeElement`s that would be added from this update that were NOT added
           in a previous update
            - this covers the case that a `WI.TreeElement` is inserted in the visible area

        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements.walk):
        (WI.TreeOutline.prototype.updateVirtualizedElements):

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Broken frontend, DOMAgent is used but does not exist
        https://bugs.webkit.org/show_bug.cgi?id=190922
        <rdar://problem/45569827>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.requestDocument):
        Feature check for agents that may not exist in a JSContext.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: add corner rounding to the network timing "blocks"
        https://bugs.webkit.org/show_bug.cgi?id=190379

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.css:
        (.waterfall .block):
        (body[dir=ltr] .waterfall .block): Added.
        (body[dir=rtl] .waterfall .block): Added.
        (.network-table .waterfall .block + .block): Added.
        (.network-table .waterfall .block.filler + .block, .network-table .waterfall .block:not(.request, .response) + :matches(.request, .response)): Added.
        (.network-table .waterfall .block:last-child): Added.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: display fullscreen enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=189874
        <rdar://problem/44700000>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.didFireEvent):
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.didFireEvent):
        Allow `data` to be passed to the frontend with `didFireEvent`.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.getFullscreenDOMEvents): Added.
        (WI.DOMNode.prototype.didFireEvent):
        (WI.DOMNode.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.DOMNode.prototype._addDOMEvent):
        (WI.DOMNode.prototype._shouldListenForEventListeners): Added.
        If an event is fired on an ancestor of this node, also record that event in this node's
        `domEvents`, including the `originator` node.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-fullscreen): Added.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype._populateTable):
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown .graph > .area.fullscreen): Added.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > .point): Added.
        (.dom-events-breakdown:not(.has-inherited) .originator): Added.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: more aggressively snap timing blocks together
        https://bugs.webkit.org/show_bug.cgi?id=190439

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        If the time difference between the end of the previous block and the start of this block
        would result in less than 2px of space, extend the next block back to the previous block.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: popovers for function source code are malformed
        https://bugs.webkit.org/show_bug.cgi?id=190859

        Reviewed by Joseph Pecoraro.

        Previously, the `WI.Popover` would be drawn twice: once when the
        `WI.CodeMirrorTokenTrackingController` determines that the user has hovered on a function
        token, and once again when the source for that function is formatted (after being retrieved).
        In the case that the formatter is able to return the prettified source within a frame (or
        two), the `WI.Popover` is still in the middle of animating to its new size, meaning that the
        changes made by the formatted `update` will be overridden on the next rAF (creates a flash).

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype):
        (WI.Popover.prototype._animateFrame.drawBackground):
        (WI.Popover.prototype._drawBackground):
        Add a member variable to make sure that there is only ever one rAF firing at a time.
        Drive-by: rework the background code to only use one canvas.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._showPopoverForFunction.didGetDetails):
        Don't show the `WI.Popover` until the formatter has finished prettifying the function's
        source code, as otherwise there is brief moment that the popover appears and is empty.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r237232): changing resources via up/down blurs the TreeOutline in Resources
        https://bugs.webkit.org/show_bug.cgi?id=190862

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set selectedTextRange):
        Don't `focus` unless the `activeElement` is not a WebInspector element (e.g. <body>),
        meaning that the previously focused element has been removed from the DOM and no longer
        needs to keep the focus.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSP request payload on medium.com is unreadable, should be pretty-printed
        https://bugs.webkit.org/show_bug.cgi?id=190354
        <rdar://problem/45090894>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set string.update):
        (WI.TextEditor.prototype._attemptToDetermineMIMEType): Added.
        If the content doesn't already have a MIME type, attempt to determine one by trying to
        format it as "javascript" (e.g. request JSON that is simply missing a MIME type).

        * UserInterface/Views/TextContentView.js:
        (WI.TextContentView):
        (WI.TextContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        * UserInterface/Views/ScriptContentView.js:
        (WI.ScriptContentView):
        (WI.ScriptContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        Enable the "Pretty Print" navigation button if the MIME type changes to something that is
        able to be formatted.
        Drive-by: reorder the creation of the "Pretty Print" button so that it exists if
        `_attemptToDetermineMIMEType` finishes synchronously.

2018-10-23  Devin Rousso  <drousso@apple.com>

        Uncaught Exception: TypeError: null is not an object (evaluating 'mouseBlock.addEventListener')
        https://bugs.webkit.org/show_bug.cgi?id=190766

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        When creating the `mouseBlock`, if the `startTimestamp` and `endTimestamp` are equal, we
        don't create an element. If this is true for the total range of the `WI.Resouce` (meaning
        its `startTime` and `responseEnd`), don't even try to create blocks.

2018-10-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: "Queued NaNms" in Network tab
        https://bugs.webkit.org/show_bug.cgi?id=190767
        <rdar://problem/45420859>

        Reviewed by Brian Burg.

        * UserInterface/Models/ResourceTimingData.js:
        (WI.ResourceTimingData.prototype.get fetchStart):
        If the `WI.ResourceTimingData` has no `fetchStart` use the associated `WI.Resource`'s
        `requestSentTimestamp` (just like `startTime`).

2018-10-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Open Quickly dialog doesn't show named scripts that appear in the debugger sidebar
        https://bugs.webkit.org/show_bug.cgi?id=190649

        Reviewed by Devin Rousso.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype.didPresentDialog):
        (WI.OpenResourceDialog.prototype._addResourcesForTarget):
        (WI.OpenResourceDialog.prototype._addScriptsForTarget):
        Include non-resource named scripts from the main target in
        the open quickly dialog.

2018-10-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused member variable of DebuggerSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=190743

        Reviewed by Devin Rousso.

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

2018-10-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Quickly Open to line/column does should have caret indicating where the position is
        https://bugs.webkit.org/show_bug.cgi?id=190643

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set selectedTextRange):
        (WI.TextEditor.prototype.revealPosition):
        Ensure that CodeMirror is focused before attempting to `setSelection`.
        Drive-by: allow selections past the "end" of the line (since there is a `\n` or `\r`).

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.dialogWasDismissedWithRepresentedObject):
        Remove the extra `focus` call after dismissing the `WI.GoToLineDialog` since it is now
        handled by `WI.TextEditor` via `revealPosition`.

2018-10-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ⌃G to jump to line in CSS file wipes the line
        https://bugs.webkit.org/show_bug.cgi?id=190645

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        * UserInterface/Views/Dialog.js:
        (WI.Dialog.prototype.dismiss):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.dialogWasDismissed): Deleted.
        Rename the handler when dismissing a dialog with a value so that
        it is clear this is only on a successful value and not an invalid value.
        Dialog now only calls this delegate with a valid value. This addresses
        exceptions seen when the GoToLineDialog was dimissed via Escape and
        an unexpected `null` value was being handled in the delegate.

        * UserInterface/Views/GoToLineDialog.js:
        (WI.GoToLineDialog.prototype._handleKeydownEvent):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._handleKeydownEvent):
        Prevent default on the event whenever we dismiss the dialog.
        Without this, the key event was also being sent to the editor.
        In this case, that meant an "Enter" key was replacing the new
        selection in the TextEditor with a newline!

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture previously saved states and add them to the recording payload
        https://bugs.webkit.org/show_bug.cgi?id=190473

        Reviewed by Joseph Pecoraro.

        Instead of sending a single object of the current state of the context, send an array of
        objects, one for each restore point. When replaying, recreate each restore point before
        applying the selected action(s).

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.fromPayload):
        (WI.Recording.prototype.toJSON):
        (WI.Recording.prototype.async._process):
        (WI.Recording.prototype.async._swizzleState): Added.
        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.deriveCurrentState): Added.
        (WI.RecordingAction.prototype.get states): Added.
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.prototype.get state): Deleted.
        Drive-by: when `process`ing, also check to see if any values in the current state changed
        outside of those expected in `_stateModifiers` (e.g. `restore` may modify some state values).

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D):

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        Default to showing the most recent (current) state.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.initialLayout): Added.
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        (WI.CanvasTabContentView.prototype._addRecording): Added.
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._recordingAdded): Deleted.
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.get importedRecordings): Added.
        (WI.CanvasManager.prototype.importRecording):
        Drive-by: store imported recordings on `WI.CanvasManager` so that if the Canvas tab is
        closed we can still show the list of imported recordings.

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas recording sidebar scroll position lost after switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=190482

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Sidebar.js:
        (WI.Sidebar.prototype.removeSidebarPanel):
        (WI.Sidebar.prototype.set selectedSidebarPanel):
        Call `hidden` before setting `selected` to `false`, as that sets `display: none;` on the
        element, which sets the `scrollTop` to `0`.

        * UserInterface/Views/SidebarPanel.js:
        (WI.SidebarPanel.prototype.shown):
        (WI.SidebarPanel.prototype.hidden):
        (WI.SidebarPanel.prototype.get scrollElement): Added.
        Allow subclasses to specify the scrolling element for saving/restoring the scroll position.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.get scrollElement): Added.
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.get scrollElement): Added.

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Should be a way to go directly from an event in the overview view to the specialized timeline for that event
        https://bugs.webkit.org/show_bug.cgi?id=135307
        <rdar://problem/17273966>

        Reviewed by Joseph Pecoraro.

        When a `WI.TimelineRecordBar` is clicked, call up the delegate chain to the overview and
        adjust the currently selected `WI.TimelineRecordBar` among the `WI.TimelineOverviewGraph`s.
        Similarly, selecting a `WI.DataGridNode` in any `WI.TimelineView` subclass will use the same
        logic to select the corresponding `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype.reset):
        (WI.TimelineOverview.prototype._recordSelected):

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph):
        (WI.TimelineOverviewGraph.prototype.set selectedRecord):
        (WI.TimelineOverviewGraph.prototype.get selectedRecordBar): Added.
        (WI.TimelineOverviewGraph.prototype.set selectedRecordBar): Added.
        (WI.TimelineOverviewGraph.prototype.timelineRecordBarClicked): Added.
        (WI.TimelineOverviewGraph.prototype._needsSelectedRecordLayout):

        * UserInterface/Views/TimelineRecordBar.js:
        (WI.TimelineRecordBar):
        (WI.TimelineRecordBar.prototype.get selected): Added.
        (WI.TimelineRecordBar.prototype.set selected): Added.
        (WI.TimelineRecordBar.prototype._handleClick): Added.
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.selected > .segment): Added.
        Add a `delegate` that is notified whenever the element is clicked.

        * UserInterface/Views/TimelineDataGridNode.js:
        (WI.TimelineDataGridNode.prototype.refreshGraph.createBar):
        * UserInterface/Views/LayoutTimelineOverviewGraph.js:
        (WI.LayoutTimelineOverviewGraph.prototype.updateSelectedRecord):
        (WI.LayoutTimelineOverviewGraph.prototype._updateRowLayout.createBar):
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        (WI.NetworkTimelineOverviewGraph.prototype.layout.createBar):
        * UserInterface/Views/ScriptTimelineOverviewGraph.js:
        (WI.ScriptTimelineOverviewGraph.prototype.layout.createBar):
        (WI.ScriptTimelineOverviewGraph.prototype.updateSelectedRecord):

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype.showTimelineViewForTimeline):

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: sequences of spaces longer than 16 don't show a dot
        https://bugs.webkit.org/show_bug.cgi?id=190528

        Reviewed by Matt Baker.

        * UserInterface/Views/CodeMirrorAdditions.js:
        Create a new CSS rule and add it to a unique <style> whenever a whitespace sequence with
        a length is seen for the first time.

        * UserInterface/Views/CodeMirrorOverrides.css:
        (.show-whitespace-characters .CodeMirror .cm-whitespace-1::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-2::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-3::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-4::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-5::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-6::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-7::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-8::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-9::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-10::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-11::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-12::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-13::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-14::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-15::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-16::before): Deleted.

2018-10-15  Charles Vazac  <cvazac@gmail.com>

        Web Inspector: Expose Server Timing Response Headers in Network Tab
        https://bugs.webkit.org/show_bug.cgi?id=190440

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: new key "Server Timing:"
        * UserInterface/Main.html: add reference to Models/ServerTimingEntry.js
        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get serverTiming):
        (WI.Resource.prototype.updateForResponse):
        * UserInterface/Models/ServerTimingEntry.js: Added.
        (WI.ServerTimingEntry):
        (WI.ServerTimingEntry.parseHeaders): parse raw response headers into an array of ServerTimingEntry objects
        (WI.ServerTimingEntry.parseHeaders.consumeDelimiter):
        (WI.ServerTimingEntry.parseHeaders.consumeToken):
        (WI.ServerTimingEntry.):
        * UserInterface/Test.html: add reference to Models/ServerTimingEntry.js
        * UserInterface/Views/ResourceTimingBreakdownView.js:
        (WI.ResourceTimingBreakdownView.prototype._appendServerTimingRow): render a table row per ServerTimingEntry object
        (WI.ResourceTimingBreakdownView.prototype.initialLayout):
        (WI.ResourceTimingBreakdownView):

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: pseudo elements in DOM tree are too dark
        https://bugs.webkit.org/show_bug.cgi?id=190541
        <rdar://problem/45238443>

        Reviewed by Matt Baker.

        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline.dom .html-pseudo-element):

2018-10-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r233824): execution highlight range missing/incorrect in pretty printed code
        https://bugs.webkit.org/show_bug.cgi?id=188082
        <rdar://problem/42640580>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        TextEditor expects positions returned by the delegate to be relative to
        the editor's text content, not the original source code content.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):
        Convert positions to CodeMirror format here rather than in the delegate
        method, which is a layer removed from CodeMirror.

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: unreadable text when hovering CSS properties while holding Command
        https://bugs.webkit.org/show_bug.cgi?id=190548
        <rdar://problem/45242098>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.meta-key-pressed .spreadsheet-css-declaration:not(.locked) :matches(.name, .value):not(.editing):hover):
        In the light mode the color remained the same.

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: style editor warnings should not look like errors
        https://bugs.webkit.org/show_bug.cgi?id=190569
        <rdar://problem/45261689>

        Reviewed by Matt Baker.

        Make warnings in the style editor look the same as warnings in the content views.
        Unify warning and error background color variables.

        * UserInterface/Views/LogContentView.css:
        (@media (prefers-dark-interface)):
        (.console-error-level):
        (.console-warning-level):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.error):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error):
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-dark-interface)):

2018-10-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: previews aren't removed when the parent view is hidden
        https://bugs.webkit.org/show_bug.cgi?id=190525

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.get canvases):
        (WI.CanvasManager.prototype.get shaderPrograms):
        Drive-by: simplify these getters.

2018-10-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dark Mode: Highlight text in Network Headers search is too dark
        https://bugs.webkit.org/show_bug.cgi?id=190510

        Reviewed by Devin Rousso.

        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers.showing-find-banner .search-highlight):
        Use adaptive text-color.

2018-10-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: wrong color used for "goto arrow" for selected DOM breakpoint tree element
        https://bugs.webkit.org/show_bug.cgi?id=190180
        <rdar://problem/44927654>

        Reviewed by Matt Baker.

        * UserInterface/Views/Main.css:
        (@media (prefers-dark-interface)):
        (:focus .selected .go-to-arrow):

2018-10-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: detail view reverts to "Response" when new requests are added
        https://bugs.webkit.org/show_bug.cgi?id=190443

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._showDetailView):
        Return early if we are already showing a detail view for the selected object.

2018-10-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: remove unused  TreeOutline style .force-focus
        https://bugs.webkit.org/show_bug.cgi?id=190480
        <rdar://problem/45203484>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline:focus .item.call-frame.selected .status > .status-image):
        (.tree-outline:matches(:focus, .force-focus) .item.call-frame.selected .status > .status-image): Deleted.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:focus .item.processing.selected .subtitle > progress):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:matches(:focus, .force-focus) .item.processing.selected .subtitle > progress): Deleted.

        * UserInterface/Views/DataGrid.css:
        (body[dir=ltr] .data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=rtl] .data-grid:focus tr.selected td:not(:last-child)):
        (.data-grid:focus tr.parent.selected td.disclosure::before):
        (.data-grid:focus tr.parent.expanded.selected td.disclosure::before):
        (.data-grid:focus tr.selected):
        (.data-grid:focus tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:focus tr.editable.selected .cell-content > input):
        (@media (prefers-dark-interface)):
        (body[dir=ltr] .data-grid:matches(:focus, .force-focus) tr.selected td:not(:last-child)): Deleted.
        (body[dir=rtl] .data-grid:matches(:focus, .force-focus) tr.selected td:not(:last-child)): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.parent.selected td.disclosure::before): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.parent.expanded.selected td.disclosure::before): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.selected): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle): Deleted.
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input): Deleted.

        * UserInterface/Views/Main.css:
        (:focus .selected .go-to-arrow):
        (:focus .selected .go-to-arrow:active):
        (:matches(:focus, .force-focus) .selected .go-to-arrow): Deleted.
        (:matches(:focus, .force-focus) .selected .go-to-arrow:active): Deleted.

        * UserInterface/Views/ProfileView.css:
        (.profile > .data-grid:focus tr.selected td .location):
        (.profile > .data-grid:matches(:focus, .force-focus) tr.selected td .location): Deleted.

        * UserInterface/Views/RecordingActionTreeElement.css:
        (.tree-outline:focus .item.action.selected:not(.initial-state, .invalid) > .icon):
        (body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus .item.action.selected > .titles .parameter.swizzled,):
        (.tree-outline:matches(:focus, .force-focus) .item.action.selected:not(.initial-state, .invalid) > .icon): Deleted.
        (body:not(.window-inactive, .window-docked-inactive) .tree-outline:matches(:focus, .force-focus) .item.action.selected > .titles .parameter.swizzled,): Deleted.

        * UserInterface/Views/ScriptDetailsTimelineView.css:
        (.tree-outline:focus .item.selected .alternate-subtitle):
        (.tree-outline:matches(:focus, .force-focus) .item.selected .alternate-subtitle): Deleted.

        * UserInterface/Views/ShaderProgramTreeElement.css:
        (.tree-outline:focus .item.shader-program.selected .status > img):
        (.tree-outline:matches(:focus, .force-focus) .item.shader-program.selected .status > img): Deleted.

        * UserInterface/Views/ThreadTreeElement.css:
        (.tree-outline:focus > .item.thread.selected .status-button.resume):
        (.tree-outline:matches(:focus, .force-focus) > .item.thread.selected .status-button.resume): Deleted.

        * UserInterface/Views/TimelineRecordBar.css:
        (:focus .selected .timeline-record-bar > .segment):
        (:focus .selected .timeline-record-bar > .segment.inactive):
        (body[dir=ltr] :focus .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (body[dir=rtl] :focus .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (:matches(:focus, .force-focus) .selected .timeline-record-bar > .segment): Deleted.
        (:matches(:focus, .force-focus) .selected .timeline-record-bar > .segment.inactive): Deleted.
        (body[dir=ltr] :matches(:focus, .force-focus) .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)): Deleted.
        (body[dir=rtl] :matches(:focus, .force-focus) .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)): Deleted.

        * UserInterface/Views/TreeElementStatusButton.css:
        (:focus .item.selected > .status > .status-button):
        (:matches(:focus, .force-focus) .item.selected > .status > .status-button): Deleted.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline:focus .item.selected .disclosure-button):
        (.tree-outline:focus .item.selected.expanded .disclosure-button):
        (.tree-outline:focus .item.selected):
        (.tree-outline:focus .item.selected .subtitle):
        (.tree-outline:not(.large):focus .item.selected .status .indeterminate-progress-spinner):
        (.tree-outline:matches(:focus, .force-focus) .item.selected .disclosure-button): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected.expanded .disclosure-button): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected .subtitle): Deleted.
        (.tree-outline:not(.large):matches(:focus, .force-focus) .item.selected .status .indeterminate-progress-spinner): Deleted.

2018-10-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: detail view is not re-shown after sorting the Network table
        https://bugs.webkit.org/show_bug.cgi?id=190330
        <rdar://problem/45089607>

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: create special Network waterfall for media events
        https://bugs.webkit.org/show_bug.cgi?id=189773
        <rdar://problem/44626605>

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.didFireEvent): Added.
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.didFireEvent): Added.
        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.prototype.get domEvents): Added.
        (WI.DOMNode.prototype.didFireEvent): Added.
        (WI.DOMNode.prototype._addDOMEvent): Added.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.shown):
        (WI.NetworkTableContentView.prototype.hidden):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkDetailViewClose): Added.
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype.tableSelectionDidChange):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.positionByStartOffset): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.setWidthForDuration): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._rowIndexForRepresentedObject): Added.
        (WI.NetworkTableContentView.prototype._updateEntryForResource):
        (WI.NetworkTableContentView.prototype._hideDetailView): Added.
        (WI.NetworkTableContentView.prototype._showDetailView): Added.
        (WI.NetworkTableContentView.prototype._positionDetailView): Added.
        (WI.NetworkTableContentView.prototype._resourceTransferSizeDidChange):
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode):
        (WI.NetworkTableContentView.prototype._handleNodeDidFireEvent): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._typeFilterScopeBarSelectionChanged):
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContent): Added.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResourceEntry): Added.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForNodeEntry): Added.
        (WI.NetworkTableContentView.prototype._handleResourceEntryMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype._handleNodeEntryMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype.networkResourceDetailViewClose): Deleted.
        (WI.NetworkTableContentView.prototype._rowIndexForResource): Deleted.
        (WI.NetworkTableContentView.prototype._hideResourceDetailView): Deleted.
        (WI.NetworkTableContentView.prototype._showResourceDetailView): Deleted.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource): Deleted.
        * UserInterface/Views/NetworkTableContentView.css:
        (.content-view.network .network-table): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-event): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-activity): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-activity.playing): Added.

        * UserInterface/Views/NetworkDOMNodeDetailView.js: Added.
        (WI.NetworkDOMNodeDetailView):
        (WI.NetworkDOMNodeDetailView.prototype.initialLayout):
        (WI.NetworkDOMNodeDetailView.prototype.showContentViewForIdentifier):

        * UserInterface/Views/NetworkResourceDetailView.css:
        (.content-view.resource-details):
        (.network-resource-detail): Deleted.
        (.network-resource-detail .navigation-bar): Deleted.
        (.network-resource-detail .item.close > .glyph): Deleted.
        (.network-resource-detail .item.close > .glyph:hover): Deleted.
        (.network-resource-detail .item.close > .glyph:active): Deleted.
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only): Deleted.
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected): Deleted.
        (.network-resource-detail > .content-browser): Deleted.
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype.headersContentViewGoToRequestData):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToHeaders):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToRequestBody):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToResponseBody):
        (WI.NetworkResourceDetailView.prototype.initialLayout):
        (WI.NetworkResourceDetailView.prototype.showContentViewForIdentifier):
        (WI.NetworkResourceDetailView.prototype.get resource): Deleted.
        (WI.NetworkResourceDetailView.prototype.hidden): Deleted.
        (WI.NetworkResourceDetailView.prototype.dispose): Deleted.
        (WI.NetworkResourceDetailView.prototype.willShowWithCookie): Deleted.
        (WI.NetworkResourceDetailView.prototype.initialLayout): Deleted.
        (WI.NetworkResourceDetailView.prototype._showPreferredContentView): Deleted.
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem): Deleted.
        (WI.NetworkResourceDetailView.prototype._navigationItemSelected): Deleted.
        (WI.NetworkResourceDetailView.prototype._handleCloseButton): Deleted.

        * UserInterface/Views/NetworkDetailView.js: Added.
        (WI.NetworkDetailView):
        (WI.NetworkDetailView.prototype.get representedObject):
        (WI.NetworkDetailView.prototype.shown):
        (WI.NetworkDetailView.prototype.hidden):
        (WI.NetworkDetailView.prototype.dispose):
        (WI.NetworkDetailView.prototype.willShowWithCookie):
        (WI.NetworkDetailView.prototype.initialLayout):
        (WI.NetworkDetailView.prototype.createDetailNavigationItem):
        (WI.NetworkDetailView.prototype.detailNavigationItemForIdentifier):
        (WI.NetworkDetailView.prototype.showContentViewForIdentifier):
        (WI.NetworkDetailView.prototype._showPreferredContentView):
        (WI.NetworkDetailView.prototype._navigationItemSelected):
        (WI.NetworkDetailView.prototype._handleCloseButton):
        * UserInterface/Views/NetworkDetailView.css: Added.
        (.network-detail):
        (.network-detail .navigation-bar):
        (.network-detail .item.close > .glyph):
        (.network-detail .item.close > .glyph:hover):
        (.network-detail .item.close > .glyph:active):
        (.network .network-detail .navigation-bar .item.radio.button.text-only):
        (.network .network-detail .navigation-bar .item.radio.button.text-only.selected):
        (.network-detail > .content-browser):
        (@media (prefers-dark-interface)):
        Create base class for detail views shown in the Network tab.

        * UserInterface/Views/DOMNodeEventsContentView.js: Added.
        (WI.DOMNodeEventsContentView):
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        (WI.DOMNodeEventsContentView.prototype.closed):
        (WI.DOMNodeEventsContentView.prototype._handleDOMNodeDidFireEvent):
        * UserInterface/Views/DOMNodeEventsContentView.css: Added.
        (.dom-node-details.dom-events):

        * UserInterface/Views/DOMEventsBreakdownView.js: Added.
        (WI.DOMEventsBreakdownView):
        (WI.DOMEventsBreakdownView.prototype.addEvent):
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype._populateTable.percentOfTotalTime):
        (WI.DOMEventsBreakdownView.prototype._populateTable):
        * UserInterface/Views/DOMEventsBreakdownView.css: Added.
        (.waterfall-popover-content .dom-events-breakdown):
        (.dom-events-breakdown):
        (.dom-events-breakdown table):
        (.dom-events-breakdown tr > :matches(th, td)):
        (.dom-events-breakdown tbody > tr):
        (.dom-events-breakdown .graph):
        (.dom-events-breakdown .graph > :matches(.point, .area)):
        (.dom-events-breakdown .graph > .point):
        (.dom-events-breakdown .time):

        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td): Added.
        (.popover.waterfall-popover): Deleted.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236853): Uncaught Exception: undefined is not an object (evaluating 'entry.resource')
        https://bugs.webkit.org/show_bug.cgi?id=190442

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.reset):
        It's unnecessary to deselect rows in the `WI.Table` when we're about to remove them.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: selection in network table is lost when new entries are added
        https://bugs.webkit.org/show_bug.cgi?id=190362

        Reviewed by Matt Baker.

        The `_selectedRows` list is cleared each time `reloadData` is called, meaning that
        `WI.Table` expects its "owner" to restore the selection (since it doesn't know how). As a
        result, `WI.NetworkTableContentView` needs to call `selectRow` _after_ `reloadData` is
        called, not before.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._updateSort): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._reloadTable): Added.
        (WI.NetworkTableContentView.prototype._resetFilters):
        (WI.NetworkTableContentView.prototype._typeFilterScopeBarSelectionChanged):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        (WI.NetworkTableContentView.prototype._updateSortAndFilteredEntries): Deleted.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.reloadData):
        Ensure that the `_selectedRowIndex` is also reset.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: notify the frontend when a canvas has started recording via console.record
        https://bugs.webkit.org/show_bug.cgi?id=190306

        Reviewed by Brian Burg.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.recordingStarted): Added.

        * UserInterface/Protocol/CanvasManager.js:
        (WI.CanvasManager.prototype.recordingStarted): Added.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingStarted): Added.
        (WI.Canvas.prototype.recordingFinished):

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: indent all network entries when "Group by Node" is checked
        https://bugs.webkit.org/show_bug.cgi?id=190388

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):

        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table.grouped .data-container .cell.name): Added.
        (.network-table.grouped .data-container .cell:not(.parent).name): Added.
        (.network-table.grouped .data-container .cell.child.name): Added.
        (.network-table .cell.grouped-by-node.name): Deleted.
        (body[dir=ltr] .network-table .cell.grouped-by-node.name): Deleted.
        (body[dir=rtl] .network-table .cell.grouped-by-node.name): Deleted.
        Apply a padding to all nodes when the `WI.Table` is grouped.

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

        Web Inspector: show redirect requests in Network and Timelines tabs
        https://bugs.webkit.org/show_bug.cgi?id=150005
        <rdar://problem/5378164>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/Variables.css:
        * UserInterface/Main.html:
        * UserInterface/Test.html:

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

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.get redirects): Added.
        (WI.Resource.prototype.get lastRedirectReceivedTimestamp):
        (WI.Resource.prototype.updateForRedirectResponse):
        Save each redirect in an array instead of just remembering the last timestamp.

        * UserInterface/Models/ResourceTimingData.js:
        (WI.ResourceTimingData):
        (WI.ResourceTimingData.fromPayload.offsetToTimestamp):
        (WI.ResourceTimingData.fromPayload):
        (WI.ResourceTimingData.prototype.get redirectStart): Added.
        (WI.ResourceTimingData.prototype.get redirectEnd): Added.
        (WI.ResourceTimingData.prototype.get fetchStart): Added.
        Add missing fields for `Network.types.ResourceTiming`.

        * UserInterface/Models/Redirect.js: Added.
        (WI.Redirect):
        (WI.Redirect.prototype.get url):
        (WI.Redirect.prototype.get requestMethod):
        (WI.Redirect.prototype.get requestHeaders):
        (WI.Redirect.prototype.get responseStatusCode):
        (WI.Redirect.prototype.get responseStatusText):
        (WI.Redirect.prototype.get responseHeaders):
        (WI.Redirect.prototype.get timestamp):
        (WI.Redirect.prototype.get urlComponents):

        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView):
        (WI.ResourceHeadersContentView.prototype.initialLayout):
        (WI.ResourceHeadersContentView.prototype.layout):
        (WI.ResourceHeadersContentView.prototype._refreshRedirectHeadersSections): Added.
        (WI.ResourceHeadersContentView.prototype._resourceRequestHeadersDidChange):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (body[dir] .resource-headers > section.summary > .details): Added.
        (body[dir] .resource-headers > section:matches(.redirect, .headers) > .details): Added.
        (.resource-headers .details .key):
        (.resource-headers .summary .key):
        (body[dir] .resource-headers > section > .details): Deleted.
        (body[dir] .resource-headers > section.headers > .details): Deleted.
        (.resource-headers .value): Deleted.
        Add a request/response header section for each redirect.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._checkURLFilterAgainstResource):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        * UserInterface/Views/NetworkTableContentView.css:
        (.waterfall .block.redirect): Added.
        (.waterfall .block.queue):
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar):
        * UserInterface/Views/ResourceTimingBreakdownView.js:
        (WI.ResourceTimingBreakdownView.prototype.initialLayout):
        Add timeline/waterfall entries for total redirect time.

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

        Web Inspector: Canvas Tab: grayed out Record button in navigator is nearly invisible
        https://bugs.webkit.org/show_bug.cgi?id=190365
        <rdar://problem/45097739>

        Reviewed by Brian Burg.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (@media (prefers-dark-interface)): Added.
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled): Added.

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

        Web Inspector: REGRESSION: fix canvas test failures after r236952 and r236954
        https://bugs.webkit.org/show_bug.cgi?id=190403

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        Clear the `shaderProgramCollection` when a `WI.Canvas` is removed so that a remove event is
        fired for each `WI.ShaderProgram`.

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.
        For WebInspector, add WebMetal to valid enums for canvas types.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.displayNameForContextType):

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

        Web Inspector: Dark Mode: canvas recording glyph is black on gray
        https://bugs.webkit.org/show_bug.cgi?id=190367
        <rdar://problem/45099304>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas > footer .view-recording): Added.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before): Deleted.

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

        Web Inspector: allow multiple canvases to be recorded at the same time
        https://bugs.webkit.org/show_bug.cgi?id=190305

        Reviewed by Brian Burg.

        Moved the logic for maintaining whether a canvas is actively recording from
        `WI.CanvasManager` to `WI.Canvas`, meaning that each canvas can now record independently of
        every other canvas in the page. If multiple recordings are all finished simultaneously, only
        show the first one to be recieved by the frontend.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.recordingProgress):
        (WI.CanvasManager.prototype.recordingFinished):
        (WI.CanvasManager.prototype.programCreated):
        (WI.CanvasManager.prototype.programDeleted):
        (WI.CanvasManager.prototype._removeCanvas):
        (WI.CanvasManager.prototype._mainResourceDidChange):
        (WI.CanvasManager.prototype.get recordingCanvas): Deleted.
        (WI.CanvasManager.prototype.startRecording): Deleted.
        (WI.CanvasManager.prototype.stopRecording): Deleted.
        (WI.CanvasManager.prototype._dispatchShaderProgramRemoved): Deleted.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.get recordingFrameCount): Added.
        (WI.Canvas.prototype.get recordingBufferUsed): Added.
        (WI.Canvas.prototype.get recordingActive): Added.
        (WI.Canvas.prototype.get isRecording): Deleted.
        (WI.Canvas.prototype.startRecording): Added.
        (WI.Canvas.prototype.stopRecording): Added.
        (WI.Canvas.prototype.recordingProgress): Added.
        (WI.Canvas.prototype.recordingFinished): Added.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype.detached):
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._handleSpace):
        (WI.CanvasTabContentView):

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas.recording-active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .title): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .subtitle): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .navigation-bar > .item): Added.
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .recording-active) > header > .navigation-bar): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop.disabled): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop:not(.disabled):hover): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop:not(.disabled):active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > .progress-vie): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > .preview): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .subtitle): Added.
        (.content-view.canvas-overview .content-view.canvas.is-recording): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .title): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .navigation-bar > .item): Deleted.
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .is-recording) > header > .navigation-bar): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop.disabled): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop:not(.disabled):hover): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop:not(.disabled):active): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > .progress-vie): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > .preview): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle): Deleted.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype.detached):
        (WI.CanvasContentView.prototype._toggleRecording):
        (WI.CanvasContentView.prototype._recordingProgress):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._shaderProgramAdded):
        (WI.CanvasContentView.prototype._shaderProgramRemoved):
        (WI.CanvasContentView.prototype._updateRecordNavigationItem):
        (WI.CanvasContentView.prototype._updateProgressView):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set canvas):
        (WI.CanvasSidebarPanel.prototype._toggleRecording):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):

        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement):
        (WI.CanvasTreeElement.prototype._updateStatus):

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

        Web Inspector: replace Range.svg icon
        https://bugs.webkit.org/show_bug.cgi?id=190372

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/Range.svg:
        * UserInterface/Images/RangeLarge.svg: Added.

        * UserInterface/Models/Resource.js:
        (WI.Resource.classNameForResource): Added.
        Create a static function for specializing the `className` of `WI.Resource` objects.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):

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

        * UserInterface/Views/ResourceIcons.css:
        (.resource-icon.resource-type-ping .icon, .resource-icon.resource-type-beacon .icon, .large .resource-icon.resource-type-ping .icon, .large .resource-icon.resource-type-beacon .icon):
        (.resource-icon.resource-type-range .icon):
        (.large .resource-icon.resource-type-range .icon): Added.
        Drive-by: added `.large` versions of `ping` and `beacon` icons for the
        `WI.OpenResourceDialog` elements.

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

        Web Inspector: group media network entries by the node that triggered the request
        https://bugs.webkit.org/show_bug.cgi?id=189606
        <rdar://problem/44438527>

        Reviewed by Brian Burg.

        Introduces a `WI.NavigationItem` for changing whether network entries are grouped by the
        node that initiated the load (if applicable). When grouped by node, a tree-like layout of
        the table cells (including expand/collapse) is used for resources that share the same
        initiator node. The values for the node's cell are based on it's initated resources.

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

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype._mainResourceDidChange): Added.
        Whenever the frame navigates, re-request the document so that `NetworkAgent` is able to send
        valid `nodeId` for each request's `initiatorNode`. This means that the document should
        always be available.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get filterNavigationItems):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype.tableSelectedRowChanged):
        (WI.NetworkTableContentView.prototype.tablePopulateCell):
        (WI.NetworkTableContentView.prototype._populateNameCell.createIconElement): Added.
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateDomainCell.createIconAndText): Added.
        (WI.NetworkTableContentView.prototype._populateDomainCell):
        (WI.NetworkTableContentView.prototype._populateInitiatorCell):
        (WI.NetworkTableContentView.prototype._populateTransferSizeCell):
        (WI.NetworkTableContentView.prototype._generateSortComparator):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._updateEntryForResource.updateExistingEntry): Added.
        (WI.NetworkTableContentView.prototype._updateEntryForResource):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._entryForDOMNode): Added.
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode): Added.
        (WI.NetworkTableContentView.prototype._uniqueValuesForDOMNodeEntry): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange): Added.
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .cell.dom-node.name .icon): Added.
        (.network-table .cell.dom-node.name .disclosure): Added.
        (body[dir=rtl] .network-table .cell.dom-node.name .disclosure): Added.
        (.network-table:focus li.selected .cell.dom-node.name .disclosure): Added.
        (.network-table .cell.dom-node.name .disclosure.expanded): Added.
        (.network-table:focus li.selected .cell.node.name .disclosure.expanded): Added.
        (.network-table .cell.grouped-by-node.name): Added.
        (body[dir=ltr] .network-table .cell.grouped-by-node.name): Added.
        (body[dir=rtl] .network-table .cell.grouped-by-node.name): Added.
        (.network-table li:not(.selected) .cell:matches(.cache-type, .multiple)): Added.
        (.network-table li.selected .cell.domain > .lock): Added.
        (.network-table .cache-type): Deleted.
        When two resources are added that share the same `initiatorNode`, insert a node entry into
        the `WI.Table` before the first resource entry for that node (based on the current sort).
        This node entry is added after the resource entries are filtered, so they won't appear in
        the default entries list.

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.initiatorNode): Added.
        (WI.Resource.prototype.requestedByteRange): Added.
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype._initiatorNodeFromPayload): Added.

        * UserInterface/Images/Range.svg: Added.
        * UserInterface/Views/ResourceIcons.css:
        (.resource-icon.resource-type-range .icon): Added.

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

        Web Inspector: clicking initiator link in Network Tab table doesn't automatically switch to Preview section
        https://bugs.webkit.org/show_bug.cgi?id=190286

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem):

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

        Web Inspector: be more specific as to what types of WI.Collection are allowed for the Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=190304

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.tabContentViewClassForRepresentedObject):
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView.prototype.canShowRepresentedObject):

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

        Web Inspector: Open Resource Dialog should show path to resource (to disambiguate resources with same name)
        https://bugs.webkit.org/show_bug.cgi?id=178153
        <rdar://problem/34925686>

        Reviewed by Brian Burg.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._populateResourceTreeOutline):
        * UserInterface/Views/OpenResourceDialog.css:
        (.open-resource-dialog .tree-outline.large .item .titles[data-path]): Added.
        (.open-resource-dialog .tree-outline.large .item .titles[data-path]::after): Added.
        (.open-resource-dialog .tree-outline.large .item .titles .title): Added.
        (.open-resource-dialog .tree-outline.large .item .titles .subtitle): Added.
        (.open-resource-dialog .tree-outline.large .item .titles): Deleted.

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: add WebVTT MIME/file type mappings to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=190288

        Reviewed by Brian Burg.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        (WI.fileExtensionForMIMEType):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.displayNameForResource):
        Also attempt to use the mime-type-to-extension when the `WI.Resource` is of type `Other`.

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor constructor of WI.Resource
        https://bugs.webkit.org/show_bug.cgi?id=190318

        Reviewed by Joseph Pecoraro.

        Reworked constructor of `WI.Resource` to use an optional object for any non-essential arguments.

        Drive-by: moved some simple getters to the top of the class to save space.

        * UserInterface/Models/Resource.js:
        (WI.Resource):

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

        * UserInterface/Models/WebSocketResource.js:
        (WI.WebSocketResource):

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.frameDidNavigate):
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):
        (WI.NetworkManager.prototype.webSocketWillSendHandshakeRequest):
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype.resourceRequestDidReceiveResponse):
        (WI.NetworkManager.prototype._addNewResourceToFrameOrTarget):
        (WI.NetworkManager.prototype._createFrame):
        (WI.NetworkManager.prototype._createResource):

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: use iframe's name attribute for FrameTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=190275

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FrameTreeElement.js:
        (WI.FrameTreeElement.prototype.get mainTitleText): Added.

        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement.prototype.get mainTitleText): Added.
        (WI.ResourceTreeElement.prototype._updateTitles):
        Provide a way for subclasses to override what is used for the `mainTitle`.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._createExecutionContextPathComponentFromFrame):
        Update the execution context picker to match what `WI.FrameTreeElement`s show.

2018-10-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r236766): Storage tab no longer updates after main frame navigation
        https://bugs.webkit.org/show_bug.cgi?id=190298

        Reviewed by Joseph Pecoraro.

        Handle Cleared events from storage managers separately, so that successive
        events during page load does not cause the Storage tab to destroy newly
        created tree elements.

        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel):
        (WI.StorageSidebarPanel.prototype._closeContentViewForTreeElement):
        (WI.StorageSidebarPanel.prototype._domStorageCleared):
        (WI.StorageSidebarPanel.prototype._applicationCacheCleared):
        (WI.StorageSidebarPanel.prototype._indexedDatabaseCleared):
        (WI.StorageSidebarPanel.prototype._databaseCleared):
        (WI.StorageSidebarPanel.prototype._storageCleared): Deleted.

2018-10-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support multiple selection and Cmd-click behavior
        https://bugs.webkit.org/show_bug.cgi?id=189705
        <rdar://problem/44571170>

        Reviewed by Devin Rousso.

        Add multiple row selection to Table, with new methods for programmatic
        selection (deselectRow, deselectAll), and Command-click support for
        selecting/deselecting Table rows.

        * UserInterface/Base/IndexSet.js: Added.
        (WI.IndexSet):
        (WI.IndexSet.prototype.get size):
        (WI.IndexSet.prototype.get firstIndex):
        (WI.IndexSet.prototype.get lastIndex):
        (WI.IndexSet.prototype.add):
        (WI.IndexSet.prototype.delete):
        (WI.IndexSet.prototype.has):
        (WI.IndexSet.prototype.clear):
        (WI.IndexSet.prototype.indexGreaterThan):
        (WI.IndexSet.prototype.indexLessThan):
        (WI.IndexSet.prototype.Symbol.iterator):
        (WI.IndexSet.prototype._indexClosestTo):
        (WI.IndexSet.prototype._validateIndex):
        Helper container for managing an ordered sequence of unique positive
        integers, with set semantics, backed by a sorted array. Used by Table,
        and eventually by TreeOutline.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        New files and stubs to make Table layout tests possible.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkResourceDetailViewClose):
        (WI.NetworkTableContentView.prototype.tableSelectionDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype.tableSelectedRowChanged): Deleted.
        Replace uses of `clearSelectedRow` with `deselectAll`, and updated
        selection changed delegate.

        * UserInterface/Views/Table.css:
        (.table > .data-container > .data-list > li):
        (.table > .data-container > .data-list > li.selected):
        (@media (prefers-dark-interface)):
        (.table,): Deleted.
        Removed styles that are no longer needed after https://webkit.org/b/189766,
        and provide a visual separation between adjacent selected rows.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.get allowsMultipleSelection):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.deselectAll):
        (WI.Table.prototype._getOrCreateRow):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._deselectAllAndSelect):
        (WI.Table.prototype._isRowSelected):
        (WI.Table.prototype._notifySelectionDidChange):
        (WI.Table.prototype.clearSelectedRow): Deleted.
        Table now tracks selected rows using an IndexSet. selectRow accepts an
        optional parameter, `extendSelection`, for adding rows to the selection.
        _selectedRowIndex is now used to track the most recently selected row.
        This will be the only selected row unless multiple selection is enabled,
        in which case it is the row that has the "focus", for purposes of selecting
        a new row using the up or down arrow keys.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236540): Uncaught Exception: TypeError: pauseReasonBreakpointTreeElement.removeStatusImage is not a function.
        https://bugs.webkit.org/show_bug.cgi?id=190230

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel._removeBreakpoint):
        Leverage existing `status` getter/setter for creating/removing the breakpoint icon element.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        (WI.BreakpointTreeElement.prototype.populateContextMenu):
        (WI.BreakpointTreeElement.prototype._updateStatus):
        (WI.BreakpointTreeElement.prototype.removeStatusImage): Deleted.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.onattach):
        (WI.DOMBreakpointTreeElement.prototype.ondetach):
        (WI.DOMBreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        (WI.XHRBreakpointTreeElement.prototype.onattach):
        (WI.XHRBreakpointTreeElement.prototype.ondetach):
        (WI.XHRBreakpointTreeElement.prototype._updateStatus):

2018-10-04  Dan Bernstein  <mitz@apple.com>

        WebInspectorUI part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_INFINITE_RECURSION,
          CLANG_WARN_SUSPICIOUS_MOVE, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, and
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * WebInspectorUI.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: merge ProbeManager into DebuggerManager
        https://bugs.webkit.org/show_bug.cgi?id=190225

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.get probeSets): Added.
        (WI.DebuggerManager.prototype.probeForIdentifier): Added.
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype.didSampleProbe): Added.
        (WI.DebuggerManager.prototype._handleBreakpointActionsDidChange): Added.
        (WI.DebuggerManager.prototype._addProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._removeProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._updateProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._probeSetForBreakpoint): Added.
        * UserInterface/Controllers/ProbeManager.js: Removed.

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

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

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype.onattach):

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

        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype.get supplementalRepresentedObjects):
        (WI.TextResourceContentView.prototype.closed):

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: some files not listed in OpenResourceDialog
        https://bugs.webkit.org/show_bug.cgi?id=190272

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/ResourceQueryController.js:
        (WI.ResourceQueryController.prototype._findQueryMatches):
        Allow the `searchIndex` to go past the end of the `searchString` to allow for backtracking
        if the last character of `searchString` is not found in `query`.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236783): Uncaught Exception: Can't find variable: sourceMapURL
        https://bugs.webkit.org/show_bug.cgi?id=190276

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: merge SourceMapManager into NetworkManager
        https://bugs.webkit.org/show_bug.cgi?id=190224

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.downloadSourceMap): Added.
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype.resourceRequestDidFinishLoading):
        (WI.NetworkManager.prototype._createResource):
        (WI.NetworkManager.prototype._loadAndParseSourceMap): Added.
        (WI.NetworkManager.prototype._sourceMapLoadAndParseFailed): Added.
        (WI.NetworkManager.prototype._sourceMapLoadAndParseSucceeded): Added.
        (WI.NetworkManager.prototype._handleFrameMainResourceDidChange): Added.
        * UserInterface/Controllers/SourceMapManager.js: Removed.

        * UserInterface/Models/Script.js:
        (WI.Script):

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

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

        Web Inspector: Styles: start editing property name/value on mouseup instead of mousedown
        https://bugs.webkit.org/show_bug.cgi?id=190114
        <rdar://problem/44891030>

        Reviewed by Matt Baker.

        This change only affects the experimental multiple properties selection.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        Without this code, the focus outline flickers on click (after mousedown but before mouseup event).

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleMouseUp):

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

        Web Inspector: prevent layer events from firing until the layer information is re-requested
        https://bugs.webkit.org/show_bug.cgi?id=190159

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/LayerTreeManager.js:
        (WI.LayerTreeManager):
        (WI.LayerTreeManager.prototype.get supported):
        Remove `supported` member variable in favor of re-evaluating its value.

        * UserInterface/Protocol/LayerTreeObserver.js:
        (WI.LayerTreeObserver.prototype.layerTreeDidChange):

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

        Web Inspector: REGRESSION(r236766): WI.IssueManager no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=190226

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.issuesForSourceCode):

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

        Web Inspector: rename frontend managers to be more consistent with backend agents
        https://bugs.webkit.org/show_bug.cgi?id=190160

        Reviewed by Joseph Pecoraro.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        * UserInterface/Base/DOMUtilities.js:
        * UserInterface/Controllers/ApplicationCacheManager.js:
        * UserInterface/Controllers/CSSManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/CSSStyleManager.js.
        * UserInterface/Controllers/ConsoleManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/LogManager.js.
        * UserInterface/Controllers/DOMDebuggerManager.js:
        * UserInterface/Controllers/DOMManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js.
        * UserInterface/Controllers/DOMStorageManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js.
        * UserInterface/Controllers/DashboardManager.js: Removed.
        * UserInterface/Controllers/DatabaseManager.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js.
        * UserInterface/Controllers/HARBuilder.js:
        * UserInterface/Controllers/IndexedDBManager.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js.
        * UserInterface/Controllers/IssueManager.js: Removed.
        * UserInterface/Controllers/JavaScriptLogViewController.js:
        * UserInterface/Controllers/NetworkManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js.
        * UserInterface/Controllers/SourceMapManager.js:
        * UserInterface/Controllers/TimelineManager.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Models/CSSProperty.js:
        * UserInterface/Models/CSSSelector.js:
        * UserInterface/Models/CallFrame.js:
        * UserInterface/Models/Canvas.js:
        * UserInterface/Models/ConsoleMessage.js:
        * UserInterface/Models/DOMBreakpoint.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Models/DOMNodeStyles.js:
        * UserInterface/Models/DOMTree.js:
        * UserInterface/Models/DefaultDashboard.js:
        * UserInterface/Models/Script.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Models/SourceMapResource.js:
        * UserInterface/Models/TimelineRecording.js:
        * UserInterface/Protocol/CSSObserver.js:
        * UserInterface/Protocol/ConsoleObserver.js:
        * UserInterface/Protocol/DOMObserver.js:
        * UserInterface/Protocol/DOMStorageObserver.js:
        * UserInterface/Protocol/DatabaseObserver.js:
        * UserInterface/Protocol/InspectorFrontendAPI.js:
        * UserInterface/Protocol/InspectorObserver.js:
        * UserInterface/Protocol/MainTarget.js:
        * UserInterface/Protocol/NetworkObserver.js:
        * UserInterface/Protocol/PageObserver.js:
        * UserInterface/Protocol/RemoteObject.js:
        * UserInterface/Protocol/RuntimeObserver.js:
        * UserInterface/Protocol/WorkerTarget.js:
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        * UserInterface/Views/CanvasOverviewContentView.js:
        * UserInterface/Views/CanvasTreeElement.js:
        * UserInterface/Views/ContentView.js:
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/CookieStorageContentView.js:
        * UserInterface/Views/DOMDetailsSidebarPanel.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        * UserInterface/Views/DOMNodeTreeElement.js:
        * UserInterface/Views/DOMTreeContentView.js:
        * UserInterface/Views/DOMTreeDataGrid.js:
        * UserInterface/Views/DOMTreeElement.js:
        * UserInterface/Views/DOMTreeElementPathComponent.js:
        * UserInterface/Views/DOMTreeOutline.js:
        * UserInterface/Views/DOMTreeUpdater.js:
        * UserInterface/Views/DebuggerSidebarPanel.js:
        * UserInterface/Views/ElementsTabContentView.js:
        * UserInterface/Views/EventBreakpointPopover.js:
        * UserInterface/Views/EventBreakpointTreeElement.js:
        * UserInterface/Views/EventListenerSectionGroup.js:
        * UserInterface/Views/FormattedValue.js:
        * UserInterface/Views/FrameTreeElement.js:
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        * UserInterface/Views/LayerTreeDataGridNode.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        * UserInterface/Views/Layers3DContentView.js:
        * UserInterface/Views/LogContentView.js:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/ObjectTreeBaseTreeElement.js:
        * UserInterface/Views/ObjectTreeView.js:
        * UserInterface/Views/OpenResourceDialog.js:
        * UserInterface/Views/ResourceSidebarPanel.js:
        * UserInterface/Views/SearchSidebarPanel.js:
        * UserInterface/Views/SettingsTabContentView.js:
        * UserInterface/Views/SourceCodeTextEditor.js:
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        * UserInterface/Views/StorageSidebarPanel.js:
        * UserInterface/Views/StyleDetailsPanel.js:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

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

        Web Inspector: Canvas: replace constant numbers with their associated name on WebGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=190026

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.constantNameForParameter): Added.
        (WI.RecordingAction.prototype.getColorParameters):
        (WI.RecordingAction.prototype.getImageParameters):
        Drive-by: add additional swatches to color/image arguments for WebGL actions.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        Drive-by: ensure that the `WI.RecordingContentView` is showing before applying the action.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM.createParameterElement):
        (WI.RecordingActionTreeElement._generateDOM):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action > .titles .parameter.constant): Added.

2018-10-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix a typo for execution context identifier
        https://bugs.webkit.org/show_bug.cgi?id=190185

        Reviewed by Matt Baker.

        * UserInterface/Protocol/MainTarget.js:
        (WI.MainTarget):
        * UserInterface/Protocol/WorkerTarget.js:
        (WI.WorkerTarget):

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

        Web Inspector: remove analyzer manager
        https://bugs.webkit.org/show_bug.cgi?id=190162

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):

        * UserInterface/Controllers/AnalyzerManager.js: Removed.
        * UserInterface/Models/AnalyzerMessage.js: Removed.

        * Scripts/copy-user-interface-resources.pl:
        * UserInterface/External/ESLint/LICENSE: Removed.
        * UserInterface/External/ESLint/eslint.js: Removed.

2018-10-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: add an experimental setting for multi-property selection
        https://bugs.webkit.org/show_bug.cgi?id=190053
        <rdar://problem/44842787>

        Reviewed by Matt Baker.

        This patch only adds a setting. It doesn't change property selection behavior.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-10-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: use the same CSS variables for dark and light modes
        https://bugs.webkit.org/show_bug.cgi?id=189766
        <rdar://problem/44619650>

        Use --text-color and --background-color CSS variables for both dark and light modes.

        Reviewed by Matt Baker.

        * UserInterface/Views/BreakpointPopoverController.css:
        (.popover .edit-breakpoint-popover-content > label.toggle):
        Color of the label matches the color of the popover, no need to specify it.

        (.edit-breakpoint-popover-condition):
        (@media (prefers-dark-interface)):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (.completion-suggestions-container > .item):
        (@media (prefers-dark-interface)):
        (.completion-suggestions):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.details-section:matches(.computed-style-properties, .computed-style-box-model):not(.collapsed) > :matches(.header, .content)):
        (.computed-style-properties .property:hover .go-to-arrow):
        (@media (prefers-dark-interface)): Deleted.
        (.computed-style-properties.details-section): Deleted.
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)): Deleted.
        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/DataGrid.css:
        (.data-grid th):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        * UserInterface/Views/InlineSwatch.css:
        (.inline-swatch):
        (.inline-swatch-variable-popover .CodeMirror pre):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/NetworkResourceDetailView.css:
        (.network-resource-detail):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (@media (prefers-dark-interface)):
        (.resource-headers .value): Deleted.
        Move this rule to ResourceHeadersContentView.css.

        * UserInterface/Views/ObjectPreviewView.css:
        (.object-preview):
        (@media (prefers-dark-interface)):
        (.object-preview .name):
        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree):
        (.object-tree-property :matches(.formatted-string, .formatted-regexp)):
        (@media (prefers-dark-interface)): Deleted.
        (.object-tree,): Deleted.

        (.object-preview .name): Deleted.
        (.object-preview > .size): Deleted.
        Move these rules to ObjectPreviewView.css.

        * UserInterface/Views/QuickConsole.css:
        (.quick-console):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers .value):
        (.resource-headers.showing-find-banner .search-highlight):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .media-label):
        (.spreadsheet-css-declaration .selector:focus,):
        (@media (prefers-dark-interface)):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover):
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (.cm-s-default,):
        (@media (prefers-dark-interface)):
        (.syntax-highlighted,): Deleted.
        * UserInterface/Views/Table.css:
        (.table):
        (.table > .header):
        * UserInterface/Views/TimelineOverview.css:
        (.timeline-overview > .navigation-bar.timelines):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        (.content-view.timeline-recording > .content-browser .recording-progress > .status > .indeterminate-progress-spinner):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/XHRBreakpointPopover.css:
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):
        (@media (prefers-dark-interface)):

2018-09-28  Andy Estes  <aestes@apple.com>

        REGRESSION (r236091): CSSKeywordCompletions.js has "checkout" instead of "check-out" as a value for -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=190096

        Reviewed by Ryosuke Niwa.

        I changed "checkout" to "check-out" in r235754, but it somehow got flipped back to "checkout" in r236091.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-09-28  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove the "in-store" button type
        https://bugs.webkit.org/show_bug.cgi?id=190079

        Reviewed by Tim Horton.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-09-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: image resources without content are still shown when the Images folder is selected
        https://bugs.webkit.org/show_bug.cgi?id=190072

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceContentView.js:
        (WI.ResourceContentView.prototype.showGenericNoContentMessage):
        Treat paths that result in a "Resource has no content" message as a "content error".

2018-09-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Hide DOM and XHR breakpoint sections when they are empty
        https://bugs.webkit.org/show_bug.cgi?id=182406
        <rdar://problem/37131512>

        Reviewed by Joseph Pecoraro.

        Combine all breakpoint sections (e.g. DOM, XHR, and Event) into the main "Breakpoints"
        section, including all the various "+" buttons for creating different types of breakpoints.

        Global breakpoints (except "All Exceptions" and "Uncaught Exceptions") are now deletable,
        and can be re-added via the "+" button of the "Breakpoints" section. Deletable global
        breakpoints (e.g. "Assertion Failures" and "All Requests") are able to remain visible while
        disabled, and will only be hidden when the user specifically deletes them.

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

        * UserInterface/Controllers/DOMBreakpointTreeController.js: Removed.
        * UserInterface/Controllers/EventBreakpointTreeController.js: Removed.
        * UserInterface/Controllers/XHRBreakpointTreeController.js: Removed.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.get uncaughtExceptionsBreakpoint): Added.
        (WI.DebuggerManager.prototype.get assertionFailuresBreakpoint): Added.
        (WI.DebuggerManager.prototype.isBreakpointRemovable):
        (WI.DebuggerManager.prototype.isBreakpointSpecial): Added.
        (WI.DebuggerManager.prototype.isBreakpointEditable):
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype._breakpointDisabledStateDidChange):
        (WI.DebuggerManager.prototype._updateBreakOnExceptionsState):
        (WI.DebuggerManager.prototype.get allUncaughtExceptionsBreakpoint): Deleted.
        (WI.DebuggerManager.prototype.get assertionsBreakpoint): Deleted.
        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.isBreakpointSpecial): Added.
        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.addXHRBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeXHRBreakpoint):
        (WI.DOMDebuggerManager.prototype.isBreakpointRemovable): Deleted.
        Always fire add/remove events, including for special breakpoints, so that any listeners will
        be able to adjust accordingly. Even though special breakpoints don't get stored in the lists
        held by each manager, we are still able to enable/disable them, and that should be reported.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.closed):
        (WI.DebuggerSidebarPanel.prototype.saveStateToCookie):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie.revealAndSelect):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._removeBreakpoint): Added.
        (WI.DebuggerSidebarPanel.prototype._addTreeElementForSourceCodeToTreeOutline):
        (WI.DebuggerSidebarPanel.prototype._mainResourceDidChange):
        (WI.DebuggerSidebarPanel.prototype._breakpointRemoved):
        (WI.DebuggerSidebarPanel.prototype._removeDebuggerTreeElement):
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement.comparator): Added.
        (WI.DebuggerSidebarPanel.prototype._addTreeElement): Added.
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._domBreakpointResolvedStateDidChange): Added.
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved): Added.
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked): Added.
        (WI.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements.isSpecialBreakpoint): Deleted.
        (WI.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements): Deleted.
        (WI.DebuggerSidebarPanel.prototype._domBreakpointAddedOrRemoved): Deleted.
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved): Deleted.
        (WI.DebuggerSidebarPanel.prototype._addEventBreakpointButtonClicked): Deleted.
        (WI.DebuggerSidebarPanel.prototype._addXHRBreakpointButtonClicked): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .titles): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .icon): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node:not(:hover, .selected) .status .go-to-arrow): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.xhr-breakpoints .item.breakpoint .subtitle): Deleted.
        Unify the logic for adding/removing breakpoints of all types.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        (WI.BreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement):
        (WI.DOMNodeTreeElement.prototype.ondelete):
        (WI.DOMNodeTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        (WI.XHRBreakpointTreeElement.prototype.ondelete):
        (WI.XHRBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/XHRBreakpointTreeElement.css: Added.
        (.breakpoint.xhr .subtitle):
        Add/remove checks for whether the associated breakpoint can be deleted.

        * UserInterface/Views/DOMNodeTreeElement.css: Added.
        (.tree-outline .item.dom-node .titles):
        (.tree-outline .item.dom-node .icon):
        (.tree-outline .item.dom-node:not(:hover, .selected) .status .go-to-arrow):

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):
        (WI.appendContextMenuItemsForDOMNodeBreakpoints): Added.
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._statusImageContextmenu):

        * UserInterface/Views/XHRBreakpointPopover.js:
        (WI.XHRBreakpointPopover):
        (WI.XHRBreakpointPopover.prototype.get breakpoint): Added.
        (WI.XHRBreakpointPopover.prototype.show):
        (WI.XHRBreakpointPopover.prototype.dismiss): Added.
        (WI.XHRBreakpointPopover.prototype._createEditor):
        (WI.XHRBreakpointPopover.prototype._updateEditor):
        (WI.XHRBreakpointPopover.prototype.get result): Deleted.
        (WI.XHRBreakpointPopover.prototype.get type): Deleted.
        (WI.XHRBreakpointPopover.prototype.get value): Deleted.
        Drive-by: remove the erroneous usage of `WI.InputPopover.Result`.

2018-09-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: determine hasVisibleEffect for each RecordingAction as it's processed
        https://bugs.webkit.org/show_bug.cgi?id=189860

        Reviewed by Joseph Pecoraro.

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

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process.getContent):
        (WI.RecordingAction.prototype.process):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):

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

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._updateImageGrid):
        Drive-by: don't attempt to show the image grid if we haven't called initialized yet.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        Drive-by: ensure that the `WI.RecordingContentView` is showing before applying the action.

2018-09-26  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: new watch expression popover has light background
        https://bugs.webkit.org/show_bug.cgi?id=190013
        <rdar://problem/44810000>

        Reviewed by Matt Baker.

        Make the background dark to match the CodeMirror editor background.

        * UserInterface/Views/ScopeChainDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.watch-expression-editor):

2018-09-21  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r236237): Web Inspector: DarkMode: white background in Elements and Timelines
        https://bugs.webkit.org/show_bug.cgi?id=189852

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Main.css:
        (body):
        (#main):

2018-09-21  Brian Burg  <bburg@apple.com>

        Web Inspector: remove unnecessary WI.Platform.version checks
        https://bugs.webkit.org/show_bug.cgi?id=189845

        Reviewed by Matt Baker.

        * UserInterface/Base/Platform.js:
        (osVersionMatch): Add name for macOS Mojave.

        * UserInterface/Base/Main.js:
        * UserInterface/Views/Popover.js:
        Remove old logic that's no longer needed.

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove setting for Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=189817

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._debuggerDidPause):
        (WI.isShowingSourcesTab): Removed.
        (WI.showSourcesTab): Removed.

        * UserInterface/Views/SourcesSidebarPanel.css: Removed.
        * UserInterface/Views/SourcesSidebarPanel.js: Removed.
        * UserInterface/Views/SourcesTabContentView.js: Removed.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):

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

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):

2018-09-20  Simon Fraser  <simon.fraser@apple.com>

        Make "overflow: overlay" a synonym for "overflow: auto"
        https://bugs.webkit.org/show_bug.cgi?id=189811

        Reviewed by Zalan Bujtas.
        
        Remove "overlay" from the overflow values.

        * UserInterface/Models/CSSKeywordCompletions.js:
        * UserInterface/Views/VisualStyleDetailsPanel.js:
        (WI.VisualStyleDetailsPanel.prototype._populateDisplaySection):

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: hide Accessibility Audit Tab setting
        https://bugs.webkit.org/show_bug.cgi?id=189816

        Reviewed by Joseph Pecoraro.

        Considering that this tab doesn't exist, there's no reason to have a setting/UI for it.

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

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove Legacy Style Editor
        https://bugs.webkit.org/show_bug.cgi?id=189808

        Reviewed by Joseph Pecoraro.

        The Legacy Style Editor has been hidden behind an "experimental" setting for almost a year.
        It's time that we remove it, especially since the new Style Editor is at a similar, if not
        more advanced, state.

        * .eslintrc:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        * Localizations/en.lproj/localizedStrings.js:
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Base/Setting.js:

        * UserInterface/Base/TextUtilities.js: Removed.
        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/RulesStyleDetailsPanel.css: Removed.
        * UserInterface/Views/RulesStyleDetailsPanel.js: Removed.
        * UserInterface/Views/CSSStyleDeclarationSection.css: Removed.
        * UserInterface/Views/CSSStyleDeclarationSection.js: Removed.
        * UserInterface/Views/CSSStyleDeclarationTextEditor.css: Removed.
        * UserInterface/Views/CSSStyleDeclarationTextEditor.js: Removed.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.get text):
        (WI.CSSProperty.prototype.get synthesizedText): Deleted.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.set text):
        (WI.CSSStyleDeclaration.prototype.resetText): Deleted.
        (WI.CSSStyleDeclaration.prototype.get modified): Deleted.
        (WI.CSSStyleDeclaration.prototype.generateCSSRuleString): Deleted.
        (WI.CSSStyleDeclaration.prototype.isInspectorRule): Deleted.

        * UserInterface/Models/CSSSelector.js:
        (WI.CSSSelector.prototype.isGreaterThan): Deleted.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule.prototype.update):
        (WI.CSSRule.prototype.get matchedSelectors): Deleted.
        (WI.CSSRule.prototype.get matchedSelectorText): Deleted.
        (WI.CSSRule.prototype.hasMatchedPseudoElementSelector): Deleted.
        (WI.CSSRule.prototype.get mediaText): Deleted.
        (WI.CSSRule.prototype.get mostSpecificSelector): Deleted.
        (WI.CSSRule.prototype.selectorIsGreater): Deleted.
        (WI.CSSRule.prototype._determineMostSpecificSelector): Deleted.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeRule.changeCompleted): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.styleChanged): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.changeText): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.ruleSelectorChanged): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule): Deleted.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.prototype.isValidPropertyName):
        (WI.CSSCompletions):
        (WI.CSSCompletions.prototype.keySet): Deleted.
        (WI.CSSCompletions.prototype.propertyRequiresWebkitPrefix): Deleted.
        (WI.CSSCompletions.prototype.getClosestPropertyName): Deleted.

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

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

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorStartEditingRuleSelector): Added.
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.cssStyleDeclarationTextEditorStartEditingRuleSelector): Deleted.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover): Added.
        (.sidebar > .panel.details.css-style > .content > .rules > .message-text-view): Added.
        (.sidebar > .panel.details.css-style > .content > .rules:not(.filter-non-matching) > .message-text-view): Added.
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover): Added.
        (.spreadsheet-style-panel .section-header): Deleted.
        (.spreadsheet-style-panel .section-header .node-link): Deleted.
        (.spreadsheet-style-panel .section-header .node-link:hover): Deleted.
        (.spreadsheet-style-panel .section-header): Deleted.
        (.spreadsheet-style-panel .section-header .node-link:hover): Deleted.

        * UserInterface/Views/CodeMirrorAdditions.js:
        (extendedCSSRuleStartState): Removed.
        * UserInterface/Views/CodeMirrorFormatters.js:
        Remove "css-rule" CodeMirror mode.

        * UserInterface/Views/CodeMirrorTextMarkers.js:
        (createCodeMirrorVariableTextMarkers): Deleted.

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

2018-09-21  Mike Gorse  <mgorse@suse.com>

        Build tools should work when the /usr/bin/python is python3
        https://bugs.webkit.org/show_bug.cgi?id=156674

        Reviewed by Michael Catanzaro.

        * Scripts/copy-user-interface-resources.pl: Use $PYTHON if set
        in the environment.

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

        Web Inspector: remove Visual Style CSS details sidebar panel
        https://bugs.webkit.org/show_bug.cgi?id=189807

        Reviewed by Joseph Pecoraro.

        The Visual Style CSS details sidebar panel has been hidden behind an "experimental" setting
        for almost a year.  It's time that we remove it.

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

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

        * UserInterface/Images/AnimationPlayStatePaused.svg: Removed.
        * UserInterface/Images/AnimationPlayStateRunning.svg: Removed.
        * UserInterface/Images/ClearBoth.svg: Removed.
        * UserInterface/Images/ClearLeft.svg: Removed.
        * UserInterface/Images/ClearRight.svg: Removed.
        * UserInterface/Images/FloatLeft.svg: Removed.
        * UserInterface/Images/FloatRight.svg: Removed.
        * UserInterface/Images/FontStyleItalic.svg: Removed.
        * UserInterface/Images/FontStyleNormal.svg: Removed.
        * UserInterface/Images/ListStylePositionInside.svg: Removed.
        * UserInterface/Images/ListStylePositionOutside.svg: Removed.
        * UserInterface/Images/TextAlignCenter.svg: Removed.
        * UserInterface/Images/TextAlignJustify.svg: Removed.
        * UserInterface/Images/TextAlignLeft.svg: Removed.
        * UserInterface/Images/TextAlignRight.svg: Removed.
        * UserInterface/Images/TextDecorationLineThrough.svg: Removed.
        * UserInterface/Images/TextDecorationOverline.svg: Removed.
        * UserInterface/Images/TextDecorationUnderline.svg: Removed.
        * UserInterface/Images/TextTransformCapitalize.svg: Removed.
        * UserInterface/Images/TextTransformLowercase.svg: Removed.
        * UserInterface/Images/TextTransformUppercase.svg: Removed.
        * UserInterface/Images/VisualStyleNone.svg: Removed.
        * UserInterface/Images/VisualStylePropertyLinked.svg: Removed.
        * UserInterface/Images/VisualStylePropertyUnlinked.svg: Removed.

        * UserInterface/Views/VisualStyleBackgroundPicker.css: Removed.
        * UserInterface/Views/VisualStyleBackgroundPicker.js: Removed.
        * UserInterface/Views/VisualStyleBasicInput.js: Removed.
        * UserInterface/Views/VisualStyleColorPicker.css: Removed.
        * UserInterface/Views/VisualStyleColorPicker.js: Removed.
        * UserInterface/Views/VisualStyleCommaSeparatedKeywordEditor.css: Removed.
        * UserInterface/Views/VisualStyleCommaSeparatedKeywordEditor.js: Removed.
        * UserInterface/Views/VisualStyleDetailsPanel.css: Removed.
        * UserInterface/Views/VisualStyleDetailsPanel.js: Removed.
        * UserInterface/Views/VisualStyleDetailsSidebarPanel.js: Removed.
        * UserInterface/Views/VisualStyleFontFamilyListEditor.js: Removed.
        * UserInterface/Views/VisualStyleFontFamilyTreeElement.js: Removed.
        * UserInterface/Views/VisualStyleKeywordCheckbox.css: Removed.
        * UserInterface/Views/VisualStyleKeywordCheckbox.js: Removed.
        * UserInterface/Views/VisualStyleKeywordIconList.css: Removed.
        * UserInterface/Views/VisualStyleKeywordIconList.js: Removed.
        * UserInterface/Views/VisualStyleKeywordPicker.js: Removed.
        * UserInterface/Views/VisualStyleNumberInputBox.css: Removed.
        * UserInterface/Views/VisualStyleNumberInputBox.js: Removed.
        * UserInterface/Views/VisualStylePropertyCombiner.js: Removed.
        * UserInterface/Views/VisualStylePropertyEditor.css: Removed.
        * UserInterface/Views/VisualStylePropertyEditor.js: Removed.
        * UserInterface/Views/VisualStylePropertyEditorLink.css: Removed.
        * UserInterface/Views/VisualStylePropertyEditorLink.js: Removed.
        * UserInterface/Views/VisualStylePropertyNameInput.js: Removed.
        * UserInterface/Views/VisualStyleRelativeNumberSlider.css: Removed.
        * UserInterface/Views/VisualStyleRelativeNumberSlider.js: Removed.
        * UserInterface/Views/VisualStyleSelectorSection.css: Removed.
        * UserInterface/Views/VisualStyleSelectorSection.js: Removed.
        * UserInterface/Views/VisualStyleSelectorTreeItem.css: Removed.
        * UserInterface/Views/VisualStyleSelectorTreeItem.js: Removed.
        * UserInterface/Views/VisualStyleTabbedPropertiesRow.css: Removed.
        * UserInterface/Views/VisualStyleTabbedPropertiesRow.js: Removed.
        * UserInterface/Views/VisualStyleTimingEditor.css: Removed.
        * UserInterface/Views/VisualStyleTimingEditor.js: Removed.
        * UserInterface/Views/VisualStyleURLInput.js: Removed.
        * UserInterface/Views/VisualStyleUnitSlider.css: Removed.
        * UserInterface/Views/VisualStyleUnitSlider.js: Removed.

        * UserInterface/Controllers/VisualStyleCompletionsController.js: Removed.

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

        Web Inspector: Styles Redesign: rework Computed panel to use Spreadsheet classes
        https://bugs.webkit.org/show_bug.cgi?id=183627

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel):
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.applyFilter):
        (WI.ComputedStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationEditorShowProperty):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        (WI.ComputedStyleDetailsPanel.prototype.filterDidChange):
        (WI.ComputedStyleDetailsPanel.prototype._computedStyleShowAllCheckboxValueChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handlePropertiesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleVariablesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleEditorFilterApplied):
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorShowProperty.delegateShowProperty): Deleted.
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorShowProperty): Deleted.
        Replace CSSStyleDeclarationTextEditor with SpreadsheetCSSStyleDeclarationEditor.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set showsImplicitProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set alwaysShowPropertyNames):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set propertyVisibilityMode):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set hideFilterNonMatchingProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set sortPropertiesByName): Added.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get propertiesToRender):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.highlightProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.applyFilter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyShowProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get _propertiesToRender): Deleted.
        Create setters for the "special" functionality required by the Computed panel and tie them
        into the logic that determines what properties are rendered.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._update):
        Create go-to arrow if the property has a shorthand version or a source code location.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
        Don't reapply the filter after refreshing, as the current panel will handle applying it.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.details-section:matches(.computed-style-properties, .computed-style-box-model):not(.collapsed) > :matches(.header, .content)):
        (.computed-style-properties .property .go-to-arrow):
        (.computed-style-properties .property:hover .go-to-arrow):
        (.computed-style-properties.details-section): Deleted.
        (.details-section > .content > .group > .row .CodeMirror-code pre .go-to-arrow): Deleted.
        (.details-section > .content > .group > .row .CodeMirror-code pre:hover .go-to-arrow): Deleted.
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)): Deleted.
        * UserInterface/Views/DetailsSection.css:
        (.details-section.computed-style-properties:not(.collapsed) > .header): Deleted.
        Consolidate Computed panel styles to it's respective CSS file.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (.spreadsheet-style-declaration-editor .property:matches(.implicit, .not-inherited) .content > *):
        (.spreadsheet-style-declaration-editor .property.not-inherited .content > *): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration):
        * UserInterface/Views/Variables.css:
        (:root):
        Move `css-declaration` padding variables so they can be used by SpreadsheetCSSStyleDeclarationEditor
        without a parent SpreadsheetCSSStyleDeclarationSection.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.style-spreadsheet .style-rule): Deleted.
        (.style-spreadsheet .selector-line): Deleted.
        (.style-spreadsheet .selector): Deleted.
        (.style-spreadsheet :matches(.selector .matched, .selector:focus)): Deleted.
        (.style-spreadsheet .name): Deleted.
        (.style-spreadsheet .value): Deleted.
        (.style-spreadsheet :matches(.selector, .name, .value)): Deleted.
        (.style-spreadsheet :matches(.selector, .name, .value):focus): Deleted.
        (.style-spreadsheet .selector-inline): Deleted.
        (.style-spreadsheet .property): Deleted.
        (.style-spreadsheet .property-disabled,): Deleted.
        (.style-spreadsheet .property-disabled :matches(.name, .value)): Deleted.
        (.style-spreadsheet .styles-source): Deleted.
        (.style-spreadsheet :matches(a, .node-link)): Deleted.
        (.style-spreadsheet :matches(a, .node-link):hover): Deleted.
        (.style-spreadsheet .declarations): Deleted.
        (.style-spreadsheet input[type="checkbox"]): Deleted.
        (.style-spreadsheet input[type="checkbox"]:not(:checked)): Deleted.
        (.style-spreadsheet .declarations:hover input[type="checkbox"]): Deleted.
        Drive-by fix: remove styles that don't apply to anything.

2018-09-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: move DarkMode.css rules into appropriate CSS files
        https://bugs.webkit.org/show_bug.cgi?id=189673

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/BezierEditor.css:
        (@media (prefers-dark-interface)):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview > div):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):
        * UserInterface/Views/BreakpointActionView.css:
        (@media (prefers-dark-interface)):
        (.breakpoint-action-block-body):
        (.breakpoint-action-block-body > .description):
        (.breakpoint-action-append-button,):
        (.breakpoint-action-eval-editor):
        * UserInterface/Views/BreakpointPopoverController.css:
        (@media (prefers-dark-interface)):
        (.popover .edit-breakpoint-popover-content > label.toggle):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        (.edit-breakpoint-popover-condition):
        * UserInterface/Views/ButtonNavigationItem.css:
        (@media (prefers-dark-interface)):
        (.navigation-bar .item.button):
        * UserInterface/Views/ButtonToolbarItem.css:
        (@media (prefers-dark-interface)):
        (.toolbar .item.button):
        (.toolbar .item.button:not(.disabled):active):
        (.toolbar .item.button:not(.disabled):matches(:focus, .activate.activated)):
        (.toolbar .item.button:not(.disabled):active:matches(:focus, .activate.activated)):
        * UserInterface/Views/CallFrameView.css:
        (@media (prefers-dark-interface)):
        (.call-frame .subtitle,):
        (.call-frame:hover .subtitle .source-link,):
        (.call-frame .separator):
        * UserInterface/Views/CanvasContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.canvas:not(.tab)):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.canvas-overview):
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .title):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .subtitle,):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle):
        * UserInterface/Views/CanvasTabContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.canvas-2d .icon,):
        (.content-view.canvas > .preview > img,):
        * UserInterface/Views/CodeMirrorOverrides.css:
        (@media (prefers-dark-interface)):
        (.CodeMirror-cursor):
        (.CodeMirror .CodeMirror-gutters):
        (.cm-s-default .cm-link):
        (.CodeMirror .CodeMirror-lines .CodeMirror-matchingbracket):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (@media (prefers-dark-interface)):
        (.completion-suggestions):
        (.completion-suggestions-container > .item):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.computed-style-properties.details-section):
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)):
        * UserInterface/Views/ConsoleMessageView.css:
        (@media (prefers-dark-interface)):
        (.console-message .syntax-highlighted):
        (.console-warning-level .console-message-text):
        (.console-error-level .console-message-text):
        (.console-user-command > .console-message-text):
        (.console-message .repeat-count):
        * UserInterface/Views/ConsolePrompt.css:
        (@media (prefers-dark-interface)):
        (.console-prompt):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners > .header > .filter:hover):
        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline.dom):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom li.selected .selection-area):
        (.tree-outline.dom:focus li.selected .selection-area):
        (.tree-outline.dom li.selected + ol.children.expanded):
        (.tree-outline.dom .shadow):
        (.tree-outline.dom li.parent.shadow + ol.children.expanded,):
        (.showing-find-banner .tree-outline.dom .search-highlight):
        * UserInterface/Views/DarkMode.css: Removed.
        * UserInterface/Views/DataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th):
        (.data-grid td .subtitle):
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (.data-grid tr.editable .cell-content > input):
        (.data-grid td.spanning):
        * UserInterface/Views/DebuggerDashboardView.css:
        (@media (prefers-dark-interface)):
        (.toolbar .dashboard.debugger):
        (.dashboard.debugger .navigation-bar .item.button > .glyph):
        (.dashboard.debugger > .location .function-name):
        (.dashboard.debugger > .location .go-to-link):
        (.dashboard.debugger > .divider):
        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-dark-interface)):
        (.toolbar .dashboard.default > .item > div):
        (.toolbar .dashboard.default > .item.enabled > div):
        (.toolbar .dashboard.default > .item.enabled:hover):
        (.toolbar .dashboard.default > .item.enabled:hover > div):
        (.toolbar .dashboard.default > .resourcesCount > img,):
        (body.latest-mac .toolbar .dashboard .item.button):
        (.dashboard-container .advance-arrow):
        * UserInterface/Views/DetailsSection.css:
        (@media (prefers-dark-interface)):
        (.details-section > .header):
        (.details-section > .header > label):
        (.details-section .details-section,):
        (.details-section .details-section:not(.collapsed) > .header):
        (.details-section > .content > .group > .row.simple > .label):
        (.details-section > .content > .group:nth-child(even)):
        (.details-section > .content > .group > .row:matches(.empty, .text)):
        * UserInterface/Views/DividerNavigationItem.css:
        (@media (prefers-dark-interface)):
        (.navigation-bar .item.divider):
        * UserInterface/Views/Editing.css:
        (@media (prefers-dark-interface)):
        (.editing):
        (.editing, .editing *):
        * UserInterface/Views/FindBanner.css:
        (@media (prefers-dark-interface)):
        (.find-banner > input[type="search"]):
        (.find-banner.console-find-banner > input[type=search]:not(:placeholder-shown)):
        * UserInterface/Views/FontResourceContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.font .preview > .line):
        (.content-view.resource.font .metric.top):
        (.content-view.resource.font .metric.baseline):
        (.content-view.resource.font .metric.middle):
        (.content-view.resource.font .metric.xheight):
        (.content-view.resource.font .metric.bottom):
        * UserInterface/Views/FormattedValue.css:
        (@media (prefers-dark-interface)):
        (.formatted-object,):
        (.formatted-null,):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes > .group > label):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):
        * UserInterface/Views/HoverMenu.css:
        (@media (prefers-dark-interface)):
        (.hover-menu > svg > :matches(path, rect)):
        * UserInterface/Views/ImageResourceContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.image):
        * UserInterface/Views/InlineSwatch.css:
        (@media (prefers-dark-interface)):
        (.inline-swatch):
        * UserInterface/Views/LogContentView.css:
        (@media (prefers-dark-interface)):
        (.console-messages):
        (.console-item):
        (.console-messages:focus .console-item.selected):
        (.console-messages:focus .console-item.selected + .console-item):
        (.console-session:first-of-type .console-session-header):
        (.console-session:not(:first-of-type) .console-session-header):
        (.console-messages a):
        (.console-messages a:hover):
        (.console-messages:focus .console-item.selected::after):
        (.console-error-level):
        (.console-error-level:not(.filtered-out, .filtered-out-by-search), .console-error-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.console-warning-level):
        (.console-warning-level:not(.filtered-out, .filtered-out-by-search), .console-warning-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted.selected):
        * UserInterface/Views/Main.css:
        (#main):
        (@media (prefers-dark-interface)):
        (.go-to-arrow):
        (.resource-link,):
        (.expand-list-button):
        (:matches(img, canvas).show-grid):
        * UserInterface/Views/NetworkResourceDetailView.css:
        (@media (prefers-dark-interface)):
        (.network-resource-detail):
        (.network-resource-detail .item.close > .glyph):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (.resource-headers .value):
        * UserInterface/Views/NetworkTableContentView.css:
        (@media (prefers-dark-interface)):
        (.network-table .cell.domain > .lock):
        * UserInterface/Views/NewTabContentView.css:
        (@media (prefers-dark-interface)):
        (.new-tab.tab.content-view):
        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (@media (prefers-dark-interface)):
        (.object-tree-property .getter,):
        (.item.object-tree-property.prototype-property):
        (.object-tree-property.prototype-property:hover,):
        (.object-tree-property .value.error):
        * UserInterface/Views/ObjectTreeView.css:
        (@media (prefers-dark-interface)):
        (.object-tree,):
        (.object-preview .name):
        (.object-preview > .size):
        * UserInterface/Views/OpenResourceDialog.css:
        (@media (prefers-dark-interface)):
        (.open-resource-dialog):
        (.open-resource-dialog > .field > input):
        (.open-resource-dialog > .field > input::placeholder):
        (.open-resource-dialog > .tree-outline .item.selected):
        (.open-resource-dialog > .field::before):
        * UserInterface/Views/ProgressView.css:
        (@media (prefers-dark-interface)):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.indeterminate-progress-spinner):
        * UserInterface/Views/QuickConsole.css:
        (@media (prefers-dark-interface)):
        (.quick-console):
        (.CodeMirror .jump-to-symbol-highlight,):
        (.quick-console.showing-log):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (@media (prefers-dark-interface)):
        (.item.action:not(.initial-state)::before):
        (.tree-outline .item.action.visual:not(.selected, .invalid)):
        (.item.action:not(.initial-state) > .icon):
        (.tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon):
        * UserInterface/Views/RecordingContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view:not(.tab).recording):
        (.content-view:not(.tab).recording > header > .slider-container):
        (.content-view:not(.tab).recording > header > .slider-container > input[type=range]):
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (@media (prefers-dark-interface)):
        (.resource-headers .value):
        * UserInterface/Views/ResourceSizesContentView.css:
        (@media (prefers-dark-interface)):
        (.resource-sizes > .content .label):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (@media (prefers-dark-interface)):
        (.popover.waterfall-popover):
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (.resource-timing-breakdown > table > tr > td.label,):
        (.resource-timing-breakdown > table hr):
        * UserInterface/Views/ScopeBar.css:
        (@media (prefers-dark-interface)):
        (.scope-bar > li):
        * UserInterface/Views/SearchBar.css:
        (@media (prefers-dark-interface)):
        (:matches(.search-bar, .filter-bar) > input[type="search"],):
        (:matches(.search-bar, .filter-bar) > input[type="search"]::placeholder):
        (:matches(.search-bar, .filter-bar) > input[type="search"]:focus):
        * UserInterface/Views/SearchSidebarPanel.css:
        (@media all):
        * UserInterface/Views/SettingsTabContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.settings .navigation-bar):
        (.content-view.settings .navigation-bar .item.radio.button.text-only.selected):
        * UserInterface/Views/ShaderProgramContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.shader-program > .text-editor.shader):
        (.content-view.shader-program > .text-editor.shader > .type-title):
        * UserInterface/Views/ShaderProgramTreeElement.css:
        (@media (prefers-dark-interface)):
        (.item.shader-program .status > img):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning,):
        (.source-code.text-editor > .CodeMirror .issue-widget.error,):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration.locked):
        (.spreadsheet-css-declaration .selector.style-attribute):
        (.spreadsheet-css-declaration .selector:focus,):
        (.spreadsheet-css-declaration.locked .origin::after):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        (.spreadsheet-css-declaration .media-label):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-panel .section-header):
        (.spreadsheet-style-panel .section-header .node-link:hover):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (@media (prefers-dark-interface)):
        (.syntax-highlighted,):
        (.cm-s-default,):
        (.cm-s-default .cm-attribute):
        (.cm-s-default .cm-m-xml.cm-attribute,):
        (.cm-s-default .cm-meta):
        (.cm-s-default .cm-variable-3):
        (.cm-s-default .cm-builtin):
        * UserInterface/Views/TabBar.css:
        (@media (prefers-dark-interface)):
        (.tab-bar):
        (.tab-bar > .item):
        (.tab-bar > .item > .title):
        (.tab-bar > .item:not(.disabled).selected):
        (.tab-bar:not(.animating) > .item:not(.selected):hover):
        (.tab-bar > .item > .close,):
        (body.window-inactive .tab-bar):
        (body.window-inactive .tab-bar > .item):
        (body.window-inactive .tab-bar > .item.selected):
        (body.window-inactive .tab-bar > .item > .title):
        * UserInterface/Views/Table.css:
        (@media (prefers-dark-interface)):
        (.table,):
        (.table > .header > .sortable:active):
        (.table > .header > :matches(.sort-ascending, .sort-descending)):
        (.table > .header > :matches(.sort-ascending, .sort-descending)::after):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        * UserInterface/Views/TimelineDataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th:matches(.sort-ascending, .sort-descending)):
        * UserInterface/Views/TimelineIcons.css:
        (@media (prefers-dark-interface)):
        (.time-icon .icon):
        * UserInterface/Views/TimelineOverview.css:
        (@media (prefers-dark-interface)):
        (.timeline-overview > .navigation-bar.timelines):
        (.timeline-overview:not(.frames) > .graphs-container > .timeline-overview-graph:nth-child(even)):
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item:not(:first-child),):
        * UserInterface/Views/TimelineRecordingContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        * UserInterface/Views/Toolbar.css:
        (@media (prefers-dark-interface)):
        (body .toolbar):
        (body.window-inactive .toolbar):
        (body.latest-mac .toolbar .item.button,):
        (body.latest-mac .toolbar .search-bar > input[type="search"]):
        (body.latest-mac .toolbar .search-bar > input[type="search"]:focus):
        (body.latest-mac .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button):
        (body.latest-mac .toolbar .dashboard-container):
        (body.latest-mac .toolbar .item.button:active):
        (body.latest-mac.window-inactive .toolbar .item.button,):
        * UserInterface/Views/TreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline .item .subtitle):
        * UserInterface/Views/Variables.css:
        (@media (prefers-dark-interface)):
        (:root):
        (body.window-inactive):
        (body.window-inactive *):
        * UserInterface/Views/WebSocketContentView.css:
        (@media (prefers-dark-interface)):
        (.web-socket.content-view .data-grid table.data tr.revealed):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.outgoing):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.non-text-frame):
        * UserInterface/Views/XHRBreakpointPopover.css:
        (@media (prefers-dark-interface)):
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):

2018-09-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: generate CSSKeywordCompletions from backend values
        https://bugs.webkit.org/show_bug.cgi?id=189041

        Reviewed by Joseph Pecoraro.

        Moves the longhands map to `WI.CSSKeywordCompletions` for more global access. Creates an
        aliases map to support completions on aliases with the same values as the non-alias name.
        Removes all keyword-only properties from `WI.CSSKeywordCompletions._propertyKeywordMap` as
        they are now generated by the backend (kept for compatibility).

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions):
        (WI.CSSCompletions.requestCSSCompletions.propertyNamesCallback):
        (WI.CSSCompletions.prototype.isShorthandPropertyName):

        * UserInterface/Models/CSSKeywordCompletions.js:
        (WI.CSSKeywordCompletions.forProperty.addKeywordsForName): Added.
        (WI.CSSKeywordCompletions.forProperty):
        (WI.CSSKeywordCompletions.addCustomCompletions):

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.isInheritedPropertyName):

2018-09-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: breakpoint context menu appears twice in DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=189308

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMBreakpointTreeController.js:
        (WI.DOMBreakpointTreeController.appendBreakpointContextMenuItems):
        Set a symbol on the `contextMenu` to ensure that the same items are not added twice.

2018-09-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Source View doesn't scroll to show line when breakpoint is hit inside of <script> in HTML resource
        https://bugs.webkit.org/show_bug.cgi?id=189638
        <rdar://problem/43359278>

        Reviewed by Matt Baker.

        Pausing in Document resources on page load have special considerations where we
        may not receive their full content immediately, so we may synthesize inline script
        content for the resource until we have full content. Unfortunately, when we get
        full content and update the TextEditor we were losing the revealed position and
        other editor information. This change specifically targets those cases, by
        re-applying editor state when updating such a resource from partial to full content.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._contentAvailable):
        Signal to the editor that when updating the content it should carry
        over editor state. Only do this if we had partial content before.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor):
        (WI.TextEditor.prototype.set repeatReveal):
        Provide a way to signal we should restore state when update the content.

        (WI.TextEditor.set string.update):
        (WI.TextEditor.prototype.set string):
        When repeatReveal was enabled, restore editor state such as the
        revealed location and text selection.

2018-09-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Record actions performed on ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=181341

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        (WI.Recording.prototype.createContext):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.getImageParameters):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._classNameForAction.classNameForActionName):

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.shown):
        (WI.RecordingContentView.prototype.hidden):
        (WI.RecordingContentView.prototype._generateContentFromSnapshot): Renamed.
        (WI.RecordingContentView.prototype._updateImageGrid):
        (WI.RecordingContentView.prototype._generateContentCanvasWebGL): Deleted.

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

2018-09-13  Jamal Nasser  <jamaln@mail.com>

        Web Inspector: Dark Mode: bezier curve editor should be updated
        https://bugs.webkit.org/show_bug.cgi?id=187657

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview > div):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):

2018-09-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Timelines: clicking a row in Script > Events grid triggers Location popover when column is hidden
        https://bugs.webkit.org/show_bug.cgi?id=189603
        <rdar://problem/44431403>

        Reviewed by Joseph Pecoraro.

        TimelineDataGrid controls showing/hiding the call frame popover, with subclasses
        overriding callFramePopoverAnchorElement to position it. This patch adds
        another overridable base class method, shouldShowCallFramePopover, which subclasses
        can use to block the popover when the Location column is hidden.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.layout):
        (WI.DataGrid.prototype._positionResizerElements):
        (WI.DataGrid.prototype._isColumnVisible): Deleted.

        * UserInterface/Views/LayoutTimelineDataGrid.js:
        (WI.LayoutTimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.LayoutTimelineDataGrid):

        * UserInterface/Views/ScriptTimelineDataGrid.js:
        (WI.ScriptTimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.ScriptTimelineDataGrid):

        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.TimelineDataGrid.prototype._dataGridSelectedNodeChanged):

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

        Web Inspector: Opening inspector with a selected element might immediately scroll that element off screen in the DOM Tree outline
        https://bugs.webkit.org/show_bug.cgi?id=189569
        <rdar://problem/44397098>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.layout):
        Re-select the selected DOM node in the DOM Tree when the view resizes.
        Typically this can happen if the sidebar opens/closes/resizes, in which
        case we will want the selected DOM node to stay in view even if the DOM
        tree starts wrapping earlier content.

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

        Web Inspector: fix test case failures in js-isLikelyStackTrace.html
        https://bugs.webkit.org/show_bug.cgi?id=180664

        Reviewed by Devin Rousso.

        * UserInterface/Models/StackTrace.js:
        (WI.StackTrace.isLikelyStackTrace):
        In a quick benchmark 50% of the time was rebuilding the same complex regular
        expression over and over again. Instead just build the regex once and reset
        it before each use.

2018-09-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: imported recordings are unable to be viewed after navigation
        https://bugs.webkit.org/show_bug.cgi?id=189208

        Reviewed by Joseph Pecoraro.

        Move the "Imported Recordings" folder to the top level (instead of under "Overview") so that
        it is selectable when there are no canvases but there is an imported recording.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        Null out the `source` of each `WI.Recording` for the removed `WI.Canvas`.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        Add each `WI.Recording`for the removed `WI.Canvas` to the "Imported Recordings" folder.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.refresh):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._showError):
        Drive-by: don't recreate the error preview element if it already exists.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.updateRepresentedObjects): Added.
        (WI.CanvasSidebarPanel.prototype.shown):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange): Deleted.

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

        Web Inspector: Fix typo "vritualized"
        https://bugs.webkit.org/show_bug.cgi?id=189511

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements):

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

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

        Reviewed by Matt Baker.

        * .eslintrc:
        * UserInterface/Base/Platform.js:
        * UserInterface/Controllers/AuditManager.js:
        * UserInterface/Controllers/BasicBlockAnnotator.js:
        * UserInterface/Controllers/CallFrameTreeController.js:
        * UserInterface/Controllers/HARBuilder.js:
        * UserInterface/Models/AuditReport.js:
        * UserInterface/Models/AuditResult.js:
        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/AuditTestSuite.js:
        * UserInterface/Models/Cookie.js:
        * UserInterface/Models/SourceCodePosition.js:
        * UserInterface/Test/FrontendTestHarness.js:
        * UserInterface/Test/TestSuite.js:
        * UserInterface/Views/CanvasContentView.js:
        * UserInterface/Views/CollectionContentView.js:
        * UserInterface/Views/ContentBrowser.js:
        * UserInterface/Views/CookieStorageContentView.js:
        * UserInterface/Views/DataGrid.js:
        * UserInterface/Views/DatabaseTableContentView.js:
        * UserInterface/Views/FindBanner.js:
        * UserInterface/Views/JSONResourceContentView.js:
        * UserInterface/Views/LogContentView.js:
        * UserInterface/Views/ResourceSidebarPanel.js:
        * UserInterface/Views/SourceCodeTextEditor.js:
        * UserInterface/Views/SpreadsheetTextField.js:
        * UserInterface/Workers/Formatter/FormatterUtilities.js:

2018-09-06  Andy Estes  <aestes@apple.com>

        [Apple Pay] Rename the -apple-pay-button-type value "checkout" to "check-out"
        https://bugs.webkit.org/show_bug.cgi?id=189366
        <rdar://problem/44193218>

        Reviewed by Sam Weinig.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-31  Jamal Nasser  <xnasser@outlook.com>

        Added a CSS rule to DarkMode.css to fix color on sidebar toggle.
        <https://webkit.org/b/189139>

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):

2018-08-29  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/189081>

        * WebInspectorUI.esproj: Removed.

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

        console.log() shows (anonymous function) instead of the passed string when a certain format is used
        https://bugs.webkit.org/show_bug.cgi?id=188946
        <rdar://problem/43756428>

        Reviewed by Brian Burg.

        Stack trace URLs are much more likely to follow the following format:

            <protocol>://<path>:<line>:<column>

        Modify the test regexp to always require that a protocol exists and to check that there are
        no ":" inside the protocol or path. Additionally, stack traces usually have more than one
        frame, so return false if there isn't more than one line.

        * UserInterface/Models/StackTrace.js:
        (WI.StackTrace.isLikelyStackTrace):

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

        Web Inspector: REGRESSION: CanvasSidebarPanel is empty for imported recordings
        https://bugs.webkit.org/show_bug.cgi?id=189061

        Reviewed by Brian Burg.

        When recordings are imported, they don't have an associated `WI.Canvas`, meaning that the
        `WI.Recording` is never added to the canvas' `WI.RecordingCollection`. Previously, the
        canvas sidebar relied upon the `ItemAdded` event to update the recording `WI.ScopeBar`.
        Since the imported recording isn't ever added to the collection, this is never fired.

        This patch moves the function call that updates the `WI.ScopeBar` to a more universal path,
        ensuring that no matter how a `WI.Recording` is set for the sidebar, it will be shown.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):

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

        Web Inspector: Search bar is too narrow in some localizations
        https://bugs.webkit.org/show_bug.cgi?id=189060
        <rdar://problem/43006369>

        Reviewed by Brian Burg.

        * UserInterface/Views/Toolbar.css:
        (.toolbar .search-bar):

2018-08-27  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix -- disable LTO for production builds

        * Configurations/Base.xcconfig:

2018-08-27  Andy Estes  <aestes@apple.com>

        Teach Web Inspector how to complete keywords for -apple-pay-button-style and -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=189001

        Reviewed by Devin Rousso.

        * UserInterface/Models/CSSKeywordCompletions.js:

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

        Web Inspector: when scrolling a virtualized TreeOutline, only update the DOM periodically
        https://bugs.webkit.org/show_bug.cgi?id=188960

        Reviewed by Brian Burg.

        After each `updateVirtualizedElements` call, remember the `WI.TreeElement` that is located
        halfway within the visible list. When handling each "scroll", only regenerate the
        `WI.TreeOutline` DOM if the user has scrolled `extraRows` distance.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements):
        (WI.TreeOutline.prototype._calculateVirtualizedValues): Added.

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

        Web Inspector: provide autocompletion for event breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=188717

        Reviewed by Brian Burg.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager):
        (WI.DOMTreeManager.prototype.getSupportedEventNames): Added.

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover):
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype.dismiss): Added.
        (WI.EventBreakpointPopover.prototype.completionSuggestionsClickedCompletion): Added.
        (WI.EventBreakpointPopover.prototype._presentOverTargetElement):
        (WI.EventBreakpointPopover.prototype._showSuggestionsView): Added.

2018-08-27  Keith Rollin  <krollin@apple.com>

        Build system support for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187785
        <rdar://problem/42353132>

        Reviewed by Dan Bernstein.

        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
        LTO.

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

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

        Web Inspector: REGRESSION: virtualized TreeOutline is empty when filtering
        https://bugs.webkit.org/show_bug.cgi?id=188959

        Reviewed by Brian Burg.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.set hidden):
        Only set `focusedTreeElement` if the `WI.TreeElement` is selected and not hidden. There is
        no reason to focus a hidden or unselected `WI.TreeElement`.

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

        Web Inspector: Color picker: can't enter decimal numbers for opacity
        https://bugs.webkit.org/show_bug.cgi?id=187026
        <rdar://problem/41446500>

        Reviewed by Brian Burg.

        After every "input" event, we update the `color` value of the `WI.ColorPicker` based on a
        generated string using the values of the various <input>. The issue with this approach is
        that adding a decimal point (e.g. "0.") would still be construed as 0, meaning that the
        color wouldn't change and would instead be reset back to it's old value. This patch adds an
        early return if the newly generated color has the same value as the current color, thereby
        meaning that the `color` wouldn't change when changing from "0" to "0.".

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.createColorInput):
        (WI.ColorPicker.prototype._handleColorInputInput):

2018-08-23  Simon Fraser  <simon.fraser@apple.com>

        Add support for dumping GC heap snapshots, and a viewer
        https://bugs.webkit.org/show_bug.cgi?id=186416

        Reviewed by Joseph Pecoraro.

        Make a way to dump information about the GC heap that is useful for looking for leaked
        or abandoned objects. This dump is obtained (on Apple platforms) via:
            notifyutil -p com.apple.WebKit.dumpGCHeap
        which writes a JSON file to /tmp which can then be loaded into the viewer in Tools/GCHeapInspector.

        This leverages the heap snapshot used by Web Inspector, adding an alternate format for
        the snapshot JSON that adds additional data about objects and why they are GC roots.

        The generated bindings code is changed to include the output root reason from isReachableFromOpaqueRoots(),
        and to implement heapSnapshot() which provides the address of the wrapped object. A new IDL attribute,
        CustomHeapSnapshot, is used to allow custom heapSnapshot() implementations for classes like JSDocument
        that need to decorate the heap snapshot cell data with things like the document URL.

        GCController registers a notifyutil callback which gathers the debug heap snapshot, and dumps it
        to a file in /tmp. The file path is printed out to the system log.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):

2018-08-23  Brian Burg  <bburg@apple.com>

        Web Inspector: fix typos in some compositing reasons
        https://bugs.webkit.org/show_bug.cgi?id=188905
        <rdar://problem/43624825>

        Reviewed by Simon Fraser.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype._populateListOfCompositingReasons):
        (WI.LayerTreeDetailsSidebarPanel):
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype._updateReasonsList):
        (WI.Layers3DContentView):

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

        Web Inspector: support breakpoints for timers and animation-frame events
        https://bugs.webkit.org/show_bug.cgi?id=188778

        Reviewed by Brian Burg.

        Add a `type` to `WI.EventBreakpoint` that matches `DOMDebugger.EventBreakpointType`:
         - `AnimationFrame` for `requestAnimationFrame`
         - `Listener` for any named DOM Event
         - `Timer` for `setTimeout` and `setInterval`

        Modified `WI.EventBreakpointPopover` to provide ways for selecting these other types, which
        is then passed to `WI.DOMDebuggerManager`, which now calls through to the newly added
        `DOMDebugger.removeEventBreakpoint` and `DOMDebugger.setEventBreakpoint` that sets
        breakpoints for all event types.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/EventBreakpointAnimationFrame.svg: Added.
        * UserInterface/Images/EventBreakpointListener.svg: Renamed from Source/WebInspectorUI/UserInterface/Images/EventBreakpoint.svg.
        * UserInterface/Images/EventBreakpointTimer.svg: Added.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.supportsEventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.eventBreakpointForTypeAndEventName): Added.
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint.breakpointRemoved): Added.
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.eventBreakpointForEventName): Deleted.

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

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

        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.fromPayload):
        (WI.EventBreakpoint.prototype.get type): Added.
        (WI.EventBreakpoint.prototype.get serializableInfo):
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):

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

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        * UserInterface/Views/EventBreakpointTreeElement.css:
        (.breakpoint.event.animation-frame:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.listener:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.timer:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event:not(.breakpoint-paused-icon) .icon): Deleted.

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

        Web Inspector: `console.inspect(sessionStorage)` first time does not show Session Storage content view if Storage tab was previously unvisited
        https://bugs.webkit.org/show_bug.cgi?id=188801

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.tabContentViewClassForRepresentedObject):
        (WI._storageWasInspected):
        Since the `WI.StorageSidebarPanel` is not created until the `WI.StorageTabContentView` is
        created, the `WI.StorageManager.Event.DOMStorageObjectWasInspected` and
        `WI.StorageManager.Event.DatabaseWasInspected` events do not reach the sidebar. We should
        follow what `WI._domNodeWasInspected` does and additionally call `WI.showRepresentedObject`
        on the inspected object.

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

        Web Inspector: REGRESSION: InspectorStyleSheet not visible in the resources sidebar
        https://bugs.webkit.org/show_bug.cgi?id=188819
        <rdar://problem/43579039>

        Reviewed by Brian Burg.

        * UserInterface/Models/ResourceCollection.js:
        (WI.ResourceCollection.prototype.objectIsRequiredType):

2018-08-23  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Scripts not showing up in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=188814
        <rdar://problem/43576117>

        Reviewed by Brian Burg.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._addScript):
        This path shouldn't apply to JSContext inspection which will
        never have a pageTarget and but doesn't have a mainResource.

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

        Web Inspector: cannot delete multiple event breakpoints by repeatedly hitting delete
        https://bugs.webkit.org/show_bug.cgi?id=188803
        <rdar://problem/43572838>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._domBreakpointAddedOrRemoved):
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved):

2018-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Do not include TreeOutlineDataGridSynchronizer.js in inspector main.

        The script was removed in r235151.

        * UserInterface/Main.html:

2018-08-21  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove TreeOutlineDataGridSynchronizer
        https://bugs.webkit.org/show_bug.cgi?id=188449
        <rdar://problem/43107980>

        Reviewed by Devin Rousso.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype.layout):
        * UserInterface/Views/LayoutTimelineView.js:
        (WI.LayoutTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/RenderingFrameTimelineView.js:
        (WI.RenderingFrameTimelineView.prototype._processPendingRecords):
        (WI.RenderingFrameTimelineView.prototype.dataGridNodeForTreeElement): Deleted.
        * UserInterface/Views/ScriptDetailsTimelineView.js:
        (WI.ScriptDetailsTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid):
        (WI.TimelineDataGrid.prototype.reset):
        (WI.TimelineDataGrid.prototype.shown):
        (WI.TimelineDataGrid.prototype.addRowInSortOrder):
        (WI.TimelineDataGrid.prototype._refreshDirtyDataGridNodes):
        (WI.TimelineDataGrid.prototype._sort):
        (WI.TimelineDataGrid.prototype.treeElementForDataGridNode): Deleted.
        (WI.TimelineDataGrid.prototype.dataGridNodeForTreeElement): Deleted.
        * UserInterface/Views/TreeOutlineDataGridSynchronizer.js: Removed.

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

        Web Inspector: ⌘G does not while find banner is focused
        https://bugs.webkit.org/show_bug.cgi?id=188815
        <rdar://problem/43577158>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Allow an <input> element to be the current focus element, which is what will
        our global KeyboardShortcut handlers will interact with. Also make sure
        that showing the find banner for the first time still focuses it.

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

        Web Inspector: REGRESSION(r235095): duplicate actions existing in WI.CanvasSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=188808

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        Check that the `WI.RecordingAction` is not already represented in the `WI.TreeOutline`
        before adding it.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle > progress):
        Drive-by: vertically center the <progress> shown for `WI.RecordingFrame` during processing.

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

        Web Inspector: Canvas: provide default icon for all actions
        https://bugs.webkit.org/show_bug.cgi?id=188807

        Reviewed by Matt Baker.

        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action > .icon):
        (.item.action.initial-state > .icon): Deleted.

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

        Web Inspector: Rulers.svg is missing
        https://bugs.webkit.org/show_bug.cgi?id=188806
        <rdar://problem/43574273>

        Reviewed by Devin Rousso.

        * UserInterface/Images/Rulers.svg: Added.

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

        Web Inspector: allow breakpoints to be set for specific event listeners
        https://bugs.webkit.org/show_bug.cgi?id=183138

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.fromPayload): Added.
        (WI.EventBreakpoint.prototype.get eventListener): Added.

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

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager):
        (WI.DOMTreeManager.prototype.get eventBreakpoints): Added.
        (WI.DOMTreeManager.prototype._setDocument):
        (WI.DOMTreeManager.prototype.setEventListenerDisabled):
        (WI.DOMTreeManager.prototype.setBreakpointForEventListener): Added.
        (WI.DOMTreeManager.prototype.removeBreakpointForEventListener): Added.
        (WI.DOMTreeManager.prototype.breakpointForEventListenerId): Added.

        * UserInterface/Controllers/EventBreakpointTreeController.js:
        (WI.EventBreakpointTreeController):

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

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup):
        (WI.EventListenerSectionGroup.prototype._createDisabledToggleRow):
        (WI.EventListenerSectionGroup.prototype._createBreakpointToggleRow): Added.

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):

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

        Web Inspector: Canvas tab: allow recording processing to be stopped midway
        https://bugs.webkit.org/show_bug.cgi?id=185152

        Reviewed by Joseph Pecoraro.

        Previously, `WI.Recording` used a `WI.YieldableTask` to process every action in such a way
        as to not block the UI. The downside to this approach was that it used a message view to
        indicate the progress of this process, and prevented the user from viewing the `WI.Recording`
        until that process was completed.

        This patch changes `WI.Recording` to instead use `async/await` and fire events whenever a
        `WI.RecordingAction` (and `WI.RecordingFrame`) finished processing, allowing it to be added
        to the recording `WI.TreeOutline` and selected by the user. Additionally, a pause/resume
        button is added to the `WI.CanvasSidebarPanel` so the user has greater control over what
        how much of the `WI.Recording` they want to process.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Utilities.js:
        (Promise.delay)
        Utility function for promisifying `setTimeout`.

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.prototype.get processing): Added.
        (WI.Recording.prototype.get ready): Added.
        (WI.Recording.prototype.startProcessing): Added.
        (WI.Recording.prototype.stopProcessing): Added.
        (WI.Recording.prototype.async._process): Added.
        (WI.Recording.prototype.process): Deleted.
        (WI.Recording.prototype.async.yieldableTaskWillProcessItem): Deleted.
        (WI.Recording.prototype.async.yieldableTaskDidFinish): Deleted.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.prototype.get ready): Added.
        (WI.RecordingAction.prototype.async.swizzle):
        (WI.RecordingAction.prototype.apply):

        * UserInterface/Models/RecordingInitialStateAction.js:
        (WI.RecordingInitialStateAction):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged.createPauseButton): Added.
        (WI.CanvasSidebarPanel.prototype._recordingChanged.createResumeButton): Added.
        (WI.CanvasSidebarPanel.prototype._createRecordingFrameTreeElement): Added.
        (WI.CanvasSidebarPanel.prototype._createRecordingActionTreeElement): Added.
        (WI.CanvasSidebarPanel.prototype._handleRecordingProcessedAction): Added.
        (WI.CanvasSidebarPanel.prototype._handleRecordingStartProcessingFrame): Added.
        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle > progress): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:matches(:focus, .force-focus) .item.processing.selected .subtitle > progress): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle::before): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .recording-processing-options): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .recording-processing-options > .indeterminate-progress-spinner): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .indeterminate-progress-spinner): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.initialLayout):
        (WI.RecordingContentView.prototype._updateCanvasPath):
        (WI.RecordingContentView.prototype._handleRecordingProcessedAction): Added.
        (WI.RecordingContentView.prototype._updateProcessProgress): Deleted.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionSwizzle): Deleted.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionApply): Deleted.
        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > header > .slider-container > .slider-value): Added.

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

        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.get statusElement): Added.
        (WI.GeneralTreeElement.prototype._updateTitleElements):

        * UserInterface/Views/RecordingContentView.js:
        (WI.CanvasContentView.prototype._handleViewShaderButtonClicked):
        (WI.CanvasContentView.prototype._handleViewRecordingButtonClicked):
        Drive-by: `WI.Collection` doesn't have a `values()` accessor for the underlying `Set`.

        * UserInterface/Views/RecordingNavigationSidebarPanel.css: Removed.
        * UserInterface/Views/RecordingNavigationSidebarPanel.js: Removed.
        These files are no longer used since they were "merged" into `WI.CanvasSidebarPanel`.

2018-08-20  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: create icons for recordings/shaders in the preview tile
        https://bugs.webkit.org/show_bug.cgi?id=183650

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._shaderProgramAdded):
        (WI.CanvasContentView.prototype._shaderProgramRemoved):
        (WI.CanvasContentView.prototype._updateViewRelatedItems):
        (WI.CanvasContentView.prototype._handleViewShaderButtonClicked):
        (WI.CanvasContentView.prototype._handleViewRecordingButtonClicked):
        (WI.CanvasContentView.prototype._addRecording): Deleted.
        (WI.CanvasContentView.prototype._handleRecordingSelectElementChange): Deleted.
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > :matches(.view-shader, .view-recording)):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > img + img):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > .view-shader):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > .view-recording):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings > select): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer .recordings > select:focus): Deleted.
        Create two image buttons in the bottom left corner of each canvas tile that appear when the
        canvas has associated shaders and/or recordings. Clicking each image button will function
        similar to path components, in that if there is only one shader/recording, it is immediately
        selected, whereas if there are multiple a dropdown is shown.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        Drive-by: ensure that the selected recording action is properly updated when first loading a
        recording and when scrubbing through one.

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

        Web Inspector: support breakpoints for arbitrary event names
        https://bugs.webkit.org/show_bug.cgi?id=183118

        Reviewed by Joseph Pecoraro.

        Create UI for setting breakpoints on event names. Ties into renamed DOMDebugger commands,
        specifically `setEventBreakpoint` and `removeEventBreakpoint`, that will pause execution if
        any DOM event is fired that matches any previously registered breakpoints.

        Event breakpoints are distinguished by name, and they currently apply globally, meaning
        that only one breakpoint per event name can be registered.

        Event breakpoints are created in the Debugger tab in a new "Event Breakpoints" section in
        the Navigation sidebar. A new type of popover, EventBreakpointPopover, is used, but right
        now all it contains is a basic text input for the event name. Similarly, a new TreeElement
        subclass, EventBreakpointTreeElement, is used when showing the list of event listener
        breakpoints, but all it shows now is the event name.

        The majority of the logic in this patch was derived from XHR breakpoints.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Images/EventBreakpoint.svg: Added.

        * UserInterface/Models/EventBreakpoint.js: Added.
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.prototype.get eventName):
        (WI.EventBreakpoint.prototype.get disabled):
        (WI.EventBreakpoint.prototype.set disabled):
        (WI.EventBreakpoint.prototype.get serializableInfo):
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype.get eventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.eventBreakpointForEventName): Added.
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint.breakpointUpdated): Added.
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._resolveEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._saveEventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype._eventBreakpointDisabledStateDidChange): Added.

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

        * UserInterface/Controllers/EventBreakpointTreeController.js: Added.
        (WI.EventBreakpointTreeController):
        (WI.EventBreakpointTreeController.prototype.revealAndSelect):
        (WI.EventBreakpointTreeController.prototype._eventBreakpointAdded):
        (WI.EventBreakpointTreeController.prototype._eventBreakpointRemoved):
        (WI.EventBreakpointTreeController.prototype._addTreeElement):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved): Added.
        (WI.DebuggerSidebarPanel.prototype._addEventBreakpointButtonClicked): Added.
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):

        * UserInterface/Views/EventBreakpointTreeElement.js: Added.
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.onenter):
        (WI.EventBreakpointTreeElement.prototype.onspace):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementClicked):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementFocused):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementMouseDown):
        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/EventBreakpointTreeElement.css: Added.
        (.breakpoint.event-listener:not(.breakpoint-paused-icon) .icon):

        * UserInterface/Views/EventBreakpointPopover.js: Added.
        (WI.EventBreakpointPopover):
        (WI.EventBreakpointPopover.prototype.get result):
        (WI.EventBreakpointPopover.prototype.get value):
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype._presentOverTargetElement):
        * UserInterface/Views/EventBreakpointPopover.css: Added.
        (.popover .event-listener-breakpoint-content):
        (.popover .event-listener-breakpoint-content > input):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):

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

        Web Inspector: Show Initiator information in Network Table
        https://bugs.webkit.org/show_bug.cgi?id=188590
        <rdar://problem/43305488>

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype.willShowWithCookie):
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem):
        When a ResourceDetailView gets shown, it may also want to show its initial content view
        with a cookie as the cookie may contain position highlight information.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._showResourceDetailView):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        When showing a represented object, pass the cookie information on to the detail
        view's so that it may include the cookie when showing the final content view.

        (WI.NetworkTableContentView.prototype.tablePopulateCell):
        (WI.NetworkTableContentView.prototype._populateInitiatorCell):
        (WI.NetworkTableContentView.prototype.initialLayout):
        New initiator column contains a source code link to the call site.

        (WI.NetworkTableContentView.prototype._generateSortComparator):
        (WI.NetworkTableContentView.prototype._entryForResource):
        Entry data for the initiator is a display string that can be sorted easily.

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

        LayoutTest inspector/worker/debugger-pause.html sometimes times out
        https://bugs.webkit.org/show_bug.cgi?id=188580

        Reviewed by Matt Baker.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get mainResource):
        (WI.Target.prototype.set mainResource):
        Dispatch an event when the Main Resource is set.

2018-08-15  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        Add keyword completion for 'list-button'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

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

        Web Inspector: REGRESSION(r?): the probe sidebar doesn't show up when adding probes
        https://bugs.webkit.org/show_bug.cgi?id=188594

        Reviewed by Brian Burg.

        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        (WI.ProbeDetailsSidebarPanel.prototype.set inspectedProbeSets):
        (WI.ProbeDetailsSidebarPanel.prototype.initialLayout):
        Add checks to ensure that DOM elements for each probe section exist before trying to
        add/remove them from the sidebar. This can happen if probes are inspected before the sidebar
        is shown for the first time.

        * UserInterface/Views/ProbeSetDataGrid.js:
        (WI.ProbeSetDataGrid):
        (WI.ProbeSetDataGrid.columnIdentifierForProbe): Added.
        (WI.ProbeSetDataGrid.prototype._setupProbe):
        (WI.ProbeSetDataGrid.prototype._teardownProbe):
        (WI.ProbeSetDataGrid.prototype._probeExpressionChanged):
        * UserInterface/Views/ProbeSetDataGridNode.js:
        (WI.ProbeSetDataGridNode.prototype.set frame):
        Provide better column identifiers for each probe's `WI.DataGrid`. It's possible for the
        numeric probe ID value to be stringified when passing it into the constructor of
        `WI.DataGrid`, which will not match the original numeric value on later retrieval.

2018-08-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should not center rows when scrolling them into view
        https://bugs.webkit.org/show_bug.cgi?id=188593
        <rdar://problem/43311660>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleKeyDown):

2018-08-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should handle row selection instead of the table delegate
        https://bugs.webkit.org/show_bug.cgi?id=188534
        <rdar://problem/43253335>

        Reviewed by Joseph Pecoraro.

        Row selection should be implemented by Table, rather than its delegate.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableShouldSelectRow):
        (WI.NetworkTableContentView.prototype.tableCellMouseDown): Deleted.
        Prevent selection unless the clicked cell belongs to the name column.

        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype.tableShouldSelectRow):
        Always prevent selection.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype._handleMouseDown):

2018-08-12  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear pressed when presenting a color picker
        https://bugs.webkit.org/show_bug.cgi?id=188477

        Reviewed by Tim Horton.

        Add keyword completion for 'color-well'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: SourceCodeTextEditor error/warning text widget is too light
        https://bugs.webkit.org/show_bug.cgi?id=188126
        <rdar://problem/42674963>

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning,): Added.
        (.source-code.text-editor > .CodeMirror .issue-widget.error,): Added.

2018-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version (iOS 12)
        https://bugs.webkit.org/show_bug.cgi?id=188359
        <rdar://problem/42981364>

        Reviewed by Brian Burg.

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

2018-08-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Global search sometimes returns duplicate results for a resource
        https://bugs.webkit.org/show_bug.cgi?id=188270
        <rdar://problem/42867498>

        Reviewed by Brian Burg.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch.resourcesCallback):
        Avoid duplicate search results in the frontend. We should also fix the backend
        but a frontend fix will also be desired for backends that have the issue.

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Fix spelling of "overridden"
        https://bugs.webkit.org/show_bug.cgi?id=188315

        Reviewed by Darin Adler.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype.treeElementForRepresentedObject):
        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.ondetach):
        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype.get sizesToFit):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.shouldFilterPopulate):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.canBeFormatted):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.onpopulate):

2018-08-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: SourceCodeTextEditor thread indicator widget is too light
        https://bugs.webkit.org/show_bug.cgi?id=188119
        <rdar://problem/42670811>

        Reviewed by Matt Baker.

        Make the background of the thread indicator widget darker.

        Reduce the number of HTML elements and simplify CSS by removing the HTML element that drew an arrow and using clip-path on inline widgets instead.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (.source-code.text-editor .CodeMirror-linewidget):
        (.source-code.text-editor > .CodeMirror .line-indicator-widget.inline):
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .thread-widget.inline):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._updateThreadIndicatorWidget):
        (WI.SourceCodeTextEditor.prototype._updateIssueWidgetForIssues):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line.primary .CodeMirror-linenumber::after):
        * UserInterface/Views/Variables.css:
        (:root):

2018-08-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: disabled breakpoints banner is too light
        https://bugs.webkit.org/show_bug.cgi?id=188120
        <rdar://problem/42671348>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.navigation.debugger .warning-banner):

2018-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include a full URL tooltip when hovering the name in the Network Tab
        https://bugs.webkit.org/show_bug.cgi?id=188199

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):
        Give a tooltip to the entire cell since the entire cell has interactivity.

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

        Web Inspector: Dark Mode: Search sidebar panel text field has a white background
        https://bugs.webkit.org/show_bug.cgi?id=188128
        <rdar://problem/42678270>

        Reviewed by Matt Baker.

        Make the search bar in Search tab match the style of the filter bar.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:matches(.search-bar, .filter-bar) > input[type="search"],):
        (:matches(.search-bar, .filter-bar) > input[type="search"]::placeholder):
        (:matches(.search-bar, .filter-bar) > input[type="search"]:focus):
        (.filter-bar > input[type="search"]): Deleted.
        (.filter-bar > input[type="search"]::placeholder): Deleted.
        (.filter-bar > input[type="search"]:focus): Deleted.

2018-07-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234281.

        Broke internal builds.

        Reverted changeset:

        "[Datalist] Add button to TextFieldInputs with a datalist"
        https://bugs.webkit.org/show_bug.cgi?id=187741
        https://trac.webkit.org/changeset/234281

2018-07-26  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        Add keyword completion for 'list-button'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

2018-07-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Breakpoint editor in JS debugger has inconsistent background
        https://bugs.webkit.org/show_bug.cgi?id=188026

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.edit-breakpoint-popover-condition):
        (.breakpoint-action-eval-editor):

2018-07-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: remove odd-looking top border
        https://bugs.webkit.org/show_bug.cgi?id=187885

        Reviewed by Matt Baker.

        This border doesn't exist in the light mode, and it shouldn't be in the dark mode either.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (body .toolbar):

2018-07-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Layers tab background should be dark
        https://bugs.webkit.org/show_bug.cgi?id=187660
        <rdar://problem/42179616>

        Reviewed by Brian Burg.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype.initialLayout):
        * UserInterface/Views/Variables.css:
        (:root):

2018-07-19  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers visualization shouldn't select on mousedown
        https://bugs.webkit.org/show_bug.cgi?id=187488

        Reviewed by Matt Baker.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.initialLayout):
        (WI.Layers3DContentView.prototype._canvasMouseDown):
        (WI.Layers3DContentView.prototype._canvasMouseUp):
        Don't update selection on mousedown, update on mouseup!
        Specifically, only update when mousedown & mouseup targets are the same and mousemove hasn't been triggered.

2018-07-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: poor contrast for Search Tab's "the page's content has changed" message
        https://bugs.webkit.org/show_bug.cgi?id=187792

        Reviewed by Brian Burg.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):
        Make the background color slightly more yellow and less red. This slightly dicreases the contrast
        but makes the text look less like an error.

        * UserInterface/Views/SearchSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.navigation.search.changed > .banner):

2018-07-18  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r232591): CodeMirrorEditor should not use a RegExp lineSeparator option
        https://bugs.webkit.org/show_bug.cgi?id=187772
        <rdar://problem/42331640>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        (WI.CodeMirrorEditor):
        CodeMirror should be left to auto-detect line separators. By default
        it detects \n, \r\n, and \r. By specifying a regular expression we
        merely cause problems when CodeMirror uses the supplied lineSeparator
        when joining its array of lines together.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.set string.update):
        (WI.TextEditor.prototype.set string):
        This assertion was only true when we forced "\n" line endings everywhere.
        It no longer holds for source text with "\r\n" (Windows-style) line endings.

2018-07-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Fix execution highlighting after r233820
        https://bugs.webkit.org/show_bug.cgi?id=187703
        <rdar://problem/42246167>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.currentPositionToOriginalPosition):
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):

2018-07-16  Aaron Chu  <aaron_chu@apple.com>

        AX: Audit Tab should have an Audit Manager
        https://bugs.webkit.org/show_bug.cgi?id=184071
        <rdar://problem/38946364>

        Reviewed by Brian Burg.

        This implements the AuditManager for the audit feature. This patch revolves
        around building out an AuditManager that facilitates an audit. The AuditManager
        is responsible for managing and storing AuditReports and AuditTestSuites. It is
        also tasked to decide how to run a test -- whether as a test case or as a test
        suite. This patch also includes 4 models with which the AuditManager works to
        perform an audit and to generate a report. These models include AuditTestCase,
        which as a collection is stored inside an AuditTestSuite; and AuditResult,
        which, as a collection is stored inside an AuditReport.

        * UserInterface/Controllers/AuditManager.js: Added.
        (WI.AuditManager):
        (WI.AuditManager.prototype.get testSuites):
        (WI.AuditManager.prototype.get reports):
        (WI.AuditManager.prototype.async.runAuditTestByRepresentedObject):
        (WI.AuditManager.prototype.reportForId):
        (WI.AuditManager.prototype.removeAllReports):
        (WI.AuditManager.prototype.async._runTestCase):
        * UserInterface/Main.html:
        * UserInterface/Models/AuditReport.js: Added.
        (WI.AuditReport):
        (WI.AuditReport.prototype.get representedTestCases):
        (WI.AuditReport.prototype.get representedTestSuite):
        (WI.AuditReport.prototype.get resultsData):
        (WI.AuditReport.prototype.get isWritable):
        (WI.AuditReport.prototype.get failedCount):
        (WI.AuditReport.prototype.addResult):
        (WI.AuditReport.prototype.close):
        * UserInterface/Models/AuditResult.js: Added.
        (WI.AuditResult):
        (WI.AuditResult.prototype.get testResult):
        (WI.AuditResult.prototype.get name):
        (WI.AuditResult.prototype.get logLevel):
        (WI.AuditResult.prototype.get failed):
        * UserInterface/Models/AuditTestCase.js: Added.
        (WI.AuditTestCase.prototype.get id):
        (WI.AuditTestCase.prototype.get name):
        (WI.AuditTestCase.prototype.get suite):
        (WI.AuditTestCase.prototype.get test):
        (WI.AuditTestCase.prototype.get setup):
        (WI.AuditTestCase.prototype.get tearDown):
        (WI.AuditTestCase.prototype.get errorDetails):
        (WI.AuditTestCase):
        * UserInterface/Models/AuditTestSuite.js: Added.
        (WI.AuditTestSuite):
        (WI.AuditTestSuite.testCaseDescriptors):
        (WI.AuditTestSuite.prototype.get id):
        (WI.AuditTestSuite.prototype.get name):
        (WI.AuditTestSuite.prototype.get testCases):
        (WI.AuditTestSuite.prototype._buildTestCasesFromDescriptors):
        * UserInterface/Test.html:

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

        Web Inspector: Dark Mode: Console filter field buttons should be darker
        https://bugs.webkit.org/show_bug.cgi?id=187626
        <rdar://problem/42142744>

        Reviewed by Brian Burg.

        * UserInterface/Views/FindBanner.css:
        (@media (prefers-dark-interface)):
        (.find-banner > button.segmented):
        (.find-banner > button.segmented > .glyph):

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

        Web Inspector: Dark Mode: selected item background color is too light
        https://bugs.webkit.org/show_bug.cgi?id=187691
        <rdar://problem/42225308>

        Reviewed by Brian Burg.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom:focus li.selected .selection-area):

2018-07-14  Kocsen Chung  <kocsen_chung@apple.com>

        Ensure WebKit stack is ad-hoc signed
        https://bugs.webkit.org/show_bug.cgi?id=187667

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r195723): Improve support for resources with '\r' and '\r\n' line endings
        https://bugs.webkit.org/show_bug.cgi?id=186453
        <rdar://problem/39689180>

        Reviewed by Joseph Pecoraro.

        Now that the frontend no longer uses offsets from the original source
        file to calculate positions within CodeMirror, it is possible to support
        resources with '\r' and '\r\n' line endings in the editor.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        (WI.CodeMirrorEditor):

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Basic blocks highlighting should use line/column locations instead of offsets
        https://bugs.webkit.org/show_bug.cgi?id=187613
        <rdar://problem/42131808>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/BasicBlockAnnotator.js:
        Basic blocks sent from the backend include offsets into the original
        file, rather than line/column locations. In order to translate to positions
        within CodeMirror, we need to calculate the original line and column
        for each block.

        (WI.BasicBlockAnnotator.prototype.insertAnnotations):
        (WI.BasicBlockAnnotator.prototype._calculateBasicBlockPositions.offsetToPosition):
        (WI.BasicBlockAnnotator.prototype._calculateBasicBlockPositions):
        (WI.BasicBlockAnnotator.prototype._annotateBasicBlockExecutionRanges.):
        (WI.BasicBlockAnnotator.prototype._annotateBasicBlockExecutionRanges):
        (WI.BasicBlockAnnotator.prototype._highlightTextForBasicBlock):

        * UserInterface/Models/SourceCodePosition.js:
        (WI.SourceCodePosition.prototype.offsetColumn):

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.getTextInRange):
        (WI.TextEditor.prototype.addStyleToTextRange):
        Better encapsulation for CodeMirror positions.

        * UserInterface/Workers/Formatter/FormatterUtilities.js:
        (get if):
        Update String.prototype.lineEndings to support additional line separators.

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Execution highlighting in the frontend should be line/column-based
        https://bugs.webkit.org/show_bug.cgi?id=187532
        <rdar://problem/42035580>

        Reviewed by Joseph Pecoraro.

        Source code offsets from Esprima should not be used to calculate ranges
        in CodeMirror for expression highlighting.

        This also fixes a long standing bug when adjusting for the starting
        position of an inline script. Previously the start offset from the script
        TextRange was used for this purpose, but the value is often incorrect (see
        https://bugs.webkit.org/show_bug.cgi?id=187532#c5). By using the starting
        line/column instead, we avoid the problem.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.prototype.containersOfPosition):
        (WI.ScriptSyntaxTree.prototype.containersOfOffset): Deleted.

        * UserInterface/Models/SourceCodePosition.js:
        (WI.SourceCodePosition.prototype.offsetColumn):

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.toInlineScriptPosition):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.fromInlineScriptPosition):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.convertRangeOffsetsToSourceCodeOffsets): Deleted.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: SourceCodePosition.js missing from Test.html
        https://bugs.webkit.org/show_bug.cgi?id=187644

        Reviewed by Brian Burg.

        * UserInterface/Test.html:

2018-07-12  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Type token positioning should use line/column locations from Esprima instead of offsets
        https://bugs.webkit.org/show_bug.cgi?id=187612
        <rdar://problem/42131910>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/TypeTokenAnnotator.js:
        (WI.TypeTokenAnnotator.prototype.insertAnnotations):
        (WI.TypeTokenAnnotator.prototype._insertTypeToken):
        (WI.TypeTokenAnnotator.prototype._insertToken):
        Use line/column locations, instead of offsets, from the AST when calculating
        token positions for CodeMirror. Once in CodeMirror's string space, we
        can safely convert to/from offsets.

        * UserInterface/Models/ScriptSyntaxTree.js:
        Retrieve line/column locations for AST nodes, in addition to offsets.
        Offsets into the original file are still needed for getting type information
        from the profiler in the backend.

        (WI.ScriptSyntaxTree):
        (WI.ScriptSyntaxTree.prototype.filterByRange):
        Filter by positions, which can be safely used from CodeMirror, instead of offsets.

        (WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
        (WI.ScriptSyntaxTree.prototype.filterByRange.filterForNodesInRange): Deleted.

        * UserInterface/Models/SourceCodePosition.js:
        Add convenience methods for comparing line/column positions, and for
        converting to the format expected by CodeMirror. SourceCodePosition could
        be made to interoperate with CodeMirror by exposing properties `line`
        and `ch`, but making the conversion explicit improves code readability.

        (WI.SourceCodePosition.prototype.equals):
        (WI.SourceCodePosition.prototype.isBefore):
        (WI.SourceCodePosition.prototype.isAfter):
        (WI.SourceCodePosition.prototype.isWithin):
        (WI.SourceCodePosition.prototype.toCodeMirror):
        (WI.SourceCodePosition):

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.visibleRangePositions):
        (WI.TextEditor.prototype.originalPositionToCurrentPosition):
        (WI.TextEditor.prototype.currentOffsetToCurrentPosition):
        (WI.TextEditor.prototype.currentPositionToCurrentOffset):
        (WI.TextEditor.prototype.setInlineWidget):

2018-07-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r229932) Use of uninitialized value in subroutine entry at copy-user-interface-resources.pl
        https://bugs.webkit.org/show_bug.cgi?id=187511

        Reviewed by Brian Burg.

        copy-user-interface-resources.pl output warning messages unless
        BUILT_PRODUCTS_DIR and BUILT_PRODUCTS_DIR env vars are defined.

        * Scripts/copy-user-interface-resources.pl:
        (webInspectorUIAdditionsDir): Added. Return UNDEF if
        BUILT_PRODUCTS_DIR and SDKROOT env vars aren't defined.
        (combineOrStripResourcesForWebKitAdditions): Check
        $webInspectorUIAdditionsDir is defined.

2018-07-10  Ross Kirsling  <rkirsling@gmail.com>

        Web Inspector: Layers inspector should allow control-dragging to pan the 3D render
        https://bugs.webkit.org/show_bug.cgi?id=185109

        Reviewed by Matt Baker.

        Addressed in the three.js repo itself (https://github.com/mrdoob/three.js/pull/13972),
        so this patch simply updates three.js and its OrbitControls module.

        * UserInterface/External/three.js/LICENSE:
        * UserInterface/External/three.js/three.js:
        Update to r94.

        * UserInterface/External/three.js/OrbitControls.js:
        Update to latest.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype.initialLayout):
        (WI.Layers3DContentView.prototype._restrictPan):
        Adapt to recent changes in three.js.

2018-07-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused NavigationSidebarPanel.treeElementAddedOrChanged
        https://bugs.webkit.org/show_bug.cgi?id=187508

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype.treeElementAddedOrChanged): Deleted.

2018-07-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r217505): Debugger content view doesn't update when left sidebar is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=187482
        <rdar://problem/41989190>

        Reviewed by Brian Burg.

        Subclasses of NavigationSidebarPanel must process tree selection changes
        even when collapsed. Sidebar panels perform critical controller tasks
        for their tabs, such as updating the view when pausing in the debugger,
        and when the hierarchical path component selection changes.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SourcesSidebarPanel.js:
        (WI.SourcesSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel._treeSelectionDidChange):

2018-07-09  Brian Burg  <bburg@apple.com>

        REGRESSION: Web Inspector no longer pauses in internal injected scripts like WDFindNodes.js
        https://bugs.webkit.org/show_bug.cgi?id=187350
        <rdar://problem/41728249>

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js: Add a new setting to allow pausing in internal scripts.
        * UserInterface/Controllers/DebuggerManager.js: Listen to the setting change and toggle
        the backend setting accordingly. The default is to not break into internal scripts.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):
        Expose the new setting in the Debug settings panel.

2018-07-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: resource search field has white text on white background
        https://bugs.webkit.org/show_bug.cgi?id=187423

        Reviewed by Timothy Hatcher.

        Match the colors of sidebar filter fields.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.find-banner > input[type="search"]):

2018-07-04  Tim Horton  <timothy_horton@apple.com>

        Introduce PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=187315

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-06-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r213000): copy from Search results content view broken
        https://bugs.webkit.org/show_bug.cgi?id=187020
        <rdar://problem/40928766>

        Reviewed by Timothy Hatcher.

        Since WI._copy listens for a copy event from the document, it is called
        after CodeMirror handles the event and sets clipboard data. If WI._copy
        finds a custom copy handler to call, that handler can determine whether
        to overwrite the current clipboard data, or leave it alone.

        SearchTabContentView's handleCopyEvent method should return early if the
        content tree outline doesn't have the focus. This prevents the selection
        in the TextEditor from being overwritten, without any special knowledge of
        the content browser's current view.

        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView.prototype.handleCopyEvent):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Box Model section should have dark background
        https://bugs.webkit.org/show_bug.cgi?id=186976

        Reviewed by Brian Burg.

        Replace all instances of black text on white background with the default text and background colors.

        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        (@media (prefers-dark-interface)):
        (.details-section .row.box-model):
        (.details-section .row.box-model .label):
        (.details-section .row.box-model :matches(.position, .margin, .border, .padding, .content)):
        (.details-section .row.box-model:not(.hovered) :matches(.margin, .border, .padding, .content),):
        (.details-section .row.box-model .margin):
        (.details-section .row.box-model .border):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: color outline is too dark
        https://bugs.webkit.org/show_bug.cgi?id=186975

        Reviewed by Brian Burg.

        Make the outline lighter than the background.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.hover-menu > svg > :matches(path, rect)):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Media query names are unreadable
        https://bugs.webkit.org/show_bug.cgi?id=186974

        Reviewed by Brian Burg.

        Change media query names from dark blue to light blue.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.CodeMirror .CodeMirror-lines .CodeMirror-matchingbracket):
        (.cm-s-default .cm-attribute):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Network headers colors are too dim
        https://bugs.webkit.org/show_bug.cgi?id=186985

        Reviewed by Brian Burg.

        Increasing the luminance of network header colors by increasing lightness and brightness.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Font guideline colors are too bright
        https://bugs.webkit.org/show_bug.cgi?id=186986

        Reviewed by Brian Burg.

        Make the guidelines less distractive from the font glyphs.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.font .preview > .line):
        (.content-view.resource.font .metric.top):
        (.content-view.resource.font .metric.baseline):
        (.content-view.resource.font .metric.middle):
        (.content-view.resource.font .metric.xheight):
        (.content-view.resource.font .metric.bottom):

2018-06-20  Daniel Bates  <dabates@apple.com>

        Web Inspector: All non-Same-Site cookies are marked as Same-Site Strict in Storage tab
        https://bugs.webkit.org/show_bug.cgi?id=186867
        <rdar://problem/41175424>

        Reviewed by Matt Baker.

        Fixes an issue where cookies that do not have a Same-Site policy would be marked up as Same-
        Site Strict in Web Inspector's cookie storage content view (under the storage tab).

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._rebuildTable): Only compute the display name if
        we cookie.sameSite is non-null and is not WI.Cookie.SameSiteType.None. Moreover, remove
        an extraneous call to WI.Cookie.parseSameSiteAttributeValue() as cookie.SameSite represents
        the already parsed value (one of the WI.Cookie.SameSiteType-scoped values).

2018-06-18  Brian Burg  <bburg@apple.com>

        Web Inspector: TypeError: Array.prototype.sort passed bad value in NetworkTableContentView _updateSortAndFilteredEntries
        https://bugs.webkit.org/show_bug.cgi?id=186787
        <rdar://problem/41175680>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._updateSortAndFilteredEntries):

2018-06-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: open source Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=186606

        Reviewed by Timothy Hatcher.

        The dark mode is currently only available on macOS Mojave via prefers-dark-interface CSS media query.

        * UserInterface/Main.html:
        * UserInterface/Views/DarkMode.css: Added.
        (@media (prefers-dark-interface)):
        (:root):
        (body.window-inactive):
        (body.window-inactive *):
        (#main):
        (.tree-outline.dom li.selected .selection-area):
        (.tab-bar > .item > .icon):
        (.go-to-arrow):
        (.resource-link,):
        (.expand-list-button):
        (:matches(img, canvas).show-grid):
        (.formatted-object,):
        (.formatted-null,):
        (.editing):
        (.editing, .editing *):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        (.details-section > .header):
        (.details-section > .header > label):
        (.details-section .details-section,):
        (.details-section .details-section:not(.collapsed) > .header):
        (.details-section > .content > .group > .row.simple > .label):
        (.details-section > .content > .group:nth-child(even)):
        (.details-section > .content > .group > .row:matches(.empty, .text)):
        (.data-grid th):
        (.data-grid td .subtitle):
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (.data-grid tr.editable .cell-content > input):
        (.data-grid td.spanning):
        (.object-tree,):
        (.object-preview .name):
        (.object-preview > .size):
        (.tab-bar):
        (.tab-bar > .item):
        (.tab-bar > .item > .title):
        (.tab-bar > .item:not(.disabled).selected):
        (.tab-bar:not(.animating) > .item:not(.selected):hover):
        (.tab-bar > .item > .close):
        (body.window-inactive .tab-bar):
        (body.window-inactive .tab-bar > .item):
        (body.window-inactive .tab-bar > .item.selected):
        (body.window-inactive .tab-bar > .item > .title):
        (body .toolbar):
        (body.window-inactive .toolbar):
        (body.latest-mac .toolbar .item.button,):
        (body.latest-mac .toolbar .search-bar > input[type="search"]):
        (body.latest-mac .toolbar .search-bar > input[type="search"]:focus):
        (body.latest-mac .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button):
        (body.latest-mac .toolbar .dashboard-container):
        (body.latest-mac .toolbar .item.button:active):
        (body.latest-mac.window-inactive .toolbar .item.button,):
        (.navigation-bar .item.divider):
        (.toolbar .item.button):
        (.toolbar .item.button:not(.disabled):active):
        (.toolbar .item.button:not(.disabled):matches(:focus, .activate.activated)):
        (.toolbar .item.button:not(.disabled):active:matches(:focus, .activate.activated)):
        (.toolbar .dashboard.default > .item > div):
        (.toolbar .dashboard.default > .item.enabled > div):
        (.toolbar .dashboard.default > .item.enabled:hover):
        (.toolbar .dashboard.default > .item.enabled:hover > div):
        (.toolbar .dashboard.default > .resourcesCount > img,):
        (body.latest-mac .toolbar .dashboard .item.button):
        (.dashboard-container .advance-arrow):
        (.toolbar .dashboard.debugger):
        (.dashboard.debugger .navigation-bar .item.button > .glyph):
        (.dashboard.debugger > .location .function-name):
        (.dashboard.debugger > .location .go-to-link):
        (.dashboard.debugger > .divider):
        (.popover .edit-breakpoint-popover-content > label.toggle):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        (.breakpoint-action-block-body):
        (.breakpoint-action-block-body > .description):
        (.breakpoint-action-append-button,):
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):
        (.navigation-bar .item.button):
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration .selector:focus,):
        (.spreadsheet-css-declaration.locked .origin::after):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (.spreadsheet-css-declaration .media-label):
        (.quick-console):
        (.syntax-highlighted,):
        (.cm-s-default,):
        (.CodeMirror .jump-to-symbol-highlight,):
        (.console-prompt):
        (.completion-suggestions):
        (.completion-suggestions-container > .item):
        (.CodeMirror-cursor):
        (.CodeMirror .CodeMirror-gutters):
        (.cm-s-default .cm-link):
        (.cm-s-default .cm-m-xml.cm-attribute,):
        (.cm-s-default .cm-meta):
        (.cm-s-default .cm-variable-3):
        (.cm-s-default .cm-builtin):
        (.tree-outline .item .subtitle):
        (.object-tree-property .getter,):
        (.item.object-tree-property.prototype-property):
        (.object-tree-property.prototype-property:hover,):
        (.object-tree-property .value.error):
        (.tree-outline.dom):
        (.tree-outline.dom li.selected + ol.children.expanded):
        (.tree-outline.dom .shadow):
        (.tree-outline.dom li.parent.shadow + ol.children.expanded,):
        (.showing-find-banner .tree-outline.dom .search-highlight):
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners > .header > .filter:hover):
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes > .group > label):
        (.spreadsheet-css-declaration.locked):
        (.spreadsheet-css-declaration .selector.style-attribute):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (.inline-swatch):
        (.spreadsheet-style-panel .section-header):
        (.spreadsheet-style-panel .section-header .node-link:hover):
        (.computed-style-properties.details-section):
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)):
        (.table,):
        (.table > .header > .sortable:active):
        (.table > .header > :matches(.sort-ascending, .sort-descending)):
        (.table > .header > :matches(.sort-ascending, .sort-descending)::after):
        (.scope-bar > li):
        (.timeline-overview > .navigation-bar.timelines):
        (.timeline-overview:not(.frames) > .graphs-container > .timeline-overview-graph:nth-child(even)):
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item:not(:first-child),):
        (.time-icon .icon):
        (.data-grid th:matches(.sort-ascending, .sort-descending)):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        (.content-view.settings .navigation-bar):
        (.content-view.settings .navigation-bar .item.radio.button.text-only.selected):
        (.new-tab.tab.content-view):
        (.filter-bar > input[type="search"]):
        (.filter-bar > input[type="search"]::placeholder):
        (.filter-bar > input[type="search"]:focus):
        (.content-view.resource.image):
        (.console-messages):
        (.console-item):
        (.console-messages:focus .console-item.selected):
        (.console-messages:focus .console-item.selected + .console-item):
        (.console-session:first-of-type .console-session-header):
        (.console-session:not(:first-of-type) .console-session-header):
        (.console-messages a):
        (.console-messages a:hover):
        (.console-messages:focus .console-item.selected::after):
        (.console-error-level):
        (.console-error-level:not(.filtered-out, .filtered-out-by-search), .console-error-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.console-warning-level):
        (.console-warning-level:not(.filtered-out, .filtered-out-by-search), .console-warning-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted.selected):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning > .arrow):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error > .arrow):
        (.console-message .syntax-highlighted):
        (.console-warning-level .console-message-text):
        (.console-error-level .console-message-text):
        (.console-user-command > .console-message-text):
        (.console-message .repeat-count):
        (.call-frame .subtitle,):
        (.call-frame:hover .subtitle .source-link,):
        (.call-frame .separator):
        (.quick-console.showing-log):
        (.find-banner.console-find-banner > input[type=search]:not(:placeholder-shown)):
        (.network-resource-detail):
        (.network-resource-detail .item.close > .glyph):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (.resource-headers .value):
        (.network-table .cell.domain > .lock):
        (.resource-sizes > .content .label):
        (.popover.waterfall-popover):
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (.resource-timing-breakdown > table > tr > td.label,):
        (.resource-timing-breakdown > table hr):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.web-socket.content-view .data-grid table.data tr.revealed):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.outgoing):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.non-text-frame):
        (.item.action:not(.initial-state)::before):
        (.tree-outline .item.action.visual:not(.selected, .invalid)):
        (.item.action:not(.initial-state) > .icon):
        (.tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon,):
        (.content-view.canvas > .preview > img,):
        (.content-view.canvas-overview):
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .title):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .subtitle,):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle):
        (.content-view.canvas:not(.tab)):
        (.content-view:not(.tab).recording):
        (.content-view:not(.tab).recording > header > .slider-container):
        (.content-view:not(.tab).recording > header > .slider-container > input[type=range]):
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.indeterminate-progress-spinner):
        (.content-view.shader-program > .text-editor.shader):
        (.content-view.shader-program > .text-editor.shader > .type-title):
        (.item.shader-program .status > img):
        (.open-resource-dialog):
        (.open-resource-dialog > .field > input):
        (.open-resource-dialog > .field > input::placeholder):
        (.open-resource-dialog > .tree-outline .item.selected):
        (.open-resource-dialog > .field::before):

2018-06-09  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up and modernize some build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=186463

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/Version.xcconfig: Ditto.

2018-06-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Tab picker is briefly visible when TabBar initially shown
        https://bugs.webkit.org/show_bug.cgi?id=186317

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TabBar.js:
        (WI.TabBar): Picker should be initially hidden.

2018-06-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Text in "Add New Class" in auto-capitalizes
        https://bugs.webkit.org/show_bug.cgi?id=186311

        Reviewed by Matt Baker.

        Disable spellcheck to prevent auto-capitalization.

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

2018-06-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cannot copy a link address in Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=186281
        <rdar://problem/39193355>

        Reviewed by Brian Burg.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):

2018-05-30  Daniel Bates  <dabates@apple.com>

        Web Inspector: Annotate Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=184897
        <rdar://problem/35178209>

        Reviewed by Brian Burg.

        Add a new column for the value of the Same-Site cookie attribute to the resource cookie content
        view (shown for a resource under the Network tab) and cookie storage content view (shown under
        the Storage tab).

        The SameSite column in the resource cookie content view reflects the parsing of the Same-Site
        attribute from the HTTP response by Web Inspector. This parsing is materially consistent with
        the parsing of the SameSite atttribute in CFNetwork. The Same-Site column in the cookie storage
        content view reflects the Same-Site cookie policy associated with the cookies provided by the
        network stack, if supported. This column will be blank on systems whose network stack does not
        support Same-Site cookies (e.g libsoup).

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.cookies):
        * UserInterface/Models/Cookie.js:
        (WI.Cookie):
        (WI.Cookie.displayNameForSameSiteType):
        (WI.Cookie.parseSameSiteAttributeValue):
        (WI.Cookie.parseSetCookieResponseHeader):
        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._rebuildTable):
        (WI.CookieStorageContentView.prototype._sortDataGrid):
        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype.tablePopulateCell):
        (WI.ResourceCookiesContentView.prototype._generateSortComparator):
        (WI.ResourceCookiesContentView.prototype._refreshResponseCookiesSection):

2018-05-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Popover dismissed while attempting to move cursor inside
        https://bugs.webkit.org/show_bug.cgi?id=185741
        <rdar://problem/40340938>

        Reviewed by Joseph Pecoraro.

        Hovering a token within the bounds of the current popover should not
        show a new popover. This prevents the popover from being dismissed when
        the cursor passes over a token under the transparent portion of the
        popover frame.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._showPopover):

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

        * Configurations/Base.xcconfig:

2018-05-18  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas: put `hasVisualEffect` behind an experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=185758

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Setting.js:

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):

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

2018-05-16  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: create a navigation item for toggling the overlay rulers/guides
        https://bugs.webkit.org/show_bug.cgi?id=185644

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype.closed):
        (WI.DOMTreeContentView.prototype._showRulersChanged): Added.
        (WI.DOMTreeContentView.prototype._toggleShowRulers): Added.

2018-05-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Canvas: Remove unused --value-visual-highlight CSS variable
        https://bugs.webkit.org/show_bug.cgi?id=185636

        Reviewed by Matt Baker.

        * UserInterface/Views/Variables.css:
        (:root):

2018-05-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: don't automatically select a recording when viewing a canvas
        https://bugs.webkit.org/show_bug.cgi?id=182950

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Add a "dummy" ScopeBarItem to the recording ScopeBar that is selected whenever a TreeElement
        that doesn't correspond to a Recording is selected. This way, the Recording ScopeBar will
        become deselected, and the list of actions will disappear. Clicking on the Recording ScopeBar
        will show the previously selected Recording.

2018-05-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Console drawer resizing is broken when console prompt has >1 line of code
        https://bugs.webkit.org/show_bug.cgi?id=185369
        <rdar://problem/40013202>

        Reviewed by Devin Rousso.

        Mouse offset calculation should account for the height of the quick console.
        The only reason resizing worked with the single-line quick console is that
        the offset calculation included the resizer height, which is very close
        to that of the single-line quick console (27px and 30px respectively).

        * UserInterface/Views/ConsoleDrawer.js:

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: simplify the WI.Collection interface
        https://bugs.webkit.org/show_bug.cgi?id=185187

        Reviewed by Brian Burg.

        * UserInterface/Models/Collection.js:
        (WI.Collection.prototype.get size): Added.
        (WI.Collection.prototype.has): Added.
        (WI.Collection.prototype.toJSON):
        (WI.Collection.prototype.[Symbol.iterator]): Added.
        (WI.Collection.prototype.get items): Deleted.
        (WI.Collection.prototype.toArray): Deleted.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WebInspector.DOMDebuggerManager.prototype.get domBreakpoints):
        * UserInterface/Models/Frame.js:
        (WI.Frame.prototype.removeAllChildFrames):
        (WI.Frame.prototype.resourceForURL):
        (WI.Frame.prototype.removeAllResources):
        * UserInterface/Models/Script.js:
        (WI.Script):
        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._updateNavigationItems):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.prototype.onpopulate):
        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.initialLayout):
        (WI.CollectionContentView.prototype.attached):
        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._filterCookies):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addResourcesRecursivelyForFrame):
        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype.updateParentStatus):
        (WI.FolderizedTreeElement.prototype._shouldGroupIntoFolders):
        * UserInterface/Views/FrameTreeElement.js:
        (WI.FrameTreeElement.prototype.onpopulate):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.get contentTreeOutlines):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWithInitialResourcesIfNeeded):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addResourcesForFrame):
        (WI.OpenResourceDialog.prototype._addResourcesForTarget):
        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup.prototype.get selectedTreeElement):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        * UserInterface/Views/WorkerTreeElement.js:
        (WI.WorkerTreeElement.prototype.onpopulate):

2018-05-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Newly added unsupported properties sometimes don't have warnings
        https://bugs.webkit.org/show_bug.cgi?id=183097
        <rdar://problem/37843816>

        Reviewed by Matt Baker.

        Update status of properties warnings every time focus moves.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updatePropertiesStatus):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Styles Redesign: ensure that tabbing through the last section wraps back to the first
        https://bugs.webkit.org/show_bug.cgi?id=181973

        Reviewed by Matt Baker.

        Unified delegate functions to start editing previous/next rules into a single function for
        simplicity.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.startEditingRuleSelector):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetSelectorFieldDidChange):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorStartEditingAdjacentRule):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.cssStyleDeclarationEditorStartEditingAdjacentRule): Deleted.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.focusFirstSection):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.focusLastSection):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationSectionStartEditingAdjacentRule):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.cssStyleDeclarationSectionStartEditingNextRule): Deleted.
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.cssStyleDeclarationSectionStartEditingPreviousRule): Deleted.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.styleDetailsPanelFocusLastPseudoClassCheckbox):
        (WI.GeneralStyleDetailsSidebarPanel.prototype.styleDetailsPanelFocusFilterBar):
        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._handleForcedPseudoClassCheckboxKeydown):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._forcedPseudoClassCheckboxChanged):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._handleFilterBarInputFieldKeyDown):

        Drive-by fix: provide tabbing support for the Computed styles panel.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:
        (WI.CSSStyleDeclarationTextEditor.prototype._handleShiftTabKey.switchRule):
        (WI.CSSStyleDeclarationTextEditor.prototype._handleTabKey.switchRule):

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.focusFirstSection):
        (WI.ComputedStyleDetailsPanel.prototype.focusLastSection):
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorStartEditingAdjacentRule):

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: Determine isFunction by looking at the prototype
        https://bugs.webkit.org/show_bug.cgi?id=184990

        Reviewed by Brian Burg.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.isFunctionForType):
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.async.swizzle):

2018-05-01  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: determine hasVisibleEffect for all actions immediately after recording is added
        https://bugs.webkit.org/show_bug.cgi?id=182995

        Reviewed by Matt Baker.

        Previously, we'd swizzle the entirety of the `WI.Recording` in one, which would usually
        freeze the UI, especially for larger recordings. This patch uses `WI.YieldableTask` to split
        the work and allow the rest of the UI to still be usable while `WI.Recording` are processing.
        Additionally, since we no longer have to worry about hangs, we can do more work upfront,
        such as calculating `hasVisibleEffect` and the current state of 2D canvases.

        These changes require that all uses of `WI.Recording` call `process()` before attempting to
        use any `frames`/`actions`/`initialState`, as they will have their original payload values
        and will have not been swizzled or applied.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.prototype.process):
        (WI.Recording.prototype.createContext): Added.
        (WI.Recording.prototype.async yieldableTaskWillProcessItem): Added.
        (WI.Recording.prototype.async yieldableTaskDidFinish): Added.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.prototype.process): Added.
        (WI.RecordingAction.prototype.async swizzle): Added.
        (WI.RecordingAction.prototype.apply):
        (WI.RecordingAction.prototype.toJSON):
        (WI.RecordingAction.prototype.set state): Deleted.
        (WI.RecordingAction.prototype.swizzle): Deleted.
        (WI.RecordingAction.prototype.apply.getContent): Deleted.
        (WI.RecordingAction.prototype.async _swizzle): Deleted.
        * UserInterface/Models/RecordingInitialStateAction.js:
        (WI.RecordingInitialStateAction):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .indeterminate-progress-spinner):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement):
        (WI.RecordingActionTreeElement.prototype.onattach):
        (WI.RecordingActionTreeElement.prototype._handleHasVisibleEffectChanged): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.initialLayout):
        (WI.RecordingContentView.prototype._generateContentCanvas2D): Added.
        (WI.RecordingContentView.prototype._generateContentCanvasWebGL): Added.
        (WI.RecordingContentView.prototype._updateCanvasPath):
        (WI.RecordingContentView.prototype._updateProcessProgress): Added.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionSwizzle): Added.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionApply): Added.
        (WI.RecordingContentView.supportsCanvasPathDebugging): Deleted.
        (WI.RecordingContentView.prototype.async _generateContentCanvas2D): Deleted.
        (WI.RecordingContentView.prototype.async _generateContentCanvasWebGL): Deleted.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > .preview-container):

        * UserInterface/Base/ImageUtilities.js:
        (WI.ImageUtilities.supportsCanvasPathDebugging):

2018-04-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; fix WebInspectorUI copy resources step after r231063.

        * Configurations/Base.xcconfig:

2018-04-26  Jer Noble  <jer.noble@apple.com>

        WK_COCOA_TOUCH all the things.
        https://bugs.webkit.org/show_bug.cgi?id=185006

        Reviewed by Tim Horton.

        * Configurations/WebInspectorUIFramework.xcconfig:

2018-04-21  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r214076): Web Inspector: Timelines load and DOMContentLoaded markers aren't visible
        https://bugs.webkit.org/show_bug.cgi?id=184858

        Reviewed by Brian Burg.

        r214076 changed the color of all markers to light gray.

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .marker):
        (body[dir=ltr] .timeline-ruler > .markers > .marker):
        (body[dir=rtl] .timeline-ruler > .markers > .marker):
        (.timeline-ruler > .markers > .marker.current-time):
        (.timeline-ruler > .markers > .marker.load-event):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        (.timeline-ruler > .markers > .marker.timestamp):
        (body[dir=ltr] .timeline-ruler > .markers > .marker.current-time): Deleted.
        (body[dir=rtl] .timeline-ruler > .markers > .marker.current-time): Deleted.

2018-04-19  Chris Dumez  <cdumez@apple.com>

        Rename JSDOMWindowProxy to JSWindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=184797

        Reviewed by Sam Weinig.

        Rename JSDOMWindowProxy to JSWindowProxy for consistency with WindowProxy.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot.prototype._isNodeGlobalObject):

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Can't select and copy text from Network tab popover
        https://bugs.webkit.org/show_bug.cgi?id=184606

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.waterfall-popover .resource-timing-breakdown):

2018-04-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Refactoring: move popover styles from JS to CSS
        https://bugs.webkit.org/show_bug.cgi?id=184558

        Reviewed by Brian Burg.

        Introduce several CSS variables to customize popover appearance in CSS
        and not JavaScript.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/Popover.css:
        (.popover):
        * UserInterface/Views/Popover.js:
        (WI.Popover):
        (WI.Popover.prototype._drawBackground):
        Replace `var` with `let`.

        (WI.Popover.prototype.get backgroundStyle): Deleted.
        (WI.Popover.prototype.set backgroundStyle): Deleted.
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.popover.waterfall-popover):
        (.waterfall-popover-content .resource-timing-breakdown):
        (.waterfall-popover .resource-timing-breakdown): Deleted.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/Popover.css:
        (.popover):
        * UserInterface/Views/Popover.js:
        (WI.Popover):
        (WI.Popover.prototype._drawBackground):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.popover.waterfall-popover):
        (.waterfall-popover-content .resource-timing-breakdown):

2018-04-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Errors glyph doesn't fully change to blue when active
        https://bugs.webkit.org/show_bug.cgi?id=184389

        Reviewed by Joseph Pecoraro.

        The dot of the exclamation mark was always black.

        * UserInterface/Images/Errors.svg:

2018-04-03  Aaron Chu  <aaron_chu@apple.com>

        AX: Add Experimental setting for Accessibility Audit
        https://bugs.webkit.org/show_bug.cgi?id=183646
        <rdar://problem/38478583>

        Reviewed by Brian Burg.

        Added experimental feature flag for Accessibility Audit work.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-04-01  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove dead TabBrowser/TabContentView code
        https://bugs.webkit.org/show_bug.cgi?id=184104

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI._tryToRestorePendingTabs):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView.prototype.shown):
        (WI.NewTabContentView.prototype.hidden):
        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.addTabForContentView):
        (WI.TabBrowser.prototype.showTabForContentView):
        (WI.TabBrowser._tabBarItemRemoved):
        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.prototype.get parentTabBrowser): Deleted.
        (WI.TabContentView.prototype.set parentTabBrowser): Deleted.

2018-03-30  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: tint all pixels drawn by shader program when hovering ShaderProgramTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=175223

        Reviewed by Matt Baker.

        * UserInterface/Models/ShaderProgram.js:
        (WI.ShaderProgram):
        (WI.ShaderProgram.prototype.showHighlight):
        (WI.ShaderProgram.prototype.hideHighlight):

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.onattach):
        (WI.ShaderProgramTreeElement.prototype._handleMouseOver):
        (WI.ShaderProgramTreeElement.prototype._handleMouseOut):
        Whenever a ShaderProgramTreeElement is hovered, highlight the corresponding shader program
        by tinting the pixels it draws via a blend.

2018-03-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Modernize some utility functions
        https://bugs.webkit.org/show_bug.cgi?id=184047

        Reviewed by Matt Baker.

        * UserInterface/Base/Utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithClass): Use parentElement instead of parentNode, so we don't need to check for document.
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray): Ditto. Also just toUpperCase input, since nodeName is already upper case.
        (String.prototype.escapeCharacters): Use Set and string iteration instead of indexOf and charAt.

2018-03-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Command-Shift-left/right arrow keys should not switch tabs when focused on color picker text fields
        https://bugs.webkit.org/show_bug.cgi?id=184028

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/EditingSupport.js:
        (WI.isEventTargetAnEditableField):
        Detect <input type="number"> as an editable text field.

2018-03-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: don't show checkboxes for invalid properties
        https://bugs.webkit.org/show_bug.cgi?id=183951
        <rdar://problem/38807602>

        Reviewed by Matt Baker.

        Since toggling of invalid properties isn't supported by the backend, don't show checkboxes for invalid properties.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-css-declaration:matches(:hover, :focus) .property:not(:matches(.invalid-name, .invalid-value)) .property-toggle,):
        (.spreadsheet-css-declaration:matches(:hover, :focus) .property-toggle,): Deleted.
        Don't show checkboxes for invalid properties but still show them for duplicate properties.

2018-03-23  Brian Burg  <bburg@apple.com>

        Web Inspector: add WebKitAdditions hooks for WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=183940
        <rdar://problem/38796310>

        Reviewed by Timothy Hatcher.

        * Scripts/combine-resources.pl:
        (debugLog): Added. Leave in the logging I used to debug this.

        (concatenateIncludedFilesMatchingPattern):
        (stripIncludedFilesMatchingPattern):
        (concatenateFiles): Deleted.
        This function tried to do too many things. Split it into
        two functions, one for stripping includes and one for concatenating
        files referenced by includes.

        Lastly, add a negative lookahead clause for 'WebKitAdditions' so includes
        containing that string are not combined when no input directory is passed
        to the script.

        * Scripts/copy-user-interface-resources.pl:
        WebKitAdditions is computed either from BUILT_PRODUCTS_DIR or SDKROOT,
        depending on the build style. Just try them in order and use the first
        one that exists. WebInspectorUI files are in their own directory, so
        we can assume there are files to process if that directory exists.

        Copy Main.html to derived sources before doing any processing on it.
        This makes all combining phases have the same --input-html argument.

        (debugLog): Added. Leave in the logging I used to debug this.

        (combineOrStripResourcesForWebKitAdditions):
        (stripResourcesForWebKitAdditions):
        (combineResourcesForWebKitAdditions):
        Determine if WebKitAdditions exists and whether there are any
        resources for WebInspectorUI present that need to be processed.

        * UserInterface/Main.html:
        Add stub .js and .css WebKitAdditions files. We can add more later
        if it makes sense but this is good enough to validate the build machinery.

2018-03-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: flashing when switching between nodes
        https://bugs.webkit.org/show_bug.cgi?id=179291
        <rdar://problem/35352660>

        Reviewed by Matt Baker.

        Flashing was happening because the layout was a two-step process:
        1. Append empty sections.
        2. Layout everything inside of the section on requestAnimationFrame.

        SpreadsheetRulesStyleDetailsPanel was converted to use layout method,
        so both steps happen on requestAnimationFrame.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.refresh):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        The removed lines from the refresh method moved to the layout method without any changes.

2018-03-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Uncaught Exception: TypeError: this._textEditor.toggleUnexecutedCodeHighlights().then is not a function
        https://bugs.webkit.org/show_bug.cgi?id=181912
        <rdar://problem/36700022>

        Reviewed by Matt Baker.

        The uncaught exception was caused by returning `false` instead of a promise object.
        This patch only fixes the exception. Further enhancements should be done in <https://webkit.org/b/183887>.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.toggleTypeAnnotations):
        (WI.SourceCodeTextEditor.prototype.toggleUnexecutedCodeHighlights):

2018-03-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Loses focus when editing a property while page is being loaded
        https://bugs.webkit.org/show_bug.cgi?id=182619
        <rdar://problem/37363185>

        Reviewed by Matt Baker.

        Adding or removing a stylesheet causes SpreadsheetRulesStyleDetailsPanel to refresh, triggering a layout
        of all SpreadsheetCSSStyleDeclarationSection child views. This resets the focus, selection, and
        auto-completion state.

        This patch prevents SpreadsheetCSSStyleDeclarationSection from performing a layout when a property is being edited.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        Allow re-layout after creating a blank CSS property and pasting CSS code.
        - _pendingAddBlankPropertyIndexOffset is a number after pasting CSS rules.
        - _propertyPendingStartEditing is a property model after creating a new property.

2018-03-20  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Session dividers are not added when Console tab is not visible
        https://bugs.webkit.org/show_bug.cgi?id=168622

        Reviewed by Matt Baker.

        Restructure `_pendingMessages` to be a `Map [ConsoleSession, ConsoleMessageView]`. Instead
        of rendering to the `_currentConsoleGroup`, we now render to the saved `ConsoleSession`.
        Also ensure that `_pendingMessages` is cleared when navigating and "Preserve Log" is off.

        * UserInterface/Controllers/JavaScriptLogViewController.js:
        (WI.JavaScriptLogViewController):
        (WI.JavaScriptLogViewController.prototype.startNewSession):
        (WI.JavaScriptLogViewController.prototype.consolePromptHistoryDidChange):
        (WI.JavaScriptLogViewController.prototype._appendConsoleMessageView):
        (WI.JavaScriptLogViewController.prototype.renderPendingMessages):
        (WI.JavaScriptLogViewController.prototype.get prompt): Deleted.
        (WI.JavaScriptLogViewController.prototype.get currentConsoleGroup): Deleted.

2018-03-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Can't add a new class by editing class attribute in DOM outline
        https://bugs.webkit.org/show_bug.cgi?id=180890

        Reviewed by Ryosuke Niwa.

        Typing "my-foo my-bar" creates a single "my-foo\xA0my-bar" class name because
        contentEditable-based attribute editor sometimes inserts non-breaking space characters (\xA0).

        Replace all non-breaking space characters with the regular space characters when
        commiting attribute change.

        * UserInterface/Views/DOMTreeElement.js:

2018-03-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Elements: "Force Print Media Styles" should not persist across Web Inspector sessions
        https://bugs.webkit.org/show_bug.cgi?id=183708
        <rdar://problem/36452183>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype._showPrintStylesChanged):
        (WI.DOMTreeContentView.prototype._togglePrintStyles):
        (WI.DOMTreeContentView.prototype._showPrintStylesSettingChanged): Deleted.
        (WI.DOMTreeContentView.prototype._togglePrintStylesSetting): Deleted.

2018-03-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas: a recording initiated by the user should be shown immediately on completion
        https://bugs.webkit.org/show_bug.cgi?id=183647
        <rdar://problem/38479187>

        Reviewed by Matt Baker.

        When recordings are initiated via `console.record`, we don't want to automatically show the
        recording after it's payload is sent to the frontend. We determine whether a recording came
        from the console by comparing the recording's associated canvas with the current value of
        `_recordingCanvas`. Previously, when stopping a recording, we would always null the value,
        which meant that all non-single-frame recordings (single-frame recordings are stopped by
        the agent after the first paint or tick after an action is performed) would be categorized
        as coming from the console, since `_recordingCanvas` would be null by the time the frontend
        recieved the payload.

        This patch changes it so that the nulling of `_recordingCanvas` in `stopRecording` is only
        done if the agent command errors. It was already the case that `_recordingCanvas` was nulled
        in `stopRecording`, so this patch just prevents it from being nulled too early.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.stopRecording):

2018-03-12  Jon Davis  <jond@apple.com>

        Web Inspector: Remove redundant tooltips
        https://bugs.webkit.org/show_bug.cgi?id=183099

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        Instantiate ConsoleDrawer so the keyboard shortcuts for FindBanner are available.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/ButtonNavigationItem.js:
        (WI.ButtonNavigationItem):
        Only show tooltips when the button style is an image.

        * UserInterface/Views/ConsoleDrawer.js:
        (WI.ConsoleDrawer):
        (WI.ConsoleDrawer.prototype.toggleButtonShortcutTooltip):
        Added helper to set the toggle button keyboard shortcut tooltip.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/FindBanner.js:
        (WI.FindBanner):
        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent):
        (WI.HierarchicalPathComponent.prototype.get tooltip):
        (WI.HierarchicalPathComponent.prototype.set tooltip):
        (WI.HierarchicalPathComponent.prototype.get hideTooltip):
        (WI.HierarchicalPathComponent.prototype.set hideTooltip):
        (WI.HierarchicalPathComponent.prototype._updateElementTitleAndText):
        Add tooltip management features to manage tooltips separately of the displayName,
        and provide a behavior to hide tooltips while retaining the tooltip data.

        * UserInterface/Views/HierarchicalPathNavigationItem.js:
        (WI.HierarchicalPathNavigationItem.prototype.updateLayout):
        Hide tooltips when fully visible, show tooltips for collapsed items.

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem.prototype.titleDidChange):
        Set tooltips for pinned tab bar items.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):
        Set the ConsoleDrawer toggle button tooltip after the keyboard shortcut is registered.

        * UserInterface/Views/StorageTreeElement.js:
        (WI.StorageTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/TabBarItem.js:
        (WI.TabBarItem.prototype.get title):
        (WI.TabBarItem.prototype.set title):
        (WI.TabBarItem.prototype.titleDidChange):
        (WI.TabBarItem):
        Add title property management with an overridable titleDidChange handler for
        setting tooltips when needed.

        * UserInterface/Views/TimelineTreeElement.js:
        (WI.TimelineTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/ToggleButtonNavigationItem.js:
        (WI.ToggleButtonNavigationItem.prototype.set defaultToolTip):
        Added a setter for manging the default tooltip of a toggle button.

        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

2018-03-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Sources: Open all resources in Sources tab instead of Resources/Debugger
        https://bugs.webkit.org/show_bug.cgi?id=183317
        <rdar://problem/38108455>

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):
        Introduce preferredTabType option instead of listing ignoreResourcesTab, ignoreDebuggerTab, ignoreSearchTab, and ignoreNetworkTab.
        The only correct outcome of selecting "Reveal in Sources Tab" context menu is to open Sources tab, not any other tab.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):

2018-03-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Sources: add SourcesTabContentView and SourceSidebarPanel classes
        https://bugs.webkit.org/show_bug.cgi?id=183316
        <rdar://problem/38107639>

        Reviewed by Matt Baker.

        Add Sources tab and sidebar panel, which are copies of the corresponding Resources classes.
        The Sources tab is shown when it's enabled in the experimental settings. This patch doesn't
        remove existing Resources and Debugger tabs.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        * UserInterface/Main.html:
        * UserInterface/Views/SourcesSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .navigation-bar):
        * UserInterface/Views/SourcesSidebarPanel.js: Added.
        (WI.SourcesSidebarPanel):
        (WI.SourcesSidebarPanel.shouldPlaceResourcesAtTopLevel):
        (WI.SourcesSidebarPanel.prototype.get minimumWidth):
        (WI.SourcesSidebarPanel.prototype.closed):
        (WI.SourcesSidebarPanel.prototype.showDefaultContentView):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject.isAncestor):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject.getParent):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject):
        (WI.SourcesSidebarPanel.prototype.initialLayout):
        (WI.SourcesSidebarPanel.prototype.hasCustomFilters):
        (WI.SourcesSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        (WI.SourcesSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.SourcesSidebarPanel.prototype._mainResourceDidChange):
        (WI.SourcesSidebarPanel.prototype._mainFrameDidChange):
        (WI.SourcesSidebarPanel.prototype._mainFrameMainResourceDidChange.delayedWork):
        (WI.SourcesSidebarPanel.prototype._mainFrameMainResourceDidChange):
        (WI.SourcesSidebarPanel.prototype._scriptWasAdded):
        (WI.SourcesSidebarPanel.prototype._addScript):
        (WI.SourcesSidebarPanel.prototype._scriptWasRemoved):
        (WI.SourcesSidebarPanel.prototype._scriptsCleared):
        (WI.SourcesSidebarPanel.prototype._styleSheetAdded):
        (WI.SourcesSidebarPanel.prototype._addTargetWithMainResource):
        (WI.SourcesSidebarPanel.prototype._targetRemoved):
        (WI.SourcesSidebarPanel.prototype._treeSelectionDidChange):
        (WI.SourcesSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesSidebarPanel.prototype._extraDomainsActivated):
        (WI.SourcesSidebarPanel.prototype._scopeBarSelectionDidChange):
        * UserInterface/Views/SourcesTabContentView.js: Added.
        (WI.SourcesTabContentView):
        (WI.SourcesTabContentView.tabInfo):
        (WI.SourcesTabContentView.isTabAllowed):
        (WI.SourcesTabContentView.prototype.get type):
        (WI.SourcesTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.SourcesTabContentView.prototype.canShowRepresentedObject):

2018-03-07  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: ensure that the Recording TreeOutline has a specified height for virtualization
        https://bugs.webkit.org/show_bug.cgi?id=183015

        Reviewed by Matt Baker.

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

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .recording-content):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .navigation-bar): Deleted.
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .tree-outline.canvas): Deleted.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype._detach):

2018-02-26  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: Scroll into view / Inspect element if Canvas has DOM node
        https://bugs.webkit.org/show_bug.cgi?id=181769

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/Markup.svg: Added.

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

2018-02-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: hide navigation sidebar when viewing the overview
        https://bugs.webkit.org/show_bug.cgi?id=182597
        <rdar://problem/37341564>

        Reviewed by Devin Rousso.

        Support showing/hiding the navigation sidebar panel based on the current
        represented object. Individual TabContentViews can opt-in to this behavior,
        by overriding TabContentView.prototype.managesNavigationSidebarPanel.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.canShowRepresentedObject):
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.get managesNavigationSidebarPanel):
        Hide the Canvas navigation sidebar when viewing the overview.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView):
        (WI.ContentBrowserTabContentView.prototype.showNavigationSidebarPanel):
        (WI.ContentBrowserTabContentView.prototype._navigationSidebarCollapsedStateDidChange):
        (WI.ContentBrowserTabContentView.prototype._contentBrowserCurrentRepresentedObjectsDidChange):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.canShowRepresentedObject):
        Provide default implementation that just defers to the TabContentView.
        This exists so that a NavigationSidebarPanel that implements canShowRepresentedObject
        will have a meaningful default to fall back on.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype._sidebarCollapsedStateDidChange):
        (WI.TabBrowser.prototype._showNavigationSidebarPanelForTabContentView):

        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.prototype.get managesNavigationSidebarPanel):

2018-02-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: remove top-level search field and pin the Search tab
        https://bugs.webkit.org/show_bug.cgi?id=182353
        <rdar://problem/37088644>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        Create Search UI based on experimental setting. When the new TabBar is
        enabled, the Search tab is a pinned tab. Since it is also saveable, it
        needs to be added to the TabBrowser (the browser adds the item to the bar).

        When restoring saved tabs, make an additional check to prevent a tab
        from being added twice. This can occur now that the Search tab is pinned.

        * UserInterface/Images/Search.svg:
        Update art to better match Safari/macOS. Slightly increase the radius of
        the lens, and shorten the length of the handle.

        * UserInterface/Views/GoToLineDialog.css:
        (.go-to-line-dialog > div::before):
        Update styles for new Search icon.

        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype.get saveableTabCount):
        Backported new TabBar method which is called by TabBrowser.

        * UserInterface/Views/OpenResourceDialog.css:
        (.open-resource-dialog > .field::before):
        Update styles for new Search icon.

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem.prototype.fromTabInfo):
        Match GeneralTabBarItem.fromTabInfo.

        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        (WI.SearchTabContentView.tabInfo):
        New image (magnifying glass without border) when new TabBar is enabled.

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

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        Move creation of the Settings item out of TabBar. The TabBar should
        only be concerned with managing tabs.

        (WI.TabBar.prototype.get saveableTabCount):
        (WI.TabBar.prototype._handleContextMenu):
        (WI.TabBar.prototype.get normalNonEphemeralTabCount): Deleted.
        Now that the Search tab is pinned, there aren't any normal tabs that
        are also ephemeral. For the LegacyTabBar, both the Search and New Tab
        tabs are still in this category.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.addTabForContentView):
        (WI.TabBrowser.prototype.closeTabForContentView):
        (WI.TabBrowser.prototype._tabBarItemSelected):
        (WI.TabBrowser._tabBarItemRemoved):
        Recent tab list should be validated against the list of saveable tabs,
        since the Search tab is no longer a normal tab (a GeneralTabBarItem),
        but is still persisted across Inspector sessions.

2018-02-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: TabBarItem close button is incorrectly positioned
        https://bugs.webkit.org/show_bug.cgi?id=182844
        <rdar://problem/37586749>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem.prototype.set title):
        Insert the title before the last flexible space item.

        * UserInterface/Views/TabBar.css:
        (.tab-bar > .item):
        (.tab-bar > .item > .close):
        (.tab-bar > .item > .flex-space):
        (.tab-bar > .item.ephemeral > .flex-space:last-child):
        (.tab-bar.collapsed > .item):
        (.tab-bar.collapsed > .item > .flex-space):
        (.tab-bar.collapsed > .item > .close):
        (.tab-bar.collapsed > .item:hover > .close):
        (.tab-bar.collapsed > .item.ephemeral:hover > .icon):
        (.tab-bar > .item:hover > .close): Deleted.
        (.tab-bar:not(.collapsed) > .item.ephemeral:hover > .icon): Deleted.

        * UserInterface/Views/TabBarItem.js:
        (WI.TabBarItem):
        Restore flexible space items before and after the icon.

2018-02-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: completion popover doesn't hide when switching panels
        https://bugs.webkit.org/show_bug.cgi?id=182464
        <rdar://problem/37202763>

        Reviewed by Timothy Hatcher.

        Save the position of the anchor, an element the popover is shown for, and hide the completion popover
        when the position changes.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.showUntilAnchorMoves):
        When the popover is visible, check every 200ms if the anchor moved.

        (WI.CompletionSuggestionsView.prototype.hide):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._getCaretRect):
        getBoundingClientRect returns {x: 0, y: 0} when it can't determine node's position.
        This happens when a node isn't attached to DOM, attached to DOM but not visible, and
        a number of odd cases.

2018-02-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: only show allowed tabs in the available tabs context menu
        https://bugs.webkit.org/show_bug.cgi?id=182721
        <rdar://problem/37479019>

        Reviewed by Timothy Hatcher.

        In addition to only including allowed tabs in the TabBar context menu,
        perform a sanity check when setting the selected tab item, since the
        serialized selection index could refer to a tab that is no longer allowed.

        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype.set selectedTabBarItem):
        (WI.LegacyTabBar.prototype._handleContextMenu):

        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype._handleContextMenu):

2018-02-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: tree selection abruptly changes when selecting a recording frame
        https://bugs.webkit.org/show_bug.cgi?id=182667
        <rdar://problem/37412639>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.recording > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.folder-icon > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.folder-icon > .status):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.recording > .icon): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .icon): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .status): Deleted.
        Style changes for the additional DOM element required to virtualize the recording tree outline.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        In order to be virtualized, the tree must be the only child of its parent.

        (WI.CanvasSidebarPanel.prototype.set action):
        Ensure that a frame tree element isn't deselected when the last action
        in the frame becomes selected in the RecordingContentView.

        (WI.CanvasSidebarPanel.prototype.shown):
        Refresh the sidebar, as represented objects may have changed while hidden.

        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        Unset the recording when no valid represented objects are found, to
        prevent a stale recording tree from being shown when viewing the overview.

        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Moved toggling of the "has-recordings" style to _canvasChanged, since
        the navigation bar should be hidden when no canvas exists.

        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.addContentViewForItem):
        (WI.CollectionContentView.prototype.removeContentViewForItem):
        Drive by fixes for child view visible state.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline:not(.large):matches(:focus, .force-focus) .item.selected .status .indeterminate-progress-spinner):
        Make spinner easier to see against the selection background color.

2018-02-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Object.shallowEqual always fails when comparing array property values
        https://bugs.webkit.org/show_bug.cgi?id=182634
        <rdar://problem/37374639>

        Reviewed by Devin Rousso.

        Object.shallowEqual should use Array.shallowEqual when comparing property
        values, since strictly comparing objects/arrays is only true if both
        operands reference the same Object.

        * UserInterface/Base/Utilities.js:
        (value):

2018-02-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: add listing of Canvases/Programs/Recordings to the NavigationSidebar
        https://bugs.webkit.org/show_bug.cgi?id=178744
        <rdar://problem/35374379>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/Canvas2D.svg:
        * UserInterface/Images/Canvas3D.svg:
        * UserInterface/Images/Recording.svg:
        Update canvas icons to be monochrome. Simplified the recording icon.

        * UserInterface/Main.html:

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.get state):
        (WI.RecordingAction.prototype.set state):
        Allow (2D) snapshot state to be associated with the action. Used by
        RecordingActionDetailsSidebarPanel to retrieve the snapshot state.

        * UserInterface/Views/CanvasContentView.css:
        (.content-view.canvas:not(.tab)):
        (.content-view.canvas:not(.tab) > .progress): Deleted.
        (.content-view.canvas:not(.tab) > .progress > .frame-count): Deleted.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.get navigationItems):
        (WI.CanvasContentView.prototype.layout):
        (WI.CanvasContentView.prototype.shown):
        (WI.CanvasContentView.prototype._recordingStarted):
        (WI.CanvasContentView.prototype._recordingProgress):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._updateRecordNavigationItem):
        (WI.CanvasContentView.prototype._updateProgressView):
        Replace progress UI with a reusable ProgressView class.
        When in the overview, clicking the CanvasContentView shows a dedicated
        CanvasContentView for inspecting shaders and recordings. This behavior
        is controlled by CollectionContentView, so we need to prevent it when
        clicking inside the header and footer elements, which contain clickable UI.

        * UserInterface/Views/CanvasDetailsSidebarPanel.js:
        (WI.CanvasDetailsSidebarPanel.prototype.inspect):

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas > :matches(header, footer)):
        (.content-view.canvas-overview .content-view.canvas > header):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .navigation-bar):
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .is-recording) > header > .navigation-bar):
        (.content-view.canvas-overview .content-view.canvas.is-recording > .progress-view,):
        (.content-view.canvas-overview .content-view.canvas.is-recording > .preview):
        (.content-view.canvas-overview .content-view.canvas > :matches(header, .progress, .preview, footer)): Deleted.
        (.content-view.canvas-overview .content-view.canvas.selected > :matches(.progress, .preview, footer),): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(:hover, .is-recording, .selected) > header > .navigation-bar): Deleted.
        (.content-view.canvas-overview .content-view.canvas > :matches(.progress, .preview)): Deleted.
        (.content-view.canvas-overview .content-view.canvas > .preview): Deleted.
        (.content-view.canvas-overview .content-view.canvas > .progress ~ .preview): Deleted.
        Clean up styles, and remove selection styles as canvases are no longer selectable in the overview.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype.get navigationItems):
        (WI.CanvasOverviewContentView.prototype.attached):
        (WI.CanvasOverviewContentView.prototype.detached):
        (WI.CanvasOverviewContentView.prototype.get selectionPathComponents): Deleted.
        (WI.CanvasOverviewContentView.prototype._changeSelectedItemVertically): Deleted.
        (WI.CanvasOverviewContentView.prototype._changeSelectedItemHorizontally): Deleted.
        (WI.CanvasOverviewContentView.prototype._selectionPathComponentsChanged): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleUp): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleRight): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleDown): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleLeft): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleSpace): Deleted.
        (WI.CanvasOverviewContentView.prototype._supplementalRepresentedObjectsDidChange): Deleted.
        Disable canvas selection. Remove logic for supplemental represented objects,
        path components, and selection keyboard shortcuts.

        * UserInterface/Views/CanvasSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.canvas > .content):
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas.canvas-2d .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas.webgl .icon):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .tree-outline.canvas):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.recording > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.shader-program > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .status):

        * UserInterface/Views/CanvasSidebarPanel.js: Added.
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.get canvas):
        (WI.CanvasSidebarPanel.prototype.set canvas):
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype.shown):
        (WI.CanvasSidebarPanel.prototype.hidden):
        (WI.CanvasSidebarPanel.prototype.hasCustomFilters):
        (WI.CanvasSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.CanvasSidebarPanel.prototype.initialLayout):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._scopeBarSelectionChanged):
        (WI.CanvasSidebarPanel.prototype._toggleRecording):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Add new navigation sidebar, split into two sections. The upper section
        contains a tree with a single element for the current canvas, and child
        elements for any shader programs. The maximum height of this section is 50%
        of the sidebar's height. The lower section contains a tree for the selected
        recording, and a scope bar for choosing between recordings.

        * UserInterface/Views/CanvasTabContentView.css:
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.canvas-2d .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.webgl .icon):
        (.content-view.tab.canvas .navigation-bar > .item .shader-program > .icon):
        (.content-view.tab.canvas .navigation-bar > .item > .hierarchical-path-component > .icon): Deleted.
        (.content-view.tab.canvas .navigation-bar > .item .canvas .icon): Deleted.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.canShowRepresentedObject):
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        (WI.CanvasTabContentView.prototype._canvasTreeOutlineSelectionDidChange):
        (WI.CanvasTabContentView.prototype._recordingAdded):
        (WI.CanvasTabContentView.prototype._handleSpace):
        (WI.CanvasTabContentView.prototype.showRepresentedObject): Deleted.
        (WI.CanvasTabContentView.prototype._navigationSidebarTreeOutlineSelectionChanged): Deleted.
        (WI.CanvasTabContentView.prototype._recordingActionIndexChanged): Deleted.
        (WI.CanvasTabContentView.prototype._updateActionIndex): Deleted.
        The canvas tab now maintains a tree outline of all canvases, with an
        "Overview" element as the root. The Overview element is always the first
        item of content browser's hierarchical path.

        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.createRecordingTreeElement):
        (WI.CanvasTreeElement):
        (WI.CanvasTreeElement.prototype.onattach):
        (WI.CanvasTreeElement.prototype.onpopulate):
        (WI.CanvasTreeElement.prototype._updateStatus):
        (WI.CanvasTreeElement.prototype.ondetach): Deleted.
        Make it possible to not show recordings under the Canvas element.
        Create `isRecording` status element (spinner).

        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.shown):
        (WI.CollectionContentView.prototype.hidden):
        Child ContentViews need to be updated when the collection's visibility changes.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.isViewable):

        * UserInterface/Views/ProgressView.css: Added.
        (.progress-view):
        (.progress-view > .titles):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.progress-view > .titles > .subtitle::before):
        (.progress-view > .indeterminate-progress-spinner):

        * UserInterface/Views/ProgressView.js: Added.
        (WI.ProgressView):
        (WI.ProgressView.prototype.get title):
        (WI.ProgressView.prototype.set title):
        (WI.ProgressView.prototype.get subtitle):
        (WI.ProgressView.prototype.set subtitle):
        (WI.ProgressView.prototype.get visible):
        (WI.ProgressView.prototype.set visible):
        (WI.ProgressView.prototype.initialLayout):
        (WI.ProgressView.prototype._updateTitles):
        New view class (not a ContentView) for showing a generic progress message,
        with a title, subtitle, and progress spinner.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > .preview-container):
        Remove unnecessary styles.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.get supplementalRepresentedObjects):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.get saveData):
        (WI.RecordingContentView.prototype._exportRecording):
        Relocate the recording export logic and UI.
        (WI.RecordingContentView.prototype.async._generateContentCanvas2D):
        (WI.RecordingContentView.prototype.async._generateContentCanvasWebGL):
        (WI.RecordingContentView.prototype._sliderChanged):
        Refactor logic for notifying the rest of the UI of changes to the action slider.
        The selected action is now exposed as a supplemental represented object, and a
        corresponding SupplementalRepresentedObjectsDidChange event.

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.inspect):
        (WI.RecordingStateDetailsSidebarPanel.prototype.set action):
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        (WI.RecordingStateDetailsSidebarPanel):
        (WI.RecordingStateDetailsSidebarPanel.prototype.updateAction): Deleted.

        * UserInterface/Views/RecordingTraceDetailsSidebarPanel.js:
        (WI.RecordingTraceDetailsSidebarPanel.prototype.inspect):
        (WI.RecordingTraceDetailsSidebarPanel.prototype.set action):
        (WI.RecordingTraceDetailsSidebarPanel):
        (WI.RecordingTraceDetailsSidebarPanel.prototype.updateAction): Deleted.
        Now that the selected action is exposed to the UI as a supplemental
        represented object, details sidebars can be more decoupled from the
        canvas tab, and be notified of changes to the selection via `inspect()`.

        * UserInterface/Views/ResourceIcons.css:
        (.canvas > .icon): Deleted.
        (.shader-program .icon): Deleted.

2018-02-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Typing value and quickly moving focus away may display outdated value in UI
        https://bugs.webkit.org/show_bug.cgi?id=182588
        <rdar://problem/37332161>

        Reviewed by Matt Baker.

        CSSProperty models were updated with a 250ms delay. Quickly adding a blank property after modifying
        an existing property could result in outdated values being shown.

        This patch removes the 250ms delay.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidChange):

2018-02-07  Matt Baker  <mattbaker@apple.com>

        Web Inspector: replace isAncestor with Node.contains() in LegacyTabBar
        https://bugs.webkit.org/show_bug.cgi?id=182586

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/LegacyTabBar.js:

2018-02-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: completion popover doesn't hide when switching panels
        https://bugs.webkit.org/show_bug.cgi?id=182464
        <rdar://problem/37202763>

        Reviewed by Timothy Hatcher.

        Hide completion popover by triggering blur event on the focused text field.
        Removing text fields from the DOM tree would hide the completion popovers as well,
        but switching sidebar panels doesn't remove them from the DOM.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.hidden):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.hidden):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.hidden):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.hidden):

2018-02-06  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Replace isAncestor and isDescendant with native DOM contains method
        https://bugs.webkit.org/show_bug.cgi?id=182069

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.restoreFocusFromElement):
        (WI._mouseDown):
        (WI._focusedContentBrowser):
        (WI._focusedContentView):
        * UserInterface/Base/Utilities.js:
        (Node.prototype.traverseNextNode):
        (Node.prototype.isAncestor): Deleted.
        (Node.prototype.isDescendant): Deleted.
        (Node.prototype.isSelfOrAncestor): Deleted.
        (Node.prototype.isSelfOrDescendant): Deleted.
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._handleKeyDown):
        * UserInterface/Views/CSSStyleDeclarationSection.js:
        (WI.CSSStyleDeclarationSection.prototype._handleSelectorPaste):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype._onmouseout):
        * UserInterface/Views/DetailsSection.js:
        (WI.DetailsSection.prototype._headerElementClicked):
        * UserInterface/Views/EditingSupport.js:
        (WI.incrementElementValue):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.selectOnMouseDown):
        * UserInterface/Views/SoftContextMenu.js:
        (WI.SoftContextMenu.prototype._menuItemMouseOut):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype.insertTabBarItem):

2018-02-06  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Elements tab should have "Jump to Layer" functionality
        https://bugs.webkit.org/show_bug.cgi?id=181800

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.isShowingElementsTab):
        (WI.showLayersTab):
        (WI.isShowingLayersTab):

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):

        * UserInterface/Views/LayersTabContentView.js:
        (WI.LayersTabContentView.prototype.selectLayerForNode):

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

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel):
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        (WI.LayerDetailsSidebarPanel.prototype._updateDataGrid):

2018-02-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Rename String.prototype.trimEnd to avoid conflicts with native trimEnd
        https://bugs.webkit.org/show_bug.cgi?id=182545

        Reviewed by Brian Burg.

        Rename:
        - trimEnd to truncateEnd
        - trimMiddle to truncateMiddle

        * UserInterface/Base/Utilities.js:
        (String.prototype.trimMiddle): Deleted.
        (String.prototype.trimEnd): Deleted.
        (String.prototype.truncateMiddle): Added.
        (String.prototype.truncateEnd): Added.
        Use strict mode. Scrict mode allows `this` to be a primitive (a string, in our case).
        In non-strict mode, `this` is always an object. Without the strict mode,
        "a".truncateEnd(42) !== "a", because truncateEnd returns a string object.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        * UserInterface/Views/DOMTreeElementPathComponent.js:
        (WI.DOMTreeElementPathComponent):
        * UserInterface/Views/SearchResultTreeElement.js:
        Remove an obvious comment.

        (WI.SearchResultTreeElement.truncateAndHighlightTitle):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):

2018-02-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add an experimental setting to enable Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=182461

        Reviewed by Brian Burg.

        This patch only adds a setting. It doesn't add the Sources tab.

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

2018-02-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Styles Redesign: Pasting multiple properties should create properties instead of a bad property
        https://bugs.webkit.org/show_bug.cgi?id=179622
        <rdar://problem/35511170>

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._remove):
        (WI.SpreadsheetStyleProperty.prototype._update):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidCommit):
        (WI.SpreadsheetStyleProperty.prototype._handleNamePaste):
        When the user pastes into the name field, parse the text for a list of name-value pairs and
        replace the property being edited with the text of those pairs.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.addBlankProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyAddBlankPropertySoon):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved): Deleted.
        Calling `addBlankProperty` will trigger a layout on the next frame, but that might be before
        the CSSAgent has had a chance to finish refreshing, so we need a way to defer the creation
        of a new property until after we have finished the next layout (which is after the refresh).
        Drive-by: fix naming of some delegate functions.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.replaceWithText):
        Provide a way for replacing the property with new text.

2018-02-02  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: remove New Tab button and add experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=182342
        <rdar://problem/37078662>

        Reviewed by Devin Rousso.

        This patch adds a new experimental setting group, "User Interface", with
        a single setting, "Enable New TabBar". When enabled, the New Tab button is
        no longer available in the top-level TabBar. The 'open tabs' context menu
        no longer allows the last non-ephemeral open tab to be closed (unchecked).

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._tryToRestorePendingTabs):
        Retain legacy behavior behind experimental feature setting.
        (WI.isNewTabWithTypeAllowed):

        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        * UserInterface/Views/ConsoleTabContentView.js:
        (WI.ConsoleTabContentView):
        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView):
        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.prototype.fromTabInfo):
        (WI.GeneralTabBarItem.prototype.get isEphemeral):
        (WI.GeneralTabBarItem.fromTabContentViewConstructor): Deleted.

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

        * UserInterface/Views/LegacyTabBar.js: Copied from Source/WebInspectorUI/UserInterface/Views/TabBar.js.
        (WI.LegacyTabBar):
        (WI.LegacyTabBar.prototype.get newTabTabBarItem):
        (WI.LegacyTabBar.prototype.updateNewTabTabBarItemState):
        (WI.LegacyTabBar.prototype.addTabBarItem):
        (WI.LegacyTabBar.prototype.insertTabBarItem.animateTabs):
        (WI.LegacyTabBar.prototype.insertTabBarItem.removeStyles):
        (WI.LegacyTabBar.prototype.insertTabBarItem):
        (WI.LegacyTabBar.prototype.removeTabBarItem.animateTabs):
        (WI.LegacyTabBar.prototype.removeTabBarItem.removeStyles):
        (WI.LegacyTabBar.prototype.removeTabBarItem):
        (WI.LegacyTabBar.prototype.selectPreviousTab):
        (WI.LegacyTabBar.prototype.selectNextTab):
        (WI.LegacyTabBar.prototype.get selectedTabBarItem):
        (WI.LegacyTabBar.prototype.set selectedTabBarItem):
        (WI.LegacyTabBar.prototype.get tabBarItems):
        (WI.LegacyTabBar.prototype.get normalTabCount):
        (WI.LegacyTabBar.prototype.layout.forceItemHidden):
        (WI.LegacyTabBar.prototype.layout):
        (WI.LegacyTabBar.prototype._tabBarItemsFromLeftToRight):
        (WI.LegacyTabBar.prototype._findTabBarItem):
        (WI.LegacyTabBar.prototype._hasMoreThanOneNormalTab):
        (WI.LegacyTabBar.prototype._openDefaultTab):
        (WI.LegacyTabBar.prototype._recordTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._applyTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._clearTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._finishExpandingTabsAfterClose.):
        (WI.LegacyTabBar.prototype._finishExpandingTabsAfterClose):
        (WI.LegacyTabBar.prototype._handleMouseDown):
        (WI.LegacyTabBar.prototype._handleClick):
        (WI.LegacyTabBar.prototype._handleMouseMoved):
        (WI.LegacyTabBar.prototype._handleMouseUp):
        (WI.LegacyTabBar.prototype._handleMouseLeave):
        (WI.LegacyTabBar.prototype._handleContextMenu):
        (WI.LegacyTabBar.prototype._handleNewTabClick):
        (WI.LegacyTabBar.prototype._handleTabPickerTabContextMenu):
        (WI.LegacyTabBar.prototype._handleNewTabMouseEnter):

        * UserInterface/Views/NetworkTabContentView.js:
        (WI.NetworkTabContentView):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView):
        (WI.NewTabContentView.tabInfo):
        (WI.NewTabContentView.isEphemeral): Deleted.
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        (WI.SearchTabContentView.tabInfo):
        (WI.SearchTabContentView.isEphemeral): Deleted.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.tabInfo):
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        (WI.SettingsTabContentView.isEphemeral): Deleted.

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

        * UserInterface/Views/TabBar.css:
        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype.insertTabBarItem):
        (WI.TabBar.prototype.removeTabBarItem):
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype.get normalNonEphemeralTabCount):
        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleClick):
        (WI.TabBar.prototype._handleMouseMoved):
        (WI.TabBar.prototype._handleMouseLeave):
        (WI.TabBar.prototype._handleContextMenu):
        (WI.TabBar.prototype._handleTabPickerTabContextMenu):
        (WI.TabBar.prototype.get newTabTabBarItem): Deleted.
        (WI.TabBar.prototype.updateNewTabTabBarItemState): Deleted.
        (WI.TabBar.prototype._openDefaultTab): Deleted.
        (WI.TabBar.prototype._handleNewTabClick): Deleted.
        (WI.TabBar.prototype._handleNewTabMouseEnter): Deleted.
        Remove support for the New Tab button and default tab. Without a default
        tab, there is nothing to display when no tabs are open, so prevent the
        last non-pinned tab from being removed.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser._tabBarItemRemoved):
        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.isEphemeral): Deleted.
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):

2018-01-30  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Replace Object.shallowMerge with ES2018 spread operator
        https://bugs.webkit.org/show_bug.cgi?id=182219

        Reviewed by Brian Burg.

        * UserInterface/Base/Utilities.js:
        (Object.shallowMerge): Deleted.
        * UserInterface/Base/DOMUtilities.js:
        (WI.linkifyNodeReference):
        * UserInterface/Base/Main.js:
        (WI.handlePossibleLinkClick):
        (WI.openURL):
        (WI.showSourceCodeLocation):
        (WI.showOriginalUnformattedSourceCodeLocation):
        (WI.showOriginalOrFormattedSourceCodeLocation):
        (WI.showOriginalOrFormattedSourceCodeTextRange):
        (WI.linkifyLocation):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._insertAdjacentHTML):
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView.prototype._addRow):

2018-01-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Timelines content browser NavigationBar is squashed at narrow heights
        https://bugs.webkit.org/show_bug.cgi?id=182196
        <rdar://problem/36929899>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationBar.css:
        (.navigation-bar):

2018-01-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: improvements to tab layout and resize behavior
        https://bugs.webkit.org/show_bug.cgi?id=181468
        <rdar://problem/36395439>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/TabPicker.svg: Added.
        New ">>" icon for the tab picker button.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        * UserInterface/Views/ConsoleTabContentView.js:
        (WI.ConsoleTabContentView):
        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView):
        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.fromTabContentViewConstructor):
        (WI.GeneralTabBarItem.prototype.get title):
        Add missing override for getter/setter pair.
        (WI.GeneralTabBarItem.prototype.set title):
        (WI.GeneralTabBarItem.prototype._handleContextMenuEvent):
        Show the close button on ephemeral tabs only (Search, New Tab).
        Replace unused `representedObject` parameter with `isEphemeral`, which
        determines whether to show a close button for the tab.

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

        * UserInterface/Views/NavigationBar.js:
        Remove unused symbol.

        * UserInterface/Views/NetworkTabContentView.js:
        (WI.NetworkTabContentView):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView):

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem):
        Remove unused parameter.

        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        * UserInterface/Views/StorageTabContentView.js:
        (WI.StorageTabContentView):

        * UserInterface/Views/TabBar.css:
        (.tab-bar > .item):
        (.tab-bar.calculate-width > .item):
        (.tab-bar > .item.pinned.tab-picker):
        (.tab-bar > .item > .close):
        (.tab-bar > .item > .title):
        (.tab-bar:not(.collapsed) > .item > .title):
        (.tab-bar.collapsed > .item:not(.pinned) > .icon):
        (.tab-bar > .item:hover > .close):
        (.tab-bar.collapsed > .item:hover > .close):
        (.tab-bar:not(.collapsed) > .item.ephemeral:hover > .icon):
        (.tab-bar.collapsed > .item.ephemeral:hover > .title):
        (body[dir=ltr] .tab-bar > .item > .close): Deleted.
        (body[dir=rtl] .tab-bar > .item > .close): Deleted.
        (.tab-bar > .item > .flex-space): Deleted.
        (.tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=ltr] .tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=rtl] .tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=ltr] .tab-bar > .item > .title): Deleted.
        (body[dir=rtl] .tab-bar > .item > .title): Deleted.
        (.tab-bar.collapsed > .item): Deleted.
        (.tab-bar.collapsed > .item > .flex-space): Deleted.
        (.tab-bar.collapsed > .item > .close): Deleted.
        (body[dir=ltr] .tab-bar.collapsed > .item > .close): Deleted.
        (body[dir=rtl] .tab-bar.collapsed > .item > .close): Deleted.
        (.tab-bar.hide-titles > .item > .title): Deleted.
        (.tab-bar.collapsed:not(.hide-titles) > .item:not(.pinned):hover > .icon,): Deleted.
        (.tab-bar.collapsed:not(.hide-titles) > .item:hover > .close,): Deleted.
        Clean up tab styles and prevent tabs from shrinking during flex layout.
        Added new `calculate-width` class, to disable flex layout when measuring
        the minimum width of the TabBar required to fit all tab items.

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype.layout.forceItemHidden):
        (WI.TabBar.prototype.layout):
        Perform two layout passes, similar to NavigationBar. The first pass disables
        flex layout and measures tab items at full size. If the bar isn't wide enough
        to show all the tabs, hide their icons and measure again. If there still isn't
        room, hide tabs starting from the end of the bar and display the tab picker.

        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleTabPickerTabContextMenu):

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

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

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Table: Sort indicator is not displayed when sorted column is hidden and re-shown
        https://bugs.webkit.org/show_bug.cgi?id=182164
        <rdar://problem/36892619>

        Reviewed by Brian Burg.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.showColumn):
        Re-add the sort classes if the column being shown is the active sort column.

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network - Cookies view should behave better at narrow widths, all data is hidden
        https://bugs.webkit.org/show_bug.cgi?id=182163
        <rdar://problem/36893241>

        Reviewed by Brian Burg.

        * UserInterface/Views/ResourceCookiesContentView.css:
        (.resource-cookies .table):
        Give these tables a reasonable minimum size so that if the inspector
        is narrow, the content view can still be scrolled to see all of
        the table data.

        * UserInterface/Views/Table.css:
        (.table > .header):
        Match the data-container and mark overflow as hidden, otherwise
        super narrow widths show header content beyond the edge.

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Displayed Columns" should not be displayed in context menu if all columns are required columns
        https://bugs.webkit.org/show_bug.cgi?id=182162
        <rdar://problem/36893758>

        Reviewed by Matt Baker.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleHeaderContextMenu):
        Only add the header column when we know there are hideable columns.

2018-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Simplify update-LegacyInspectorBackendCommands.rb
        https://bugs.webkit.org/show_bug.cgi?id=182067

        Reviewed by Brian Burg.

        * Scripts/update-LegacyInspectorBackendCommands.rb:
        Remove stale dependency_json, it has always been empty for a while now.
        Switch to framework WebInspectorUI to generate only the backend commands
        and not spend time generating a bunch of cpp files.

2018-01-24  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION (r226994): Web Inspector: Styles: Suggestions popover floats in top-left corner of Web Inspector after tabbing
        https://bugs.webkit.org/show_bug.cgi?id=182027

        Reviewed by Matt Baker.

        r226994 added a layout of all properties on property removal. Layout caused
        a property element to be removed from DOM right before dislaying the suggestion
        popover, resulting in the popover being displayed at the top left corner.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        Only update property view indices when a property is removed.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype.set index):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        Checking this._element.parentNode to see if the element is attached to the DOM tree is unreliable,
        since the element may have a non-null parent node that is detached from the DOM tree. To fix that,
        we could traverse element's ancestors, but I used a concise isConnected property instead.

2018-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        ReferenceError:​ Can't find variable:​ DOMAgent (at ScriptSyntaxTree.js:​178:​22)​
        https://bugs.webkit.org/show_bug.cgi?id=182059

        Reviewed by Matt Baker.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.functionReturnDivot):
        DOMAgent won't be available in a ServiceWorker or JSContext inspector. So add
        a check for DOMAgent, and assume if DOMAgent doesn't exist that we should fall
        back to the latest path (non-iOS 9) target.

2018-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network's columns shake when scrolling at non-default zoom level
        https://bugs.webkit.org/show_bug.cgi?id=181998
        <rdar://problem/36449808>

        Reviewed by Matt Baker.

        * UserInterface/Views/Table.js:
        When zoomed the bounding client rect values were fractional, which was
        unexpected by this area of code. Floor the values to get a value we expect
        to be able to evenly distribute.

2018-01-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: data corruption when updating values quickly
        https://bugs.webkit.org/show_bug.cgi?id=179461
        <rdar://problem/35431882>

        Reviewed by Joseph Pecoraro.

        Data corruption used to happen because CSSStyleDeclaration.prototype.text didn't
        update synchronously. Making two or more quick changes resulted in corrupted data.

        Imagine we modify a CSS value 3 times:

        Front-end:  (1)-(2)---(3)
        Back-end:          (1)-----(2)-(3)

        The first response from the backend could happen after the 2nd edit. In this patch,
        CSSStyleDeclaration is locked when its view is being edited.

        To correctly display invalid and overridden properties, the backend is allowed to update
        CSSStyleDeclaration and CSSProperty when they're locked if the text from the backend
        matches the model's text. This should happen when the backend is caught up with the
        front-end changes.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.update):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get locked):
        (WI.CSSStyleDeclaration.prototype.set locked):
        (WI.CSSStyleDeclaration.prototype.set text):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.detached):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get editing):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set focused):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set inlineSwatchActive):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.stylePropertyInlineSwatchActivated):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.stylePropertyInlineSwatchDeactivated):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        Lock CSSStyleDeclaration when a CSS property name or value is focused or
        an inline widget is active.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        When selector is focused, clicking on the white-space should not add a new blank property.

2018-01-19  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers tab should do away with popovers (if possible)
        https://bugs.webkit.org/show_bug.cgi?id=181805

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        Remove superfluous colon from a string.

        * UserInterface/Main.html:
        * UserInterface/Views/LayerDetailsSidebarPanel.css:
        * UserInterface/Views/Layers3DContentView.css: Added.
        Remove popover styling from sidebar, add new file with similar styling for canvas overlay.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel):
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        (WI.LayerDetailsSidebarPanel.prototype._dataGridSelectedNodeChanged):
        (WI.LayerDetailsSidebarPanel.prototype._updateLayers):
        (WI.LayerDetailsSidebarPanel.prototype._updateBottomBar):
        (WI.LayerDetailsSidebarPanel.prototype.willDismissPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._showPopoverForSelectedNode): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._presentPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._contentForPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._populateListOfCompositingReasons.addReason): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._populateListOfCompositingReasons): Deleted.
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.shown):
        (WI.Layers3DContentView.prototype.selectLayerById):
        (WI.Layers3DContentView.prototype._canvasMouseDown):
        (WI.Layers3DContentView.prototype._buildLayerInfoElement):
        (WI.Layers3DContentView.prototype._updateLayerInfoElement):
        (WI.Layers3DContentView.prototype._updateReasonsList):
        Remove popover from sidebar table, overlay div with same data arrangement on top of the canvas.
        Also reverse the fix from r226671 since the visualization is no longer unusable without the sidebar!

2018-01-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas Tab: Multiple "waiting for frames" messages displayed
        https://bugs.webkit.org/show_bug.cgi?id=181865
        <rdar://problem/36664737>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype._recordingStarted):
        (WI.CanvasContentView.prototype._recordingStopped):

2018-01-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: tabbing on commented out property throws exception
        https://bugs.webkit.org/show_bug.cgi?id=180676
        <rdar://problem/35981058>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingFirstProperty):
        Tabbing from the selector field should focus on the first editable property.
        When no editable properties are present, a new blank property should be added after the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingLastProperty):
        Shift-tabbing from the selector field should focus on the last editable property of the previous CSS rule.
        When no editable properties are present, a new blank property should be added after the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved):
        When navigating between properties skip the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._editablePropertyAfter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._editablePropertyBefore):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.get enabled):
        (WI.SpreadsheetStyleProperty.prototype._update):

2018-01-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Make styles sidebar always LTR
        https://bugs.webkit.org/show_bug.cgi?id=175357
        <rdar://problem/33787988>

        Reviewed by Joseph Pecoraro.

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

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

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

2018-01-18  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: record button on canvas card doesn't always show on hover, or is misplaced
        https://bugs.webkit.org/show_bug.cgi?id=179183

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop): Deleted.

2018-01-17  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: clicking on a path component that has no siblings should select it
        https://bugs.webkit.org/show_bug.cgi?id=181772

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent.prototype._updateSelectElement):
        (WI.HierarchicalPathComponent.prototype._selectElementMouseDown):

2018-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add back localized strings for Styles sidebar panels
        https://bugs.webkit.org/show_bug.cgi?id=181748
        <rdar://problem/36583184>

        Reviewed by Brian Burg.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel):
        * UserInterface/Views/RulesStyleDetailsSidebarPanel.js:
        (WI.RulesStyleDetailsSidebarPanel):
        * UserInterface/Views/VisualStyleDetailsSidebarPanel.js:
        (WI.VisualStyleDetailsSidebarPanel):
        Add back localized strings for panel titles lost in r225547.

2018-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Super long URL string causes bad wrapping in Resources detail sidebar
        https://bugs.webkit.org/show_bug.cgi?id=181617

        Reviewed by Brian Burg.

        * UserInterface/Views/DetailsSection.css:
        (.details-section > .content > .group > .row.simple > .value):
        Set the break to all characters.

2018-01-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: typing a "space" in the QuickConsole shouldn't trigger a recording
        https://bugs.webkit.org/show_bug.cgi?id=181706
        <rdar://problem/36558221>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._handleSpace):

2018-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make Console's Execution Context picker stand out when it is non-default
        https://bugs.webkit.org/show_bug.cgi?id=181628
        <rdar://problem/36492044>

        Reviewed by Matt Baker.

        * UserInterface/Views/HierarchicalPathComponent.css:
        (.hierarchical-path-component > .selector-arrows):
        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent.prototype.set selectorArrows):
        Switch to SVG element so we can style the arrows.

        * UserInterface/Views/QuickConsole.css:
        (.quick-console > .navigation-bar > .hierarchical-path .execution-context):
        (.quick-console > .navigation-bar > .hierarchical-path .execution-context .separator):
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context):
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context .selector-arrows):
        Styles for the execution context picker. We hide the unused separator
        and instead use margin so that the selected background and border don't
        have an extra 7px on the right/end side.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._activeExecutionContextChanged):
        Toggle the non-default class name on the path.

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: pressing down key should select first item from completion list when focusing on empty value
        https://bugs.webkit.org/show_bug.cgi?id=181633
        <rdar://problem/36501797>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: Long value causes bad wrapping
        https://bugs.webkit.org/show_bug.cgi?id=181618
        <rdar://problem/36485175>

        Reviewed by Joseph Pecoraro.

        Wrap long values only when editing.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .value.editing):

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: clicking on the white space after the property sometimes places a blank property at the wrong index
        https://bugs.webkit.org/show_bug.cgi?id=179585
        <rdar://problem/35490780>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        Layout call is needed to update data-property-index attributes on the property views.

2018-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Tab - Export HAR Context Menu not working
        https://bugs.webkit.org/show_bug.cgi?id=181694
        <rdar://problem/36479197>

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableCellContextMenuClicked):
        Ensure `this` works in the handler.

2018-01-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: add context menu to TabBar for toggling available tabs
        https://bugs.webkit.org/show_bug.cgi?id=181448
        <rdar://problem/36383298>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        Reorder production tab classes and default (open) tabs.
        (WI.registerTabClass): Removed.
        Not used.

        * UserInterface/Base/Object.js:
        Remove notification that is no longer used.

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.prototype.set title):
        (WI.GeneralTabBarItem.prototype._handleContextMenuEvent): Deleted.
        Remove per-tab context menu (provided Close Tab and Close Other Tabs).

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

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype._handleContextMenu):

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser):
        (WI.TabBrowser._handleNewTabContextMenu): Deleted.
        No longer needed.

2018-01-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: properties should never be semitransparent or crossed out while editing
        https://bugs.webkit.org/show_bug.cgi?id=180793
        <rdar://problem/36038813>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .value.editing):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (.spreadsheet-style-declaration-editor .property.invalid-name:not(.disabled) .content > *):
        (.spreadsheet-style-declaration-editor .property.invalid-value:not(.disabled) .content .value):
        (.spreadsheet-style-declaration-editor .property.not-inherited .content > *):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._update):

2018-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Drop support for iOS 7 targets
        https://bugs.webkit.org/show_bug.cgi?id=181549
        <rdar://problem/36444813>

        Reviewed by Brian Burg.

        * Versions/Inspector-iOS-7.0.json: Removed.
        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js: Removed.
        Remove protocol snapshot and generated commands for iOS 7.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype._createPopoverContent):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._setBreakpoint):
        * UserInterface/Controllers/SourceMapManager.js:
        (WI.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/Instrument.js:
        (WI.Instrument.startLegacyTimelineAgent):
        * UserInterface/Models/ResourceTimingData.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):
        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource.prototype.requestContentFromBackend):
        * UserInterface/Protocol/CSSObserver.js:
        (WI.CSSObserver.prototype.regionLayoutUpdated): Deleted.
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.fromPayload):
        Remove code that was only necessary to support iOS 7.

2018-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support JSX (React) syntax highlighting
        https://bugs.webkit.org/show_bug.cgi?id=181607
        <rdar://problem/36442564>

        Reviewed by Brian Burg.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        (WI.fileExtensionForMIMEType):
        * UserInterface/Models/Resource.js:
        Support the jsx extension and mime types.

        * UserInterface/Main.html:
        * Scripts/update-codemirror-resources.rb:
        * UserInterface/External/CodeMirror/jsx.js: Added.
        Include new mode from CodeMirror@d8926768.

2018-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename "Query String" section as "Query String Parameters" for clarity
        https://bugs.webkit.org/show_bug.cgi?id=181464

        Reviewed by Darin Adler.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype.initialLayout):

2018-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused variable in WI.DebuggerSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=181517

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r218975): Web Inspector: Add back NavigationSidebarPanel initialization parameter used by SearchSidebarPanel (top overflow shadow)
        https://bugs.webkit.org/show_bug.cgi?id=181518
        <rdar://problem/36427197>

        Reviewed by Matt Baker.

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .overflow-shadow.top):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        Add back the initialization parameter still used by SearchSidebarPanel
        and add back its implementation. There were still references to
        dynamically update _topOverflowShadowElement in NavigationSidebarPanel.

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Incorrect check with WI.debuggableType
        https://bugs.webkit.org/show_bug.cgi?id=181515
        <rdar://problem/36425509>

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        This moved to WI.sharedApp a while ago.

2018-01-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: throttle recording slider updates
        https://bugs.webkit.org/show_bug.cgi?id=180839
        <rdar://problem/36057849>

        Reviewed by Joseph Pecoraro

        * UserInterface/Base/Utilities.js:
        Add Object.throttle and Function.cancelThrottle. Repeated calls to a
        function on a throttled object are delayed, so that the function isn't
        invoked more frequently than the specified delay value.

        For a description of throttling behavior see:
          - http://www.chrislondon.co/throttling-vs-debouncing
          - http://benalman.com/projects/jquery-throttle-debounce-plugin

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype.updateActionIndex):
        Throttle frequency of canvas snapshot creation to 200ms.
        (WI.RecordingContentView.prototype.hidden):
        Prevent trailing edge call after hiding the view.

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should not try to autocomplete subsections of a string
        https://bugs.webkit.org/show_bug.cgi?id=181461
        <rdar://problem/36369421>

        Reviewed by Brian Burg.

        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        (WI.CodeMirrorCompletionController.prototype._completeAtCurrentPosition):
        Disable autocompletion within strings.

2018-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r201855): Web Inspector: Should see "length" autocompletion suggestion on a string literal
        https://bugs.webkit.org/show_bug.cgi?id=181462
        <rdar://problem/36390699>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getCompletions):
        This is code that runs on the inspected target, which may have an old version of
        WebKit/JavaScriptCore, so don't use new syntax like this.

        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded):
        We intended to return the result by as a JSON value instead of a RemoteObject.

2018-01-09  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers sidebar shows popover on selection even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=181465

        Reviewed by Matt Baker.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        Have sidebar show itself if necessary before displaying popover.

2018-01-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Find next / previous within a resource content view does not have bouncy highlight when editor scrolls
        https://bugs.webkit.org/show_bug.cgi?id=181279
        <rdar://problem/36291097>

        Reviewed by Brian Burg.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._revealSearchResult):
        Reposition the bouncy highlight on scroll based on the CodeMirror
        line/ch position of the search result.

        (WI.TextEditor.prototype._removeBouncyHighlightElementIfNeeded):
        Track the bouncy highlight scroll handler in a member variable so that
        we always remember to remove it and don't leak scroll handlers.

2018-01-07  David Kilzer  <ddkilzer@apple.com>

        Enable -Wcast-qual for WebInspectorUI, WebKitLegacy, WebKit projects
        <https://webkit.org/b/181256>
        <rdar://problem/36281730>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Add -Wcast-qual.

2018-01-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version
        https://bugs.webkit.org/show_bug.cgi?id=181354
        <rdar://problem/35432817>

        Reviewed by Matt Baker.

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

2018-01-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic
        https://bugs.webkit.org/show_bug.cgi?id=180770

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.prototype.get contextType):
        (WI.Canvas.prototype.saveIdentityToCookie):
        (WI.Canvas.prototype.get frame): Deleted.

2018-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION (r225709): Web Inspector: CSS Source maps not loading
        https://bugs.webkit.org/show_bug.cgi?id=181314
        <rdar://problem/36177620>

        Reviewed by Brian Burg.

        * UserInterface/Controllers/SourceMapManager.js:
        (WI.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource.prototype.requestContentFromBackend):
        Correct this so that we only fall back to a reasonable frame id
        if we couldn't determine a frame id from earlier. Previously this
        was incorrectly clearing the frame id if we had gotten it earlier.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        Add SourceMap related files for tests.

2018-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: Capture Element Screenshot looks fuzzy
        https://bugs.webkit.org/show_bug.cgi?id=175734
        <rdar://problem/33803377>

        Reviewed by Joseph Pecoraro and Simon Fraser.

        Spruce up these functions a bit. They now optionally return a promise
        if no callback is supplied. They now can take either a WI.DOMNode or a node id.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager.prototype.querySelector):
        (WI.DOMTreeManager.prototype.querySelectorAll):

2018-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: add RemoteObject.fetchProperties and some basic tests for RemoteObject API
        https://bugs.webkit.org/show_bug.cgi?id=180945

        Reviewed by Joseph Pecoraro.

        Add a new method, fetchProperties, which async fetches an arbitrary list of properties
        from a RemoteObject. This is intended for writing tests and other quick evaluations,
        so it has some behaviors that are suitable in these situations:
        - If the evaluation throws an exception, the result will reject with that exception.
        - If there is a protocol error for some reason, the result will reject with an exception.
        - Non-string and non-number keys cause an exception, as this is probably not intended.
        - Does not accept a callback, returns a promise only. New code should use async.

        For full fidelity introspection of property descriptors, clients should use the existing
        getOwnPropertyDescriptor[s] class of methods.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.async.fetchProperties): Added.
        - Validate specified keys and remove duplicates.
        - Request properties one-by-one to avoid fetching all descriptors and dealing with previews.
        - Unwrap returned primitive values to avoid unnecessary munging in tests.

        (WI.RemoteObject.prototype.getProperty):
        - Rework this to return a promise if no callback was supplied.
        - Introduce stricter property type checking to avoid unintended mistakes.

        (WI.RemoteObject.prototype.callFunction):
        - Rework this to return a promise if no callback was supplied.
        - Turn thrown exceptions and protocol errors into rejected promises.

2018-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ⌘G / ⇧⌘G text search does not working after closing find banner
        https://bugs.webkit.org/show_bug.cgi?id=181280
        <rdar://problem/36291175>

        Reviewed by Matt Baker.

        * UserInterface/Views/ContentBrowser.js:
        (WI.ContentBrowser.prototype._findBannerDidHide):
        When the find banner is hidden trigger a new ContentView method,
        searchHidden instead of the destructive searchCleared. This allows
        most content views (text editors, DOM tree, Network Headers view)
        to keep their populated search results.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.prototype.searchHidden):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.searchHidden):
        By default searchHidden does nothing. The Console's LogContentView
        treats the find banner differently and clears its search results.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.searchCleared):
        Modernize some code while working in this area.

        * UserInterface/Views/Main.css:
        (.bouncy-highlight):
        Ensure black text on yellow background in the bouncy highlight. In the
        DOM Tree it could have been white if the find banner was closed.

2018-01-03  Ting-Wei Lan  <lantw44@gmail.com>

        Replace hard-coded paths in shebangs with #!/usr/bin/env
        https://bugs.webkit.org/show_bug.cgi?id=181040

        Reviewed by Alex Christensen.

        * Scripts/combine-resources.pl:
        * Scripts/copy-user-interface-resources-dryrun.rb:
        * Scripts/copy-user-interface-resources.pl:
        * Scripts/fix-worker-imports-for-optimized-builds.pl:
        * Scripts/remove-console-asserts-dryrun.rb:
        * Scripts/remove-console-asserts.pl:
        * Scripts/update-LegacyInspectorBackendCommands.rb:
        * Scripts/update-codemirror-resources.rb:
        * WebInspectorUI.vcxproj/build-webinspectorui.pl:

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Log Value" context menu is sometimes unavailable
        https://bugs.webkit.org/show_bug.cgi?id=181278
        <rdar://problem/36281649>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ObjectPreviewView.css:
        (.object-preview > .title):
        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree.expanded > .title):
        Make the expanded object title information 16px tall to match ObjectTree
        tree element row heights. This eliminates the floating console message
        location from overlapping the first ObjectTree's TreeElement and causing
        truncation and other behavior issues (like Context Menu identification).

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: RTL - DOM Tree Element selection doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=181275
        <rdar://problem/36290450>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromEvent):
        Provide a better explanation for why we are making the `x` adjustment here,
        to detect the inner most tree element along the horizontal. Fix the algorithm
        for RTL, since the intent is to adjust to the trailing edge of the container
        which is on the opposite side in RTL.

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Find banner sometimes does not work (when already populated and shown for first time on resource)
        https://bugs.webkit.org/show_bug.cgi?id=181255
        <rdar://problem/36248855>

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set string):
        Defer any early searches until the initial content of a TextEditor has been set.
        Such searches can happen when the FindBanner already has content when a
        ContentView is first opened and needs to load its content from the backend.
        Further, even though the content may be loaded from the backend before the
        search results, microtask hops might cause the content to get to the TextEditor
        after the search results.

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: Web Inspector: Debugger tab doesn't restore selected resource on reload
        https://bugs.webkit.org/show_bug.cgi?id=181253
        <rdar://problem/36280564>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        Add braces to ensure the trailing else is actually trailing the outer
        chain as it was intended to be.

2018-01-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clicking source location link in Console unexpectedly jumps to Network tab
        https://bugs.webkit.org/show_bug.cgi?id=181229
        <rdar://problem/36075219>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Cleanup linkifyURLAsNode. Ignore Search tab in generic handlePossibleLinkClick
        when not already in the Search tab.

        * UserInterface/Views/CallFrameView.js:
        (WI.CallFrameView):
        Ignore Search and Network tab in CallFrame links.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):
        Improve style.

== Rolled over to ChangeLog-2018-01-01 ==
