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

        Web Inspector: Audit: make it easier to jump to any returned DOM node in the Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=197470
        <rdar://problem/50466774>

        Reviewed by Joseph Pecoraro.

        Right now, the only way to jump to the Elements tab for any DOM nodes returned by an audit
        is to context menu and "Reveal in DOM Tree". Providing a more visible/discoverable way to
        jump to the Elements tab will help developers diagnose issues easier.

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > section table):

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.set showGoToArrow): Added.
        (WI.DOMTreeElement.prototype._buildTagDOM):
        (WI.DOMTreeElement.prototype._nodeTitleInfo):
        Provide a way to insert a go-to arrow right after the:
         - open tag, if the close tag is rendered on a separate line
         - close tag, if the close tag is rendered on the same line

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        Allow `DOMTreeOutline` to be non-selectable.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom:not(.non-selectable):focus li:matches(.selected, .hovered) .selection-area): Added.
        (.tree-outline.dom:not(.non-selectable) li.hovered:not(.selected) .selection-area): Added.
        (.tree-outline.dom li .html-tag ~ .go-to-arrow): Added.
        (.tree-outline.dom li:not(.hovered) .html-tag ~ .go-to-arrow): Added.
        (.tree-outline.dom:focus li:matches(.selected, .hovered) .selection-area): Deleted.
        (.tree-outline.dom li.hovered:not(.selected) .selection-area): Deleted.
        Ensure that hovering a non-selectable node doesn't change the background color.

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 ==
