REGRESSION(r236705): Web Inspector: wrong text color for selected DataGrid row
[WebKit-https.git] / Source / WebInspectorUI / ChangeLog
index 6b7f7cb..c6d7d3c 100644 (file)
+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