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

        Web Inspector: Dark Mode: inactive tab bar tint is too light
        https://bugs.webkit.org/show_bug.cgi?id=198546

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: remove RemoteObject.prototype.getPropertyDescriptorsAsObject
        https://bugs.webkit.org/show_bug.cgi?id=198395

        Reviewed by Matt Baker.

        When calling `RemoteObject.prototype.getPropertyDescriptorsAsObject`, if one of the returned
        property descriptors is named `__proto__`, it will replace the `__proto__` of the plain
        object created for that function with the `WI.PropertyDescriptor` itself, altering the
        prototype chain.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.getPropertyDescriptorsAsObject): Deleted.
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run.async parseResponse.async resultArrayForEach):
        * UserInterface/Views/ErrorObjectView.js:
        (WI.ErrorObjectView.prototype.update):

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

        Web Inspector: Debugger: sidebar should always reveal active call frame when hitting a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=198228
        <rdar://problem/46719447>

        Reviewed by Devin Rousso.

        Reveal the active call frame TreeElement when call frames change. Refreshing
        the current target's ThreadTreeElement children is insufficient, since
        the sidebar panel content may have been scrolled.

        This patch also introduces a workaround to prevent the DetailsSection header
        element, which has sticky positioning, from covering a revealed TreeElement.
        This can be the case when the TreeElement being revealed is at the topmost edge
        of the scrolled content element.

        * UserInterface/Base/Utilities.js:

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

        * UserInterface/Views/DetailsSection.js:
        (WI.DetailsSection.prototype.get element):
        (WI.DetailsSection.prototype.get headerElement):
        (WI.DetailsSection.prototype.get identifier):

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

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.reveal):
        * UserInterface/Views/TreeOutline.js:

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

        Web Inspector: propagate whether to show prototype information to subobject views
        https://bugs.webkit.org/show_bug.cgi?id=194929

        Reviewed by Matt Baker.

        Add a way to mark the `ObjectTreeView` as holding a JSON value, which extends
        `showOnlyProperties` to also hide the prototype of all held values (e.g. children).

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView.prototype.showOnlyJSON): Added.
        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree.properties-only.json-only .object-tree-property .prototype-property): Added.

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshAssociatedData):
        * UserInterface/Views/JSONResourceContentView.css:
        (.content-view.resource.json .object-tree .prototype-property): Deleted.
        * UserInterface/Views/JSONResourceContentView.js:
        (WI.JSONResourceContentView.prototype.contentAvailable):

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

        Web Inspector: CSS Changes: modifications aren't shared for rules that match multiple elements
        https://bugs.webkit.org/show_bug.cgi?id=195264
        <rdar://problem/48550023>

        Reviewed by Devin Rousso.

        This patch fixes several cases when the diff was incorrect.

        1. Perform diff based on CSSProperty content (name, value, and enabled property) instead
           of strict equality of CSSProperty instances.

        2. Copy all initial CSSProperty instances of CSSStyleDeclaration on 1st edit.
           This removes the need to update `properties` on every single edit.

        3. Do full diff to display modified property markers (green background) in Rules panel.
           This fixes a few cases when the markers were inaccurate. E.g. a newly added property
           matches removed property - no need to show the green background.

        * UserInterface/Base/Utilities.js:
        (Array.diffArrays):
        Allow repeating items in the arrays.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager.prototype.getModifiedStyle):
        (WI.CSSManager.prototype.removeModifiedStyle):
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty):
        (WI.CSSProperty.prototype.get modified):
        (WI.CSSProperty.prototype.set modified):
        (WI.CSSProperty.prototype.equals):
        (WI.CSSProperty.prototype.clone):
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        (WI.CSSProperty.prototype._markModified):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.markModified):
        (WI.CSSStyleDeclaration.prototype.updatePropertiesModifiedState):
        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype._createRuleElement):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        * UserInterface/Views/SpreadsheetStyleProperty.js:

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

        Web Inspector: Timelines: CPU: gray (?) and (x) should be white
        https://bugs.webkit.org/show_bug.cgi?id=198394

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        Remove the dark mode override for `--gray-foreground-color`, as the default `white` is a
        better contrast.

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

        Web Inspector: Audit: there should be a default test for WebInspectorAudit.Resources functionality
        https://bugs.webkit.org/show_bug.cgi?id=196710
        <rdar://problem/49712348>

        Reviewed by Joseph Pecoraro.

        Previously, there was no way to return data from Audit that wasn't a DOM node, a DOM
        attribute (which wasn't "shown" anywhere, as it would highlight that attribute on any
        returned DOM nodes), or an error string.

        In order for Audits to be more flexible with the types of things they test, there needs to
        be a way for other types of data to be sent back and displayed in the Audit tab.

        This patch makes it so that an Audit result can now contain other keys/values that are all
        expected to be JSON serializable. It will take all of the non-"special" (e.g. "domNodes" or
        "errors") keys/values and display them as object trees. This way, any JSON serializable data
        can be sent with the result and be displayed in the Audit tab.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase.prototype.async setup):
        (WI.AuditTestBase.prototype.clearResult):
        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestCase.prototype.clearResult):
        (WI.AuditTestCase.prototype._updateResult):
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):
        (WI.AuditTestCase.prototype.async run.async parseResponse):
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty):
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty.addErrorForValueType):
        (WI.AuditTestCase.prototype.async run.async parseResponse.async resultArrayForEach):
        (WI.AuditTestCase.prototype.async run.async parseResponse.inspectedPage_stringify): Added.
        Rename `ResultCleared` to `ResultChanged` so that it can (semantically) be used whenever a
        new result is set in addition to when an existing one is cleared. This is needed so that
        `AuditTestCaseContentView` will refresh each time the result changes, instead of only in the
        first `layout()` after the last result was cleared.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload):
        (WI.AuditTestCaseResult.prototype.toJSON):
        Drive-by: fix the check for optional `data` values to still warn if the value is `null`.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype._addDefaultTests):
        Add a default test "Demo Audit > Result Data > data-custom" as an example how to write an
        Audit that returns custom data, as well as how that custom data is shown in the Audit tab.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView.prototype.shown):
        (WI.AuditTestContentView.prototype.handleResultChanged): Added.
        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView):
        (WI.AuditTestCaseContentView.prototype.layout):
        (WI.AuditTestCaseContentView.prototype.handleResultChanged): Added.
        Preserve the UI for each section across `layout()`s, so that expand/collapse states aren't
        reset each time the user changes the selected Audit.

        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > section table > tr > td + td): Added.
        Drive-by: ensure that the "index" table column is never larger than it needs to be.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype._handleTestResultChanged): Added.
        (WI.AuditTreeElement.prototype._handleTestResultCleared): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

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

        Web Inspector: Timelines: spacing around pie chart is different between CPU and Memory
        https://bugs.webkit.org/show_bug.cgi?id=198299

        Reviewed by Matt Baker.

        "Style Resolution" is a much longer string than any of the legend strings in the Memory
        timeline, and causes the CPU timeline legend to shift as a result.

        Rename "Script" to "JavaScript" and "Style Resolution" to "Styles" so that the strings are
        roughly the same length between the CPU and Memory timelines, meaning that they will appear
        in the same spot with similar sizing.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.displayNameForSampleType):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype._computeStatisticsData):
        Drive-by: remove the `WI` prefix from all `CPUTimelineView.SampleType` since it's within the
        same class.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-javascript): Added.
        (.timeline-view.cpu > .content > .overview .legend > .row > .swatch.sample-type-script): Deleted.
        Drive-by: move the `.overview` rules lower to be in the same area as the `.overview *` rules.

        * UserInterface/Views/MemoryTimelineView.css:
        (.timeline-view.memory > .content > .overview):
        Drive-by: remove duplicate CSS rule.

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Devin Rousso.

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

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

        Web Inspector: Overlay: don't show setting for showing rulers/guides during element selection if it's not supported
        https://bugs.webkit.org/show_bug.cgi?id=198221

        Reviewed by Joseph Pecoraro.

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

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

        Web Inspector: prevent stripping `console.assert` if it's used inside a string
        https://bugs.webkit.org/show_bug.cgi?id=198207

        Reviewed by Joseph Pecoraro.

        * Scripts/remove-console-asserts.pl:
        (removeConsoleAssertsInFile):

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

        Web Inspector: Overlay: rulers/guides should be shown whenever element selection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=198088

        Reviewed by Timothy Hatcher.

        When trying to "measure" the absolute position (to the viewport) or relative position (to
        another element) of a given element, often the easiest way is to enable Element Selection
        and Show Rulers at the same time.

        This can have the undesired "side-effect" of having the rulers be always present, even when
        not highlighting any nodes.

        The ideal functionality is to allow the rulers/guides to be shown when element selection is
        active and a node is hovered, regardless of whether "Show Rulers" is enabled.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Add a setting for controlling whether rulers/guides are shown during element selection.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.set inspectModeEnabled):
        Pass the setting value as an optional parameter when calling `DOM.setInspectModeEnabled`.

        * Localizations/en.lproj/localizedStrings.js:

2019-05-23  Commit Queue  <commit-queue@webkit.org>

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

        Inspector appears blank, again. (Requested by NVI on #webkit).

        Reverted changeset:

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

2019-05-23  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused CSS class "offset-sections"
        https://bugs.webkit.org/show_bug.cgi?id=198194
        <rdar://problem/51080111>

        Reviewed by Devin Rousso.

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

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

        Web Inspector: clicking a source link should never open the Network tab
        https://bugs.webkit.org/show_bug.cgi?id=197951

        Reviewed by Timothy Hatcher.

        The preview panel in the Network tab is really meant to be just that; a preview.

        Opening resources in the preview panel is not a great experience, as the Network tab doesn't
        have as much of the information one would expect when viewing a resource (namely the
        Resource details sidebar panel).

        Navigating within the Network tab also completely wipes out the current "state" of what
        you're looking at (e.g. which panel), which could be unexpected.

        The only way this could happen previously was if the Resources/Debugger/Sources tabs had
        never been active at any point in the past. Selecting one of those tabs and then clicking on
        an initiator link in the Network tab would re-select that other tab.

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

        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._refreshSummarySection):

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

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

        Reviewed by Devin Rousso.

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

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

        Web Inspector: provide a debug setting button to reset all settings for easier testing/presentation
        https://bugs.webkit.org/show_bug.cgi?id=195777

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Setting.js:
        (WI.Setting.reset): Added.

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

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

        Web Inspector: Storage tab crashes easily when adding new local/session storage entries.
        https://bugs.webkit.org/show_bug.cgi?id=198004

        Reviewed by Ross Kirsling.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._startEditingNodeAtColumnIndex):
        Force a layout in the case that a new `PlaceholderDataGridNode` was added to the end of the
        `DataGrid` as part of the `editCallback`. Web Inspector won't crash without this, but it
        won't properly select/focus the next row when tabbing from the last column to the next row.

        (WI.DataGrid.prototype._editingCommitted):
        Save the new value of the column before removing the editing styles, as that refreshes the
        `DataGridNode`. If the new value isn't saved, the old value is used during the refresh.

        (WI.DataGrid.prototype._keyDown):
        Drive-by: use `get element` instead of using the member variable directly, as the underlying
        value might not have been initialized yet.

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

        Web Inspector: Decrease spacing before and after tooltip paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=198024

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Popover.css:
        (.popover p): Added.
        (.popover p + p): Added.

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

        Web Inspector: Timelines: CPU/memory timeline bars sometimes don't draw correctly and jump around on scrolling
        https://bugs.webkit.org/show_bug.cgi?id=197440
        <rdar://problem/46886315>

        Reviewed by Joseph Pecoraro.

        When drawing the Memory/CPU graphs, we need to know about the record immediately before/after
        what's overlapping the visible range so that the graph correctly slopes off the screen.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsInTimeRange):
        (WI.Timeline.prototype.recordsOverlappingTimeRange): Deleted.
        Merge `recordsOverlappingTimeRange` into `recordsInTimeRange` by accepting an options object
        that determines whether to include the record before/after the first/last record that are
        at all overlapping the range.

        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord):
        (WI.CPUTimelineRecord.get samplingRatePerSecond): Added.
        (WI.CPUTimelineRecord.prototype.adjustStartTimeToLastRecord): Added.
        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord):
        (WI.MemoryTimelineRecord.get samplingRatePerSecond): Added.
        (WI.MemoryTimelineRecord.prototype.adjustStartTimeToLastRecord): Added.
        Adjust the `startTime` of the record by the sampling rate (which is 500ms).

        * UserInterface/Models/CPUTimeline.js: Added.
        (WI.CPUTimeline.prototype.addRecord):
        * UserInterface/Models/MemoryTimeline.js:
        (WI.MemoryTimeline.prototype.addRecord): Added.
        Adjust the `startTime` of the new record to be equal to the `endTime` of the last record.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._recordSelected):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._computeStatisticsData):
        (WI.CPUTimelineView.prototype._attemptSelectIndicatatorTimelineRecord):
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        (WI.CPUTimelineOverviewGraph.prototype._handleChartClick):
        (WI.CPUTimelineOverviewGraph.prototype.get samplingRatePerSecond): Deleted.
        (WI.CPUTimelineOverviewGraph.prototype.layout.yScaleForRecord): Deleted.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Zalan Bujtas.

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

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

        * UserInterface/External/CodeMirror/css.js:

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Unreviewed, rolling out r244952.

        Caused inspector to appear blank.

        Reverted changeset:

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        * Configurations/Base.xcconfig:

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

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

        Reviewed by Alex Christensen.

        * Configurations/Version.xcconfig:

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

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

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

        Unreviewed, fix typo in a comment.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Simon Fraser.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.get capturingState): Added.
        (WI.TimelineManager.prototype.reset):
        (WI.TimelineManager.prototype.get activeRecording):
        (WI.TimelineManager.prototype.set autoCaptureOnPageLoad):
        (WI.TimelineManager.prototype.isCapturing):
        (WI.TimelineManager.prototype.startCapturing):
        (WI.TimelineManager.prototype.stopCapturing):
        (WI.TimelineManager.prototype.processJSON):
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype.autoCaptureStarted):
        (WI.TimelineManager.prototype.eventRecorded):
        (WI.TimelineManager.prototype.pageDOMContentLoadedEventFired):
        (WI.TimelineManager.prototype.pageLoadEventFired):
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype.memoryTrackingUpdated):
        (WI.TimelineManager.prototype.memoryTrackingCompleted):
        (WI.TimelineManager.prototype.heapTrackingStarted):
        (WI.TimelineManager.prototype.heapTrackingCompleted):
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._updateCapturingState): Added.
        (WI.TimelineManager.prototype._processRecord):
        (WI.TimelineManager.prototype._processEvent):
        (WI.TimelineManager.prototype._loadNewRecording):
        (WI.TimelineManager.prototype._addRecord):
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._legacyAttemptStartAutoCapturingForFrame):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype._garbageCollected):
        (WI.TimelineManager.prototype._memoryPressure):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):
        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent):
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged):
        (WI.TimelineManager.prototype.unloadRecording): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStopped): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStopped): Deleted.

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

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

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

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

        Unreviewed, rolling out r244158.

        Casued 8 inspector/timeline/ test failures.

        Reverted changeset:

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.get capturingState): Added.
        (WI.TimelineManager.prototype.reset):
        (WI.TimelineManager.prototype.get activeRecording):
        (WI.TimelineManager.prototype.set autoCaptureOnPageLoad):
        (WI.TimelineManager.prototype.isCapturing):
        (WI.TimelineManager.prototype.startCapturing):
        (WI.TimelineManager.prototype.stopCapturing):
        (WI.TimelineManager.prototype.processJSON):
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype.autoCaptureStarted):
        (WI.TimelineManager.prototype.eventRecorded):
        (WI.TimelineManager.prototype.pageDOMContentLoadedEventFired):
        (WI.TimelineManager.prototype.pageLoadEventFired):
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype.memoryTrackingUpdated):
        (WI.TimelineManager.prototype.memoryTrackingCompleted):
        (WI.TimelineManager.prototype.heapTrackingStarted):
        (WI.TimelineManager.prototype.heapTrackingCompleted):
        (WI.TimelineManager.prototype.heapSnapshotAdded):
        (WI.TimelineManager.prototype._updateCapturingState): Added.
        (WI.TimelineManager.prototype._processRecord):
        (WI.TimelineManager.prototype._processEvent):
        (WI.TimelineManager.prototype._loadNewRecording):
        (WI.TimelineManager.prototype._addRecord):
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._legacyAttemptStartAutoCapturingForFrame):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._mainResourceDidChange):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype._garbageCollected):
        (WI.TimelineManager.prototype._memoryPressure):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):
        (WI.TimelineManager.prototype.scriptProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent):
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged):
        (WI.TimelineManager.prototype.unloadRecording): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.programmaticCaptureStopped): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStarted): Deleted.
        (WI.TimelineManager.prototype.scriptProfilerProgrammaticCaptureStopped): Deleted.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        (WI.DOMTreeOutline.prototype.selectionControllerPreviousSelectableItem):

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Brian Burg.

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

        Reviewed by Zalan Bujtas.

        This CSS property is nonstandard and not used.

        * UserInterface/Models/CSSKeywordCompletions.js:

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

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

        Reviewed by Dean Jackson.

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

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

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

        Reviewed by Joseph Pecoraro.

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Daniel Bates.

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

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

        To change the LTO setting when building locally:

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

        * Configurations/Base.xcconfig:

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

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

        Reviewed by Timothy Hatcher.

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

        * UserInterface/Test.html:
        Include FileUtilities.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/NativeFunctionParameters.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

        Reviewed by Antoine Quint.

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

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

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

        Reviewed by Alexey Proskuryakov.

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

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Matt Baker.

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Matt Baker.

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Matt Baker.

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

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

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

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

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

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

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

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

        Reviewed by Myles C. Maxfield.

        Name updates for Web GPU renaming in inspector.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

        * UserInterface/Main.html:
        Combined files.

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

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Matt Baker.

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

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

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

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

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

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Joseph Pecoraro.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

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

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

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Timothy Hatcher.

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

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

        * Localizations/en.lproj/localizedStrings.js:

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

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

        Reviewed by Timothy Hatcher.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

        Reviewed by Matt Baker.

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

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

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

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Reviewed by Matt Baker.

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

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

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

        Reviewed by Devin Rousso.

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

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

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

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

        Web Inspector: Reload actions from second level inspector should properly reload the inspected inspector
        https://bugs.webkit.org/show_bug.cgi?id=195306

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Provide a better reload for a Nth level inspector.

        * UserInterface/Debug/Bootstrap.js:
        (WI.runBootstrapOperations):
        Simplify, should not need to check for InspectorFrontendHost.

2019-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: MediaSource logging not initialized properly
        https://bugs.webkit.org/show_bug.cgi?id=195307

        Reviewed by Matt Baker.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.initializeLogChannels):
        Typo caused undefined to be included and trigger assertions.

2019-03-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSS: class input isn't fully centered
        https://bugs.webkit.org/show_bug.cgi?id=195297

        Reviewed by Matt Baker.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input):
        (body[dir=ltr] .sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input): Deleted.
        (body[dir=rtl] .sidebar > .panel.details.css-style > .content ~ .class-list-container > .new-class > .class-name-input): Deleted.

2019-03-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: show the version number in the UI
        https://bugs.webkit.org/show_bug.cgi?id=195292

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype._updateNoAuditsPlaceholder):
        Fix the logic for showing a placeholder when editing or with only disabled tests.

        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit > .content > .message-text-view): Added.
        (.audit-version): Added.
        Don't obstruct the "Edit" button when showing a placeholder.

        * Localizations/en.lproj/localizedStrings.js:

2019-03-04  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Data Bindings / Associated Data for nodes
        https://bugs.webkit.org/show_bug.cgi?id=195290
        <rdar://problem/48304019>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New title and empty message strings.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (.sidebar > .panel.dom-node-details .details-section.dom-node-associated-data > .content .row):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WI.DOMNodeDetailsSidebarPanel.prototype.initialLayout):
        (WI.DOMNodeDetailsSidebarPanel.prototype.layout):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshDataBindings):
        (WI.DOMNodeDetailsSidebarPanel.prototype._refreshAssociatedData):
        (WI.DOMNodeDetailsSidebarPanel.prototype._attributesChanged):
        New Node sections only enabled for ITMLKit `WI.sharedApp.hasExtraDomains`.

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView):
        Provide a way, like TreeElement/View to access the ObjectTreeView from an element.

2019-03-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: protocol error on first open
        https://bugs.webkit.org/show_bug.cgi?id=195059
        <rdar://problem/48407871>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.initializeTarget):
        (WI.CanvasManager.prototype.static supportsRecordingAutoCapture):
        (WI.CanvasManager.prototype.setRecordingAutoCaptureFrameCount):
        If targets aren't available, wait until they are and then set the auto-capture frame count.

2019-03-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Toggling Timeline "Stop when page loads" to on should stop (immediately or soon) any active recording if already past the load event
        https://bugs.webkit.org/show_bug.cgi?id=195239

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):

2019-03-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Unexpectedly frequent flashing of DOM node attributes
        https://bugs.webkit.org/show_bug.cgi?id=148049
        <rdar://problem/22296830>

        Reviewed by Joseph Pecoraro.

        Save a timestamp of when the CSS animation began, so that if the attribute's node is replaced,
        we can "resume" the CSS animation at the same point with the attribute's new node.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.attributeDidChange):
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        (WI.DOMTreeElement.prototype._createModifiedAnimation):
        (WI.DOMTreeElement.prototype._markNodeChanged): Deleted.
        (WI.DOMTreeElement.prototype._nodeChangedAnimationEnd): Deleted.
        (WI.DOMTreeElement.prototype._fireDidChange): Deleted.

2019-03-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: DOM, URL, and Event breakpoints don't grey out when all breakpoints are disabled
        https://bugs.webkit.org/show_bug.cgi?id=195170
        <rdar://problem/48478193>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.onattach):
        (WI.DOMBreakpointTreeElement.prototype.ondetach):
        (WI.DOMBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/URLBreakpointTreeElement.js:
        (WI.URLBreakpointTreeElement):
        (WI.URLBreakpointTreeElement.prototype.onattach):
        (WI.URLBreakpointTreeElement.prototype.ondetach):
        (WI.URLBreakpointTreeElement.prototype._updateStatus):
        Remove the `"resolved"` class when the global "breakpoints enabled" state is changed.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged): Added.
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._resolveURLBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint.breakpointUpdated): Deleted.
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint.breakpointUpdated): Deleted.
        * UserInterface/Models/DOMBreakpoint.js:
        (WI.DOMBreakpoint):
        (WI.DOMBreakpoint.deserialize): Added.
        (WI.DOMBreakpoint.prototype.set disabled):
        (WI.DOMBreakpoint.prototype.set domNodeIdentifier):
        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint.deserialize): Added.
        (WI.EventBreakpoint.prototype.set disabled):
        (WI.EventBreakpoint.fromPayload): Deleted.
        * UserInterface/Models/URLBreakpoint.js:
        (WI.URLBreakpoint.deserialize): Added.
        (WI.URLBreakpoint.prototype.set disabled):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype._handleDOMBreakpointDisabledStateChanged): Added.
        (WI.DOMTreeContentView.prototype._handleDOMBreakpointDOMNodeChanged): Added.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleDOMBreakpointResolvedStateChanged): Added.
        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDOMBreakpointResolvedStateChanged): Added.
        Drive-by: rename all events with the name `*DidChange` to `*Changed`.
        Drive-by: create static `deserialize` helper functions.

2019-03-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Sources: breakpoints should be disabled when an audit is running
        https://bugs.webkit.org/show_bug.cgi?id=195105
        <rdar://problem/48441373>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js:
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.prototype.closed):
        (WI.SourcesNavigationSidebarPanel.prototype._updateTemporarilyDisabledBreakpointsButtons): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped):
        (WI.SourcesNavigationSidebarPanel.prototype._handleAuditManagerTestScheduled): Added.
        (WI.SourcesNavigationSidebarPanel.prototype._handleAuditManagerTestCompleted): Added.
        * UserInterface/Views/SourcesNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.sources > .content > .warning-banner + .warning-banner): Added.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):

2019-03-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Debugger: don't enable breakpoints when source location changes
        https://bugs.webkit.org/show_bug.cgi?id=195081
        <rdar://problem/48422701>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._breakpointDisplayLocationDidChange):
        (WI.DebuggerManager.prototype._breakpointEditablePropertyDidChange):

2019-03-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage - Energy Impact Section
        https://bugs.webkit.org/show_bug.cgi?id=195151

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        New strings and resources.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content .subtitle > .info):
        (@media (prefers-color-scheme: dark)):
        (.energy-info-popover-content):
        (.timeline-view.cpu > .content > .overview > .divider):
        (body[dir=ltr] .timeline-view.cpu > .content > .overview > .divider):
        (body[dir=rtl] .timeline-view.cpu > .content > .overview > .divider):
        (.timeline-view.cpu :matches(.area-chart, .stacked-area-chart) svg > path):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.low):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.medium):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > path.high):
        (.timeline-view.cpu .gauge-chart:not(.empty) > svg > polygon.needle):
        (.timeline-view.cpu .energy):
        (.timeline-view.cpu .energy .energy-impact):
        (.timeline-view.cpu .energy .energy-impact.low):
        (.timeline-view.cpu .energy .energy-impact.medium):
        (.timeline-view.cpu .energy .energy-impact.high):
        (.timeline-view.cpu .energy .energy-impact-number):
        Styling the chart and text for the different energy impact levels.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.get lowEnergyValue):
        (WI.CPUTimelineView.prototype.get highEnergyValue):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._layoutEnergyChart.mapWithBias):
        (WI.CPUTimelineView.prototype._layoutEnergyChart.valuesForGauge):
        (WI.CPUTimelineView.prototype._layoutEnergyChart):
        (WI.CPUTimelineView.prototype._clearEnergyImpactText):
        New gauge chart and associated popover.
        We do a bit of biasing of the data for each of the sections
        in the gauge chart. Each section biases toward the cap of the
        section so that:
          - we encourage lower power usage (sub 3%)
          - the gauge needle quickly moves past the low value of a range

        * UserInterface/Views/GaugeChart.css: Added.
        (.gauge-chart):
        (body[dir=rtl] .gauge-chart):
        (.gauge-chart > svg > path,):
        (.gauge-chart > svg > polygon.needle):
        (.gauge-chart.empty > svg > polygon.needle):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/GaugeChart.js: Added.
        (WI.GaugeChart.prototype.get size):
        (WI.GaugeChart.prototype.get segments):
        (WI.GaugeChart.prototype.get value):
        (WI.GaugeChart.prototype.set value):
        (WI.GaugeChart.prototype.clear):
        (WI.GaugeChart.prototype.initialLayout):
        (WI.GaugeChart.prototype.layout):
        (WI.GaugeChart.prototype._validateSegments):
        (WI.GaugeChart.prototype._createSegmentPathData):
        GaugeChart with variable number of sections and a
        current value needle. It has a bit of customization
        when drawing the arc at the start of each segment.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        New CPU colors for the different energy impact levels.

2019-03-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Data grid border colors don't match accent colors
        https://bugs.webkit.org/show_bug.cgi?id=195232

        Reviewed by Matt Baker.

        * UserInterface/Views/DataGrid.css:
        (.data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=ltr] .data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=rtl] .data-grid:focus tr.selected td:not(:last-child)):

2019-02-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: don't show the auto-stop UI when not inspecting a page
        https://bugs.webkit.org/show_bug.cgi?id=195192

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.get navigationItems):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage: Worker thread that dies might stay at a high value forever
        https://bugs.webkit.org/show_bug.cgi?id=195148

        Reviewed by Matt Baker.

        * UserInterface/Views/CPUTimelineView.js:
        (CPUTimelineView.prototype.layout):
        Handle workers dieing or at least zeroing out between records.

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline - Make Threads section expandable / collapsable
        https://bugs.webkit.org/show_bug.cgi?id=195085

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        New setting to save the Threads expanded/collapsed state.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .details > .subtitle):
        (.timeline-view.cpu > .content > .details > details > .subtitle.threads):
        (.timeline-view.cpu > .content > .details > .subtitle): Deleted.
        (.timeline-view.cpu > .content > .details > .subtitle.threads): Deleted.
        Ensure subtitle styles apply now that one of the subtitles is inside
        of a <details> / <summary> element.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.initialLayout):
        Make the Threads group a <details> / <summary> expandable / collapsed element.

        * UserInterface/Views/Main.css:
        (summary):
        (summary::-webkit-details-marker):
        Default styles for <summary>.

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: View.removeSubview not removing the element properly when not parented
        https://bugs.webkit.org/show_bug.cgi?id=195146

        Reviewed by Matt Baker.

        * UserInterface/Views/View.js:
        (WI.View.prototype.removeSubview):
        Since the element may not be a direct child, just use Element.prototype.remove.

2019-02-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Debugger: disabled breakpoint color is too dark
        https://bugs.webkit.org/show_bug.cgi?id=195103
        <rdar://problem/48440678>

        Reviewed by Devin Rousso.

        Increase the disabled breakpoint contrast, as well as the contrast between
        disabled and auto-continue breakpoints. Disabled breakpoints stand out by
        being somewhat brighter and less saturated. Using the same strategy for
        auto-continue breakpoints is too subtle to provide sufficient contrast.

        We can adopt the technique used by Xcode, and overlay a white triangle
        marker on the breakpoint arrow to indicate an auto-continue breakpoint.

        * UserInterface/Views/BreakpointTreeElement.css:
        (.item.breakpoint .status > .status-image):
        (.item.breakpoint.selected .status > .status-image.resolved):
        Add white outline to make selected breakpoint button stand out.
        (.item.breakpoint .status > .status-image.auto-continue::after):
        (.item.breakpoint .status > .status-image.disabled):
        (.item.breakpoint .status > .status-image.auto-continue): Deleted.


        * UserInterface/Views/DOMTreeContentView.css:
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.subtree):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled,): Deleted.

        * UserInterface/Views/TextEditor.css:
        (.text-editor > .CodeMirror .has-breakpoint .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-auto-continue:not(.execution-line.primary) .CodeMirror-linenumber::after):
        (.text-editor > .CodeMirror .breakpoint-disabled .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-auto-continue:not(.breakpoint-disabled) .CodeMirror-linenumber::before): Deleted.

        * UserInterface/Views/Variables.css:
        (:root):
        Add breakpoint color variables to use across all breakpoint controls.
        Use system colors if available, otherwise fall back to hard-coded values
        based on sampling the default (blue) accent color on Mojave.

2019-02-28  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Control-Space should force completion
        https://bugs.webkit.org/show_bug.cgi?id=194796
        <rdar://problem/48180822>

        Reviewed by Matt Baker.

        Pressing Control-Space when editing CSS property should show completion popover,
        even if the value is empty.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.prototype.startsWith):
        Performance optimization: exit early when `prefix` is empty.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._nameCompletionDataProvider):
        (WI.SpreadsheetStyleProperty.prototype._valueCompletionDataProvider):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleKeyDown):
        (WI.SpreadsheetTextField.prototype._updateCompletions):

2019-02-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: enabling auto-capture if the frame count is empty triggers an assertion
        https://bugs.webkit.org/show_bug.cgi?id=195060

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureCheckedDidChange):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Revert -webkit-border-end changes that are unreliable
        https://bugs.webkit.org/show_bug.cgi?id=195149

        Reviewed by Matt Baker.

        * UserInterface/Views/CPUUsageIndicatorView.css:
        (.cpu-usage-indicator-view > .details):
        (body[dir=ltr] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .details):
        * UserInterface/Views/CPUUsageStackedView.css:
        (.cpu-usage-stacked-view > .details):
        (body[dir=ltr] .cpu-usage-stacked-view > .details):
        (body[dir=rtl] .cpu-usage-stacked-view > .details):
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view > .details):
        (body[dir=ltr] .cpu-usage-view > .details):
        (body[dir=rtl] .cpu-usage-view > .details):
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (body[dir=ltr] .memory-category-view > .details):
        (body[dir=rtl] .memory-category-view > .details):

2019-02-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cleanup some Chart code
        https://bugs.webkit.org/show_bug.cgi?id=195147

        Reviewed by Matt Baker.

        * UserInterface/Views/RangeChart.js:
        (WI.RangeChart.prototype.layout):
        (WI.RangeChart):
        * UserInterface/Views/StackedColumnChart.js:
        (WI.StackedColumnChart.prototype.layout):
        (WI.StackedColumnChart):

2019-02-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a new Scanner TimelineMarker to show up when mousing over TimelineView graphs
        https://bugs.webkit.org/show_bug.cgi?id=195079

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        (Note.prototype.enclosingNodeOrSelfWithClassInArray):
        Helper for a set of classes.

        * UserInterface/Models/TimelineMarker.js:
        Add a new marker type, "Scanner".

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineView.prototype._handleGraphMouseMove):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView):
        (WI.MemoryTimelineView.prototype._graphPositionForMouseEvent):
        (WI.MemoryTimelineView.prototype._handleGraphMouseMove):
        Update a scanner time when mousing over various graphs that span the entire time range.
        These use the containing graph element because there was a single pixel between
        adjacent graphs which would cause the scanner to flicker because the mouse event target
        was not an svg element.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype.hidden):
        (WI.TimelineOverview.prototype.updateScannerTime):
        (WI.TimelineOverview.prototype.clearScanner):
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._handleTimelineViewScannerTimeDidChange):
        (WI.TimelineRecordingContentView.prototype._handleTimelineViewScannerDidClear):
        Update the overview's ruler with scanner changes.

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .marker.scanner):
        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler):
        (WI.TimelineRuler.prototype.clearMarkers):
        (WI.TimelineRuler.prototype.updateScannerTime):
        (WI.TimelineRuler.prototype.clearScanner):
        (WI.TimelineRuler.prototype._updateMarkers):
        Have a special scanner marker that updates.

        * UserInterface/Views/TimelineView.js:
        New events that a TimelineView can dispatch to update the overview.

        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-color-scheme: dark)):
        Scanner marker colors.

2019-02-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: Use Element.closest for internal code
        https://bugs.webkit.org/show_bug.cgi?id=173747

        Reviewed by Joseph Pecoraro.

        Replace usage of added utility functions on the `Node` prototype with the built-in
        `Element.prototype.closest` as it's more flexible and is capable of doing the same thing.

        * UserInterface/Base/Utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithClass): Deleted.
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray): Deleted.
        (Node.prototype.enclosingNodeOrSelfWithNodeName): Deleted.
        * UserInterface/Base/Main.js:
        (WI.handlePossibleLinkClick):
        (WI._focusedContentBrowser):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.set selectedIndex):
        (WI.CompletionSuggestionsView.prototype.update):
        (WI.CompletionSuggestionsView.prototype._itemClicked):
        * UserInterface/Views/ConsoleGroup.js:
        (WI.ConsoleGroup.prototype._titleClicked):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype._mouseWasClicked):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._startEditingTarget):
        (WI.DOMTreeElement.prototype._populateTagContextMenu):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._startEditing):
        (WI.DataGrid.prototype._editingCancelled):
        (WI.DataGrid.prototype.dataGridNodeFromNode):
        (WI.DataGrid.prototype.dataGridNodeFromPoint):
        (WI.DataGrid.prototype._headerCellClicked):
        (WI.DataGrid.prototype._mouseoverColumnCollapser):
        (WI.DataGrid.prototype._mouseoutColumnCollapser):
        (WI.DataGrid.prototype._clickInColumnCollapser):
        (WI.DataGrid.prototype._contextMenuInHeader):
        (WI.DataGrid.prototype._contextMenuInDataTable):
        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.isEventWithinDisclosureTriangle):
        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype._handleMouseDown):
        (WI.LegacyTabBar.prototype._handleClick):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        (WI.LogContentView.prototype._mousedown):
        (WI.LogContentView.prototype._targetInMessageCanBeSelected):
        (WI.LogContentView.prototype._mousemove):
        (WI.LogContentView.prototype._mouseup):
        (WI.LogContentView.prototype._ondragstart):
        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype._mouseDown):
        (WI.NavigationBar.prototype._mouseMoved):
        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.handleEvent):
        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleClick):
        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._handleContextMenu):
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromNode):

2019-02-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r242118): Debugger: event breakpoints have no icon
        https://bugs.webkit.org/show_bug.cgi?id=195119

        Reviewed by Matt Baker.

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):

2019-02-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: Dark Mode: unreadable text in bezier curve editor numeric input fields
        https://bugs.webkit.org/show_bug.cgi?id=195018
        <rdar://problem/48378541>

        Reviewed by Matt Baker.

        Simplify some styles using `-webkit-*` properties instead of `[dir=ltr]`/`[dir=rtl]` selectors.

        * UserInterface/Views/BezierEditor.css:
        (.bezier-editor):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .control-line):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .number-input-container):
        (.bezier-editor > .number-input-container > input):
        (body[dir=ltr] .bezier-editor > .bezier-preview-timing): Deleted.
        (body[dir=rtl] .bezier-editor > .bezier-preview-timing): Deleted.
        (body[dir=ltr] .bezier-editor > .number-input-container > input): Deleted.
        (body[dir=rtl] .bezier-editor > .number-input-container > input): Deleted.
        (@media (prefers-color-scheme: dark)): Deleted.
        Remove all custom styling on any <input>s, as they look fine with their default styling.

        * UserInterface/Views/SpringEditor.css:
        (.spring-editor > .spring-preview):
        (.spring-editor > .spring-preview > div):
        (.spring-editor > .spring-timing > div):

2019-02-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: popover colors don't change when transitioning to/from dark mode
        https://bugs.webkit.org/show_bug.cgi?id=195113
        <rdar://problem/48444188>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.dismiss):
        (WI.Popover.prototype._addListenersIfNeeded):

2019-02-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Use system accent color throughout UI
        https://bugs.webkit.org/show_bug.cgi?id=193507
        <rdar://problem/47327971>

        Reviewed by Timothy Hatcher.

        * UserInterface/Images/Breakpoint.png: Removed.
        * UserInterface/Images/Breakpoint.svg: Added.
        * UserInterface/Images/Breakpoint@2x.png: Removed.
        * UserInterface/Images/BreakpointInactive.png: Removed.
        * UserInterface/Images/BreakpointInactive@2x.png: Removed.
        Replace breakpoint pixel art with an SVG image that can be styled in CSS.

        * UserInterface/Images/CSSVariable.svg:
        * UserInterface/Images/CubicBezier.svg:
        * UserInterface/Images/UserInputPrompt.svg:
        Remove fill color since it is now styled in CSS.

        * UserInterface/Views/BezierEditor.css:
        (.bezier-editor > .bezier-preview > div):
        (@media (prefers-color-scheme: dark)):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):
        Use system accent color for control handles.

        * UserInterface/Views/BreakpointTreeElement.css:
        (.item.breakpoint .status > .status-image):
        (.item.breakpoint .status > .status-image.resolved):
        Use system accent color for breakpoint fill, with a dark outline
        to match Xcode and make the button stand out against the selection.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/ButtonNavigationItem.css:
        (.navigation-bar .item.button > .glyph):

        * UserInterface/Views/ConsolePrompt.js:
        (WI.ConsolePrompt):

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        * UserInterface/Views/DOMTreeContentView.css:
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled,):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.subtree):
        (.content-view.dom-tree .tree-outline.dom li .status-image.breakpoint.disabled): Deleted.
        (.content-view.dom-tree .tree-outline.dom.breakpoints-disabled li .status-image.breakpoint): Deleted.
        (.content-view.dom-tree .tree-outline.dom.breakpoints-disabled li .status-image.breakpoint.disabled): Deleted.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.selected .selection-area):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom:focus li:matches(.selected, .hovered) .selection-area):
        (.tree-outline.dom li.hovered:not(.selected) .selection-area):
        (.tree-outline.dom li.pseudo-class-enabled > .selection-area::before):
        Use the system accent color for the "pseudo-class enabled" marker.
        (@media (prefers-color-scheme: dark)):
        (.tree-outline.dom:focus li.selected .selection-area): Deleted.
        Use --selected-background-color for selection and hover styles, which is
        set to the system highlight color if available.

        * UserInterface/Views/InlineSwatch.css:
        (.inline-swatch:matches(.bezier, .spring, .variable)):
        (.inline-swatch:matches(.bezier, .spring)): Deleted.
        (.inline-swatch.variable): Deleted.

        * UserInterface/Views/InlineSwatch.js:
        (WI.InlineSwatch):

        * UserInterface/Views/NetworkDetailView.css:
        (.network .network-detail .navigation-bar .item.radio.button.text-only:before):
        (.network .network-detail .navigation-bar .item.radio.button.text-only.selected):
        (@media (prefers-color-scheme: dark)):
        (.network-detail .item.close > .glyph):

        * UserInterface/Views/QuickConsole.css:
        (.quick-console > .console-prompt > .glyph):
        (.quick-console > .console-prompt::before): Deleted.

        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only):
        (.navigation-bar .item.radio.button.text-only::before):
        (.navigation-bar .item.radio.button.text-only:matches(.selected, :hover)):
        (.navigation-bar .item.radio.button.text-only:matches(.selected, :hover)::before):
        (.navigation-bar .item.radio.button.text-only:not(.selected):hover::before):
        (.navigation-bar .item.radio.button.text-only.selected:active::before):
        (.navigation-bar .item.radio.button.text-only:hover): Deleted.
        (.navigation-bar .item.radio.button.text-only.selected): Deleted.
        (.navigation-bar .item.radio.button.text-only:active): Deleted.
        (.navigation-bar .item.radio.button.text-only.selected:active): Deleted.
        Use system accent color for selection and hover styles. Since it isn't
        yet possible to derive new colors from the accent color in CSS, fake it
        with a ::before pseudo-element that can have have `filter` or `opacity`
        effects applied to it without altering the button text color.

        * UserInterface/Views/RenderingFrameTimelineOverviewGraph.css:
        (.timeline-overview-graph.rendering-frame > .frame-marker):
        Use system accent color for selected frame marker.

        * UserInterface/Views/ScopeBar.css:
        (.scope-bar > li):
        (.scope-bar > li::before):
        (.scope-bar.default-item-selected > li.multiple.selected::before):
        (.scope-bar > li:matches(.selected, :hover)):
        (.scope-bar > li:matches(.selected, :hover)::before):
        (.scope-bar > li:not(.selected):hover::before):
        (.scope-bar > li.selected:active::before):
        (.scope-bar > li:hover): Deleted.
        (.scope-bar > li.selected): Deleted.
        (.scope-bar > li:active): Deleted.
        (.scope-bar > li.selected:active): Deleted.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings .navigation-bar .item.radio.button.text-only:before):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/TextEditor.css:
        (.text-editor > .CodeMirror .has-breakpoint .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .breakpoint-resolved .CodeMirror-linenumber::before):
        (.text-editor > .CodeMirror .has-breakpoint.multiple-breakpoints .CodeMirror-linenumber::before):
        (@keyframes text-editor-highlight-fadeout):
        (@keyframes text-editor-hovered-expression-highlight-fadeout):
        Replace breakpoint pixel art with a solid color (the system accent
        color) clipped to the shape of a breakpoint.

        * UserInterface/Views/TimelineRecordFrame.css:
        (.timeline-record-frame.selected):

        * UserInterface/Views/URLBreakpointTreeElement.js:

        * UserInterface/Views/Variables.css:
        (:root):
        (body.window-inactive):
        (@media (prefers-color-scheme: dark)):
        (body.mac-platform:not(.sierra, .high-sierra)):
        Add custom property overrides for system colors where supported.

2019-02-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Search: no results when opening to Search tab
        https://bugs.webkit.org/show_bug.cgi?id=195058
        <rdar://problem/48407699>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch):
        If targets aren't available, wait until they are and then perform the search.

        * UserInterface/Base/Main.js:
        (WI.targetsAvailable): Added.
        Expose getter for indicating whether targets are available.

2019-02-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline - Main Thread Indicator
        https://bugs.webkit.org/show_bug.cgi?id=194972

        Reviewed by Devin Rousso.

        * UserInterface/Main.html:
        * UserInterface/Base/Utilities.js:
        (value):
        The existing enclosingNode doesn't work for SVG because its names
        are lowercase. Add a simplified version for the svg case.

        * UserInterface/Views/RangeChart.js: Added.
        (WI.RangeChart):
        (WI.RangeChart.prototype.get size):
        (WI.RangeChart.prototype.set size):
        (WI.RangeChart.prototype.addRange):
        (WI.RangeChart.prototype.clear):
        (WI.RangeChart.prototype.layout):
        A new chart that draws rects for given ranges.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsOverlappingTimeRange):
        Helper to specifically get records touching a range. Useful
        for when we have a single pixel spanning (startTime -> endTime)
        and we want to find records in that pixel.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart rect):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-script):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-style):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-layout):
        (.timeline-view.cpu .cpu-usage-indicator-view > .graph > .range-chart .sample-type-paint):
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.get indicatorViewHeight):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.get scrollableElements):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._graphPositionForMouseEvent):
        (WI.CPUTimelineView.prototype._handleIndicatorClick):
        (WI.CPUTimelineView.prototype._attemptSelectIndicatatorTimelineRecord):
        (WI.CPUTimelineView.prototype._selectTimelineRecord):
        Place the Main Thread Indicator view beneath the big graph.
        Clicking inside it selects records in the Timeline Overview.

        * UserInterface/Views/CPUUsageIndicatorView.css: Added.
        (.cpu-usage-indicator-view):
        (.cpu-usage-indicator-view > .details):
        (body[dir=ltr] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .details):
        (body[dir=rtl] .cpu-usage-indicator-view > .graph):
        (.cpu-usage-indicator-view > .graph):
        (.cpu-usage-indicator-view > .graph,):
        * UserInterface/Views/CPUUsageIndicatorView.js: Added.
        (WI.CPUUsageIndicatorView):
        (WI.CPUUsageIndicatorView.prototype.get chart):
        (WI.CPUUsageIndicatorView.prototype.clear):
        (WI.CPUUsageIndicatorView.prototype.updateChart):
        Converts the CPU samples data into a RangeChart. It works to coalesce
        many samples of the same type into a single range to reduce total ranges.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype._recordSelected):
        (WI.TimelineRecordingContentView.prototype._recordWasSelected):
        (WI.TimelineRecordingContentView.prototype._selectRecordInTimelineOverview):
        (WI.TimelineRecordingContentView.prototype._selectRecordInTimelineView):
        * UserInterface/Views/TimelineView.js:
        Add a path for a TimelineView to dispatch a record selected event and cause
        have the TimelineRecordingContentView react to it by updating the timeline
        overview and relevent timeline view.

2019-02-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: navigation sidebar says "No Search Results" when a slow search is in progress
        https://bugs.webkit.org/show_bug.cgi?id=170631
        <rdar://problem/29473874>

        Reviewed by Joseph Pecoraro.

        Keep a count of all the backend commands (increment when firing, decrement when a result is
        sent back to the frontend). Once the count comes back to `0`, attempt to show the "No Results"
        placeholder, since we will have finished searching at that point. Since commands can be called
        as a result of other commands, using `Promise.all` isn't possible.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch):
        (WI.SearchSidebarPanel.prototype.performSearch.updateEmptyContentPlaceholderSoon): Deleted.
        (WI.SearchSidebarPanel.prototype.performSearch.updateEmptyContentPlaceholder): Deleted.
        Drive-by: replace `bind` calls with arrow functions, and use for-of loops.

        * Localizations/en.lproj/localizedStrings.js:

2019-02-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: if no auto-capture value is specified, don't force the input to have "0" as the value
        https://bugs.webkit.org/show_bug.cgi?id=194950
        <rdar://problem/48276798>

        Reviewed by Joseph Pecoraro.

        Create a getter/setter for the value of the auto-capture frame count <input> so that all
        code follows the same path.

        If the <input> currently has no content and the frame count is 0, only set the placeholder.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype.get _recordingAutoCaptureFrameCountInputElementValue): Added.
        (WI.CanvasOverviewContentView.prototype.set _recordingAutoCaptureFrameCountInputElementValue): Added.
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):

2019-02-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Console: dragging a selection outside the selected element clears the selection
        https://bugs.webkit.org/show_bug.cgi?id=194660
        <rdar://problem/46719239>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._mousemove):
        Don't clear the selection if the target of the "mousemove" is outside of the view.

        (WI.LogContentView.prototype._updateMessagesSelection):
        Drive-by: clear the saved selected messages when we're just selecting a single message.

2019-02-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename LineChart to AreaChart
        https://bugs.webkit.org/show_bug.cgi?id=195038

        Rubber-stamped by Matt Baker.

        * UserInterface/Main.html:
        New file names.

        * UserInterface/Views/AreaChart.js: Renamed from Source/WebInspectorUI/UserInterface/Views/LineChart.js.
        * UserInterface/Views/StackedAreaChart.js: Renamed from Source/WebInspectorUI/UserInterface/Views/StackedLineChart.js.
        Renamed.

        * UserInterface/Views/CPUTimelineView.css:
        * UserInterface/Views/CPUUsageStackedView.css:
        * UserInterface/Views/CPUUsageStackedView.js:
        * UserInterface/Views/CPUUsageView.css:
        * UserInterface/Views/CPUUsageView.js:
        * UserInterface/Views/LegacyCPUTimelineView.css:
        * UserInterface/Views/MemoryCategoryView.css:
        * UserInterface/Views/MemoryCategoryView.js:
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        Update references.

2019-02-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: hovering a node inside an object preview should highlight it
        https://bugs.webkit.org/show_bug.cgi?id=194862
        <rdar://problem/48246433>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FormattedValue.js:
        (WI.FormattedValue.createElementForNodePreview):
        When provided a way to access the `WI.RemoteObject` for the given preview, add various mouse
        event listeners that highlight the corresponding DOM node.

        * UserInterface/Views/ObjectPreviewView.js:
        (WI.ObjectPreviewView):
        (WI.ObjectPreviewView.prototype._initTitleElement):
        (WI.ObjectPreviewView.prototype._appendPropertyPreviews):
        (WI.ObjectPreviewView.prototype._appendValuePreview):
        Implement various ways of getting the `WI.RemoteObject` for a given preview.
         - When the preview is for the actual `WI.RemoteObject`, simply return it
         - If the preview is a property of the main object, get the `WI.RemoteObject` for that property

        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView):
        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
        (WI.ObjectTreePropertyTreeElement.prototype._createTitlePropertyStyle):
        Pass the `WI.RemoteObject` to the preview so that it can utilize it.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager):
        (WI.ConsoleManager.prototype.releaseRemoteObjectWithConsoleClear): Added.
        (WI.ConsoleManager.prototype.messagesCleared): Added.

2019-02-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline - Thread Breakdown
        https://bugs.webkit.org/show_bug.cgi?id=194788

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        New strings and files.

        * UserInterface/Views/Variables.css:
        (:root):
        New colors for cpu threads / activity breakdown.

        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.get workers):
        (WI.CPUTimelineRecord):
        Distinguish the workers in a CPU timeline record.

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.main-thread-usage):
        (.timeline-overview-graph.cpu > .stacked-column-chart > svg > rect.worker-thread-usage):
        (.timeline-overview-graph.cpu > .column-chart > svg > rect):
        Stacked column chart for CPU in the overview graph.

        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu > .content > .overview):
        (.timeline-view.cpu > .content > .details > .subtitle.threads):
        (.timeline-view.cpu > .content > .overview > .chart):
        (.timeline-view.cpu > .content > .overview > .chart > .subtitle):
        (.timeline-view.cpu > .content > .overview > .chart > .container):
        (.timeline-view.cpu > .content > .overview .samples,):
        (.timeline-view.cpu .legend):
        (.timeline-view.cpu .legend .row):
        (.timeline-view.cpu .legend .row + .row):
        (.timeline-view.cpu .legend .swatch):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-idle):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-script):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-style):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-layout):
        (.timeline-view.cpu .legend > .row > .swatch.sample-type-paint):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-idle):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-script):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-style):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-layout):
        (.timeline-view.cpu .circle-chart > svg > path.segment.sample-type-paint):
        (.timeline-view.cpu svg > path):
        (.timeline-view.cpu .main-thread svg > path,):
        (.timeline-view.cpu .worker-thread svg > path,):
        (.timeline-view.cpu .cpu-usage-view.empty):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers > div):
        (.timeline-view.cpu :matches(.line-chart, .stacked-line-chart) .markers > div > .label):
        (.timeline-view.cpu > .content): Deleted.
        (.cpu-usage-view .line-chart > svg > path): Deleted.
        (.timeline-view.cpu .legend > .row > .swatch.current): Deleted.
        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.displayNameForSampleType):
        (WI.CPUTimelineView.prototype.shown):
        (WI.CPUTimelineView.prototype.clear.clearUsageView):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.initialLayout.createChartContainer):
        (WI.CPUTimelineView.prototype.initialLayout.appendLegendRow):
        (WI.CPUTimelineView.prototype.initialLayout):
        (WI.CPUTimelineView.prototype.layout.removeGreaterThan):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.yScale):
        (WI.CPUTimelineView.prototype._computeSamplingData.markRecordEntries):
        (WI.CPUTimelineView.prototype._computeSamplingData):
        (WI.CPUTimelineView.prototype._removeWorkerThreadViews):
        (WI.CPUTimelineView.prototype._clearBreakdownLegend):
        (WI.CPUTimelineView.prototype.layout.xScale): Deleted.
        Line charts and Circle Chart for threads and breakdowns.

        * UserInterface/Views/CPUUsageStackedView.css:
        (.cpu-usage-stacked-view):
        (.cpu-usage-stacked-view > .details):
        (body[dir=ltr] .cpu-usage-stacked-view > .details):
        (body[dir=rtl] .cpu-usage-stacked-view > .details):
        (.cpu-usage-stacked-view > .details > .name):
        (body[dir=rtl] .cpu-usage-stacked-view > .graph):
        (.cpu-usage-stacked-view > .graph):
        (.cpu-usage-stacked-view > .graph,):
        * UserInterface/Views/CPUUsageStackedView.js:
        (WI.CPUUsageStackedView):
        (WI.CPUUsageStackedView.prototype.get chart):
        (WI.CPUUsageStackedView.prototype.clear):
        (WI.CPUUsageStackedView.prototype.updateChart):
        (WI.CPUUsageStackedView.prototype._updateDetails):
        Same as CPUUsageView except Stacked for the total.

        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (.cpu-usage-view > .details > .name):
        (.cpu-usage-view > .graph):
        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.get chart):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.updateChart):
        (WI.CPUUsageView.prototype._updateDetails):
        Slight modifications for the new UI.

        * UserInterface/Views/LegacyCPUTimelineView.css:
        (.timeline-view.legacy-cpu .cpu-usage-view .line-chart > svg > path):
        * UserInterface/Views/LegacyCPUTimelineView.js:
        (WI.LegacyCPUTimelineView.prototype.layout):
        Update API calls in the legacy view for minor changes.

        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (.memory-category-view > .details > .name):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.css:
        (body .timeline-view.memory):
        (.timeline-view.memory): Deleted.
        Improvements ported from the CPU timeline views.

        * UserInterface/Views/StackedColumnChart.js: Added.
        (WI.StackedColumnChart):
        (WI.StackedColumnChart.prototype.get size):
        (WI.StackedColumnChart.prototype.set size):
        (WI.StackedColumnChart.prototype.initializeSections):
        (WI.StackedColumnChart.prototype.addColumnSet):
        (WI.StackedColumnChart.prototype.clear):
        (WI.StackedColumnChart.prototype.layout):
        A stacked column chart implementation.

        * UserInterface/Views/View.js:
        (WI.View.prototype.removeUnparentedSubview):
        Add a way to remove a subview that had its `element` moved
        someplace other than a direct child of our element.

2019-02-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dark Mode: Network Overview Graph segments have distracting white box shadow
        https://bugs.webkit.org/show_bug.cgi?id=194966

        Reviewed by Devin Rousso.

        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        Make global timeline even/odd colors where odd is the default content background
        color and even is slightly different. These were used in multiple places.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph.cpu:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory > .legend):
        (.timeline-overview-graph.memory:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)): Deleted.
        * UserInterface/Views/NetworkTimelineOverviewGraph.css:
        (.timeline-overview-graph.network > .graph-row > .timeline-record-bar > .segment:not(.inactive)):
        (.timeline-overview-graph.network:nth-child(even) > .graph-row > .timeline-record-bar > .segment:not(.inactive)):
        Use the variable colors now and eliminate dark mode blocks.

2019-02-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Command-/ should toggle edited property
        https://bugs.webkit.org/show_bug.cgi?id=194967
        <rdar://problem/48329852>

        Reviewed by Devin Rousso.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.commentOut):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertySelect):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._toggle):
        (WI.SpreadsheetStyleProperty.prototype._select):

2019-02-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r242018): Timelines shows no results
        https://bugs.webkit.org/show_bug.cgi?id=195017

        Reviewed by Joseph Pecoraro.

        `simpleGlobStringToRegExp` can return `null` if the provided search query is an empty string.

        * UserInterface/Base/SearchUtilities.js:
        (WI.SearchUtilities.prototype.regExpForString):
        Add assertions that the provided search query is a valid non-empty string.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._updateFilter):
        If the search query is empty, don't attempt to create a `RegExp` for it.

2019-02-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: TreeElement or Table row selected using the keyboard should always be revealed
        https://bugs.webkit.org/show_bug.cgi?id=194918
        <rdar://problem/48289314>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.selectionControllerSelectionDidChange):

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):

2019-02-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: [META] Merge Resources and Debugger into a single Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=183420

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourcesNavigationSidebarPanel.js: Added.
        (WI.SourcesNavigationSidebarPanel):
        (WI.SourcesNavigationSidebarPanel.shouldPlaceResourcesAtTopLevel):
        (WI.SourcesNavigationSidebarPanel.prototype.get minimumWidth):
        (WI.SourcesNavigationSidebarPanel.prototype.closed):
        (WI.SourcesNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject.isAncestor):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject.getParent):
        (WI.SourcesNavigationSidebarPanel.prototype.treeElementForRepresentedObject):
        (WI.SourcesNavigationSidebarPanel.prototype.resetFilter):
        (WI.SourcesNavigationSidebarPanel.prototype.hasCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        (WI.SourcesNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.SourcesNavigationSidebarPanel.prototype.willDismissPopover):
        (WI.SourcesNavigationSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._updateMainFrameTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addTarget):
        (WI.SourcesNavigationSidebarPanel.prototype._findCallStackTargetTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._updateCallStackTreeOutline):
        (WI.SourcesNavigationSidebarPanel.prototype._addResource):
        (WI.SourcesNavigationSidebarPanel.prototype._addResourcesRecursivelyForFrame):
        (WI.SourcesNavigationSidebarPanel.prototype._addScript):
        (WI.SourcesNavigationSidebarPanel.prototype._addWorkerTargetWithMainResource):
        (WI.SourcesNavigationSidebarPanel.prototype._addDebuggerTreeElementForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._insertDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._compareBreakpointTreeElements):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._removeBreakpoint):
        (WI.SourcesNavigationSidebarPanel.prototype._removeAllBreakpoints):
        (WI.SourcesNavigationSidebarPanel.prototype._toggleAllBreakpoints):
        (WI.SourcesNavigationSidebarPanel.prototype._breakpointsBeneathTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addIssue):
        (WI.SourcesNavigationSidebarPanel.prototype._removeDebuggerTreeElement):
        (WI.SourcesNavigationSidebarPanel.prototype._addBreakpointsForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._addIssuesForSourceCode):
        (WI.SourcesNavigationSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReason):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonGotoArrow):
        (WI.SourcesNavigationSidebarPanel.prototype._updatePauseReasonSection):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceTypeScopeBarSelectionChanged):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTreeSelectionDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCreateBreakpointClicked):
        (WI.SourcesNavigationSidebarPanel.prototype._handleFrameMainResourceDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleResourceAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleMainFrameDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerBreakpointsEnabledDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerScriptsCleared):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerPaused):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerResumed):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerCallFramesDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerActiveCallFrameDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerWaitingToPause):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleDOMBreakpointResolvedStateDidChange):
        (WI.SourcesNavigationSidebarPanel.prototype._handleConsoleIssueAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleConsoleCleared):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingWillStart):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTimelineCapturingStopped):
        (WI.SourcesNavigationSidebarPanel.prototype._handleCSSStyleSheetAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTargetAdded):
        (WI.SourcesNavigationSidebarPanel.prototype._handleTargetRemoved):
        (WI.SourcesNavigationSidebarPanel.prototype._handleExtraDomainsActivated):
        * UserInterface/Views/SourcesNavigationSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .navigation-bar):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-breakpoints):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-breakpoints.activated):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-pause-resume):
        (.sidebar > .panel.navigation.sources > .navigation-bar .debugger-pause-resume.activated):
        (.sidebar > .panel.navigation.sources > .content > .warning-banner):
        (.sidebar > .panel.navigation.sources > .content > .details-section):
        (.sidebar > .panel.navigation.sources > .content > .details-section.paused-reason.collapsed > .header > .options,):
        (.sidebar > .panel.navigation.sources > .content > .details-section.collapsed > .content):
        (.sidebar > .panel.navigation.sources > .content > .details-section.scripts:not(.collapsed)):
        (.sidebar > .panel.navigation.sources > .content > .navigation-bar):
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread):
        (.sidebar > .panel.navigation.sources > .content > .tree-outline.single-thread > .item.thread):
        (@media (prefers-dark-interface) .sidebar > > .content > .panel.navigation.sources .warning-banner):

        * UserInterface/Views/SourcesTabContentView.js: Added.
        (WI.SourcesTabContentView):
        (WI.SourcesTabContentView.tabInfo):
        (WI.SourcesTabContentView.isTabAllowed):
        (WI.SourcesTabContentView.prototype.get type):
        (WI.SourcesTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.SourcesTabContentView.prototype.canShowRepresentedObject):
        (WI.SourcesTabContentView.prototype.showDetailsSidebarPanels):
        (WI.SourcesTabContentView.prototype.showScopeChainDetailsSidebarPanel):
        (WI.SourcesTabContentView.prototype.revealAndSelectBreakpoint):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.createContentTreeOutline):
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype._checkOutlinesForPendingViewStateCookie):
        Rework `createContentTreeOutline` to allow for additional symbols.
        Add another symbol to ensure that the `WI.TreeOutline` is not used for cookie restoration.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.showResources):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):
        * UserInterface/Views/DefaultDashboardView.js:
        (WI.DefaultDashboardView.prototype._resourcesItemWasClicked):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI.showSourcesTab): Added.
        (WI.isShowingSourcesTab): Added.
        (WI.tabContentViewClassForRepresentedObject):
        (WI._debuggerDidPause):

        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView.isTabAllowed):
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView.isTabAllowed):

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Main.html:
        * UserInterface/Images/Sources.svg: Added.
        * Localizations/en.lproj/localizedStrings.js:

2019-02-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: Change the InspectorOverlay to use native rather than canvas
        https://bugs.webkit.org/show_bug.cgi?id=105023
        <rdar://problem/13443692>

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.initializeTarget):

        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-10.0.json:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        * Versions/Inspector-iOS-12.2.json:
        * Versions/Inspector-iOS-8.0.json:
        * Versions/Inspector-iOS-9.0.json:
        * Versions/Inspector-iOS-9.3.json:
        Remove `Debugger.setOverlayMessage` command as it hasn't been used and is no longer supported.

2019-02-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to make searches case sensitive or use a regular expression
        https://bugs.webkit.org/show_bug.cgi?id=192527

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/SearchUtilities.js: Added.
        (WI.SearchUtilities.get defaultSettings):
        (WI.SearchUtilities.createSettings):
        (WI.SearchUtilities.regExpForString):
        (WI.SearchUtilities.createSettingsButton):
        (WI.SearchUtilities.createSettingsButton.toggleActive):
        * UserInterface/Views/Main.css:
        (.search-settings): Added.
        (.search-settings > .glyph): Added.
        (.search-settings:active > .glyph): Added.
        (.search-settings.active > .glyph): Added.
        (.search-settings:active.active > .glyph): Added.
        Create static utility class for handling settings related to searching/filtering.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Create default search settings that apply across WebInspector, unless a more specific
        setting has been created that overrides it (e.g. the navigation sidebar or Search tab).

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel):
        (WI.SearchSidebarPanel.prototype.performSearch.forEachMatch):
        (WI.SearchSidebarPanel.prototype.performSearch.resourceCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.resourcesCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.searchScripts.scriptCallback):
        (WI.SearchSidebarPanel.prototype.performSearch.searchScripts):
        (WI.SearchSidebarPanel.prototype.performSearch.domSearchResults):
        (WI.SearchSidebarPanel.prototype.performSearch.domCallback):
        (WI.SearchSidebarPanel.prototype.performSearch):
        * UserInterface/Views/SearchSidebarPanel.css:
        (.sidebar > .panel.navigation.search > .search-bar):
        (.sidebar > .panel.navigation.search > .search-bar > input[type="search"]):
        Add a (*) settings "gear" after each `<input type="search">` that shows a contextmenu with
        checkboxes for each search setting. Any settings changed for each input take precedence over
        the default settings, but will match the corresponding default setting if it's changed.

        * UserInterface/Views/SearchResultTreeElement.js:
        (WI.SearchResultTreeElement.truncateAndHighlightTitle):
        Use the length of the found text, rather than the length of the query.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._highlightSearchResults):
        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype._updateFilter):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.performSearch):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.customPerformSearch.searchResultCallback):
        (WI.SourceCodeTextEditor.prototype.customPerformSearch):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.performSearch):
        Use the default search settings when searching/filtering.

        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]:placeholder-shown::-webkit-search-cancel-button): Added.
        Drive-by: prevent the (x) from appearing when no text has been entered.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:

2019-02-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: make debounce Proxy into its own class
        https://bugs.webkit.org/show_bug.cgi?id=194721

        Reviewed by Joseph Pecoraro.

        The `debounce`/`throttle` functions leveraged a `Proxy` to intercept the function call and
        replace it with a "delayed" version. The issue with this is that it set the identifier for
        the timer on the function itself, which is shared across all instances of a given class.
        When different instances call the same delayed function, they'd clobber eachother's attempts
        to delay work.

        * UserInterface/Base/Debouncer.js: Added.
        (Debouncer):
        (Debouncer.prototype.force):
        (Debouncer.prototype.delayForTime):
        (Debouncer.prototype.delayForFrame):
        (Debouncer.prototype.delayForMicrotask):
        (Debouncer.prototype.cancel):
        (Debouncer.prototype._execute):
        * UserInterface/Base/Throttler.js: Added.
        (Throttler):
        (Throttler.prototype.force):
        (Throttler.prototype.fire):
        (Throttler.prototype.cancel):
        (Throttler.prototype._execute):
        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/BezierEditor.js:
        (WI.BezierEditor):
        * UserInterface/Views/ContentBrowser.js:
        (WI.ContentBrowser):
        (WI.ContentBrowser.prototype._contentViewSelectionPathComponentDidChange):
        (WI.ContentBrowser.prototype._contentViewSupplementalRepresentedObjectsDidChange):
        (WI.ContentBrowser.prototype._currentContentViewDidChange):
        (WI.ContentBrowser.prototype._dispatchCurrentRepresentedObjectsDidChangeEvent): Deleted.
        * UserInterface/Views/DOMTreeUpdater.js:
        (WI.DOMTreeUpdater):
        (WI.DOMTreeUpdater.prototype._nodeAttributeModified):
        (WI.DOMTreeUpdater.prototype._nodeInserted):
        (WI.DOMTreeUpdater.prototype._nodeRemoved):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        (WI.NavigationSidebarPanel.prototype.closed):
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.hideEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateFilter):
        (WI.NavigationSidebarPanel.prototype.shown):
        (WI.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype._treeElementDisclosureDidChange):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.hidden):
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRelatedResourcesSection):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):
        (WI.ResourceDetailsSidebarPanel):
        * UserInterface/Views/ShaderProgramContentView.js:
        (WI.ShaderProgramContentView):
        * UserInterface/Views/SpringEditor.js:
        (WI.SpringEditor.prototype._resetPreviewAnimation):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.set hidden):
        (WI.TreeElement.prototype.didChange):
        (WI.TreeElement.prototype._attach):
        (WI.TreeElement.prototype._detach):
        (WI.TreeElement.prototype.collapse):
        (WI.TreeElement.prototype.expand):
        (WI.TreeElement.prototype.reveal):
        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.get updateVirtualizedElementsDebouncer): Added.
        (WI.TreeOutline.prototype._updateVirtualizedElements): Added.
        (WI.TreeOutline.prototype.updateVirtualizedElements.walk): Deleted.
        (WI.TreeOutline.prototype.updateVirtualizedElements): Deleted.
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView):
        (WI.WebSocketContentView.prototype.shown):
        (WI.WebSocketContentView.prototype._updateFramesSoon):
        (WI.WebSocketContentView.prototype._updateFrames):

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * .eslintrc:

2019-02-24  Nikita Vasilyev  <nvasilyev@apple.com>

        Unreviewed, fix indentation.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.markModified):

2019-02-23  Keith Miller  <keith_miller@apple.com>

        Add new mac target numbers
        https://bugs.webkit.org/show_bug.cgi?id=194955

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2019-02-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: add UI for preventing auto-stop
        https://bugs.webkit.org/show_bug.cgi?id=194956

        Reviewed by Joseph Pecoraro.

        Add a checkbox to the navigation area of the Timelines tab that controls whether recordings
        automatically stop (e.g. after "load" or a period of inactivity).

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.get navigationItems):
        (WI.TimelineRecordingContentView.prototype._handleAutoStopCheckboxCheckedDidChange): Added.
        (WI.TimelineRecordingContentView.prototype._handleTimelinesAutoStopSettingChanged): Added.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype._stopAutoRecordingSoon):
        (WI.TimelineManager.prototype._resetAutoRecordingMaxTimeTimeout):
        (WI.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WI.TimelineManager.prototype._handleTimelinesAutoStopSettingChanged):

        * UserInterface/Base/Setting.js:
        * Localizations/en.lproj/localizedStrings.js:

2019-02-22  Devin Rousso  <drousso@apple.com>

        REGRESSION(r?): Web Inspector: Popovers have inset shadows
        https://bugs.webkit.org/show_bug.cgi?id=192963
        <rdar://problem/46888679>

        Reviewed by Brian Burg.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._drawBackground):
        (WI.Popover.prototype._drawBackground.isolate): Added.
        * UserInterface/Views/Popover.css:
        (.popover):

2019-02-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles Redesign: clicking CSS property or selector should always select its text
        https://bugs.webkit.org/show_bug.cgi?id=180791
        <rdar://problem/36038366>

        Reviewed by Brian Burg.

        * UserInterface/Views/SpreadsheetSelectorField.js:
        (WI.SpreadsheetSelectorField):
        (WI.SpreadsheetSelectorField.prototype.startEditing):
        (WI.SpreadsheetSelectorField.prototype.stopEditing):
        (WI.SpreadsheetSelectorField.prototype._handleMouseDown): Added.
        (WI.SpreadsheetSelectorField.prototype._handleMouseUp): Added.
        (WI.SpreadsheetSelectorField.prototype._handleFocus): Deleted.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .selector.editing:focus, .spreadsheet-css-declaration .selector > .matched): Added.
        (.spreadsheet-css-declaration .selector.spreadsheet-selector-field):
        (.spreadsheet-css-declaration .selector:focus, .spreadsheet-css-declaration .selector > .matched): Deleted.

2019-02-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: DOM Content Loaded blue marker is too dark
        https://bugs.webkit.org/show_bug.cgi?id=194970
        <rdar://problem/48330126>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRuler.css:
        (@media (prefers-color-scheme: dark)):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        Make the marker lighter for the dark mode.

2019-02-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Timeline record selection code path
        https://bugs.webkit.org/show_bug.cgi?id=194931

        Reviewed by Devin Rousso.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype.userSelectedRecord): Deleted.
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView):
        (WI.TimelineRecordingContentView.prototype.timelineOverviewUserSelectedRecord): Deleted.
        * UserInterface/Views/TimelineView.js:
        (WI.TimelineView.prototype.userSelectedRecordFromOverview): Deleted.

2019-02-21  Darin Adler  <darin@apple.com>

        Some refinements for Node and Document
        https://bugs.webkit.org/show_bug.cgi?id=194764

        Reviewed by Ryosuke Niwa.

        * UserInterface/Models/NativeFunctionParameters.js: Removed getOverrideStyle
        because this deprecated non-working function is no longer something web authors
        should be thinking about or typing.

2019-02-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: recordings with a single frame sometimes missing TreeElement
        https://bugs.webkit.org/show_bug.cgi?id=194687

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        Wait until the entire `Recording` has been processed before setting the selected action.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .recording-content):
        Drive-by: ensure that the recording `TreeOutline` container element has the full height to
        take advantage of for virtualization.

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.set recording):
        Drive-by: clear the `DataGrid` list when changing recordings since we removed all subviews.

2019-02-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM Debugger: node-specific event breakpoints aren't cleared/recalculated on navigation
        https://bugs.webkit.org/show_bug.cgi?id=194874
        <rdar://problem/48253415>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype._setDocument):
        (WI.DOMManager.prototype.removeBreakpointForEventListener):

2019-02-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: macOS user agent option should be available in device settings menu
        https://bugs.webkit.org/show_bug.cgi?id=194885
        <rdar://problem/48259253>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI._handleDeviceSettingsToolbarButtonClicked):

2019-02-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: RTL: Scripts Timeline loading indicator has incorrect margins
        https://bugs.webkit.org/show_bug.cgi?id=194882

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser .recording-progress > .status > .indeterminate-progress-spinner):

2019-02-20  Andy Estes  <aestes@apple.com>

        [Xcode] Add SDKVariant.xcconfig to various Xcode projects
        https://bugs.webkit.org/show_bug.cgi?id=194869

        Rubber-stamped by Jer Noble.

        * WebInspectorUI.xcodeproj/project.pbxproj:

2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        Support the new snapshot version. The only thing that changes are the
        node flags, and its actually completely compatible with version 1.

        (HeapSnapshot.updateCategoriesAndMetadata):
        List the count of object type instances in each class category.

        (HeapSnapshot.prototype.serializeNode):
        Include whether or not the node is an object type.

        * UserInterface/Proxies/HeapSnapshotNodeProxy.js:
        (WebInspector.HeapSnapshotNodeProxy):
        (WebInspector.HeapSnapshotNodeProxy.deserialize):
        Add a new Node isObjectType property based on the new data.

        * UserInterface/Views/HeapSnapshotClassDataGridNode.js:
        (WebInspector.HeapSnapshotClassDataGridNode.prototype.createCellContent):
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WebInspector.HeapSnapshotClusterContentView.iconStyleClassNameForClassName):
        If a class contains 50% or more object type instances then treat it as such
        instead of defaulting to native.

        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
        We can be more specific than the default if the individual instance is
        known to be an object type.

2019-02-19  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r241784.

        Broke all OpenSource builds.

        Reverted changeset:

        "Web Inspector: Improve ES6 Class instances in Heap Snapshot
        instances view"
        https://bugs.webkit.org/show_bug.cgi?id=172848
        https://trac.webkit.org/changeset/241784

2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve ES6 Class instances in Heap Snapshot instances view
        https://bugs.webkit.org/show_bug.cgi?id=172848
        <rdar://problem/25709212>

        Reviewed by Mark Lam.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        Support the new snapshot version. The only thing that changes are the
        node flags, and its actually completely compatible with version 1.

        (HeapSnapshot.updateCategoriesAndMetadata):
        List the count of object type instances in each class category.

        (HeapSnapshot.prototype.serializeNode):
        Include whether or not the node is an object type.

        * UserInterface/Proxies/HeapSnapshotNodeProxy.js:
        (WebInspector.HeapSnapshotNodeProxy):
        (WebInspector.HeapSnapshotNodeProxy.deserialize):
        Add a new Node isObjectType property based on the new data.

        * UserInterface/Views/HeapSnapshotClassDataGridNode.js:
        (WebInspector.HeapSnapshotClassDataGridNode.prototype.createCellContent):
        * UserInterface/Views/HeapSnapshotClusterContentView.js:
        (WebInspector.HeapSnapshotClusterContentView.iconStyleClassNameForClassName):
        If a class contains 50% or more object type instances then treat it as such
        instead of defaulting to native.

        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WebInspector.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js:
        (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent):
        We can be more specific than the default if the individual instance is
        known to be an object type.

2019-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Scripts timeline on-going-recording text looks poor in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=194809

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser .recording-progress > .status):

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Provide a way to avoid a recording auto-stop on reload
        https://bugs.webkit.org/show_bug.cgi?id=194793

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        New tooltip.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.willAutoStop):
        (WI.TimelineManager.prototype.relaxAutoStop):
        Getter and relaxer for auto stop behavior.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        Drive-by fix some whitespace issues.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):
        (WI.TimelineTabContentView.prototype._showRecordButton):
        (WI.TimelineTabContentView.prototype._showContinueButton):
        (WI.TimelineTabContentView.prototype._updateNavigationBarButtons):
        (WI.TimelineTabContentView.prototype._capturingStartedOrStopped):
        (WI.TimelineTabContentView.prototype._globalModifierKeysDidChange):
        (WI.TimelineTabContentView.prototype._continueButtonClicked):
        Show a "continue" like icon instead of the usual stop button when
        a recording would auto-stop and the alt key is down. When pressed
        this button will relax the auto-stop and continue the recording
        until explicitly stopped by the user.

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix a typo causing assertions in ConsoleManager
        https://bugs.webkit.org/show_bug.cgi?id=194792

        Reviewed by Matt Baker.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.initializeLogChannels):
        Extra comma produced an undefined value in the list.

2019-02-18  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: typing ";" shouldn't focus on the next property when there's open parenthesis or comment
        https://bugs.webkit.org/show_bug.cgi?id=194789

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._handleValueBeforeInput):

2019-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Better categorize CPU usage per-thread / worker
        https://bugs.webkit.org/show_bug.cgi?id=194564

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord.prototype.get mainThreadUsage):
        (WI.CPUTimelineRecord.prototype.get webkitThreadUsage):
        (WI.CPUTimelineRecord.prototype.get workerThreadUsage):
        (WI.CPUTimelineRecord.prototype.get unknownThreadUsage):
        Build a better record from the protocol events.

2019-02-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: duplicate left double quotation mark (\u201C) in 'Unable to show certificate for “%s“.'
        https://bugs.webkit.org/show_bug.cgi?id=194782
        <rdar://problem/48159683>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.async showCertificate):
        * Localizations/en.lproj/localizedStrings.js:

2019-02-18  Eric Carlson  <eric.carlson@apple.com>

        Add MSE logging configuration
        https://bugs.webkit.org/show_bug.cgi?id=194719
        <rdar://problem/48122151>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/ConsoleMessage.js:
        * UserInterface/Models/IssueMessage.js:
        (WI.IssueMessage):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):

2019-02-17  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Move CSS completion logic from SpreadsheetTextField to SpreadsheetStyleProperty
        https://bugs.webkit.org/show_bug.cgi?id=194724

        Reviewed by Devin Rousso.

        Move CSS value completion logic from SpreadsheetTextField, a generic text field,
        to SpreadsheetStyleProperty.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._nameCompletionDataProvider):
        (WI.SpreadsheetStyleProperty.prototype._valueCompletionDataProvider):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsSelectedCompletion):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsClickedCompletion):
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._showSuggestionsView):
        (WI.SpreadsheetTextField.prototype._getCompletionPrefix): Deleted.

2019-02-17  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Frontend performance is very slow reloading theverge.com - 50% of time in TreeOutline _indexOfTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=193605
        <rdar://problem/47403986>

        Reviewed by Devin Rousso.

        SelectionController should track an unordered Set of represented objects
        instead of an ordered set of indexes. This eliminates the costly and
        error-prone updates needed to keep the selected indexes in sync as items
        are added and removed from TreeOutline (and Table, to a far lesser extent).

        The SelectionController interface is largely the same. Class and delegate
        methods have been renamed to reflect the change from indexes to objects.
        SelectionController tracks selected items in selection order. For the
        operations that rely on objects being in insertion order, the controller
        uses a comparator function provided at construction time.

        * UserInterface/Base/IndexSet.js: Removed.
        No longer used. SelectionController now uses a plain Set.

        * UserInterface/Base/Utilities.js:
        (value):
        (get return):
        Add utilities previously supplied by IndexSet and used by SelectionController.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.get lastSelectedItem):
        (WI.SelectionController.prototype.get selectedItems):
        (WI.SelectionController.prototype.set allowsMultipleSelection):
        (WI.SelectionController.prototype.hasSelectedItem):
        (WI.SelectionController.prototype.selectItem):
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.selectAll):
        (WI.SelectionController.prototype.deselectAll):
        (WI.SelectionController.prototype.removeSelectedItems):
        (WI.SelectionController.prototype.reset):
        (WI.SelectionController.prototype.didRemoveItems):
        (WI.SelectionController.prototype.handleKeyDown):
        (WI.SelectionController.prototype.handleItemMouseDown):
        (WI.SelectionController.prototype._deselectAllAndSelect):
        (WI.SelectionController.prototype._selectItemsFromArrowKey):
        (WI.SelectionController.prototype._firstSelectableItem):
        (WI.SelectionController.prototype._lastSelectableItem):
        (WI.SelectionController.prototype._previousSelectableItem):
        (WI.SelectionController.prototype._nextSelectableItem):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype._addRange):
        (WI.SelectionController.prototype._deleteRange):
        (WI.SelectionController.prototype.get numberOfItems): Deleted.
        (WI.SelectionController.prototype.didInsertItem): Deleted.
        (WI.SelectionController.prototype.handleItemMouseDown.normalizeRange): Deleted.
        (WI.SelectionController.prototype._nextSelectableIndex): Deleted.
        (WI.SelectionController.prototype._previousSelectableIndex): Deleted.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        Remove IndexSet.

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.tableIndexForRepresentedObject):
        (WI.CookieStorageContentView.prototype.tableRepresentedObjectForIndex):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.objectForSelection):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableIndexForRepresentedObject):
        (WI.NetworkTableContentView.prototype.tableRepresentedObjectForIndex):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRow):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        (WI.Table.prototype.selectionControllerSelectionDidChange):
        (WI.Table.prototype.selectionControllerFirstSelectableItem):
        (WI.Table.prototype.selectionControllerLastSelectableItem):
        (WI.Table.prototype.selectionControllerPreviousSelectableItem):
        (WI.Table.prototype.selectionControllerNextSelectableItem):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._indexForRepresentedObject):
        (WI.Table.prototype._representedObjectForIndex):
        (WI.Table.prototype.selectionControllerNumberOfItems): Deleted.
        (WI.Table.prototype.selectionControllerNextSelectableIndex): Deleted.
        (WI.Table.prototype.selectionControllerPreviousSelectableIndex): Deleted.
        (WI.Table.prototype._toggleSelectedRowStyle): Deleted.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.compareSiblings):
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get selectedTreeElement):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.get selectedTreeElements):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype.removeChildren):
        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype.getCachedTreeElement):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectionControllerFirstSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerLastSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableItem):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableItem):
        (WI.TreeOutline.prototype.objectForSelection):
        (WI.TreeOutline._generateStyleRulesIfNeeded):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableIndex): Deleted.
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableIndex): Deleted.
        (WI.TreeOutline._generateStyleRulesIfNeeded._indexesForSubtree.numberOfElementsInSubtree): Deleted.

2019-02-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Logging a native function to the console, such as `alert`, produces unhandled rejection
        https://bugs.webkit.org/show_bug.cgi?id=194740

        Reviewed by Matt Baker.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.findFunctionSourceCodeLocation):
        In case of a protocol error (common when attempting to get a location
        for a native function) produce the NoSourceFound result.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendLocationLink):
        Simplify with an arrow function.

2019-02-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Some timelines views work, show Legacy CPU timeline
        https://bugs.webkit.org/show_bug.cgi?id=194738

        Reviewed by Yusuke Suzuki.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):

2019-02-15  Aaron Chu  <aaron_chu@apple.com>

        AX: Audit tab should have built-in accessibility tests.
        https://bugs.webkit.org/show_bug.cgi?id=194005
        <rdar://problem/47657503>

        Updated built-in accessibility audits test suite.

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):
        (WI.AuditManager):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded.): Deleted.

2019-02-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: commas in CSS selectors are too dim
        https://bugs.webkit.org/show_bug.cgi?id=194729
        <rdar://problem/48128592>

        Reviewed by Matt Baker.

        Use `--text-color-tertiary` for both light and dark modes.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration .selector > span):
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Variables.css:
        (:root):

2019-02-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Unreviewed, fix intentation.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header):

2019-02-15  Dean Jackson  <dino@apple.com>

        Allow emulation of user gestures from Web Inspector console
        https://bugs.webkit.org/show_bug.cgi?id=194725
        <rdar://problem/48126604>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        Add some UI for emulating a User Gesture when evaluating in the console. This
        allows the developer to do things that would otherwise require actual interaction
        with the page, such as start playback of media on iOS.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js: Add a new setting for this option.
        * UserInterface/Controllers/JavaScriptLogViewController.js:
        (WI.JavaScriptLogViewController.prototype.consolePromptTextCommitted):
        * UserInterface/Controllers/RuntimeManager.js: Call evaluate with this new option.
        (WI.RuntimeManager.prototype.evaluateInInspectedWindow):
        * UserInterface/Views/LogContentView.js: Add a new checkbox in the upper bar
        that allows the user to toggle the setting.
        (WI.LogContentView):
        (WI.LogContentView.prototype.get navigationItems):
        (WI.LogContentView.prototype._handleEmulateInUserGestureSettingChanged):

        * UserInterface/Views/NetworkTableContentView.js: Two drive-by typo fixes :)
        (WI.NetworkTableContentView): perserve -> preserve
        (WI.NetworkTableContentView.prototype.get navigationItems): checkboxs -> checkboxes

2019-02-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: valid values in style attributes are reported as unsupported property values
        https://bugs.webkit.org/show_bug.cgi?id=194619
        <rdar://problem/47917373>

        Reviewed by Devin Rousso.

        Payload of inline styles may contain `range` that doesn't match
        the actual text of the payload - it has an extra empty line at the end.
        Mismatching ranges caused data corruption.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):

2019-02-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: remove unused parameter in _parseStylePropertyPayload
        https://bugs.webkit.org/show_bug.cgi?id=194642

        Reviewed by Devin Rousso.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        The `styleText` parameter was never used

2019-02-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: all actions after an offscreen path modification are marked as offscreen path errors
        https://bugs.webkit.org/show_bug.cgi?id=194684

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

2019-02-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: taking a second recording doesn't select the Initial State by default
        https://bugs.webkit.org/show_bug.cgi?id=194685

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingChanged):

2019-02-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r241497.
        https://bugs.webkit.org/show_bug.cgi?id=194676

        New test times out (Requested by NVI on #webkit).

        Reverted changeset:

        "Web Inspector: Styles: valid values in style attributes are
        reported as unsupported property values"
        https://bugs.webkit.org/show_bug.cgi?id=194619
        https://trac.webkit.org/changeset/241497

2019-02-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: valid values in style attributes are reported as unsupported property values
        https://bugs.webkit.org/show_bug.cgi?id=194619
        <rdar://problem/47917373>

        Reviewed by Devin Rousso.

        Payload of inline styles may contain `range` that doesn't match
        the actual text of the payload - it has an extra empty line at the end.
        Mismatching ranges caused data corruption.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):

2019-02-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update combined and minified copyright header for 2018-2019
        https://bugs.webkit.org/show_bug.cgi?id=194635

        Reviewed by Devin Rousso.

        * Scripts/copy-user-interface-resources.pl:

2019-02-13  Chris Dumez  <cdumez@apple.com>

        Unreviewed, update localizable strings.

        * Localizations/en.lproj/localizedStrings.js:

2019-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Experimental setting for CPU Usage Timeline improvements
        https://bugs.webkit.org/show_bug.cgi?id=194556

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/LegacyCPUTimelineView.css: Added.
        * UserInterface/Views/LegacyCPUTimelineView.js: Added.
        Copy of CPUTimelineView.js/css to be used when the setting is not set.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        ContentView to create based on the setting.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        Experimental switch.

2019-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline.prototype.recordsInTimeRange uses a property most records do not have
        https://bugs.webkit.org/show_bug.cgi?id=194549

        Reviewed by Devin Rousso.

        * UserInterface/Models/Timeline.js:
        (WI.Timeline.prototype.recordsInTimeRange):

2019-02-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: clicking on an empty space in the overview should deselect any selected record bar
        https://bugs.webkit.org/show_bug.cgi?id=194365
        <rdar://problem/47868426>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRecordBar.js:
        (WI.TimelineRecordBar.prototype._handleClick):
        Mark the "click" event so that later listeners know it was handled by `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype._instrumentAdded):
        (WI.TimelineOverview.prototype._instrumentRemoved):
        (WI.TimelineOverview.prototype._handleGraphsContainerClick): Added.
        (WI.TimelineOverview.prototype._handleOverviewGraphRecordSelected): Added.
        (WI.TimelineOverview.prototype._recordSelected):
        Listen for "click" on the graph container and deselect all records when fired, unless the
        click was marked by a `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._recordSelected):
        Ensure that all `WI.TimelineView` update their selected record whenever it changes for any
        other `WI.TimelineView` (or if there is no selected record).

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.prototype.didLayoutSubtree): Added.
        Drive-by: since `WI.TimelineRecordBar` are reused when combining, we need to re-determine
        which one holds the currently selected record.

2019-02-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused maxUsage in CPUTimelineView
        https://bugs.webkit.org/show_bug.cgi?id=194526

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.shown):

2019-02-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: add context menu items to copy a resource's HTTP request/response data
        https://bugs.webkit.org/show_bug.cgi?id=194261
        <rdar://problem/21693696>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.stringifyHTTPRequest): Added.
        (WI.Resource.prototype.stringifyHTTPResponse): Added.
        Don't include the request/response data, as that can be very large, and can easily be
        accessed by actually selecting the resource in the Resources/Network tab.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):

        * Localizations/en.lproj/localizedStrings.js:

2019-02-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: show keyboard shortcut in export tooltip
        https://bugs.webkit.org/show_bug.cgi?id=194454

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView):
        (WI.AuditTestContentView.prototype.get saveData):
        (WI.AuditTestContentView.prototype._exportResult): Added.
        (WI.AuditTestContentView.prototype._handleExportButtonNavigationItemClicked):
        (WI.AuditTestContentView.prototype._exportAudit): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2019-02-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: easier way to select a single line
        https://bugs.webkit.org/show_bug.cgi?id=193305

        Reviewed by Devin Rousso.

        Start property selection after mousedown when mouse cursor moves 8px,
        which is ~1.5 times the width of a text character in the style editor.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowMouseMove): Added.
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._stopSelection):

2019-02-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Popover should work with value in template string `${identifier}`
        https://bugs.webkit.org/show_bug.cgi?id=194459
        <rdar://problem/47932564>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        (WI.CodeMirrorTokenTrackingController.prototype._processJavaScriptExpression):
        When walking backwards to get the full expression we were walking outside
        of the interpolation group `outside ${inside}`. Stop walking backwards once
        we cross the boundary.

2019-02-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Import / Export Heap Snapshots
        https://bugs.webkit.org/show_bug.cgi?id=194448
        <rdar://problem/47928093>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Proxies/HeapSnapshotProxy.js:
        (WI.HeapSnapshotProxy):
        (WI.HeapSnapshotProxy.deserialize):
        (WI.HeapSnapshotProxy.prototype.get imported):
        (WI.HeapSnapshotProxy.prototype.get snapshotStringData):
        (WI.HeapSnapshotProxy.prototype.set snapshotStringData):
        Include an "imported" state on the HeapSnapshot and allow for
        stashing the snapshotStringData on the main thread side.

        * UserInterface/Proxies/HeapSnapshotWorkerProxy.js:
        (WI.HeapSnapshotWorkerProxy.prototype.createImportedSnapshot):
        * UserInterface/Workers/HeapSnapshot/HeapSnapshotWorker.js:
        (HeapSnapshotWorker.prototype.clearSnapshots):
        (HeapSnapshotWorker.prototype.createSnapshot):
        Provide a specialized way to create an imported HeapSnapshot.
        Track imported snapshots separately since they won't want to
        be searched for live/dead objects due to active recording GCs.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):
        (HeapSnapshot.updateCategoriesAndMetadata):
        (HeapSnapshot.allocationBucketCounts):
        (HeapSnapshot.instancesWithClassName):
        (HeapSnapshot.prototype.nodeWithIdentifier):
        (HeapSnapshot.prototype.dominatedNodes):
        (HeapSnapshot.prototype.retainedNodes):
        (HeapSnapshot.prototype.retainers):
        (HeapSnapshot.prototype.updateDeadNodesAndGatherCollectionData):
        (HeapSnapshot.prototype.serialize):
        (HeapSnapshot.prototype.serializeNode):
        (HeapSnapshot.prototype._buildPostOrderIndexes):
        (HeapSnapshot.prototype._buildDominatorIndexes):
        (HeapSnapshot.prototype._buildRetainedSizes):
        (HeapSnapshot.prototype._gcRootPathes.visitNode):
        (HeapSnapshot.prototype._gcRootPathes):
        Construct a HeapSnapshot knowinng whether or not it is imported.
        Imported snapshots may be the "GCDebugging" snapshot type which
        differs from "Inspector" by the number of node fields. So keep
        the node field count a member instead of a global constant
        in order to work with both snapshot types.

        * UserInterface/Models/HeapAllocationsInstrument.js:
        (WI.HeapAllocationsInstrument.prototype._takeHeapSnapshot):
        * UserInterface/Protocol/ConsoleObserver.js:
        (WI.ConsoleObserver.prototype.heapSnapshot):
        * UserInterface/Protocol/HeapObserver.js:
        (WI.HeapObserver.prototype.trackingStart):
        (WI.HeapObserver.prototype.trackingComplete):
        Stash the original string JSON data on the main thread side
        where we already have the data.

        * UserInterface/Views/HeapAllocationsTimelineOverviewGraph.js:
        (WI.HeapAllocationsTimelineOverviewGraph.prototype.layout):
        Don't show [S] icons for imported snapshots with no timestamp.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView):
        (WI.HeapAllocationsTimelineView.prototype.get navigationItems):
        (WI.HeapAllocationsTimelineView.prototype._importButtonNavigationItemClicked):
        (WI.HeapAllocationsTimelineView.prototype._takeHeapSnapshotClicked):
        Import button that just creates a new snapshot.

        * UserInterface/Views/HeapSnapshotContentView.js:
        (WI.HeapSnapshotContentView):
        (WI.HeapSnapshotContentView.prototype.get navigationItems):
        (WI.HeapSnapshotContentView.prototype.get supportsSave):
        (WI.HeapSnapshotContentView.prototype.get saveData):
        (WI.HeapSnapshotContentView.prototype._exportSnapshot):
        Export button that saves the original data.

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForRecord):
        Specialized display string for imported snapshots.

2019-02-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Debug setting to show Internal Object Classes in Heap Snapshot
        https://bugs.webkit.org/show_bug.cgi?id=194445

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/HeapSnapshotDataGridTree.js:
        (WI.HeapSnapshotInstancesDataGridTree.prototype.populateTopLevel):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):

2019-02-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: close unbalanced quotes and parenthesis when editing values
        https://bugs.webkit.org/show_bug.cgi?id=182523
        <rdar://problem/37260209>

        Reviewed by Devin Rousso.

        Close CSS comments, append missing closed quotes and right parenthesis.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.completeUnbalancedValue):
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.set rawValue):

2019-02-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make Timeline markers light gray instead of black in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=194417

        Reviewed by Devin Rousso.

        * UserInterface/Views/RenderingFrameTimelineOverviewGraph.css:
        (.timeline-overview-graph.rendering-frame > .divider):
        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .divider):

2019-02-06  Devin Rousso  <drousso@apple.com>

        Web Inspector: DOM: don't send the entire function string with each event listener
        https://bugs.webkit.org/show_bug.cgi?id=194293
        <rdar://problem/47822809>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup.prototype._functionTextOrLink):

2019-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Worker not found" uncaught protocol errors
        https://bugs.webkit.org/show_bug.cgi?id=194319

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.terminatePageTarget):
        Remove Worker targets associated with the Page on navigation.
        Eventually we will have to associate Workers with their parent
        frame, but for now a transition can only happen at the Page
        level, so we can eliminate all workers on the page.

        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager.prototype.workerCreated):
        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.WorkerConnection.sendMessageToBackend):
        Allow any WorkerAgent domain message to fail silently. This can
        happen if a Worker is created and destroyed before the frontend
        hears about it and sends messages to the backend for that Worker.

2019-02-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: PropertiesChanged shouldn't fire when old and new text are both empty
        https://bugs.webkit.org/show_bug.cgi?id=194318

        Reviewed by Devin Rousso.

        Previously, WI.CSSStyleDeclaration.Event.PropertiesChanged fired when
        old text and new text were empty strings.

        * UserInterface/Models/CSSStyleDeclaration.js:

2019-02-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Lots of time spent updating related resources in ResourceDetailsSidebar when loading a page with lots of resources
        https://bugs.webkit.org/show_bug.cgi?id=159577
        <rdar://problem/27251461>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRelatedResourcesSection):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):

2019-02-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab: selection is broken after deleting the selected node
        https://bugs.webkit.org/show_bug.cgi?id=194300
        <rdar://problem/47829275>

        Reviewed by Devin Rousso.

        Deleting a TreeElement can cause an IndexSet including indexes
        outside the deleted range to be passed to SelectionController,
        corrupting the internal selection state.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._indexesForSubtree.numberOfElementsInSubtree): Added.
        (WI.TreeOutline.prototype._indexesForSubtree):
        Finding the last (rightmost leaf) TreeElement in the subtree used
        TreeElement.prototype.traverseNextElement to do a depth first traversal.
        This method did not stay within the subtree rooted at `treeElement`.

2019-02-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r240947): Resources tab: can't select main frame after refreshing page
        https://bugs.webkit.org/show_bug.cgi?id=194254
        <rdar://problem/47805023>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        TreeOutline should always call the TreeElement `select` and `deselect`
        methods while processing selection changes. Having notifications
        suppressed by `this._suppressNextSelectionDidChangeEvent` should only
        affect the dispatching of TreeOutline events.

2019-02-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: remove harmless "property was unlocked" asserts
        https://bugs.webkit.org/show_bug.cgi?id=194262

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._handleNameChange):
        (WI.SpreadsheetStyleProperty.prototype._handleValueChange):

2019-02-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: undefined is not an object (evaluating 'classes.includes')
        https://bugs.webkit.org/show_bug.cgi?id=194280
        <rdar://problem/47811159>

        Reviewed by Matt Baker.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype._populateClassToggles):
        Add a fallback value in case the `class` attribute isn't specified for the selected node.

2019-02-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Resources: missing resource data for document on reload
        https://bugs.webkit.org/show_bug.cgi?id=194243
        <rdar://problem/47559021>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype.set resource):
        (WI.ResourceDetailsSidebarPanel.prototype._applyResourceEventListeners):

        * UserInterface/Base/Object.js:
        (WI.Object.removeEventListener):
        Drive-by: there's no need to iterate over the entire table to check if `thisObject` exists,
        as that is handled for us by `ListMultimap`, which we later call anyways.

2019-02-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: Resources: WI.TreeOutline assertions when refreshing the page
        https://bugs.webkit.org/show_bug.cgi?id=194242
        <rdar://problem/47802027>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype.removeChildren):
        FolderTreeElements are removed by the base class call to removeChildren.
        Calling `removeChildren` for detached TreeElements is unnecessary.

2019-02-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: clicking a selected call frame doesn't re-scroll
        https://bugs.webkit.org/show_bug.cgi?id=194169
        <rdar://problem/47743864>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._handleMouseDown):
        Add a special case for a single-selection TreeOutline with
        allowsRepeatSelection enabled. Since the element is already
        selected, bypass the SelectionCongroller and dispatch an
        event with event.data.selectedByUser set to true.

2019-02-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: fix race conditions when editing
        https://bugs.webkit.org/show_bug.cgi?id=192739
        <rdar://problem/46752925>

        Reviewed by Devin Rousso.

        Editing CSS property in the style editor syncronously updates CSSStyleDeclaration on the front-end
        and asyncronously updates the backend by calling CSSAgent.setStyleText. After the new style text is applied
        on the backend, CSSStyleDeclaration (on the front-end) gets updated.

        Unsure there's no race conditions by introducing `_updatesInProgressCount`:

          - Increment it before calling CSSAgent.setStyleText.
          - Decrement it after CSSAgent.setStyleText is finished.

        Prevent updates of CSSStyleDeclaration when _updatesInProgressCount isn't 0.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.set text): Removed.
        (WI.CSSStyleDeclaration.prototype.setText): Added.
        Change the setter to a method since it has side effects including an asynchronous backend call.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeStyleText):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.get nameTextField): Removed.
        (WI.SpreadsheetStyleProperty.prototype.get valueTextField): Removed.
        Drive-by: remove unused code.

2019-02-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: create icons for media event types instead of using a blue circle
        https://bugs.webkit.org/show_bug.cgi?id=190381
        <rdar://problem/45507995>

        Reviewed by Brian Burg.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.isPlayEvent): Added.
        (WI.DOMNode.isPauseEvent): Added.
        (WI.DOMNode.isStopEvent): Added.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.layout):
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown tr > :matches(th, td)):
        (.dom-events-breakdown .graph):
        (.dom-events-breakdown .graph > :matches(img, .area)): Added.
        (.dom-events-breakdown .graph > img): Added.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > img): Added.
        (.dom-events-breakdown .graph > :matches(.point, .area)): Deleted.
        (.dom-events-breakdown .graph > .point): Deleted.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > .point): Deleted.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine):

        * UserInterface/Images/EventPause.svg: Added.
        * UserInterface/Images/EventPlay.svg: Added.
        * UserInterface/Images/EventProcessing.svg: Added.
        * UserInterface/Images/EventStop.svg: Added.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.ColumnChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194171

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph):
        * UserInterface/Views/ColumnChart.js:
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.set size):
        (WI.ColumnChart.prototype.layout):
        (WI.ColumnChart.prototype.get element): Deleted.
        (WI.ColumnChart.prototype.needsLayout): Deleted.
        (WI.ColumnChart.prototype.updateLayout): Deleted.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.StackedLineChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194119

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/LineChart.js:
        (WI.LineChart.prototype.layout):
        (WI.LineChart):
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph):
        * UserInterface/Views/StackedLineChart.js:
        (WI.StackedLineChart):
        (WI.StackedLineChart.prototype.set size):
        (WI.StackedLineChart.prototype.layout):
        (WI.StackedLineChart.prototype.get element): Deleted.
        (WI.StackedLineChart.prototype.get points): Deleted.
        (WI.StackedLineChart.prototype.needsLayout): Deleted.
        (WI.StackedLineChart.prototype.updateLayout): Deleted.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make WI.CircleChart a WI.View subclass
        https://bugs.webkit.org/show_bug.cgi?id=194118

        Reviewed by Matt Baker.

        * UserInterface/Views/CircleChart.js:
        (WI.CircleChart.prototype.get centerElement):
        (WI.CircleChart.prototype.layout):
        (WI.CircleChart.prototype.get element): Deleted.
        (WI.CircleChart.prototype.needsLayout): Deleted.
        (WI.CircleChart.prototype.updateLayout): Deleted.
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView):

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline Detail Views do not reset properly when new time range selection contains nothing
        https://bugs.webkit.org/show_bug.cgi?id=194115
        <rdar://problem/47716693>

        Rubber-stamped by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView.prototype.reset):
        (WI.CPUTimelineView.prototype.clear):
        (WI.CPUTimelineView.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.reset):
        (WI.MemoryTimelineView.prototype.clear):
        (WI.MemoryTimelineView.prototype.layout):
        When there are no visible records in the selected range clear our UI.
        Introduce a `clear` method that clears the UI but keeps
        non-range-specific values (e.g. maximums).

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline graphs have drawing issues with multiple discontinuities
        https://bugs.webkit.org/show_bug.cgi?id=194110
        <rdar://problem/47714356>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.layout.xScale): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.js:
        (WI.MemoryTimelineOverviewGraph.prototype.layout.insertDiscontinuity):
        (WI.MemoryTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.layout.xScale):
        (WI.MemoryTimelineView.prototype.layout.yScale):
        (WI.MemoryTimelineView.prototype.layout):
        Handle if multiple discontinuities exist between records.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline time range selection should show duration alongside start and end
        https://bugs.webkit.org/show_bug.cgi?id=194109
        <rdar://problem/47714279>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype._updateTimeRangePathComponents):
        Include the duration when not obvious.

2019-02-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve API and documentation of ColumnChart
        https://bugs.webkit.org/show_bug.cgi?id=193982

        Reviewed by Devin Rousso.

        This used to be named "BarChart". Convert remaining instances
        of "bar" to "column" and clean up related things.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (body[dir=rtl] .timeline-overview-graph.cpu > .column-chart):
        (.timeline-overview-graph.cpu > .column-chart > svg > rect):
        (body[dir=rtl] .timeline-overview-graph.cpu > .bar-chart): Deleted.
        (.timeline-overview-graph.cpu > .bar-chart > svg > rect): Deleted.
        * UserInterface/Views/CPUTimelineOverviewGraph.js:
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        * UserInterface/Views/ColumnChart.js:
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.get columns):
        (WI.ColumnChart.prototype.addColumn):
        (WI.ColumnChart.prototype.clear):
        (WI.ColumnChart.prototype.updateLayout):
        (WI.ColumnChart.prototype.get bars): Deleted.
        (WI.ColumnChart.prototype.addBar): Deleted.
        * UserInterface/Views/StackedLineChart.js:
        (WI.StackedLineChart.prototype.get element):
        (WI.StackedLineChart.prototype.get points):

2019-01-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline time range selection sometimes shows 0.000, should be just 0
        https://bugs.webkit.org/show_bug.cgi?id=194108
        <rdar://problem/47714273>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        Check under epsilon for the zero case.

2019-01-31  Matt Baker  <mattbaker@apple.com>

        REGRESSION(r?): Web Inspector: Clicking on text doesn't move text caret when editing innerHTML/tagName/attribute
        https://bugs.webkit.org/show_bug.cgi?id=192652
        <rdar://problem/46684612>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.canSelectOnMouseDown):
        Call to Event.preventDefault() should be made here instead of at the
        TreeOutline level.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.selectOnMouseDown): Deleted.
        Remove dead code.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline._handleMouseDown):
        Do not prevent default event handling when the item cannot be selected.
        This matches TreeOutline behavior prior to introducing SelectionController.

2019-01-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Memory Timeline View should be responsive / resizable
        https://bugs.webkit.org/show_bug.cgi?id=153758
        <rdar://problem/24444320>

        Reviewed by Joseph Pecoraro.

        Leverage the SVG `viewBox` (which was misspelled) to scale the graphs when the width of the
        container changes. The `viewBox` used is equal to the total amount of time that is visible.

        Make `WI.LineChart` (and its container classes) into subclasses of `WI.View` to leverage the
        existing layout system.

        Prevent any work from being done when resizing, as this is now handled by CSS/SVG.

        * UserInterface/Views/LineChart.js:
        (WI.LineChart):
        (WI.LineChart.prototype.set size):
        (WI.LineChart.prototype.addPoint):
        (WI.LineChart.prototype.clear):
        (WI.LineChart.prototype.layout):
        (WI.LineChart.prototype.get element): Deleted.
        (WI.LineChart.prototype.get points): Deleted.
        (WI.LineChart.prototype.needsLayout): Deleted.
        (WI.LineChart.prototype.updateLayout): Deleted.

        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.updateChart): Added.
        (WI.CPUUsageView.prototype.get element): Deleted.
        (WI.CPUUsageView.prototype.layoutWithDataPoints): Deleted.
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (.cpu-usage-view > .graph, .cpu-usage-view > .graph > .line-chart, .cpu-usage-view > .graph > .line-chart > svg): Added.
        (.cpu-usage-view > .graph): Deleted.

        * UserInterface/Views/CPUTimelineView.js:
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.layoutView.xScale):
        (WI.CPUTimelineView.prototype.layout.layoutView.yScale):
        * UserInterface/Views/CPUTimelineView.css:
        (body .timeline-view.cpu): Added.
        (.timeline-view.cpu > .content):
        (.timeline-view.cpu): Deleted.

        * UserInterface/Views/MemoryCategoryView.js:
        (WI.MemoryCategoryView):
        (WI.MemoryCategoryView.prototype.clear):
        (WI.MemoryCategoryView.prototype.updateChart): Added.
        (WI.MemoryCategoryView.prototype.get element): Deleted.
        (WI.MemoryCategoryView.prototype.layoutWithDataPoints): Deleted.
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view):
        (.memory-category-view > .details):
        (.memory-category-view > .graph, .memory-category-view > .graph > .line-chart, .memory-category-view > .graph > .line-chart > svg): Added.
        (.memory-category-view > .graph): Deleted.

        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.prototype.layout):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView.xScale):
        (WI.MemoryTimelineView.prototype.layout.layoutCategoryView.yScale):
        (WI.MemoryTimelineView.prototype._initializeCategoryViews):
        (WI.MemoryTimelineView.prototype._initializeCategoryViews.appendLegendRow):
        * UserInterface/Views/MemoryTimelineView.css:
        (.timeline-view.memory > .content > .overview):
        (.timeline-view.memory > .content > .overview > .divider):
        (.timeline-view.memory > .content > .overview .total-usage, .timeline-view.memory > .content > .overview .max-percentage, .timeline-view.memory > .content > .overview .legend .size): Added.
        (.timeline-view.memory .legend):
        (.timeline-view.memory .legend .row): Added.
        (.timeline-view.memory .legend .row + .row): Added.
        (.timeline-view.memory .legend .swatch): Addd.
        (.timeline-view.memory .legend .swatch.javascript): Addd.
        (.timeline-view.memory .legend .swatch.images): Addd.
        (.timeline-view.memory .legend .swatch.layers): Addd.
        (.timeline-view.memory .legend .swatch.page): Addd.
        (.timeline-view.memory .legend .swatch.current): Addd.
        (.timeline-view.memory > .content): Deleted.
        (.timeline-view.memory > .content > .overview .total-usage, .timeline-view.memory > .content > .overview .max-percentage):
        (body[dir=ltr] .timeline-view.memory .legend): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend): Deleted.
        (.timeline-view.memory .legend > .row): Deleted.
        (.timeline-view.memory .legend > .row > .swatch): Deleted.
        (body[dir=ltr] .timeline-view.memory .legend > .row > .swatch): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend > .row > .swatch): Deleted.
        (.timeline-view.memory .legend > .row > p): Deleted.
        (body[dir=ltr] .timeline-view.memory .legend > .row > :matches(.label, .size)): Deleted.
        (body[dir=rtl] .timeline-view.memory .legend > .row > :matches(.label, .size)): Deleted.
        (.timeline-view.memory .legend > .row > .label): Deleted.
        (.timeline-view.memory .legend > .row > .size): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.javascript): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.images): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.layers): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.page): Deleted.
        (.timeline-view.memory .legend > .row > .swatch.current): Deleted.

2019-01-30  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Changes: group CSS rules by resource
        https://bugs.webkit.org/show_bug.cgi?id=193940
        <rdar://problem/47617785>

        Reviewed by Matt Baker.

        Create resource sections with source links in their headers.

        Also:
        - Use read-only WI.SpreadsheetStyleProperty to display inline swatches for colors;
        - Make the red and green background span the entire width of the panel.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ChangesDetailsSidebarPanel.css:
        (.sidebar > .panel.changes-panel):
        (.sidebar > .panel.changes-panel .css-rule):
        (.sidebar > .panel.selected.changes-panel.empty):
        (.changes-panel .resource-section):
        (.changes-panel .resource-section > .header):
        (.changes-panel .resource-section > .header > a:hover):
        (.sidebar > .panel.changes-panel .selector-line,):
        (.changes-panel .css-property-line > .property):
        (.changes-panel .css-property-line.unchanged):
        (.changes-panel .css-property-line.added):
        (.changes-panel .css-property-line.removed):
        (.changes-panel .css-property-line.removed::before):
        (.changes-panel .css-property-line.added::before):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/ChangesDetailsSidebarPanel.js:
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        (WI.ChangesDetailsSidebarPanel.prototype._createRuleElement):
        (WI.ChangesDetailsSidebarPanel.prototype._createLocationLink):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        Allow passing `null` as a delegate.

2019-01-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: change style of device settings override popover content
        https://bugs.webkit.org/show_bug.cgi?id=194049

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.showUserAgentInput):
        (WI._handleDeviceSettingsToolbarButtonClicked.createContainer): Deleted.
        * UserInterface/Views/Main.css:
        (.device-settings-content):
        (.device-settings-content > tr > td:first-child): Added.
        (.device-settings-content .container):
        (.device-settings-content .container > * + *): Added.
        (.device-settings-content .column): Added.
        (.device-settings-content .user-agent select): Added.
        (.device-settings-content .user-agent input): Added.
        (.device-settings-content label + label): Added.
        (.device-settings-content label > input): Added.
        (.device-settings-content .columns): Deleted.
        (.device-settings-content .columns > .column): Deleted.
        (.device-settings-content .columns > .column + .column): Deleted.
        (.device-settings-content .user-agent-value): Deleted.
        (.device-settings-content .user-agent-value > select): Deleted.
        (.device-settings-content .user-agent-value > input): Deleted.
        (body[dir=ltr] .device-settings-content .user-agent-value > input): Deleted.
        (body[dir=rtl] .device-settings-content .user-agent-value > input): Deleted.

2019-01-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: null is not an object (evaluating 'url.startsWith')
        https://bugs.webkit.org/show_bug.cgi?id=194029

        Reviewed by Matt Baker.

        * UserInterface/Views/ConsoleMessageView.js:
        (WI.ConsoleMessageView.prototype._appendLocationLink):

2019-01-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Enabled Changes panel in Elements tab by default
        https://bugs.webkit.org/show_bug.cgi?id=193986
        <rdar://problem/47647683>

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2019-01-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: enable computed style cascades by default
        https://bugs.webkit.org/show_bug.cgi?id=193983
        <rdar://problem/47645821>

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.computed-style-properties):
        (.computed-style-properties .property .go-to-arrow):
        (.details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        (.details-section.computed-style-properties > .content):
        (@media (prefers-color-scheme: dark)):
        (.computed-with-traces .computed-style-properties): Deleted.
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)): Deleted.
        (.computed-with-traces .details-section.computed-style-properties > .content): Deleted.
        (.computed-with-traces .computed-style-properties .property .go-to-arrow): Deleted.
        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2019-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unnecessary promise rejection handlers now that we use the global onunhandledrejection handler
        https://bugs.webkit.org/show_bug.cgi?id=193921

        Reviewed by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._exportHAR):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.updateFormattedState):

2019-01-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page WebRTC settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193863
        <rdar://problem/47572764>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeTarget):
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.createCheckbox):
        (WI._handleDeviceSettingsToolbarButtonClicked.createColumns): Deleted.
        * UserInterface/Views/Main.css:
        (.device-settings-content .container): Added.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab should toggle visibility for all selected nodes
        https://bugs.webkit.org/show_bug.cgi?id=193089
        <rdar://problem/47009256>

        Reviewed by Devin Rousso.

        Update "Toggle Visibility" command in DOM tree for multiple selection.
        When both visible and hidden elements are selected in the DOM tree,
        the toggle command behaves contextually. If one or more elements are
        visible, they are hidden, otherwise they are shown. The context menu
        shows "Hide Elements" or "Show Elements", respectively.

        When only one element is selected, or the context menu target element
        is not selected, the command continues to be "Toggle Visibility".

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.get isNodeHidden): Added.
        (WI.DOMTreeElement.prototype.toggleElementVisibility.inspectedPage_node_injectStyleAndToggleClass):
        (WI.DOMTreeElement.prototype.toggleElementVisibility):
        (WI.DOMTreeElement.prototype._populateTagContextMenu):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.toggleSelectedElementsVisibility):  Added.
        Provide a public method for toggling the visibility of selected DOM nodes.
        Used by the "H" keyboard shortcut and DOMTreeElement context menu.

        (WI.DOMTreeOutline.prototype._hideElements):
        (WI.DOMTreeOutline.prototype._hideElement): Deleted.
        Rename for multiple selection.

2019-01-28  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r240351.
        https://bugs.webkit.org/show_bug.cgi?id=193918

        Causes overlapping Timeline records, as some record types
        don't have an endTime (Requested by drousso on #webkit).

        Reverted changeset:

        "WebInspector: Confusingly nested events in the timeline for
        Mutation Observers"
        https://bugs.webkit.org/show_bug.cgi?id=192884
        https://trac.webkit.org/changeset/240351

2019-01-28  Matt Baker  <mattbaker@apple.com>

        REGRESSION(?): Web Inspector: Can have multiple Timelines selected after edit mode
        https://bugs.webkit.org/show_bug.cgi?id=193808
        <rdar://problem/47537734>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didRemoveItems):

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._indexesForSubtree):
        Fix a bug where no IndexSet was returned when passed a TreeElement with
        no children. This caused the Timelines tree selection to be corrupted when
        entering and exiting edit mode, as TreeElements are inserted and removed.

2019-01-28  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add Changes panel to Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=193803

        Reviewed by Devin Rousso.

        Introduce the new experimental Changes Panel. It shows a list of CSS changes
        made via Web Inspector, so the changes could be copied to the source files.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Base/Utilities.js:
        (Array.diffArrays): Added.

        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.get modifiedCSSRules):
        (WI.CSSManager.prototype.addModifiedCSSRule):
        (WI.CSSManager.prototype.removeModifiedCSSRule):
        (WI.CSSManager.prototype._mainResourceDidChange):

        * UserInterface/Main.html:
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty):
        (WI.CSSProperty.prototype.remove):
        (WI.CSSProperty.prototype.replaceWithText):
        (WI.CSSProperty.prototype.commentOut):
        (WI.CSSProperty.prototype.set text):
        (WI.CSSProperty.prototype.get modified):
        (WI.CSSProperty.prototype.set name):
        (WI.CSSProperty.prototype.set rawValue):
        (WI.CSSProperty.prototype.get initialState):
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        (WI.CSSProperty.prototype._markModified):
        Mark CSSProperty modified *before* making any changes to copy its initial state.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule):
        (WI.CSSRule.prototype.get id):
        (WI.CSSRule.prototype.get initialState):
        (WI.CSSRule.prototype.get stringId):
        (WI.CSSRule.prototype.markModified):

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get initialState):
        (WI.CSSStyleDeclaration.prototype.get enabledProperties):
        (WI.CSSStyleDeclaration.prototype.get properties):
        (WI.CSSStyleDeclaration.prototype.set properties):
        (WI.CSSStyleDeclaration.prototype.propertyForName):
        (WI.CSSStyleDeclaration.prototype.newBlankProperty):
        (WI.CSSStyleDeclaration.prototype.markModified):

        * UserInterface/Views/ChangesDetailsSidebarPanel.css: Added.
        (.sidebar > .panel.changes-panel):
        (.sidebar > .panel.changes-panel:not(.empty)):
        (.sidebar > .panel.changes-panel.empty):
        (.changes-panel ins):
        (.changes-panel del):
        (.changes-panel del.css-property::before):
        (.changes-panel ins.css-property::before):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/ChangesDetailsSidebarPanel.js: Added.
        (WI.ChangesDetailsSidebarPanel):
        (WI.ChangesDetailsSidebarPanel.prototype.inspect):
        (WI.ChangesDetailsSidebarPanel.prototype.supportsDOMNode):
        (WI.ChangesDetailsSidebarPanel.prototype.shown):
        (WI.ChangesDetailsSidebarPanel.prototype.detached):
        (WI.ChangesDetailsSidebarPanel.prototype.layout):
        (WI.ChangesDetailsSidebarPanel.prototype._mainResourceDidChange):

        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property):
        (.spreadsheet-style-declaration-editor .property.modified):
        (.spreadsheet-style-declaration-editor .property.modified:not(.selected)):
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):

2019-01-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: handle CSS Color 4 color syntaxes
        https://bugs.webkit.org/show_bug.cgi?id=193166
        <rdar://problem/47062403>

        Reviewed by Simon Fraser.

        * UserInterface/Models/Color.js:
        (WI.Color.fromString):
        (WI.Color.fromString.splitFunctionString): Added.
        (WI.Color.fromString.parseFunctionAlpha): Added.
        (WI.Color.fromString.parseFunctionComponent): Added.
        (WI.Color.fromString.parseHueComponent): Added.
        (WI.Color.fromString.parsePercentageComponent): Added.

2019-01-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit the user agent of a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193862
        <rdar://problem/47359292>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        (WI.initializeTarget):
        (WI._handleDeviceSettingsToolbarButtonClicked):
        (WI._handleDeviceSettingsToolbarButtonClicked.updateActivatedState):
        (WI._handleDeviceSettingsToolbarButtonClicked.applyOverriddenUserAgent):
        (WI._handleDeviceSettingsToolbarButtonClicked.applyOverriddenSetting):
        (WI._handleDeviceSettingsToolbarButtonClicked.createContainer):
        (WI._handleDeviceSettingsToolbarButtonClicked.createColumns):
        (WI._handleDeviceSettingsToolbarButtonClicked.calculateTargetFrame):
        (WI._handleDeviceSettingsToolbarButtonClicked.showUserAgentInput):

        * UserInterface/Views/Main.css:
        (.device-settings-content):
        (.device-settings-content .user-agent-value): Added.
        (.device-settings-content .user-agent-value > select): Added.
        (.device-settings-content .user-agent-value > input): Added.
        (body[dir=ltr] .device-settings-content .user-agent-value > input): Added.
        (body[dir=rtl] .device-settings-content .user-agent-value > input): Added.
        (.device-settings-content label > input): Added.
        (body[dir=ltr] .device-settings-content label > input): Deleted.
        (body[dir=rtl] .device-settings-content label > input): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide a way to edit page settings on a remote target
        https://bugs.webkit.org/show_bug.cgi?id=193813
        <rdar://problem/47359510>

        Reviewed by Joseph Pecoraro.

        Add toolbar button that shows a popover with the target's (page's) settings when clicked.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        (WI.initializeTarget): Added.
        (WI._handleDeviceSettingsToolbarButtonClicked): Added.
        (WI.didDismissPopover): Added.
        * UserInterface/Views/Main.css:
        (.device-settings-content): Added.
        (.device-settings-content .columns): Added.
        (.device-settings-content .columns > .column): Added.
        (.device-settings-content .columns > .column + .column): Added.
        (body[dir=ltr] .device-settings-content label > input): Added.
        (body[dir=rtl] .device-settings-content label > input): Added.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._update.area):
        (WI.Popover.prototype._update):
        (WI.Popover.prototype._drawBackground):
        (WI.Popover.prototype._bestMetricsForEdge):
        (WI.Popover.prototype._drawFrame):
        If the best area is negative, treat it as the worst area.
        Allow areas to be clamped so long as the clamped edge is not the preferred edge.

        * UserInterface/Base/Test.js:
        (WI.initializeTarget): Added.

        * UserInterface/Images/Device.svg: Added.
        * Localizations/en.lproj/localizedStrings.js:

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: unable to import audits
        https://bugs.webkit.org/show_bug.cgi?id=193861

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async processJSON):

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: No node with given id found
        https://bugs.webkit.org/show_bug.cgi?id=193833

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype.layout):
        (WI.CanvasContentView.prototype._refreshPixelSize):
        Drive-by: show the refresh button when viewing a specific canvas.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._removeCanvas):
        Reset to the overview if the canvas is removed.

2019-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve Dark Mode appearance within Memory timeline
        https://bugs.webkit.org/show_bug.cgi?id=193804

        Reviewed by Matt Baker.

        * UserInterface/Views/TimelineOverview.css:
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item.selected):
        (.timeline-overview > .tree-outline.timelines .item.selected + .item,):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
        (body.window-inactive .timeline-overview > .tree-outline.timelines .item.selected + .item): Deleted.
        Fix some colors for Timelines edit mode.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend): Deleted.
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory:nth-child(even) > .legend):
        (@media (prefers-color-scheme: dark)):
        (.timeline-overview-graph.memory > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend): Deleted.
        Improved colors in CPU / Memory overview graph legends.

        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view > .details):
        * UserInterface/Views/CircleChart.css:
        (.circle-chart > svg > path.background):
        * UserInterface/Views/MemoryCategoryView.css:
        (.memory-category-view > .details):
        (.memory-category-view > .details > .name):
        * UserInterface/Views/MemoryTimelineView.css:
        (.timeline-view.memory > .content > .overview .total-usage,):
        (.timeline-view.memory .legend > .row > .size):
        Improved colors in CPU / Memory detail views.

        * UserInterface/Views/Variables.css:
        (:root):
        Add a default --text-secondary-color which will end up slightly
        lighter in dark mode where it was already implemented.

        (@media (prefers-color-scheme: dark)):
        Improved max-comparison colors.

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: DOMContentLoaded and load event lines need to be more obvious
        https://bugs.webkit.org/show_bug.cgi?id=193186
        <rdar://problem/45100694>

        Reviewed by Joseph Pecoraro.

        Shift around z-index values to make Timelines markers appear behind record bars. Widen the
        marker hit region to make it easier to see the tooltip.

        * UserInterface/Views/Variables.css:
        (:root):

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler):
        (.timeline-ruler > .markers):
        (.timeline-ruler > .markers > .marker):
        (body[dir=ltr] .timeline-ruler > .markers > .marker):
        (body[dir=rtl] .timeline-ruler > .markers > .marker):
        (.timeline-ruler > .markers > .marker::before):
        (body[dir=ltr] .timeline-ruler > .markers > .marker::before):
        (body[dir=rtl] .timeline-ruler > .markers > .marker::before):
        (.timeline-ruler > .markers > .marker::after): Added.
        (body[dir=ltr] .timeline-ruler > .markers > .marker::after): Added.
        (body[dir=rtl] .timeline-ruler > .markers > .marker::after): Added.
        (.timeline-ruler > .markers > .marker.current-time):
        (.timeline-ruler > .markers > .marker.current-time::after): Added.
        (.timeline-ruler > .markers > .marker.load-event):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        (.timeline-ruler > .markers > .marker.timestamp):
        (.timeline-ruler > .selection-handle):
        (.timeline-ruler.both-handles-clamped > .selection-handle):
        (.timeline-ruler > .shaded-area):
        (.timeline-ruler > .markers > .marker.current-time::before): Deleted.

        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar):
        (.timeline-record-bar > .segment):

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (.timeline-overview-graph.cpu > .legend):
        * UserInterface/Views/MemoryTimelineOverviewGraph.css:
        (.timeline-overview-graph.memory > .legend):

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: remove experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=193743
        <rdar://problem/28234022>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Setting.js:
        (WI.Setting):
        (WI.Setting.localStorageKey): Added.
        (WI.Setting.migrateValue):
        Drive-by: add the localStorage key prefix to the key passed into `WI.Setting.migrateValue`.

        * UserInterface/Base/Main.js:
        (WI.loaded):

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView.isTabAllowed):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * Localizations/en.lproj/localizedStrings.js:

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: show uncaught exception view for unhandled promise rejections
        https://bugs.webkit.org/show_bug.cgi?id=193832

        Reviewed by Matt Baker.

        * UserInterface/Debug/UncaughtExceptionReporter.js:
        (handleUnhandledPromiseRejection): Added.

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r237808): offscreen path warning doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=193830

        Reviewed by Matt Baker.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

2019-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version (iOS 12.2)
        https://bugs.webkit.org/show_bug.cgi?id=193810
        <rdar://problem/42981838>

        Reviewed by Matt Baker.

        * UserInterface/Protocol/Legacy/12.2/InspectorBackendCommands.js: Added.
        * Versions/Inspector-iOS-12.2.json: Added.

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: `WI.Setting.migrateValue` doesn't take into account the key prefix
        https://bugs.webkit.org/show_bug.cgi?id=193814

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js:
        (WI.Setting):
        (WI.Setting.migrateValue):
        (WI.Setting._localStorageKey): Added.

2019-01-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: improve invalid Audit/Recording JSON error messages
        https://bugs.webkit.org/show_bug.cgi?id=193476
        <rdar://problem/47303659>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload):
        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup.async fromPayload):
        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload.checkArray):
        (WI.AuditTestCaseResult.async fromPayload):
        * UserInterface/Models/AuditTestGroupResult.js:
        (WI.AuditTestGroupResult.async fromPayload):
        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.synthesizeWarning): Added.
        (WI.AuditManager.synthesizeError):
        (WI.AuditManager.prototype.async processJSON):

        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        (WI.Recording.synthesizeWarning): Added.
        (WI.Recording.synthesizeError):
        * UserInterface/Models/RecordingFrame.js:
        (WI.RecordingFrame.fromPayload):
        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.fromPayload):
        (WI.RecordingAction.prototype.async swizzle):
        (WI.RecordingAction.prototype.apply):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.processJSON):

        * Localizations/en.lproj/localizedStrings.js:

2019-01-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: add supports key to test/group for compatibility
        https://bugs.webkit.org/show_bug.cgi?id=193686
        <rdar://problem/47460872>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        (WI.AuditTestBase.prototype.get supported): Added.
        (WI.AuditTestBase.prototype.set supported): Added.
        (WI.AuditTestBase.prototype.set disabled):
        (WI.AuditTestBase.prototype.async start):
        (WI.AuditTestBase.prototype.stop):
        (WI.AuditTestBase.toJSON):
        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload):
        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.async fromPayload):
        (WI.AuditTestGroup.prototype.get supported): Added.
        (WI.AuditTestGroup.prototype.set supported): Added.
        Add support for a "supports" key in the test JSON that prevents the test from being run if
        it's value is lower than the frontend/backend version.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondelete):
        (WI.AuditTreeElement.prototype.populateContextMenu):
        (WI.AuditTreeElement.prototype._updateStatus): Added.
        (WI.AuditTreeElement.prototype._showRunningSpinner):
        (WI.AuditTreeElement.prototype._showRunningProgress):
        (WI.AuditTreeElement.prototype._updateTestGroupDisabled):
        (WI.AuditTreeElement.prototype._handleTestCaseCompleted):
        (WI.AuditTreeElement.prototype._handleTestResultCleared):
        (WI.AuditTreeElement.prototype._handleTestGroupCompleted):
        (WI.AuditTreeElement.prototype._handleManagerEditingChanged):
        (WI.AuditTreeElement.prototype.canSelectOnMouseDown): Deleted.
        (WI.AuditTreeElement.prototype._updateLevel): Deleted.
        * UserInterface/Views/AuditTreeElement.css:
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.unsupported, .manager-active) > .status:hover > img): Added.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.unsupported, .editing-audits) > .status:not(:hover)): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status, .tree-outline .item.audit.unsupported + .children .item.audit.unsupported  > .status > img): Added.
        (.tree-outline .item.audit.unsupported:not(.selected) > :matches(.icon, .titles)): Added.
        (.tree-outline .item.audit.unsupported > .status > img): Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.manager-active) > .status:hover > img): Deleted.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:not(:hover)): Deleted.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.
        Hide unsupported tests unless in edit mode, where they are greyed out and cannot be enabled.
        Drive-by: only allow tests to be deleted when in edit mode.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):

        * Localizations/en.lproj/localizedStrings.js:

2019-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CPU Usage Timeline
        https://bugs.webkit.org/show_bug.cgi?id=193730
        <rdar://problem/46797201>

        Reviewed by Devin Rousso.

        CPU Usage is gathered in the backend twice a second, the frequency of the
        ResourceUsageThread in WebCore. The frontend displays cpu usage in a few
        ways in the Timeline.

        We use a column chart in the timeline overview to display the frequency and
        relative distance of samples. This helps show if the samples were close
        together or far apart, which indicates how meaningful they will be at a
        particular scale.

        We use a line chart in the timeline detail view which will be easier to see
        the changes over a particular time range selection.

        * Localizations/en.lproj/localizedStrings.js:
        New strings.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        * UserInterface/Protocol/CPUProfilerObserver.js:
        (WI.CPUProfilerObserver.prototype.trackingStart):
        (WI.CPUProfilerObserver.prototype.trackingUpdate):
        (WI.CPUProfilerObserver.prototype.trackingComplete):
        (WI.CPUProfilerObserver):
        New files and default registration.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get CPUProfilerAgent):
        New Agent.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.availableTimelineTypes):
        (WI.TimelineManager.prototype.cpuProfilerTrackingStarted):
        (WI.TimelineManager.prototype.cpuProfilerTrackingUpdated):
        (WI.TimelineManager.prototype.cpuProfilerTrackingCompleted):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager.prototype.memoryTrackingStart): Renamed.
        (WI.TimelineManager.prototype.memoryTrackingUpdate): Renamed.
        (WI.TimelineManager.prototype.memoryTrackingComplete): Renamed.
        * UserInterface/Models/CPUInstrument.js:
        (WI.CPUInstrument):
        (WI.CPUInstrument.supported):
        (WI.CPUInstrument.prototype.get timelineRecordType):
        (WI.CPUInstrument.prototype.startInstrumentation):
        (WI.CPUInstrument.prototype.stopInstrumentation):
        * UserInterface/Models/CPUTimelineRecord.js:
        (WI.CPUTimelineRecord):
        (WI.CPUTimelineRecord.prototype.get timestamp):
        (WI.CPUTimelineRecord.prototype.get usage):
        * UserInterface/Models/Instrument.js:
        (WI.Instrument.createForTimelineType):
        * UserInterface/Models/TimelineRecord.js:
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.addRecord):
        Expose a new CPU instrument and timeline.

        * UserInterface/Views/ColumnChart.js: Added.
        (WI.ColumnChart):
        (WI.ColumnChart.prototype.get element):
        (WI.ColumnChart.prototype.get bars):
        (WI.ColumnChart.prototype.get size):
        (WI.ColumnChart.prototype.set size):
        (WI.ColumnChart.prototype.addBar):
        (WI.ColumnChart.prototype.clear):
        (WI.ColumnChart.prototype.needsLayout):
        (WI.ColumnChart.prototype.updateLayout):
        View that will draw vertical bars with independent widths.
        This is meant to be used similiar to WI.LineChart.

        * UserInterface/Images/CPUInstrument.svg: Added.
        * UserInterface/Views/Variables.css:
        (:root):
        CPU timeline colors and icon.

        * UserInterface/Views/CPUTimelineOverviewGraph.css:
        (body .sidebar > .panel.navigation.timeline > .timelines-content li.item.cpu,):
        (.timeline-overview-graph.cpu):
        (.timeline-overview-graph.cpu > .legend):
        (body[dir=ltr] .timeline-overview-graph.cpu > .legend):
        (body[dir=rtl] .timeline-overview-graph.cpu > .legend):
        (.timeline-overview-graph:nth-child(even) > .legend):
        (body[dir=rtl] .timeline-overview-graph.cpu > .bar-chart):
        (.timeline-overview-graph.cpu > .bar-chart > svg > g > rect):
        * UserInterface/Views/CPUTimelineOverviewGraph.js: Added.
        (WI.CPUTimelineOverviewGraph):
        (WI.CPUTimelineOverviewGraph.prototype.get height):
        (WI.CPUTimelineOverviewGraph.prototype.reset):
        (WI.CPUTimelineOverviewGraph.prototype.layout.xScale):
        (WI.CPUTimelineOverviewGraph.prototype.layout.yScale):
        (WI.CPUTimelineOverviewGraph.prototype.layout.yScaleForRecord):
        (WI.CPUTimelineOverviewGraph.prototype.layout):
        (WI.CPUTimelineOverviewGraph.prototype._updateLegend):
        (WI.CPUTimelineOverviewGraph.prototype._cpuTimelineRecordAdded):
        * UserInterface/Views/CPUTimelineView.css:
        (.timeline-view.cpu):
        (.timeline-view.cpu > .content):
        (.timeline-view.cpu > .content .subtitle):
        (.timeline-view.cpu > .content > .details):
        (.timeline-view.cpu > .content > .details > .timeline-ruler):
        (body[dir=ltr] .timeline-view.cpu > .content > .details > .timeline-ruler):
        (body[dir=rtl] .timeline-view.cpu > .content > .details > .timeline-ruler):
        (.timeline-view.cpu > .content > .details > .subtitle):
        (.cpu-usage-view .line-chart > svg > path):
        (.timeline-view.cpu .legend > .row > .swatch.current):
        * UserInterface/Views/CPUTimelineView.js: Added.
        (WI.CPUTimelineView):
        (WI.CPUTimelineView.prototype.shown):
        (WI.CPUTimelineView.prototype.hidden):
        (WI.CPUTimelineView.prototype.closed):
        (WI.CPUTimelineView.prototype.reset):
        (WI.CPUTimelineView.prototype.get scrollableElements):
        (WI.CPUTimelineView.prototype.get showsFilterBar):
        (WI.CPUTimelineView.prototype.layout.layoutView):
        (WI.CPUTimelineView.prototype.layout.xScale):
        (WI.CPUTimelineView.prototype.layout.yScale):
        (WI.CPUTimelineView.prototype.layout):
        (WI.CPUTimelineView.prototype._cpuTimelineRecordAdded):
        * UserInterface/Views/CPUUsageView.css:
        (.cpu-usage-view):
        (.cpu-usage-view > .details):
        (body[dir=ltr] .cpu-usage-view > .details):
        (body[dir=rtl] .cpu-usage-view > .details):
        (.cpu-usage-view > .graph):
        (body[dir=rtl] .cpu-usage-view > .graph):
        * UserInterface/Views/CPUUsageView.js:
        (WI.CPUUsageView):
        (WI.CPUUsageView.prototype.get element):
        (WI.CPUUsageView.prototype.clear):
        (WI.CPUUsageView.prototype.layoutWithDataPoints):
        (WI.CPUUsageView.prototype._updateDetails):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        * UserInterface/Views/TimelineIcons.css:
        (.cpu-icon .icon):
        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.createForTimeline):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForTimelineType):
        (WI.TimelineTabContentView.genericClassNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForRecord):
        (WI.TimelineTabContentView.displayNameForRecord):
        Timeline views for CPU usage.

        * UserInterface/Views/MemoryCategoryView.js:
        (WI.MemoryCategoryView):
        * UserInterface/Views/MemoryTimelineView.js:
        (WI.MemoryTimelineView.createChartContainer):
        (WI.MemoryTimelineView):
        (WI.MemoryTimelineView.prototype._clearMaxComparisonLegend):
        Minor updates to style and comments.

2019-01-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Refactor WI.CSSStyleDeclaration.prototype.update
        https://bugs.webkit.org/show_bug.cgi?id=193737

        Reviewed by Matt Baker.

        Remove unused event data from the WI.CSSStyleDeclaration.Event.PropertiesChanged event.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration.prototype.update):

2019-01-23  Devin Rousso  <drousso@apple.com>

        WebInspector: Confusingly nested events in the timeline for Mutation Observers
        https://bugs.webkit.org/show_bug.cgi?id=192884
        <rdar://problem/46854178>

        Reviewed by Joseph Pecoraro.

        If a microtask event (e.g. `ObserverCallback`) is contained within a `EvaluatedScript`
        event, move that microtask event to be a sibling of the `EvaluateScript`, subtracting the
        microtask's time taken from the `EvaluateScript`'s time. If there are no other children
        after this move, then remove the `EvaluateScript` altogether.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.eventRecorded.fixMicrotaskPlacement): Added.
        (WI.TimelineManager.prototype.eventRecorded):
        (WI.TimelineManager.prototype._mergeScriptProfileRecords):

2019-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Waterfall column should redraw when adding/removing new columns
        https://bugs.webkit.org/show_bug.cgi?id=193696
        <rdar://problem/47464149>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TableColumn.js:
        (WI.TableColumn.prototype.get needsReloadOnResize):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.initialLayout):
        Mark the waterfall column as sensitive to any resizes.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.showColumn):
        (WI.Table.prototype.hideColumn):
        Update column widths and reload any columns that may be sensitive to resizes.

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: InspectorInstrumentation::willEvaluateScript should include column number
        https://bugs.webkit.org/show_bug.cgi?id=116191
        <rdar://problem/13905910>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._processRecord):

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: expose Audit and Recording versions to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=193262
        <rdar://problem/47130684>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.registerVersion): Added.

        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        Add Interface version values.

2019-01-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: refactor properties/allProperties/visibleProperties/allVisibleProperties
        https://bugs.webkit.org/show_bug.cgi?id=193615

        Reviewed by Devin Rousso.

        Remove unused visibleProperties.

        Rename:
        - properties to enabledProperties;
        - allProperties to properties;
        - allVisibleProperties to visibleProperties.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._prependSemicolonIfNeeded):
        (WI.CSSProperty):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get enabledProperties):
        (WI.CSSStyleDeclaration.prototype.get properties):
        (WI.CSSStyleDeclaration.prototype.propertyForName):
        (WI.CSSStyleDeclaration.prototype.newBlankProperty):
        (WI.CSSStyleDeclaration.prototype.shiftPropertiesAfter):
        (WI.CSSStyleDeclaration.prototype._rangeAfterPropertyAtIndex):
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype._parseStylePropertyPayload):
        (WI.DOMNodeStyles.prototype._markOverriddenProperties):
        (WI.DOMNodeStyles.prototype._associateRelatedProperties):
        (WI.DOMNodeStyles.prototype._isPropertyFoundInMatchingRules):
        (WI.DOMNodeStyles):
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics):
        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype._computePropertyTraces):
        * UserInterface/Views/ComputedStyleSection.js:
        (WI.ComputedStyleSection.prototype.get propertiesToRender):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get propertiesToRender):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):

2019-01-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Table appears broken after filter - rows look collapsed
        https://bugs.webkit.org/show_bug.cgi?id=192730
        <rdar://problem/46853158>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._applyColumnWidthsToColumnsIfNeeded):
        Affect the filler row like the other applyColumnWidths calls since this
        now may be the initial call to size visible columns.

2019-01-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: use plural strings for Passed, Failed, and Unsupported
        https://bugs.webkit.org/show_bug.cgi?id=193675
        <rdar://problem/46628680>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.layout):

        * Localizations/en.lproj/localizedStrings.js:

2019-01-18  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: undefined is not an object (evaluating 'resource.finished')
        https://bugs.webkit.org/show_bug.cgi?id=193589

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.get supportsSave):
        (WI.NetworkTableContentView.prototype._HARResources):

2019-01-17  Truitt Savell  <tsavell@apple.com>

        Unreviewed, rolling out r240124.

        This commit broke an internal build.

        Reverted changeset:

        "SDK_VARIANT build destinations should be separate from non-
        SDK_VARIANT builds"
        https://bugs.webkit.org/show_bug.cgi?id=189553
        https://trac.webkit.org/changeset/240124

2019-01-17  Jer Noble  <jer.noble@apple.com>

        SDK_VARIANT build destinations should be separate from non-SDK_VARIANT builds
        https://bugs.webkit.org/show_bug.cgi?id=189553

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig:
        * Configurations/SDKVariant.xcconfig: Added.

2019-01-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Fix TreeOutline TypeError:​ this._indexesForSubtree is not a function
        https://bugs.webkit.org/show_bug.cgi?id=193501
        <rdar://problem/47323967>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.removeChildAtIndex):

2019-01-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: create new IDL type for exposing special functionality in test context
        https://bugs.webkit.org/show_bug.cgi?id=193149
        <rdar://problem/46801218>

        Reviewed by Joseph Pecoraro.

        Add `AuditAgent` getters and plumbing.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get AuditAgent): Added.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async start):

        * .eslintrc:

2019-01-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Event breakpoints: typing uppercase "DOM" doesn't show completions for events that start with "DOM"
        https://bugs.webkit.org/show_bug.cgi?id=193384

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover.prototype.show):

2019-01-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Event breakpoints: text field and completion popover fonts should match
        https://bugs.webkit.org/show_bug.cgi?id=193249

        Reviewed by Matt Baker.

        * UserInterface/Views/EventBreakpointPopover.css:
        (.popover .event-breakpoint-content > .event-type > input): Added.
        (.popover .event-breakpoint-content > .event-type > input::placeholder): Added.
        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype._showSuggestionsView):
        Subtract the <input> border and padding from the bounds position so the <input> text lines
        up with the `WI.CompletionSuggestionsView` text.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView):
        Drive-by: force `dir=ltr` to match the `text-align: left;` CSS styling.

2019-01-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: pressing Down key on empty value field shouldn't discard completion popover
        https://bugs.webkit.org/show_bug.cgi?id=193098
        <rdar://problem/47016036>

        Reviewed by Devin Rousso.

        Hide CompletionSuggestionsView when SpreadsheetTextField moves, e.g. by scrolling or resizing the sidebar.
        Update CompletionSuggestionsView position after pressing Up or Down key, because SpreadsheetTextField may
        move from wrapping text.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.hide):
        (WI.CompletionSuggestionsView.prototype.show):
        (WI.CompletionSuggestionsView.prototype.showUntilAnchorMoves): Removed.
        (WI.CompletionSuggestionsView.prototype.hideWhenElementMoves): Added.
        (WI.CompletionSuggestionsView.prototype._stopMoveTimer): Added.
        (WI.CompletionSuggestionsView):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype.set suggestionHint):
        (WI.SpreadsheetTextField.prototype.completionSuggestionsSelectedCompletion):
        (WI.SpreadsheetTextField.prototype._handleKeyDownForSuggestionView):
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._showSuggestionsView): Added.

        (WI.SpreadsheetTextField.prototype._reAttachSuggestionHint):
        Drive-by: abstract out repeating code into a private method.

2019-01-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: group titles should vertically align with the first editor
        https://bugs.webkit.org/show_bug.cgi?id=193391

        Reviewed by Dean Jackson.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor): Added.
        (.content-view.settings > .settings-view > .container > .editor-group > .editor:first-child > *): Added.
        (.content-view.settings > .settings-view > .container > .editor-group > .editor select):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="number"]):

2019-01-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION: deleting an audit puts selection in a selected but invisible state
        https://bugs.webkit.org/show_bug.cgi?id=192917
        <rdar://problem/46875285>

        Reviewed by Devin Rousso.

        SelectionController should not be notified of removed children until the
        child items have been removed from the TreeOutline. Doing so at this stage
        is unsafe, since this method checks `this.selectedTreeElement`, which could
        return the adjusted index from the SelectionController before anything has
        actually been removed from the TreeOutline.

        The number of calls to SelectionController.prototype.didRemoveItems is also
        reduced somewhat, since we're no longer calling it for every TreeElement.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype.removeChildren):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._indexesForSubtree): Added.        

2019-01-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: allow audits to be enabled/disabled
        https://bugs.webkit.org/show_bug.cgi?id=192210
        <rdar://problem/46423583>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.get editing): Added.
        (WI.AuditManager.prototype.set editing): Added.
        (WI.AuditManager.prototype.stop):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):
        Since default audits aren't stored, keep a list of disabled default tests in a `WI.Setting`.

        * UserInterface/Models/AuditTestBase.js:
        (WI.AuditTestBase):
        (WI.AuditTestBase.prototype.get disabled): Added.
        (WI.AuditTestBase.prototype.set disabled): Added.
        (WI.AuditTestBase.prototype.async start):
        (WI.AuditTestBase.prototype.stop):
        (WI.AuditTestBase.toJSON):

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase):
        (WI.AuditTestCase.async fromPayload):
        (WI.AuditTestCase.prototype.toJSON):

        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.async fromPayload):
        (WI.AuditTestGroup.prototype.get disabled): Added.
        (WI.AuditTestGroup.prototype.set disabled): Added.
        (WI.AuditTestGroup.prototype.toJSON):
        (WI.AuditTestGroup.prototype.async run):
        (WI.AuditTestGroup.prototype._handleTestDisabledChanged): Added.
        (WI.AuditTestGroup.prototype._handleTestProgress):
        Propagate `disabled` changes to all sub-tests, unless the change was caused by one of the
        sub-tests, in which case we are now in an intermediate state.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype.hasCustomFilters): Added.
        (WI.AuditNavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters): Added.
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._updateStartStopButtonNavigationItemState):
        (WI.AuditNavigationSidebarPanel.prototype._updateEditButtonNavigationItemState): Added.
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditManagerEditingChanged): Added.
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestScheduled):
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        (WI.AuditNavigationSidebarPanel.prototype._handleEditButtonNavigationItemClicked): Added.
        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit > .content):
        (.sidebar > .panel.navigation.audit > .content > .tree-outline): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled):active): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled).activated): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits:not(.disabled).activated:active): Added.
        (.sidebar > .panel.navigation.audit > .content .edit-audits.disabled): Added.
        (.finish-editing-audits-placeholder.message-text-view .navigation-item-help .navigation-bar): Added.
        Leverage custom filters to ensure that disabled audits arent shown when not editing and that
        result tree elements aren't shown while editing.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.shown):

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.canSelectOnMouseDown): Added.
        (WI.AuditTreeElement.prototype._updateTestGroupDisabled): Added.
        (WI.AuditTreeElement.prototype._handleTestDisabledChanged): Added.
        (WI.AuditTreeElement.prototype._handleManagerEditingChanged): Added.
        * UserInterface/Views/AuditTreeElement.css:
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:not(:hover)): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded:not(.editing-audits) > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Added.
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:not(:hover)): Deleted.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.
        Prevent selection and running when editing.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline .children.expanded:not([hidden])): Added.
        (.tree-outline .children.expanded): Deleted.

        * UserInterface/Base/ObjectStore.js:
        (WI.ObjectStore._open):
        Batch operations together to help avoid multiple simultaneous `indexedDB.open` calls. This
        should also help preserve the order of operations, as once the database is open, operations
        are executed in the order they were enqueued.

        (WI.ObjectStore.prototype.async.addObject):
        Pass a unique `Symbol` to the `toJSON` call on the given object so that the object can save
        additional values that wouldn't normally be saved. This doesn't conflict with normal usage
        of `toJSON` (e.g. `JSON.stringify`) because that case also passes in a value:
         - `undefined`, if it was called directly on the object
         - the key for this object in the containing object
         - the index of this object in the containing array
        In any case, the value can never equal the unique `Symbol`, so it's guaranteed that the code
        will only run for `WI.ObjectStore` operations.

        (WI.ObjectStore.prototype.async.clear): Added.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Protocol Logging: log messages as objects if inspector^2 is open
        https://bugs.webkit.org/show_bug.cgi?id=193284

        Reviewed by Joseph Pecoraro.

        If inspector^2 is closed, stringify all messages.
        If inspector^2 is open, log each message JSON object without modifying it.

        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer.prototype._processEntry):

2019-01-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: clicking on property that soon to be discarded shouldn't start selection
        https://bugs.webkit.org/show_bug.cgi?id=193218
        <rdar://problem/47098303>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        A style property may get removed on blur event, so propertyElement may get removed from the DOM right when mousedown event happens.

        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._stopSelection):

2019-01-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Undo reverts all changes at once
        https://bugs.webkit.org/show_bug.cgi?id=177676
        <rdar://problem/34745031>

        Reviewed by Devin Rousso.

        Command-Z used to revert all changes at once because Web Inspector never
        set any history checkpoints in the style editor.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._handleBlur):

2019-01-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Use prefers-color-scheme instead of prefers-dark-interface
        https://bugs.webkit.org/show_bug.cgi?id=193265

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/AuditTestContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BezierEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BreakpointActionView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/BreakpointPopoverController.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ButtonNavigationItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ButtonToolbarItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CallFrameView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CanvasTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CodeMirrorOverrides.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ComputedStyleSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ConsoleMessageView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ConsolePrompt.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DataGrid.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DebuggerDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DetailsSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/DividerNavigationItem.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Editing.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FindBanner.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FontResourceContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/FormattedValue.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/HoverMenu.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ImageResourceContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/LogContentView.css:
        (@media (prefers-color-scheme: dark)):

        * UserInterface/Views/Main.css:
        (:root):

        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NetworkDetailView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NetworkTableContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/NewTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ObjectPreviewView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/OpenResourceDialog.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ProgressView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/QuickConsole.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceSecurityContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceSizesContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ScopeBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SearchBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SearchSidebarPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SettingsTabContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ShaderProgramContentView.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/ShaderProgramTreeElement.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TabBar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Table.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineDataGrid.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineIcons.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TimelineOverview.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Toolbar.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/TreeOutline.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/URLBreakpointPopover.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/Variables.css:
        (@media (prefers-color-scheme: dark)):
        * UserInterface/Views/WebSocketContentView.css:
        (@media (prefers-color-scheme: dark)):

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: run arrow shouldn't be visible when running tests
        https://bugs.webkit.org/show_bug.cgi?id=192209
        <rdar://problem/46423615>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondetach):
        (WI.AuditTreeElement.prototype._updateLevel):
        (WI.AuditTreeElement.prototype._handleAuditManagerTestScheduled): Added.
        (WI.AuditTreeElement.prototype._handleAuditManagerTestCompleted): Added.
        * UserInterface/Views/AuditTreeElement.css: Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group):not(.manager-active) > .status:hover > img): Added.
        (.tree-outline .item.audit.manager-active > .status > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Added.
        (.tree-outline .item.audit:matches(.test-case, .test-group) > .status:hover > img): Deleted.
        (.tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status): Deleted.

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: extend XHR breakpoints to work with fetch
        https://bugs.webkit.org/show_bug.cgi?id=185843
        <rdar://problem/40431027>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.supportsURLBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.get urlBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.urlBreakpointForURL): Added.
        (WI.DOMDebuggerManager.prototype.addURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.removeURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints):
        (WI.DOMDebuggerManager.prototype._updateURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._resolveURLBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._saveURLBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype._urlBreakpointDisabledStateDidChange): Added.
        (WI.DOMDebuggerManager.prototype.get xhrBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype.xhrBreakpointForURL): Deleted.
        (WI.DOMDebuggerManager.prototype.addXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype.removeXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._updateXHRBreakpoint.breakpointUpdated): Deleted.
        (WI.DOMDebuggerManager.prototype._updateXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._resolveXHRBreakpoint): Deleted.
        (WI.DOMDebuggerManager.prototype._saveXHRBreakpoints): Deleted.
        (WI.DOMDebuggerManager.prototype._xhrBreakpointDisabledStateDidChange): Deleted.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):

        * UserInterface/Models/URLBreakpoint.js: Renamed from Source/WebInspectorUI/UserInterface/Models/XHRBreakpoint.js.
        * UserInterface/Views/URLBreakpointPopover.css: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointPopover.css.
        * UserInterface/Views/URLBreakpointPopover.js: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointPopover.js.
        * UserInterface/Views/URLBreakpointTreeElement.css: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointTreeElement.css.
        * UserInterface/Views/URLBreakpointTreeElement.js: Renamed from Source/WebInspectorUI/UserInterface/Views/XHRBreakpointTreeElement.js.

        * UserInterface/Base/Setting.js:
        (WI.Setting.migrateValue): Added.

        * UserInterface/Main.html:
        * UserInterface/Test.html:

        * Localizations/en.lproj/localizedStrings.js:

2019-01-07  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure connection details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191539
        <rdar://problem/45979891>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.get security): Added.
        (WI.Resource.prototype.updateForResponse):
        (WI.Resource.prototype.updateWithMetrics):
        (WI.Resource.prototype.get responseSecurity): Deleted.

        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView):
        (WI.ResourceSecurityContentView.prototype.initialLayout):
        (WI.ResourceSecurityContentView.prototype.layout):
        (WI.ResourceSecurityContentView.prototype._refreshConnectionSection): Added.
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        (WI.ResourceSecurityContentView.prototype._handleResourceMetricsDidChange): Added.
        * UserInterface/Views/ResourceSecurityContentView.css:
        (body[dir] .resource-security > section:matches(.connection, .certificate) > .details): Added.
        (@media (prefers-dark-interface) body[dir] .resource-security > section:matches(.connection, .certificate) > .details): Added.
        (body[dir] .resource-security > section.certificate > .details): Deleted.
        (@media (prefers-dark-interface) body[dir] .resource-security > section.certificate > .details): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: "white" isn't recognized as a color keyword
        https://bugs.webkit.org/show_bug.cgi?id=193173
        <rdar://problem/47068595>

        Reviewed by Joseph Pecoraro.

        Attempt to parse "atom" token types as colors.

        Display color picker only for color-aware properties. For instance,
        display it for "color: white" but not for "-apple-pay-button-style: white".

        * UserInterface/Models/CSSKeywordCompletions.js:
        (addKeywordsForName):
        (WI.CSSKeywordCompletions.forProperty):
        (WI.CSSKeywordCompletions.isColorAwareProperty):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):
        (WI.SpreadsheetStyleProperty.prototype._addColorTokens):

2019-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: subclasses of WI.ClusterContentView don't save/restore content views after the initial view
        https://bugs.webkit.org/show_bug.cgi?id=192451
        <rdar://problem/46800958>

        Reviewed by Devin Rousso.

        * UserInterface/Models/BackForwardEntry.js:
        (WI.BackForwardEntry.prototype.prepareToHide):
        * UserInterface/Views/ClusterContentView.js:
        (WI.ClusterContentView.prototype.get shouldSaveStateOnHide):
        * UserInterface/Views/ContentView.js:
        (WI.ContentView.prototype.get shouldSaveStateOnHide):
        Allow ClusterContentViews to save its state whenever its hidden,
        this means it can be properly restored to the last state it had
        instead of the initial state it was shown with.

2019-01-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: disable breakpoints when running Audit
        https://bugs.webkit.org/show_bug.cgi?id=193158
        <rdar://problem/47057083>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype._startDisablingBreakpointsTemporarily):
        (WI.DebuggerManager.prototype._stopDisablingBreakpointsTemporarily):
        (WI.DebuggerManager.prototype._handleAuditManagerTestScheduled): Added.
        (WI.DebuggerManager.prototype._handleAuditManagerTestCompleted): Added.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingWillStart):
        (WI.DebuggerSidebarPanel.prototype._timelineCapturingStopped):
        (WI.DebuggerSidebarPanel.prototype._handleAuditManagerTestScheduled): Added.
        (WI.DebuggerSidebarPanel.prototype._handleAuditManagerTestCompleted): Added.
        (WI.DebuggerSidebarPanel.prototype._updateBreakpointsDisabledBanner):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .warning-banner + .warning-banner): Added.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test/Test.js:
        (WI.loaded):
        Move `WI.auditManager` higher in the managers list so that it can be used in
        `WI.DebuggerManager`'s constructor.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add a Setting Toggle for Source Maps
        https://bugs.webkit.org/show_bug.cgi?id=193148

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.downloadSourceMap):
        Don't download source maps if the setting is disabled.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Settings toggle for source maps. Enabled by default.

        * Localizations/en.lproj/localizedStrings.js:

2019-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include `globalThis` in default JavaScript completions
        https://bugs.webkit.org/show_bug.cgi?id=193147

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        Add `globalThis` which is a new global value.

2019-01-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: conic-gradient color picker doesn't accurately show color when saturation value is not 100%
        https://bugs.webkit.org/show_bug.cgi?id=192729
        <rdar://problem/46746815>

        Reviewed by Joseph Pecoraro.

        Rework `WI.ColorWheel` to use similar canvas drawing logic as `WI.LegacyColorWheel` so that
        it's able to adjust the saturation value as the pixels gets closer to the center.

        * UserInterface/Models/Color.js:
        (WI.Color.rgb2hsl): Added.
        (WI.Color.hsl2rgb): Added.
        (WI.Color.cmyk2rgb):
        (WI.Color.prototype.isKeyword):
        (WI.Color.prototype._toRGBString):
        (WI.Color.prototype._toRGBAString):
        (WI.Color.prototype._toHSLString):
        (WI.Color.prototype._toHSLAString):
        (WI.Color.prototype._rgbaToHSLA):
        (WI.Color.prototype._hslaToRGBA):
        (WI.Color.rgb2hsv): Deleted.
        (WI.Color.hsv2rgb): Deleted.
        (WI.Color.prototype._rgbToHSL): Deleted.
        (WI.Color.prototype._hslToRGB): Deleted.
        Adjust the conversion functions of `WI.Color` to be more accurate.

        * UserInterface/Views/ColorWheel.js:
        (WI.ColorWheel):
        (WI.ColorWheel.prototype.set dimension):
        (WI.ColorWheel.prototype.set brightness):
        (WI.ColorWheel.prototype.get tintedColor):
        (WI.ColorWheel.prototype.set tintedColor):
        (WI.ColorWheel.prototype._updateColorForMouseEvent):
        (WI.ColorWheel.prototype._updateCanvas): Added.
        (WI.ColorWheel.prototype._updateGradient): Deleted.
        * UserInterface/Views/ColorWheel.css:
        (.color-wheel > canvas): Added.
        (.color-wheel > .gradient): Deleted.

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.prototype.set color):
        (WI.ColorPicker.prototype.sliderValueDidChange):
        (WI.ColorPicker.prototype._updateSliders):
        (WI.ColorPicker.prototype._showColorComponentInputs):
        (WI.ColorPicker.supportsConicGradient): Deleted.

        * UserInterface/Main.html:

        * UserInterface/Views/LegacyColorWheel.js: Removed.

2019-01-02  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: selection lost when inspector is blurred
        https://bugs.webkit.org/show_bug.cgi?id=192124
        <rdar://problem/46800965>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (body:matches(.window-docked-inactive, .window-inactive) .spreadsheet-style-declaration-editor .property.selected):
        Selection should be gray when Web Inspector window isn't focused.

        * UserInterface/Views/SpreadsheetStyleProperty.js:

2019-01-02  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: it shouldn't be possible to delete read-only properties
        https://bugs.webkit.org/show_bug.cgi?id=193099
        <rdar://problem/47016335>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        Drive-by: Forward Delete should work the same way as Delete (Backspace).

2019-01-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Implement `queryObjects` Command Line API
        https://bugs.webkit.org/show_bug.cgi?id=176766
        <rdar://problem/34890689>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.completionControllerCompletionsNeeded.receivedPropertyNames):
        Add `queryObjects` to the list of command line functions.

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles Redesign: remove unused CSS style icons
        https://bugs.webkit.org/show_bug.cgi?id=192999
        <rdar://problem/46912094>

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/StyleRuleIcons.css: Removed.
        * UserInterface/Images/StyleRule.svg: Removed.
        * UserInterface/Images/StyleRuleInheritedElement.svg: Removed.
        * UserInterface/Images/StyleRulePseudoElement.svg: Removed.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2018-12-21  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: editing focus lost when inspector is blurred
        https://bugs.webkit.org/show_bug.cgi?id=192123
        <rdar://problem/46800966>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetSelectorField.js:
        (WI.SpreadsheetSelectorField.prototype._handleBlur):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._handleBlur):

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: experimental setting editors are misaligned in other locales
        https://bugs.webkit.org/show_bug.cgi?id=192971
        <rdar://problem/46718451>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container):
        (.content-view.settings > .settings-view > .container > .title):

2018-12-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: update scroll position when revealing a virtualized WI.DataGridNode
        https://bugs.webkit.org/show_bug.cgi?id=192992
        <rdar://problem/46886427>

        Reviewed by Joseph Pecoraro.

        When `reveal`ing a `WI.DataGridNode`, if it is not currently in the DOM tree (e.g. it's been
        virtualized by it's owner `WI.DataGrid`), we need to scroll to it's position so that it gets
        added to the DOM tree before it can be revealed/selected.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.layout):
        (WI.DataGrid.prototype.updateVisibleRows):
        (WI.DataGrid.prototype._updateVisibleRows): Deleted.

        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.reveal):

2018-12-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Type profiler popovers have black text on dark background
        https://bugs.webkit.org/show_bug.cgi?id=192916
        <rdar://problem/46863518>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SourceCodeTextEditor.css:
        (.popover .debugger-popover-content > .body):
        * UserInterface/Views/TypeTreeElement.css:
        (.item.type-tree-element.prototype):
        (.item.type-tree-element.prototype:hover,):
        * UserInterface/Views/TypeTreeView.css:
        (.type-tree):
        * UserInterface/Views/Variables.css:
        (:root):

2018-12-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Pressing Esc when editing name/value should select entire property
        https://bugs.webkit.org/show_bug.cgi?id=192919

        Reviewed by Devin Rousso.

        - Esc still hides the completion popover.
        - Esc still discards changes.
        - When there's no completion popover, Esc selects outer scope.
          I.e., it goes from editing name/value to selecting the entire property.
        - Pressing Esc for newly added properties discards those properties.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyDidPressEsc):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidPressEsc):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._discardChange):
        (WI.SpreadsheetTextField.prototype._handleKeyDown):

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Charles Proxy errors opening har files exported from Safari (invalid startedDateTime)
        https://bugs.webkit.org/show_bug.cgi?id=192959
        <rdar://problem/46863411>

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableCellContextMenuClicked):
        (WI.NetworkTableContentView.prototype._updateExportButton):
        (WI.NetworkTableContentView.prototype._canExportHAR):
        Disallow HAR export if we don't have load data, such as the requestSentDate for
        the main resource or sub-resources.

        (WI.NetworkTableContentView.prototype._HARResources):
        Only export resources that have load data.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Autoformat doesn't work on icloud.com (javascript-packed.js)
        https://bugs.webkit.org/show_bug.cgi?id=192946
        <rdar://problem/42546126>

        Rubber-stamped by Devin Rousso.

        * UserInterface/Base/Utilities.js:
        (whitespaceRatio):
        (isTextLikelyMinified):
        Check the first 2500 and the last 2500 characters whitespace ratio.
        If either is below 20% then treat as minified.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Elements tab does not show DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=192910
        <rdar://problem/46680585>

        Reviewed by Brian Burg.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchEvent):
        Better logging for errors.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/AppController.js:
        (WI.AppController.prototype.activateExtraDomains):
        Let Targets get a chance to activate extra domains.
        Perform a little more work in these cases.

        * UserInterface/Protocol/Target.js:
        (WI.Target):
        (WI.Target.prototype.activateExtraDomain):
        Expose agents for domains that are active.
        Expose agents for extra domains when they are activated.

2018-12-20  Joseph Pecoraro  <pecoraro@apple.com>

        ITMLKit Inspector: Computed Style Box Model section throws exceptions
        https://bugs.webkit.org/show_bug.cgi?id=192911
        <rdar://problem/46861112>

        Reviewed by Matt Baker.

        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createBoxPartElement):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics.createContentAreaElement):
        (WI.BoxModelDetailsSectionRow.prototype._updateMetrics):
        ITMLKit doesn't always provide a display/position/width/height etc properties.
        Protect against this, and just show an empty message in the box model section
        if those properties do not exist.

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: UIString should take an optional key and description to aid localization
        https://bugs.webkit.org/show_bug.cgi?id=153962
        <rdar://problem/24542505>

        Reviewed by Brian Burg.

        * UserInterface/Base/LoadLocalizedStrings.js:
        (WI.UIString):

        * UserInterface/Test/Test.js:
        (WI.UIString):

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.initialLayout):

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audits: don't cache default audits
        https://bugs.webkit.org/show_bug.cgi?id=192918
        <rdar://problem/46626543>

        Reviewed by Brian Burg.

        Instead of adding the default audits to the "audits" `WI.ObjectStore`, which preserves them
        across WebInspector sessions, load them every time WebInspector is opened (unless there are
        existing audits) so that the localized strings are able to respond to locale changes.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.removeTest):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):

2018-12-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Dark Mode: unreadable background color for tables containing object previews
        https://bugs.webkit.org/show_bug.cgi?id=192887
        <rdar://problem/46855270>

        Reviewed by Brian Burg.

        * UserInterface/Views/LogContentView.css:
        (.console-messages:focus .console-item .data-grid tr.selected td:not(:last-child)): Added.
        (@media (prefers-dark-interface) .console-item .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .console-messages:focus .console-item.selected .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .console-messages:focus .console-item .data-grid tr.selected td:not(:last-child)): Added.

        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.css:
        (.content-view.indexed-database-object-store > .data-grid tr.selected):
        (.content-view.indexed-database-object-store > .data-grid:focus tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid:focus tr.selected): Added.
        (@media (prefers-dark-interface) .content-view.indexed-database-object-store > .data-grid:focus tr.selected td:not(:last-child)): Added.

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: fix descriptions for default tests
        https://bugs.webkit.org/show_bug.cgi?id=192764
        <rdar://problem/46729437>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded):

        * Localizations/en.lproj/localizedStrings.js:

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: "E" icon on debugger dashboard is too close to current function name
        https://bugs.webkit.org/show_bug.cgi?id=192915

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerDashboardView.css:
        (.dashboard.debugger > .location):
        (body[dir=ltr] .dashboard.debugger > .location :matches(.function-icon, .event-listener-icon)):
        (body[dir=rtl] .dashboard.debugger > .location :matches(.function-icon, .event-listener-icon)):
        (.dashboard.debugger > .location .function-icon): Deleted.
        (body[dir=ltr] .dashboard.debugger > .location .function-icon): Deleted.
        (body[dir=rtl] .dashboard.debugger > .location .function-icon): Deleted.

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: ThreadTreeElement status icon is hard to see when hovered
        https://bugs.webkit.org/show_bug.cgi?id=192097
        <rdar://problem/46318421>

        Reviewed by Matt Baker.

        * UserInterface/Views/ThreadTreeElement.css:
        (.tree-outline > .item.thread .status-button.resume):
        (.tree-outline > .item.thread .status-button.resume:active):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'effectiveDOMNode.enabledPseudoClasses')
        https://bugs.webkit.org/show_bug.cgi?id=192783

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype._forcedPseudoClassCheckboxChanged):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._updatePseudoClassCheckboxes):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r237195): Timelines: selecting a rendering frame row moves the time selection
        https://bugs.webkit.org/show_bug.cgi?id=192773
        <rdar://problem/46782446>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._recordSelected):
        The Frames timeline uses `frameIndex` instead of `startTime`/`endTime`, so when trying to
        ensure that the selected record is within the filtered range, use `frameIndex` instead.
        The associated `WI.TimelineRuler` will already be using an index-based approach for
        selection, so this will match.

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: the recording auto-capture input shouldn't start focused
        https://bugs.webkit.org/show_bug.cgi?id=192454

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: shift-clicking a color-swatch to change formats starts editing the color
        https://bugs.webkit.org/show_bug.cgi?id=192784
        <rdar://problem/46801028>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):

2018-12-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab: arrow key after undoing a DOM node delete selects the wrong element
        https://bugs.webkit.org/show_bug.cgi?id=192871
        <rdar://problem/46849060>

        Reviewed by Devin Rousso.

        Undoing a DOM node removal reinserts the node into the DOMTreeOutline.
        When the reinserted node precedes the selected node in the tree, the
        SelectionController should update `_lastSelectedIndex`.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: provide localization support for % pass display
        https://bugs.webkit.org/show_bug.cgi?id=192870
        <rdar://problem/46779245>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.initialLayout):
        (WI.AuditTestGroupContentView.prototype.layout):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .percentage-pass > span): Added.
        (@media (prefers-dark-interface) .content-view.audit-test-group > header > .percentage-pass): Added.
        (@media (prefers-dark-interface) .content-view.audit-test-group > header > .percentage-pass > span): Added.
        (.content-view.audit-test-group > header > .percentage-pass:not(:empty)::after): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Computed: make UI more usable when the panel is narrow
        https://bugs.webkit.org/show_bug.cgi?id=192578
        <rdar://problem/46615753>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item .property-traces):
        (.computed-style-section .computed-property-item.expanded .disclosure-button):
        (.computed-style-section .computed-property-item .property-trace-item):
        (.computed-style-section .computed-property-item .property-trace-item::before):
        (.computed-style-section .computed-property-item .property):
        (.computed-style-section .computed-property-item .property-trace-item .selector):
        Allow CSS property values and selectors to take more than one line.

        (.computed-style-section .property-trace-item .property .name,):
        * UserInterface/Views/ComputedStyleSection.js:
        (WI.ComputedStyleSection.prototype._createTrace):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):

2018-12-18  Simon Fraser  <simon.fraser@apple.com>

        Web Inspector: Timelines: correctly label Intersection Observer callbacks
        https://bugs.webkit.org/show_bug.cgi?id=192669
        <rdar://problem/46702490>

        Reviewed by Joseph Pecoraro.

        Add InspectorInstrumentation::willFireObserverCallback() and use it to wrap calls
        to Intersection Observer, Performance Observer and Mutation Observer callbacks so 
        that they get correctly labeled in the Inspector timeline.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._processRecord):
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.iconClassNameForRecord):

2018-12-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: "Clear Filters" button gets clipped when window is vertically small
        https://bugs.webkit.org/show_bug.cgi?id=192868
        <rdar://problem/46780400>

        Reviewed by Matt Baker.

        * UserInterface/Views/Main.css:
        (.message-text-view):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: selected text is too light when Inspector window is inactive
        https://bugs.webkit.org/show_bug.cgi?id=190542
        <rdar://problem/45238712>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CodeMirrorOverrides.css:
        (.CodeMirror .CodeMirror-selected):

2018-12-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: column sort controls in Layers tab sidebar don't render correctly in dark mode
        https://bugs.webkit.org/show_bug.cgi?id=192845

        Reviewed by Devin Rousso.

        * UserInterface/Views/DataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th.sortable:active):
        Drive-by: replace obnoxiously light background of the pressed header with a more subtle gray.

        (.data-grid th.sort-ascending > div:first-child::after, .data-grid th.sort-descending > div:first-child::after):
        Invert colors of the arrow glyph.

2018-12-18  Devin Rousso  <drousso@apple.com>

        Web Inspector: Layers: increase default column width for other localizations
        https://bugs.webkit.org/show_bug.cgi?id=192812
        <rdar://problem/46628625>

        Reviewed by Brian Burg.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel.prototype._buildDataGrid):
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):

2018-12-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: m3u8 content not shown, it should be text
        https://bugs.webkit.org/show_bug.cgi?id=192731
        <rdar://problem/46747728>

        Reviewed by Devin Rousso.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.shouldTreatMIMETypeAsText):
        Support m3u8/m3u files as text.

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: path view is misaligned
        https://bugs.webkit.org/show_bug.cgi?id=192761

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording :matches(img, canvas)):
        (.content-view:not(.tab).recording canvas.path):

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: add plural result strings
        https://bugs.webkit.org/show_bug.cgi?id=192769
        <rdar://problem/46628680>

        Reviewed by Brian Burg.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView.prototype.showNoResultDataPlaceholder):

        * UserInterface/Views/AuditTestGroupContentView.js:
        (WI.AuditTestGroupContentView.prototype.layout):

        * Localizations/en.lproj/localizedStrings.js:

2018-12-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: add singular "space" UIString
        https://bugs.webkit.org/show_bug.cgi?id=192766
        <rdar://problem/46776948>

        Reviewed by Brian Burg.

        * UserInterface/Views/SettingEditor.js:
        (WI.SettingEditor):
        (WI.SettingEditor.prototype.get label):
        (WI.SettingEditor.prototype.set label): Added.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView.addSpacesSetting): Added.
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView.addSpacesSetting.updateLabel): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: toggling selected properties may cause data corruption
        https://bugs.webkit.org/show_bug.cgi?id=192396
        <rdar://problem/46478383>

        Reviewed by Devin Rousso.

        Uncommenting a property after a commented out property used to insert an unnecessary semicolon,
        and not updating ranges of the following properties.

        For example:

            /* color: red; */
            /* font-size: 12px */

        Uncommenting `font-size` would result in something like this:

            /* color: red; */; font-size: 12px
                             ^
                             unnecessary semicolon

        Now the semicolon doesn't get inserted and the white space is preserved better:

            /* color: red; */
            font-size: 12px

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        (WI.CSSProperty.prototype._appendSemicolonIfNeeded): Removed.
        (WI.CSSProperty.prototype._prependSemicolonIfNeeded): Added.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._handleNameChange):
        (WI.SpreadsheetStyleProperty.prototype._handleValueChange):
        Style declaration should be locked while editing. Add asserts to ensure this.

2018-12-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Uncaught Exception: TypeError: null is not an object (evaluating 'treeElement.listItemElement.classList')
        https://bugs.webkit.org/show_bug.cgi?id=192090
        <rdar://problem/46318614>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        Check that `listItemElement` is valid before accessing it to update class
        names. The selection can change before the TreeElement has been attached.

2018-12-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cookies view should use model objects instead of raw payload data
        https://bugs.webkit.org/show_bug.cgi?id=189533
        <rdar://problem/44364183>

        Reviewed by Joseph Pecoraro and Devin Rousso.

        * UserInterface/Models/Cookie.js:
        (WI.Cookie):
        (WI.Cookie.fromPayload):
        (WI.Cookie.parseSetCookieResponseHeader):
        (WI.Cookie.prototype.get type):
        (WI.Cookie.prototype.get name):
        (WI.Cookie.prototype.get value):
        (WI.Cookie.prototype.get header):
        (WI.Cookie.prototype.get expires):
        (WI.Cookie.prototype.get maxAge):
        (WI.Cookie.prototype.get path):
        (WI.Cookie.prototype.get domain):
        (WI.Cookie.prototype.get secure):
        (WI.Cookie.prototype.get httpOnly):
        (WI.Cookie.prototype.get sameSite):
        (WI.Cookie.prototype.get size):
        (WI.Cookie.prototype.get url):
        (WI.Cookie.prototype.expirationDate):
        Cleanup Cookie object; add pubic getters for data, `url` property,
        static `fromPayload` method, and calculate `_size` if missing.

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.tableDidRemoveRows):
        (WI.CookieStorageContentView.prototype._reloadCookies):
        Create Cookie objects from the payload instead of using raw payload data.

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove DOM.BackendNodeId and associated commands/events
        https://bugs.webkit.org/show_bug.cgi?id=192478

        Reviewed by Matt Baker.

        * Versions/Inspector-iOS-8.0.json:
        * Versions/Inspector-iOS-9.0.json:
        * Versions/Inspector-iOS-9.3.json:
        * Versions/Inspector-iOS-10.0.json:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:

2018-12-13  Devin Rousso  <drousso@apple.com>

        Web Inspector: experimental settings reload button disappears after changing more than one setting
        https://bugs.webkit.org/show_bug.cgi?id=192645
        <rdar://problem/46626204>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView.listenForChange):
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-12-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: deleting multiple DOM nodes doesn't select the nearest node after deletion
        https://bugs.webkit.org/show_bug.cgi?id=192116
        <rdar://problem/46344339>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.removeSelectedItems):
        Finding a new index to select should go through the delegate instead of
        naively advancing the index.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._populateNodeContextMenu):
        (WI.DOMTreeElement.prototype.ondelete): Deleted.
        The menu item for removing the DOM node is now managed by the parent
        DOMTreeOutline, since its UI and behavior now depend on whether there
        are multiple elements selected.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.populateContextMenu):
        (WI.DOMTreeOutline.prototype.ondelete.level):
        (WI.DOMTreeOutline.prototype.ondelete):
        Implement `ondelete` to remove selected DOM nodes using the delete and
        backspace keys. Also used by the DOMTreeOutline's context menu handler.

2018-12-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection becomes corrupted when deleting selected cookies
        https://bugs.webkit.org/show_bug.cgi?id=192388
        <rdar://problem/46472364>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.didRemoveItems):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype.didRemoveItem): Deleted.
        Replace `didRemoveItem` with a method taking an IndexSet. Calling the
        single-index version while iterating over multiple rows in ascending
        order is unsafe, a detail best left to the SelectionController.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype._removeRows):
        Notify SelectionController of removed rows.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.insertChild):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        Remove the child from the element's `children` after calling `_forgetTreeElement`,
        which needs to calculate the child's index to pass to the SelectionController.

        (WI.TreeOutline.prototype.removeChildren):
        Remove child items during iteration so that `children` doesn't contain
        detached TreeElements while calling `_forgetTreeElement`.

        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):

2018-12-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r238599): unable to select specific timeline
        https://bugs.webkit.org/show_bug.cgi?id=192443
        <rdar://problem/46608087>

        Reviewed by Joseph Pecoraro.

        When determining the trailing horizontal edge for TreeElement mouse
        events, TreeOutline should not assume that its containing DOM element
        is only as wide as its <ol> element.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromEvent):

2018-12-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Move TreeOutlineGroup coordination out of TreeElement
        https://bugs.webkit.org/show_bug.cgi?id=192487
        <rdar://problem/46543431>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):

        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup):
        (WI.TreeOutlineGroup.prototype.itemAdded):
        (WI.TreeOutlineGroup.prototype.itemRemoved):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        (WI.TreeOutlineGroup.prototype._treeOutlineSelectionDidChange):
        (WI.TreeOutlineGroup.groupForTreeOutline): Deleted.
        (WI.TreeOutlineGroup.prototype.didSelectTreeElement): Deleted.
        make the group responsible for listening to selection changes from the
        TreeOutlines it manages, and synchronizing the selection between them.

2018-12-10  Dean Jackson  <dino@apple.com>

        Use text/javascript as recommended by the HTML specification
        https://bugs.webkit.org/show_bug.cgi?id=192525
        <rdar://problem/46569636>

        Reviewed by Jon Lee.

        The HTML specification says we should use text/javascript for
        JavaScript files:
        https://html.spec.whatwg.org/multipage/scripting.html#scriptingLanguages:javascript-mime-type

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._attemptToDetermineMIMEType):

2018-12-06  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: collapsing a DOM node with the left arrow doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=192353
        <rdar://problem/46455019>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.deselect):
        Don't early return when the element is not the selected tree element.
        This condition no longer holds now that TreeOutline supports multiple selection.

2018-12-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: SelectionController should not extend the selection when allowsMultipleSelection is false
        https://bugs.webkit.org/show_bug.cgi?id=192390
        <rdar://problem/46473624>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.selectItem):

2018-12-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add style editing debug mode
        https://bugs.webkit.org/show_bug.cgi?id=192282
        <rdar://problem/46399176>

        Reviewed by Matt Baker.

        Introduce a style editing debug mode to help to troubleshoot complex bugs in the style editor.

          - Log CSS changes;
          - Display red border for locked style declarations.

        * UserInterface/Base/Setting.js:
        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype._updateOwnerStyleText):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor.debug-style-locked::after):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateDebugLockStatus):

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238602): Elements: changing selection no longer highlights the selected node
        https://bugs.webkit.org/show_bug.cgi?id=192354
        <rdar://problem/46444438>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):
        (WI.TreeOutline.prototype._handleMouseDown):

2018-12-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(r238330): Timeline auto-capture does not work after page transition
        https://bugs.webkit.org/show_bug.cgi?id=192248
        <rdar://problem/46390199>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.transitionPageTarget):
        Let the TimelineManager perform work on page transitions.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype.initializeTarget):
        Initialize the autocapture state of the target.

        (WI.TimelineManager.prototype.transitionPageTarget):
        When transitioning pages perform a legacy (frontend based) timeline capture.

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: $0 is shown for all selected elements
        https://bugs.webkit.org/show_bug.cgi?id=192119
        <rdar://problem/46327554>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype._revealAndSelectRepresentedObject):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.layout):
        (WI.DOMTreeContentView.prototype._domTreeSelectionDidChange):
        Update the selected DOM node using the TreeOutline's selection change
        event, instead of in `onselect`, which wasn't always called.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.onselect): Deleted.
        (WI.DOMTreeElement.prototype.ondeselect): Deleted.
        Eliminate `onselect` and `ondeselect`. TreeOutline clients should use
        the TreeOutline.Event.SelectedDidChange event instead.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.last-selected > span::after):
        (.tree-outline.dom:focus li.last-selected > span::after):
        (.tree-outline.dom li.selected > span::after): Deleted.
        (.tree-outline.dom:focus li.selected > span::after): Deleted.
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.updateSelection): Deleted.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._handleDebuggerObjectDisplayLocationDidChange):
        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype._addTreeElement):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.showDefaultContentViewForTreeElement):
        (WI.NavigationSidebarPanel.prototype._treeElementWasFiltered):
        (WI.NavigationSidebarPanel):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._populateResourceTreeOutline):
        (WI.OpenResourceDialog.prototype._handleKeydownEvent):
        * UserInterface/Views/SourceCodeTreeElement.js:
        (WI.SourceCodeTreeElement.prototype.descendantResourceTreeElementTypeDidChange):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.revealAndSelect):
        (WI.TreeElement.prototype.deselect):
        Remove `suppressOnDeselect` and rename `suppressOnSelect` to `suppressNotification`.
        Now that `ondeselect` has been removed `suppressOnDeselect` is no longer
        meaningful, as TreeOutline generates a single `SelectedDidChange` event
        when the selected item changes. In the case of `revealAndSelect`, both
        arguments had the same value.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        Add a unique class name to the last selected TreeElement to distinguish
        it from other selected elements.

2018-12-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: ⌘-A should select all visible nodes
        https://bugs.webkit.org/show_bug.cgi?id=192120
        <rdar://problem/46344435>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):
        Remove an early return, allowing `WI.SelectionController` to handle ⌘-A
        and select all items.

2018-12-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: tests should support async operations
        https://bugs.webkit.org/show_bug.cgi?id=192171
        <rdar://problem/46423562>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.supportsAwaitPromise): Added.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty.addErrorForValueType): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse.checkResultProperty): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse.async resultArrayForEach): Deleted.
        (WI.AuditTestCase.prototype.async run.async parseResponse): Added.
        (WI.AuditTestCase.prototype.async run):
        (WI.AuditTestCase.prototype.async run.checkResultProperty.addErrorForValueType): Deleted.
        (WI.AuditTestCase.prototype.async run.checkResultProperty): Deleted.
        (WI.AuditTestCase.prototype.async run.async resultArrayForEach): Deleted.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload):
        (WI.AuditTestCaseResult.prototype.toJSON):

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: save the expanded state of test groups
        https://bugs.webkit.org/show_bug.cgi?id=192346
        <rdar://problem/46440704>

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement):
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.onexpand): Added.
        (WI.AuditTreeElement.prototype.oncollapse): Added.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: sidebar briefly shows "No Filter Results" before populating default audits
        https://bugs.webkit.org/show_bug.cgi?id=192341
        <rdar://problem/46436550>

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype.applyFiltersToTreeElement): Deleted.
        Delay the construction of the "Results" folder until it's needed, since adding a hidden
        `WI.TreeElement` will cause the placeholder to appear.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: navigating while tests are running should stop and clear all results
        https://bugs.webkit.org/show_bug.cgi?id=192317
        <rdar://problem/46435222>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async start):
        (WI.AuditManager.prototype._handleFrameMainResourceDidChange):

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        Drive-by: pass the index of the saved result.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: "Add Default Audits" shown when there are no filter results
        https://bugs.webkit.org/show_bug.cgi?id=192105

        Reviewed by Matt Baker.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        (WI.NavigationSidebarPanel.prototype.get hasActiveFilters): Added.
        (WI.NavigationSidebarPanel.prototype.suppressFilteringOnTreeElements):
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.hideEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype.updateFilter):
        (WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults.checkTreeOutlineForEmptyFilterResults):
        (WI.NavigationSidebarPanel.prototype._filterDidChange):
        (WI.NavigationSidebarPanel.prototype._updateFilter): Deleted.
        (WI.NavigationSidebarPanel.prototype._createEmptyContentPlaceholderIfNeeded): Deleted.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        Drive-by: change capitalization for consistency with other navigation sidebars.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: add singular localized string for "Record first %s frames"
        https://bugs.webkit.org/show_bug.cgi?id=192189

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureCheckboxLabel): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput):
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged):
        (WI.CanvasOverviewContentView.prototype.initialLayout): Deleted.
        Drive-by: update the auto-capture navigation item when the view is first created so there is
        no flashing of in the navigation bar (before `initialLayout` is called).

        * UserInterface/Views/CheckboxNavigationItem.js:
        (WI.CheckboxNavigationItem):
        (WI.CheckboxNavigationItem.prototype.set label): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-12-03  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Multiple Selection: restoring selection when opening WebInspector puts the TreeElement into a permanent selected state
        https://bugs.webkit.org/show_bug.cgi?id=192091
        <rdar://problem/46321795>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):
        Fix a bug where selected indexes were overwritten by the inserted index.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.insertChild):
        Update the SelectionController with the newly inserted index before
        attaching the TreeElement. Attaching the TreeElement can cause it to
        become selected, which would add the index to the SelectionController,
        only to have it immediately incremented by the call to `didInsertItem`.
        Additionally, change `insertionIndex` to be the index of the inserted
        item instead of the inserted item's previous sibling.

        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._indexOfTreeElement.previousElement): Deleted.
        Eliminate TreeElement index caching, which could become stale and cause
        the wrong index to be calculated. Additionally, instead of walking up the
        parent chain to determine the index, start at the root and use existing
        method `traverseNextTreeElement`.

2018-12-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: test tree elements should start out collapsed
        https://bugs.webkit.org/show_bug.cgi?id=192107

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.onattach):

2018-12-03  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: can't select properties of read-only rules
        https://bugs.webkit.org/show_bug.cgi?id=192266

        Reviewed by Devin Rousso.

        Implement multiple properties selection for read-only rules (such as User Agent Stylesheets)
        in the Styles panel.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        Keep selection on layout.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingFirstProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingLastProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseEnter):
        SpreadsheetCSSStyleDeclarationEditor is used by ComputedStyleDetailsPanel, which doesn't have:
          - spreadsheetCSSStyleDeclarationEditorPropertyBlur
          - spreadsheetCSSStyleDeclarationEditorPropertyMouseEnter

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.startEditingName):
        (WI.SpreadsheetStyleProperty.prototype.startEditingValue):

2018-11-30  Brian Burg  <bburg@apple.com>

        Web Inspector: resource combining should be more robust against missing WebKitAdditions
        https://bugs.webkit.org/show_bug.cgi?id=192255
        <rdar://problem/46042879>

        Reviewed by Joseph Pecoraro.

        * Scripts/copy-user-interface-resources.pl:
        (combineOrStripResourcesForWebKitAdditions):

2018-11-30  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Jumping from Computed to Styles should select property
        https://bugs.webkit.org/show_bug.cgi?id=192198

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.highlighted): Deleted.
        (@keyframes style-property-highlight): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.highlightProperty):
        Remove unnecessary `__propertyView` property.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.detached):
        (WI.SpreadsheetStyleProperty.prototype.highlight): Deleted.

2018-11-30  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r238599): Multiple Selection: selecting a breakpoint will change the selection to it's parent on the first click
        https://bugs.webkit.org/show_bug.cgi?id=192093
        <rdar://problem/46318466>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        TreeElement shouldn't manage the TreeOutline's selection barrier.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get processingSelectionChange):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectTreeElementInternal):
        The selection re-entry barrier `processingSelectionChange` should be
        managed internally by TreeOutline, and exposed as a read-only property.
        Fix a bug where the barrier was cleared before dispatching the change
        notification, which can cause re-entry as a side effect.

2018-11-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Settings: reload button needs horizontal spacing
        https://bugs.webkit.org/show_bug.cgi?id=192231
        <rdar://problem/46274363>

        Reviewed by Matt Baker.

        * UserInterface/Views/SettingsTabContentView.css:
        (.content-view.settings > .settings-view > .container button):
        (.content-view.settings > .settings-view > .container > .title):
        (.content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]):
        (body[dir=ltr] .content-view.settings > .settings-view > .container > .title): Deleted.
        (body[dir=rtl] .content-view.settings > .settings-view > .container > .title): Deleted.
        (body[dir=ltr] .content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]): Deleted.
        (body[dir=rtl] .content-view.settings > .settings-view > .container > .editor-group > .editor input[type="checkbox"]): Deleted.
        Drive-by: replace `dir=*` attribute rules with `-webkit-margin-*` properties.

2018-11-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception opening Web Inspector to Debugger Tab
        https://bugs.webkit.org/show_bug.cgi?id=192174

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        Dispatch the callback with a timeout if there is no backend target yet
        so it doesn't get lost.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype.runAfterPendingDispatches):
        Change the ambiguous name "script" to the more familiar "callback".

2018-11-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace all unicode characters with the escaped character code
        https://bugs.webkit.org/show_bug.cgi?id=192216
        <rdar://problem/46275637>

        Reviewed by Brian Burg.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/BreakpointPopoverController.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/Canvas.js:
        * UserInterface/Models/RecordingAction.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Views/AuditTestCaseContentView.js:
        * UserInterface/Views/AuditTestContentView.js:
        * UserInterface/Views/AuditTestGroupContentView.js:
        * UserInterface/Views/CallFrameView.js:
        * UserInterface/Views/CanvasContentView.js:
        * UserInterface/Views/CanvasOverviewContentView.css:
        * UserInterface/Views/ConsoleMessageView.css:
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/DOMEventsBreakdownView.js:
        * UserInterface/Views/DataGrid.css:
        * UserInterface/Views/DataGrid.js:
        * UserInterface/Views/DatabaseTableContentView.js:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DebuggerSidebarPanel.js:
        * UserInterface/Views/ErrorObjectView.js:
        * UserInterface/Views/EventBreakpointPopover.js:
        * UserInterface/Views/InlineSwatch.js:
        * UserInterface/Views/LayerTreeDataGridNode.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        * UserInterface/Views/Layers3DContentView.js:
        * UserInterface/Views/LayoutTimelineDataGridNode.js:
        * UserInterface/Views/NetworkTableContentView.css:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/ObjectPreviewView.js:
        * UserInterface/Views/ProfileDataGridNode.js:
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        * UserInterface/Views/ScriptDetailsTimelineView.css:
        * UserInterface/Views/TextEditor.css:
        * UserInterface/Views/TreeOutline.css:

2018-11-29  Matt Baker  <mattbaker@apple.com>

        Web Inspector: RTL: disclosure triangles should be flipped and aligned right
        https://bugs.webkit.org/show_bug.cgi?id=192089
        <rdar://problem/46316753>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item .disclosure-button):
        (body[dir=rtl] .computed-style-section .computed-property-item .disclosure-button):

        * UserInterface/Views/ConsoleMessageView.css:
        (.console-message.expandable .console-top-level-message::before):
        (body[dir=rtl] .console-message.expandable .console-top-level-message::before):

        * UserInterface/Views/ErrorObjectView.css:
        (.error-object > .formatted-error::before):
        (body[dir=rtl] .error-object > .formatted-error::before):
        (.error-object .content):

        * UserInterface/Views/LogContentView.css:
        (.console-group-title::before):
        (body[dir=ltr] .console-group-title::before):
        (body[dir=rtl] .console-group-title::before):

        * UserInterface/Views/ObjectTreeView.css:
        (body[dir=rtl] .object-tree > :matches(.title, .object-preview)::before):

        * UserInterface/Views/TypeTreeElement.css:
        (body[dir=rtl] .item.type-tree-element.parent > .disclosure-button):

2018-11-28  Dean Jackson  <dino@apple.com>

        [ES Modules] Allow .mjs content when loaded from file://
        https://bugs.webkit.org/show_bug.cgi?id=192100
        <rdar://problem/46320065>

        Reviewed by Sam Weinig.

        Add a mapping from .mjs to application/javascript.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):

2018-11-29  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements: selecting more than one DOM node causes the scope highlight to contrast
        https://bugs.webkit.org/show_bug.cgi?id=192118
        <rdar://problem/46325664>

        Reviewed by Devin Rousso.

        Use an alpha blended border for the "selected" DOM scope highlight,
        matching the "hovered" scope highlight.

        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li.selected + ol.children.expanded):

2018-11-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: REGRESSION(?): all "Show *" develop menu items cause the page to crash
        https://bugs.webkit.org/show_bug.cgi?id=192016
        <rdar://problem/46284417>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.contentLoaded):
        (WI.whenTargetsAvailable):
        Don't evaluate any InspectorFrontendAPI commands until the frontend
        has initialized a main target and the user interface.

2018-11-28  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: enable selection of multiple properties by default
        https://bugs.webkit.org/show_bug.cgi?id=192109
        <rdar://problem/46323565>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        Remove the checkbox.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property):
        (.spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        (.spreadsheet-style-declaration-editor .property.selected):
        (.spreadsheet-style-declaration-editor .property.selected:focus):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected): Deleted.
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected:focus): Deleted.
        Remove `.multiple-properties-selection` class.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleFocus): Deleted.

2018-11-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: empty results folder is shown after clearing filters
        https://bugs.webkit.org/show_bug.cgi?id=192106

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.applyFiltersToTreeElement): Added.

2018-11-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused DataGrid and TreeOutline code
        https://bugs.webkit.org/show_bug.cgi?id=191622
        <rdar://problem/46052014>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CanvasDetailsSidebarPanel.js:
        (WI.CanvasDetailsSidebarPanel.prototype.initialLayout):

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.insertChildElement):

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.update):

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/DataGridNode.js:
        (WI.DataGridNode.prototype.removeChildren):
        (WI.DataGridNode.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/ErrorObjectView.css:
        (.error-object:not(.expanded) .content):
        (.error-object .content):
        (.error-object:not(.expanded) .tree-outline): Deleted.
        (.error-object .tree-outline): Deleted.

        * UserInterface/Views/ErrorObjectView.js:
        (WI.ErrorObjectView):
        (WI.ErrorObjectView.prototype.get treeOutline): Deleted.
        Use a simple container since TreeOutline features aren't used,
        and remove unused property `treeOutline`.

        * UserInterface/Views/RecordingTraceDetailsSidebarPanel.js:
        (WI.RecordingTraceDetailsSidebarPanel):

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.removeChildren):
        (WI.TreeElement.prototype.removeChildrenRecursive): Deleted.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.removeChildrenRecursive): Deleted.
        (WI.TreeOutline.prototype.reattachIfIndexChanged): Deleted.
        Removed `element` parameter now that the only use case has been removed.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Elements tab should allow selecting/deleting multiple DOM nodes
        https://bugs.webkit.org/show_bug.cgi?id=192059
        <rdar://problem/46294827>

        Reviewed by Devin Rousso.

        Enable multiple DOM node selection in the DOMTreeContentView.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController):
        (WI.SelectionController.prototype.get allowsEmptySelection):
        (WI.SelectionController.prototype.set allowsEmptySelection):
        Allow clients to control whether the last selected item can be deselected.
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.didInsertItem):
        Rewritten to prevent infinite loop.
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype._updateSelectedItems):
        (WI.SelectionController.prototype._adjustIndexesAfter): Deleted.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.updateSelectionArea):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype.updateSelection):
        Updating the selection area DOM element should not assume that only one
        TreeElement is selected at a time.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.get allowsEmptySelection):
        (WI.TreeOutline.prototype.set allowsEmptySelection):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.get selectedTreeElements):
        (WI.TreeOutline.prototype._treeKeyDown):

        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        Eliminate use of `TreeElement.prototype.deselect`.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TreeOutline should re-use multiple-selection logic from Table
        https://bugs.webkit.org/show_bug.cgi?id=191483
        <rdar://problem/45953305>

        Reviewed by Devin Rousso.

        Update TreeOutline to use SelectionController. Adopting SelectionController
        in TreeOutline is not as straightforward as it was in Table. Selected items
        are tracked by index, and TreeElement lacks an explicit index. As a consequence
        TreeElement indexes are calcualted as needed and cached. The cache is cleared
        whenever an element is added or removed.

        * UserInterface/Controllers/SelectionController.js:
        (WI.SelectionController.prototype.didInsertItem):
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype.handleKeyDown):
        Drive-by syntax error fix.
        (WI.SelectionController.prototype._adjustIndexesAfter):
        (WI.SelectionController):

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype.canSelectOnMouseDown):
        (WI.DOMTreeElement.prototype.selectOnMouseDown): Deleted.

        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype._onmousedown):
        Item selection is now handled by SelectionController.

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.canSelectOnMouseDown):
        (WI.ShaderProgramTreeElement.prototype.selectOnMouseDown): Deleted.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.canSelectOnMouseDown):
        (WI.TreeElement.prototype._attach):
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):
        Route item selection through the parent TreeOutline, in order to go though
        the TreeOutline's SelectionController.

        (WI.TreeElement.treeElementMouseDown): Deleted.
        Moved handler to TreeOutline, which owns the SelectionController that
        needs to respond to mouse events.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.get allowsMultipleSelection):
        (WI.TreeOutline.prototype.set allowsMultipleSelection):
        (WI.TreeOutline.prototype.get selectedTreeElement):
        (WI.TreeOutline.prototype.set selectedTreeElement):
        (WI.TreeOutline.prototype.insertChild):
        (WI.TreeOutline.prototype.removeChildAtIndex):
        (WI.TreeOutline.prototype._rememberTreeElement):
        (WI.TreeOutline.prototype._forgetTreeElement):
        (WI.TreeOutline.prototype._treeKeyDown):
        (WI.TreeOutline.prototype.selectionControllerNumberOfItems):
        (WI.TreeOutline.prototype.selectionControllerSelectionDidChange):
        (WI.TreeOutline.prototype.selectionControllerNextSelectableIndex):
        (WI.TreeOutline.prototype.selectionControllerPreviousSelectableIndex):
        (WI.TreeOutline.prototype.selectTreeElementInternal):
        (WI.TreeOutline._generateStyleRulesIfNeeded._indexOfTreeElement.previousElement):
        (WI.TreeOutline._generateStyleRulesIfNeeded):

2018-11-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Experimental Computed panel is unreadable in Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=192053

        Reviewed by Matt Baker.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        * UserInterface/Views/ComputedStyleSection.css:
        (.computed-style-section .computed-property-item.expanded):
        (.computed-style-section .computed-property-item.expanded + .computed-property-item):
        (@media (prefers-dark-interface)):

2018-11-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Computed panel: allow to expand properties to show list of overridden values
        https://bugs.webkit.org/show_bug.cgi?id=191984

        Reviewed by Devin Rousso.

        Introduce the new experimental Computed Style Cascades.

        Each property now can expand to show a list of overridden values, their corresponding
        selectors, and source locations.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:
        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.get uniqueOrderedStyles):
        Move `uniqueOrderedStyles` function unmodified from SpreadsheetRulesStyleDetailsPanel so it can be used by ComputedStyleDetailsPanel, too.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.computed-with-traces .computed-style-properties):
        (.computed-with-traces .details-section.computed-style-properties:not(.collapsed) > :matches(.header, .content)):
        (.computed-with-traces .details-section.computed-style-properties > .content):
        (.computed-with-traces .computed-style-properties .property .go-to-arrow):

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.applyFilter):
        (WI.ComputedStyleDetailsPanel.prototype.focusFirstSection):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        (WI.ComputedStyleDetailsPanel.prototype._computePropertyTraces):
        (WI.ComputedStyleDetailsPanel.prototype._computedStyleShowAllCheckboxValueChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handlePropertiesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleEditorFilterApplied):
        (WI.ComputedStyleDetailsPanel):
        Use the new Computed section (WI.ComputedStyleSection) only when it's enabled in the experimental settings.
        Otherwise, use the current Computed section.

        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel):

        * UserInterface/Views/ComputedStyleSection.css: Added.
        (.computed-style-section):
        (.computed-style-section .computed-property-item):
        (.computed-style-section .computed-property-item.expanded):
        (.computed-style-section .computed-property-item.expanded + .computed-property-item):
        (.computed-style-section .computed-property-item .disclosure-button):
        (.computed-style-section .computed-property-item .property-traces):
        (.computed-style-section .computed-property-item.expanded .property-traces):
        (.computed-style-section .computed-property-item.expanded .disclosure-button):
        (.computed-style-section .computed-property-item .property-trace-item):
        (.computed-style-section .computed-property-item .property-trace-item .property.overridden .value):
        (.computed-style-section .property-trace-item-left,):
        (.computed-style-section .property-trace-item-right):
        (.computed-style-section .computed-property-item .property-trace-item .value):
        (.computed-style-section .property .value):
        (.computed-style-section .computed-property-item .property):
        (.computed-style-section .computed-property-item .property .name):
        (.computed-style-section .computed-property-item .property-trace-item .selector):
        (.computed-style-section .computed-property-item .origin):
        (.computed-style-section .computed-property-item .go-to-link):
        (.computed-style-section .property-trace-item .property .name,):
        (.computed-style-section .property-trace-item .property .value + span):
        (.computed-style-properties.details-section > .content,):

        * UserInterface/Views/ComputedStyleSection.js: Added.
        (WI.ComputedStyleSection):
        (WI.ComputedStyleSection.prototype.get style):
        (WI.ComputedStyleSection.prototype.set style):
        (WI.ComputedStyleSection.prototype.get styleTraces):
        (WI.ComputedStyleSection.prototype.set styleTraces):
        (WI.ComputedStyleSection.prototype.set showsImplicitProperties):
        (WI.ComputedStyleSection.prototype.set alwaysShowPropertyNames):
        (WI.ComputedStyleSection.prototype.set propertyVisibilityMode):
        (WI.ComputedStyleSection.prototype.set hideFilterNonMatchingProperties):
        (WI.ComputedStyleSection.prototype.get propertiesToRender):
        (WI.ComputedStyleSection.prototype.layout):
        (WI.ComputedStyleSection.prototype.detached):
        (WI.ComputedStyleSection.prototype.hidden):
        (WI.ComputedStyleSection.prototype.applyFilter):
        (WI.ComputedStyleSection.prototype.spreadsheetStylePropertyShowProperty):
        (WI.ComputedStyleSection.prototype._createTrace):
        (WI.ComputedStyleSection.prototype._handlePropertiesChanged):

        * UserInterface/Views/ExpandableView.js: Added.
        (WI.ExpandableView):
        (WI.ExpandableView.prototype.get element):
        (WI.ExpandableView.prototype._onDisclosureButtonClick):
        (WI.ExpandableView.prototype._update):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.layout):
        Replace `_renderOrigin` with WI.StyleOriginView so it could be used by WI.ComputedStyleSection.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.update):
        (WI.SpreadsheetStyleProperty.prototype._isEditable):
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        Introduce `readOnly` option so WI.SpreadsheetStyleProperty could be used by WI.ComputedStyleSection.

        * UserInterface/Views/StyleOriginView.js: Added.
        (WI.StyleOriginView):

2018-11-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Add support for forcing color scheme appearance in DOM tree.
        https://bugs.webkit.org/show_bug.cgi?id=191820
        rdar://problem/46153172

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.get defaultAppearance): Added.
        (WI.CSSManager.prototype.get forcedAppearance): Added.
        (WI.CSSManager.prototype.set forcedAppearance): Added.
        (WI.CSSManager.prototype.canForceAppearance): Added.
        (WI.CSSManager.prototype.defaultAppearanceDidChange): Added.
        * UserInterface/Images/Appearance.svg: Added.
        * UserInterface/Protocol/PageObserver.js:
        (WI.PageObserver.prototype.defaultAppearanceChanged): Added.
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype._defaultAppearanceDidChange): Added.
        (WI.DOMTreeContentView.prototype._toggleAppearance): Added.

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cookies table needs copy keyboard shortcut and context menu support
        https://bugs.webkit.org/show_bug.cgi?id=191482
        <rdar://problem/45953002>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype.handleCopyEvent):
        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
        As with Delete, if the target row is selected, all selected rows are copied.
        Otherwise only the target row is copied. This distinction will be surfaced
        in the UI in https://webkit.org/b/191095.

        (WI.CookieStorageContentView.prototype.tablePopulateCell):
        (WI.CookieStorageContentView.prototype._cookiesAtIndexes):
        (WI.CookieStorageContentView.prototype._formatCookiesAsText):
        (WI.CookieStorageContentView.prototype._formatCookiePropertyForColumn):
        (WI.CookieStorageContentView):
        Break Cookie property formatting into a helper method, which is used for
        formatting Table cells and creating plain text for the clipboard.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.get columns):

2018-11-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection should be handled by a SelectionController
        https://bugs.webkit.org/show_bug.cgi?id=191977
        <rdar://problem/46253093>

        Reviewed by Devin Rousso.

        Add a SelectionController class, which manages an IndexSet of selected
        items, and provides operations for adding and removing items from the
        selection. Complex behaviors such as shift-clicking to select a range of
        items, and updating the selection using the keyboard, are forwarded to
        the controller using special-purpose methods that accept DOM Event objects.

        * UserInterface/Base/Utilities.js:

        * UserInterface/Controllers/SelectionController.js: Added.
        (WI.SelectionController):
        (WI.SelectionController.prototype.get delegate):
        (WI.SelectionController.prototype.get lastSelectedItem):
        (WI.SelectionController.prototype.get selectedItems):
        (WI.SelectionController.prototype.get allowsMultipleSelection):
        (WI.SelectionController.prototype.set allowsMultipleSelection):
        (WI.SelectionController.prototype.get numberOfItems):
        (WI.SelectionController.prototype.hasSelectedItem):
        (WI.SelectionController.prototype.selectItem):
        (WI.SelectionController.prototype.deselectItem):
        (WI.SelectionController.prototype.selectAll):
        (WI.SelectionController.prototype.deselectAll):
        (WI.SelectionController.prototype.removeSelectedItems):
        (WI.SelectionController.prototype.reset):
        (WI.SelectionController.prototype.didRemoveItem):
        (WI.SelectionController.prototype.handleKeyDown):
        (WI.SelectionController.prototype.handleItemMouseDown.normalizeRange):
        (WI.SelectionController.prototype.handleItemMouseDown):
        (WI.SelectionController.prototype._deselectAllAndSelect):
        (WI.SelectionController.prototype._selectItemsFromArrowKey):
        (WI.SelectionController.prototype._nextSelectableIndex):
        (WI.SelectionController.prototype._previousSelectableIndex):
        (WI.SelectionController.prototype._updateSelectedItems):

        * UserInterface/Main.html:
        * UserInterface/Test.html:

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRow):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.get allowsMultipleSelection):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.selectAll):
        (WI.Table.prototype.deselectAll):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        (WI.Table.prototype.selectionControllerSelectionDidChange):
        (WI.Table.prototype.selectionControllerNumberOfItems):
        (WI.Table.prototype.selectionControllerNextSelectableIndex):
        (WI.Table.prototype.selectionControllerPreviousSelectableIndex):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._toggleSelectedRowStyle):
        (WI.Table.prototype._selectRowsFromArrowKey): Deleted.
        (WI.Table.prototype._handleMouseDown.normalizeRange): Deleted.
        (WI.Table.prototype._deselectAllAndSelect): Deleted.
        (WI.Table.prototype._notifySelectionDidChange): Deleted.
        (WI.Table.prototype._updateSelectedRows): Deleted.

2018-11-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: "No Filter Results" in navigation sidebar should have a button to clear filters
        https://bugs.webkit.org/show_bug.cgi?id=191916

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.resetFilter): Added.
        (WI.NavigationSidebarPanel.prototype._checkForEmptyFilterResults.checkTreeOutlineForEmptyFilterResults):

        * UserInterface/Views/FilterBar.js:
        (WI.FilterBar.prototype.clear):

        * UserInterface/Views/FilterBarButton.js:
        (WI.FilterBarButton.prototype.toggle):

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype.resetFilter): Added.
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel.prototype.resetFilter): Added.

        * UserInterface/Views/AuditTestContentView.js:
        (WI.AuditTestContentView.prototype.showFilteredPlaceholder):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._showEmptyFilterResultsMessage):

        * UserInterface/Views/Main.css:
        (.message-text-view > .message + button): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: automatically add to tab bar when the experimental setting is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191659

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Base/Main.js:
        (WI.loaded):
        Drive-by: use existing constants instead of hard-coded strings for consistency.

2018-11-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Timelines: add Media timeline
        https://bugs.webkit.org/show_bug.cgi?id=191625

        Reviewed by Matt Baker.

        Add a new timeline to Timelines for media related events (e.g. event/fullscreen/low-power).
        Mimics what is visible by using the same instrumentation points as the Network tab when
        "Group Media Requests" is enabled.

        * UserInterface/Models/MediaInstrument.js: Added.
        (WI.MediaInstrument):
        (WI.MediaInstrument.supported):
        (WI.MediaInstrument.prototype.get timelineRecordType):
        (WI.MediaInstrument.prototype.startInstrumentation):
        (WI.MediaInstrument.prototype.stopInstrumentation):

        * UserInterface/Models/MediaTimelineRecord.js: Added.
        (WI.MediaTimelineRecord):
        (WI.MediaTimelineRecord.prototype.get eventType):
        (WI.MediaTimelineRecord.prototype.get domNode):
        (WI.MediaTimelineRecord.prototype.get domEvent):
        (WI.MediaTimelineRecord.prototype.get isLowPower):
        (WI.MediaTimelineRecord.prototype.get displayName):
        (WI.MediaTimelineRecord.prototype.saveIdentityToCookie):

        * UserInterface/Views/MediaTimelineDataGridNode.js: Added.
        (WI.MediaTimelineDataGridNode):
        (WI.MediaTimelineDataGridNode.prototype.get records):
        (WI.MediaTimelineDataGridNode.prototype.get data):
        (WI.MediaTimelineDataGridNode.prototype.createCellContent):
        (WI.MediaTimelineDataGridNode.prototype.iconClassNames):
        (WI.MediaTimelineDataGridNode.prototype.filterableDataForColumn):

        * UserInterface/Views/MediaTimelineOverviewGraph.js: Added.
        (WI.MediaTimelineOverviewGraph):
        (WI.MediaTimelineOverviewGraph.prototype.reset):
        (WI.MediaTimelineOverviewGraph.prototype.shown):
        (WI.MediaTimelineOverviewGraph.prototype.hidden):
        (WI.MediaTimelineOverviewGraph.prototype.layout):
        (WI.MediaTimelineOverviewGraph.prototype.updateSelectedRecord):
        (WI.MediaTimelineOverviewGraph.prototype._handleRecordAdded):
        * UserInterface/Views/MediaTimelineOverviewGraph.css: Added.
        (.timeline-overview-graph.media > .timeline-record-bar):
        (.timeline-overview-graph.media > .timeline-record-bar > .segment):

        * UserInterface/Views/MediaTimelineView.js: Added.
        (WI.MediaTimelineView):
        (WI.MediaTimelineView.prototype.get secondsPerPixel):
        (WI.MediaTimelineView.prototype.get selectionPathComponents):
        (WI.MediaTimelineView.prototype.closed):
        (WI.MediaTimelineView.prototype.reset):
        (WI.MediaTimelineView.prototype.dataGridSortComparator.compareDOMNodes):
        (WI.MediaTimelineView.prototype.dataGridSortComparator.):
        (WI.MediaTimelineView.prototype.dataGridSortComparator):
        (WI.MediaTimelineView.prototype.layout):
        (WI.MediaTimelineView.prototype._processPendingRecords):
        (WI.MediaTimelineView.prototype._handleRecordAdded):
        (WI.MediaTimelineView.prototype._handleSelectionPathComponentSiblingSelected):
        * UserInterface/Views/MediaTimelineView.css: Added.
        (.timeline-view.media > .data-grid):

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.layout):
        * UserInterface/Views/DOMNodeEventsContentView.js:
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        * UserInterface/Views/NetworkDOMNodeDetailView.js:
        (WI.NetworkDOMNodeDetailView):
        (WI.NetworkDOMNodeDetailView.prototype.showContentViewForIdentifier):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get filterNavigationItems):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._showDetailView):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForNodeEntry):
        Remove passing of `startTimestamp` to `WI.DOMEventsBreakdownView`, as we should be showing
        absolute timestamps for each event, not relative to the start of the recording.

        * UserInterface/Views/TimelineIcons.css:
        (.media-icon .icon): Added.
        (.dom-event-record .icon): Added.
        (.dom-event-record.fullscreen .icon): Added.
        (.low-power-record .icon): Added.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.availableTimelineTypes):
        (WI.TimelineManager.prototype.capturingStarted):
        (WI.TimelineManager.prototype.capturingStopped):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.TimelineManager.prototype._handleDOMNodeLowPowerChanged): Added.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler.prototype.clearMarkers):
        (WI.TimelineRuler.prototype._handleClick):
        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._timelineRulerMouseClicked):
        * UserInterface/Models/TimelineRecording.js:
        (WI.TimelineRecording.prototype.reset):
        (WI.TimelineRecording.prototype.addEventMarker):
        (WI.TimelineRecording.prototype.addRecord):
        (WI.TimelineRecording.prototype._keyForRecord):
        Drive-by: rework the logic for "click" event pass-through to the graph underneath.

        * UserInterface/Models/Instrument.js:
        (WI.Instrument.createForTimelineType):

        * UserInterface/Models/TimelineRecord.js:

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.displayNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForTimelineType):
        (WI.TimelineTabContentView.genericClassNameForTimelineType):
        (WI.TimelineTabContentView.iconClassNameForRecord):
        (WI.TimelineTabContentView.displayNameForRecord):
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.timeline-record-type-media > .segment): Added.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph.createForTimeline):

        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/DOMEvent.svg: Added.
        * UserInterface/Images/DOMEventFullscreen.svg: Added.
        * UserInterface/Images/LowPower.svg: Added.
        * UserInterface/Images/MediaInstrument.svg: Added.

2018-11-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove parameters from TreeOutline SelectionDidChange event
        https://bugs.webkit.org/show_bug.cgi?id=191770

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/CallFrameTreeController.js:
        (WI.CallFrameTreeController.prototype._treeSelectionDidChange):
        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._treeSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange): Deleted.
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._canvasTreeOutlineSelectionDidChange):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._treeSelectionDidChange):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel._treeSelectionDidChange):
        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid.prototype._popoverCallStackTreeSelectionDidChange):
        (WI.TimelineDataGrid):
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView.prototype._recordingsTreeSelectionDidChange):
        Use `event.target.selectedTreeElement` instead of `event.data.selectedElement`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview.prototype._timelinesTreeSelectionDidChange):
        (WI.TimelineOverview.prototype._timelinesTreeSelectionDidChange.updateGraphSelectedState): Deleted.
        Refactor away the single place `event.data.deselectedElement` was used.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.select):
        (WI.TreeElement.prototype.deselect):
        Remove `selectedElement` and `deselectedElement` from event data.

2018-11-19  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: removing and re-adding the tab will duplicate tests
        https://bugs.webkit.org/show_bug.cgi?id=191843

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.loadStoredTests):
        If we already have tests, don't attempt to load any stored tests.

2018-11-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Reload Web Inspector" button no longer partially works
        https://bugs.webkit.org/show_bug.cgi?id=191773
        <rdar://problem/46139932>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        (sheetElement.innerHTML):
        * UserInterface/Views/SettingsTabContentView.js:

2018-11-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: add button to show system certificate dialog
        https://bugs.webkit.org/show_bug.cgi?id=191458
        <rdar://problem/45977019>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.supportsShowCertificate): Added.

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.showCertificate): Added.

        * UserInterface/Views/ResourceSecurityContentView.js:
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        * UserInterface/Views/ResourceSecurityContentView.css:
        (.resource-security .details > .show-certificate > .key): Added.
        (.resource-security .details > .show-certificate > .key > .error): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: add default tests
        https://bugs.webkit.org/show_bug.cgi?id=191758

        Reviewed by Matt Baker.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.loadStoredTests):
        (WI.AuditManager.prototype.addDefaultTestsIfNeeded): Added.
        If there are no previously saved tests in the database, automatically add the default set.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):
        * UserInterface/Views/AuditNavigationSidebarPanel.css:
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view): Added.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > .message): Added.
        (.sidebar > .panel.navigation.audit.has-results:not(.has-tests) > .content > .message-text-view > button): Added.
        When the last test is removed, show a placeholder message that allows the user to re-add the
        default set of tests.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WI.NavigationSidebarPanel.prototype._createEmptyContentPlaceholderIfNeeded):

        * Localizations/en.lproj/localizedStrings.js:

2018-11-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: minor style improvements
        https://bugs.webkit.org/show_bug.cgi?id=191727

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager):
        (WI.AuditManager.prototype._handleFrameMainResourceDidChange): Added.
        Clear test results when the main frame navigates, but don't clear the saved results.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):
        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.async fromPayload):
        (WI.AuditTestCaseResult.prototype.get resolvedDOMNodes): Added.
        (WI.AuditTestCaseResult.prototype.toJSON):
        Capture the full CSS path for any returned DOM nodes when the test finishes running, so that
        if the node moves around the path isn't modified as well.

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.layout):
        Always show the URL for the test when viewing a saved result.

        * UserInterface/Views/AuditTestContentView.css:
        (.content-view-container > .content-view.audit-test > header p):
        (.content-view.audit-test > header):
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > header): Added.
        (.content-view.audit-test-case > header h1 > img):
        (.content-view.audit-test-case > header > .metadata > .source): Added.
        (.content-view.audit-test-case > header > .metadata > .duration):
        (.content-view.audit-test-case > section table > tr > td:first-child):
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header):
        Horizontally align items in the header for visual consistency.

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include default filtering of InspectorBackend.dumpInspectorProtocolMessages with multi target backend
        https://bugs.webkit.org/show_bug.cgi?id=191785

        Reviewed by Matt Baker.

        * UserInterface/Debug/Bootstrap.js:
        (dumpMessagesCurrentState):
        (applyDumpMessagesState):
        (WI.runBootstrapOperations):
        Include tri-state for the logs button.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.set filterMultiplexingBackendInspectorProtocolMessages):
        (InspectorBackendClass.prototype.get filterMultiplexingBackendInspectorProtocolMessages):
        (InspectorBackendClass.prototype._startOrStopAutomaticTracing):
        Add new filtering state (the Setting already got added in the past).

        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer):
        (WI.LoggingProtocolTracer.prototype.set filterMultiplexingBackend):
        (WI.LoggingProtocolTracer.prototype.get filterMultiplexingBackend):
        (WI.LoggingProtocolTracer.prototype._processEntry):
        Perform new filtering.

2018-11-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Local Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191740
        <rdar://problem/45470897>

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchResponse):
        Hide the TargetAgent does not exist message. This is necessary so that WebKitLegacy
        tests don't include this line in output each test.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.resetMainExecutionContext):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        Behave more like Main.js and initialize a MultiplexingBackendTarget when the
        TargetAgent is available.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        Use the main target, a.k.a. the page connection. The backend target's
        messages don't have any responses, so this was effectively not waiting
        at all.

2018-11-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TreeOutline shouldn't select first child of an expanded element on right arrow key
        https://bugs.webkit.org/show_bug.cgi?id=191766

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype._treeKeyDown):

2018-11-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should recalculate scrollable height when resized
        https://bugs.webkit.org/show_bug.cgi?id=191328
        <rdar://problem/45854412>

        Reviewed by Devin Rousso.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._hideDetailView):
        Force table columns to layout after hiding the detail view.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.showColumn):
        Call `_resizeColumnsAndFiller` instead of `resize`. The latter also cleared
        `_cachedWidth`, which isn't unnecessary since the width hasn't changed.

        (WI.Table.prototype.layout):
        previously `_resizeColumnsAndFiller` always occurred after `_updateVisibleRows`,
        it was just a matter of whether the cached width and height were cleared first.
        That now happens in `sizeDidChange`.

        (WI.Table.prototype.sizeDidChange):
        (WI.Table.prototype._updateVisibleRows):
        (WI.Table.prototype.resize): Deleted.
        Internally this cleared the cached width and height, which moved to `sizeDidChange`.
        Externally this was used by NetworkTableContentView to force columns to
        layout after hiding the details view. Calling `updateLayout` on the table
        accomplishes the same thing using the standard View API.

        (WI.Table.prototype._resizeColumnsAndFiller):
        Only update the cached width, since the height will already have been
        updated. The number of rows doesn't change during this method, so that
        check was removed.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236540): Debugger: breakpoints are sorted alphabetically instead of numerically
        https://bugs.webkit.org/show_bug.cgi?id=191560

        Reviewed by Joseph Pecoraro.

        When sorting breakpoints, if the `WI.TreeElement`s being compared both contain instances of
        `WI.Breakpoint`, sort by `WI.SourceCodeLocation` instead of title.

        We only do this for `WI.Breakpoint` because they are the only debuggable item that has a
        `WI.SourceCodeLocation` (e.g. `WI.EventBreakpoint` is just an event name string).

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addTreeElement):
        (WI.DebuggerSidebarPanel.prototype._compareBreakpointTreeElements): Added.
        (WI.DebuggerSidebarPanel.prototype._addIssue):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement.comparator): Deleted.
        (WI.DebuggerSidebarPanel.prototype._compareTreeElements): Deleted.

2018-11-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: shift-clicking on a property should extend selection
        https://bugs.webkit.org/show_bug.cgi?id=191575
        <rdar://problem/46012855>

        Reviewed by Devin Rousso.

        When there's at least one property is selected, Shift-clicking another property should extend the selection.
        Pressing Up or Down keys while holding Shift also extends the selection.

        Remove unnecessary `_startedSelection`. Use `hasSelectedProperties` and `_isMousePressed` instead.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        `_isMousePressed` was set to `true` by mistake, causing numerous assertion fails.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set focusIndex):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.hasSelectedProperties): Renamed from _hasSelectedProperties.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.extendSelectedProperties): Added.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseLeave): Removed.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        Implement Shift-ArrowUp/ArrowDown keys.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseLeave): Removed.
        This was only used to set _startedSelection.

        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowClick):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        Remove _startedSelection and use hasSelectedProperties method instead.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        Remove spreadsheetStylePropertyMouseLeave since it is no longer used.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: send a call stack with each action instead of an array of call frames
        https://bugs.webkit.org/show_bug.cgi?id=191628

        Reviewed by Dean Jackson.

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async swizzle):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.fromPayload):
        (WI.RecordingAction.prototype.async swizzle):

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: add drag+drop for importing Audits and Recordings
        https://bugs.webkit.org/show_bug.cgi?id=191566

        Reviewed by Joseph Pecoraro.

        Reorganize the file loading logic for the Audit and Canvas tabs/managers. Add "drop" event
        handlers to the tabs that add and show the corresponding object for the imported data.

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView):
        (WI.AuditTabContentView.prototype._handleDragOver): Added.
        (WI.AuditTabContentView.prototype._handleDrop): Added.
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._handleDragOver): Added.
        (WI.CanvasTabContentView.prototype._handleDrop): Added.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.async processJSON): Added.
        (WI.AuditManager.prototype.export):
        (WI.AuditManager.prototype.import): Deleted.
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.processJSON): Added.
        (WI.CanvasManager.prototype.importRecording): Deleted.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype._handleImportButtonNavigationItemClicked):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._handleImportButtonNavigationItemClicked): Added.
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._handleImportButtonNavigationItemClicked): Added.

        * UserInterface/Base/FileUtilities.js:
        (WI.FileUtilities.save): Added.
        (WI.FileUtilities.importText): Added.
        (WI.FileUtilities.importJSON): Added.
        (WI.FileUtilities.async readText): Added.
        (WI.FileUtilities.async readJSON): Added.
        (WI.saveDataToFile): Deleted.
        (WI.loadDataFromFile): Deleted.
        * UserInterface/Base/Main.js:
        (WI._contextMenuRequested):
        (WI._save):
        (WI._saveAs):
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForSourceCode):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._exportHAR):
        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._exportRecording):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._save):
        Move file related functions into a static class container.

        * Localizations/en.lproj/localizedStrings.js:

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include target identifier in protocol logging
        https://bugs.webkit.org/show_bug.cgi?id=191478

        Reviewed by Devin Rousso.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection.prototype._dispatchResponse):
        (InspectorBackend.Connection.prototype._dispatchEvent):
        (InspectorBackend.Connection.prototype._sendMessageToBackend):
        Call tracer log methods with the connection.

        * UserInterface/Debug/CapturingProtocolTracer.js:
        * UserInterface/Protocol/ProtocolTracer.js:
        * UserInterface/Protocol/LoggingProtocolTracer.js:
        (WI.LoggingProtocolTracer):
        (WI.LoggingProtocolTracer.prototype.logFrontendException):
        (WI.LoggingProtocolTracer.prototype.logFrontendRequest):
        (WI.LoggingProtocolTracer.prototype.logWillHandleResponse):
        (WI.LoggingProtocolTracer.prototype.logDidHandleResponse):
        (WI.LoggingProtocolTracer.prototype.logDidHandleEvent):
        Include the connection in log methods.

        (WI.LoggingProtocolTracer.prototype.logProtocolError):
        Removed, this is never called.
                
        (WI.LoggingProtocolTracer.prototype._processEntry):
        Include the target identifier in entry messages.

2018-11-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Keep Web Inspector window alive across process swaps (PSON) (Remote Inspector)
        https://bugs.webkit.org/show_bug.cgi?id=191494
        <rdar://problem/45469854>

        Reviewed by Devin Rousso.

        This starts introducing multi-target support into the Web Inspector frontend.
        Specifically a backend connection that is persistent, but has the ability to
        connect to and transition between Page targets received through that backend
        connection.

        This patch introduces the concept of a "Backend Target" which is the single
        connection that the frontend contains to a backend. The old way of connecting
        directly to a target is still supported. In that case the frontend constructs
        a DirectBackendTarget for the debuggable type the frontend was spawns for.
        However, if the frontend opens and has a TargetAgent, then it is likely
        connected to a multi-target supporting backend and instead constructs a
        MultiplexingBackendTarget, and will receive further information about
        sub-targets to connect to. The only sub-target at the moment is a Page
        sub-target.

        As part of bringing up multi-target support this adds a few measures to
        handle situations where the frontend is playing fast and loose with agents.
        When the frontend does `FooAgent.method` it intends that to be performed
        on the "main" target being debugged. Likewise when the frontend loops
        over targets it expects them to be the debuggable targets. This patch
        profiles a new implementation of `WI.mainTarget` and `WI.targets` to
        match the assumptions being made by the frontend.

          - In a direct-target world, there is a single target which
            should be used for global agents and in WI.targets.

          - In a multi-target world, the page target is the one that
            should be used for global agents and WI.targets is the list
            of sub-targets (excluding the MultiplexingBackendTarget).

        In a multi-target world, there are now commonly two Targets. The
        MultiplexingBackendTarget and a PageTarget sub-target. In the future
        this may include more targets, such as ServiceWorkers, DedicatedWorkers,
        and perhaps even frames.

        In a multi-target world, the frontend is immediately told about targets
        as soon as it opens (via Target.targetCreated). In order to support
        this, frontend initialization happens without a main target being available.
        So this makes a few small changes to frontend initialization to perform
        a bit of work once we know what the main target is.

        During a page transition the frontend is told to destroy existing targets
        and is soon after told about any new page targets (via Target.targetDestroyed
        and Target.targetCreated). The frontend special cases this page transition.
        It expects only one Page target to be alive at any time, accessible through
        WI.pageTarget. When a page transition happens the WI.pageTarget changes, and
        the frontend performs a bit of work to prepare the UI to handle the transition:
        `<Manager>.transitionPageTarget` / WI.Notification.TransitionPageTarget.
        For the most part the UI behaves fine as long once there are main frame
        change and main resource change events, but those other events allow
        the frontend to respond to the specific page transition cases.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.initializePageTarget):
        (WI.transitionPageTarget):
        (WI.terminatePageTarget):
        (WI.resetMainExecutionContext):
        (WI.redirectGlobalAgentsToConnection):
        (WI.contentLoaded):
        New global functions for target initialization
        and page transitioning.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.initializeBackendTarget):
        (WI.initializePageTarget):
        (WI.transitionPageTarget):
        (WI.terminatePageTarget):
        (WI.resetMainExecutionContext):
        (WI.redirectGlobalAgentsToConnection):
        New global functions for target initialization.
        Tests continue to be a direct connection to the Page.

        * UserInterface/Protocol/TargetObserver.js:
        (WI.TargetObserver.prototype.targetCreated):
        (WI.TargetObserver.prototype.targetDestroyed):
        (WI.TargetObserver.prototype.dispatchMessageFromTarget):
        New observer goes to the manager.

        * UserInterface/Controllers/TargetManager.js:
        (WI.TargetManager):
        (WI.TargetManager.prototype.get targets):
        (WI.TargetManager.prototype.get allTargets):
        (WI.TargetManager.prototype.targetForIdentifier):
        (WI.TargetManager.prototype.targetCreated):
        (WI.TargetManager.prototype.targetDestroyed):
        (WI.TargetManager.prototype.dispatchMessageFromTarget):
        (WI.TargetManager.prototype.createMultiplexingBackendTarget):
        (WI.TargetManager.prototype.createDirectBackendTarget):
        (WI.TargetManager.prototype._addTarget):
        (WI.TargetManager.prototype._removeTarget):
        (WI.TargetManager.prototype._createTarget):
        (WI.TargetManager.prototype._checkAndHandlePageTargetTransition):
        (WI.TargetManager.prototype._checkAndHandlePageTargetTermination):
        (WI.TargetManager.prototype.addTarget): Deleted.
        (WI.TargetManager.prototype.removeTarget): Deleted.
        (WI.TargetManager.prototype.initializeMainTarget): Deleted.
        TargetManager is where we handle creating and destroying targets
        and their connections. In order to simplify things a bit we make
        `WI.targets`, which goes through `get targets()` an array instead
        of a Set. And this includes only the sub-targets.

        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager.prototype.workerCreated):
        (WI.WorkerManager.prototype.workerTerminated):
        Workers are still special-target-like things that multiplex through
        WorkerAgent instead of TargetAgent. We'd like to promote these to
        be full targets in the future.

        * UserInterface/Protocol/DirectBackendTarget.js: Renamed from Source/WebInspectorUI/UserInterface/Protocol/MainTarget.js.
        (WI.DirectBackendTarget):
        (WI.DirectBackendTarget.connectionInfoForDebuggable):
        (WI.DirectBackendTarget.prototype.get mainResource):
        (WI.DirectBackendTarget.prototype.set mainResource):
        This is the only "MainTarget" class. It is the backend target for a direct connection.

        * UserInterface/Protocol/MultiplexingBackendTarget.js:
        (WI.MultiplexingBackendTarget):
        (WI.MultiplexingBackendTarget.prototype.initialize):
        (WI.MultiplexingBackendTarget.prototype.get name):
        (WI.MultiplexingBackendTarget.prototype.get executionContext):
        (WI.MultiplexingBackendTarget.prototype.get mainResource):
        This is the new backend target for a multi-target connection.
        We don't expect it to be treated like other targets, so we don't
        expect anyone to ask it for resources/executionContext/name info.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.TargetManager.prototype.evaluateInInspectedWindow):
        This can be triggered by watch expressions before any target, and
        therefore execution context, is available. Just return null, when
        an execution context is available those clients will try again.

        * UserInterface/Debug/Bootstrap.js:
        Provide an WI.isEngineeringBuild boolean that can be used for various
        debugging features.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        New resources.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.dispatch):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        (InspectorBackend.Agent):
        `InspectorBackend.mainConnection` was renamed `InspectorBackend.backendConnection`.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.Connection):
        (InspectorBackend.Connection.prototype._dispatchResponse):
        (InspectorBackend.Connection.prototype._sendCommandToBackendWithCallback):
        (InspectorBackend.Connection.prototype._sendCommandToBackendExpectingPromise):
        (InspectorBackend.BackendConnection):
        (InspectorBackend.BackendConnection.prototype.sendMessageToBackend):
        (InspectorBackend.WorkerConnection):
        (InspectorBackend.TargetConnection):
        (InspectorBackend.TargetConnection.sendMessageToBackend):
        Use a global sequence id to make filtering a bit easier in protocol tracing.
        TargetConnection is identical to WorkerConnection except it uses TargetAgent
        instead of WorkerAgent to perform multiplexing.

        * UserInterface/Protocol/JavaScriptContextTarget.js:
        (WI.JavaScriptContextTarget):
        * UserInterface/Protocol/PageTarget.js:
        (WI.PageTarget):
        (WI.PageTarget.prototype.get displayName):
        Specialized target types.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._targetAdded):
        (WI.DebuggerSidebarPanel.prototype._targetRemoved):
        (WI.DebuggerSidebarPanel.prototype._updateCallStackTreeOutline):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._targetAdded):
        (WI.SourceCodeTextEditor.prototype._targetRemoved):
        (WI.SourceCodeTextEditor.prototype._callFramesDidChange):
        (WI.SourceCodeTextEditor.prototype._updateThreadIndicatorWidget):
        (WI.SourceCodeTextEditor.prototype._reinsertAllThreadIndicators):
        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype.initializeMainExecutionContextPathComponent):
        (WI.QuickConsole.prototype._targetAdded):
        (WI.QuickConsole.prototype._targetRemoved):
        We make target added get called with all targets, including the
        MultiplexingBackendTarget and PageTargets, both of which would
        not have happened before. Before it was only WorkerTargets. Make
        these sites a little more robust for the type of target they expect
        to be able to handle.

        * UserInterface/Base/Object.js:
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype.transitionPageTarget):
        (WI.DOMManager.prototype.requestDocument):
        (WI.DOMManager.prototype._setDocument):
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.transitionPageTarget):
        (WI.NetworkManager.prototype.executionContextCreated):
        (WI.NetworkManager.prototype._processMainFrameResourceTreePayload):
        * UserInterface/Models/DefaultDashboard.js:
        (WI.DefaultDashboard):
        (WI.DefaultDashboard.prototype._mainResourceDidChange):
        (WI.DefaultDashboard.prototype._transitionPageTarget):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._mainResourceDidChange):
        (WI.NetworkTableContentView.prototype._transitionPageTarget):
        Special case handling when performing a page transition.

        * UserInterface/Views/SettingsTabContentView.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        Document reloads are not supported right now.

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: don't start with auto-capture enabled
        https://bugs.webkit.org/show_bug.cgi?id=191553

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount):
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize):
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input):

2018-11-14  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network Graphs are missing minimum sizes, might have no graph at all
        https://bugs.webkit.org/show_bug.cgi?id=191208

        Reviewed by Joseph Pecoraro.

        `WI.NetworkTableContentView` used to rely on the `WI.timelineManager.persistentNetworkTimeline`
        for events when a new resource is added. It also listened for `WI.Frame.Event.MainResourceDidChange`
        on it's own, which was also listened to by `WI.timelineManager.persistentNetworkTimeline`.
        Due to the order in which these listeners are added, the new main resource would get added
        to the `WI.timelineManager.persistentNetworkTimeline` (and the `WI.NetworkTableContentView`
        shortly after), and right after that the `WI.NetworkTableContentView` would reset the graph
        in it's own listener for `WI.Frame.Event.MainResourceDidChange`.

        This patch removes `WI.timelineManager.persistentNetworkTimeline` and instead makes it so
        that `WI.NetworkTableContentView` listens for resource added and main frame changed events
        on its own (similar to other views that follow this pattern), ensuring that there are no
        event races.

        Also relaxes the "requirement" that prevented 0 width blocks from being drawn, allowing
        requests served from memory/disk to appear in the graph (their time is effectively 0).

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._updateWaterfallTimeRange): Added.
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFinish):
        (WI.NetworkTableContentView.prototype._resourceLoadingDidFail):
        (WI.NetworkTableContentView.prototype._handleResourceAdded): Added.
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._handleNodeDidFireEvent):
        (WI.NetworkTableContentView.prototype._handleNodeLowPowerChanged):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .waterfall .block:matches(.mouse-tracking, .filler) + .block:not(.mouse-tracking, .filler)): Added.
        (.network-table .waterfall .block.filler + .block): Deleted.

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype._mainResourceDidChange):
        (WI.TimelineManager.prototype._resourceWasAdded):
        (WI.TimelineManager.prototype.get persistentNetworkTimeline): Deleted.

2018-11-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support select all (Cmd-A)
        https://bugs.webkit.org/show_bug.cgi?id=190299
        <rdar://problem/45029170>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.selectAll):
        (WI.Table.prototype._handleKeyDown):

2018-11-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table with no selection should select the first/last row on down/up arrow key
        https://bugs.webkit.org/show_bug.cgi?id=190100
        <rdar://problem/44879243>

        Reviewed by Devin Rousso.

        Pressing the up or down arrow key when nothing is selected should select
        the last or first row, respectively. After selecting the row make sure
        it is visible by calling the new Table method `revealRow`.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.revealRow):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._selectRowsFromArrowKey):

2018-11-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Command-A should select all properties
        https://bugs.webkit.org/show_bug.cgi?id=191435
        <rdar://problem/45921373>

        Reviewed by Devin Rousso.

        When focused on a style property, Command-A on Mac (Control-A on other platforms)
        should select all properties of the style rule.

        * UserInterface/Base/Utilities.js:
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):

2018-11-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: show secure certificate details per-request
        https://bugs.webkit.org/show_bug.cgi?id=191447
        <rdar://problem/30019476>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype.resourceRequestDidReceiveResponse):

        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get responseSecurity): Added.
        (WI.Resource.prototype.get loadedSecurely): Added.
        (WI.Resource.prototype.updateForResponse):

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.initialLayout):
        (WI.NetworkResourceDetailView.prototype.showContentViewForIdentifier):
        * UserInterface/Views/NetworkResourceDetailView.css:
        (.content-view.resource-details .go-to-arrow): Added.
        (.content-view.resource-details.showing-find-banner .search-highlight): Added.

        * UserInterface/Views/ResourceSecurityContentView.js: Added.
        (WI.ResourceSecurityContentView):
        (WI.ResourceSecurityContentView.prototype.initialLayout):
        (WI.ResourceSecurityContentView.prototype.layout):
        (WI.ResourceSecurityContentView.prototype.closed):
        (WI.ResourceSecurityContentView.prototype.get supportsSearch):
        (WI.ResourceSecurityContentView.prototype.get numberOfSearchResults):
        (WI.ResourceSecurityContentView.prototype.get hasPerformedSearch):
        (WI.ResourceSecurityContentView.prototype.set automaticallyRevealFirstSearchResult):
        (WI.ResourceSecurityContentView.prototype.performSearch):
        (WI.ResourceSecurityContentView.prototype.searchCleared):
        (WI.ResourceSecurityContentView.prototype.revealPreviousSearchResult):
        (WI.ResourceSecurityContentView.prototype.revealNextSearchResult):
        (WI.ResourceSecurityContentView.prototype._refreshCetificateSection):
        (WI.ResourceSecurityContentView.prototype._perfomSearchOnKeyValuePairs):
        (WI.ResourceSecurityContentView.prototype._revealSearchResult):
        (WI.ResourceSecurityContentView.prototype._handleResourceResponseReceived):
        * UserInterface/Views/ResourceSecurityContentView.css: Added.
        (body[dir] .resource-security > section.certificate > .details):
        (.resource-security .details .key):
        (.resource-security .dns-name + .dns-name > .key,):
        (.resource-security .show-more):
        (@media (prefers-dark-interface) body[dir] .resource-security > section.certificate > .details):
        (@media (prefers-dark-interface) .resource-security .details .key):

        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype._refreshRequestCookiesSection):
        (WI.ResourceCookiesContentView.prototype._refreshResponseCookiesSection):
        (WI.ResourceCookiesContentView.prototype._markIncompleteSectionWithMessage): Deleted.
        (WI.ResourceCookiesContentView.prototype._markIncompleteSectionWithLoadingIndicator): Deleted.
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype._refreshSummarySection):
        (WI.ResourceHeadersContentView.prototype._refreshRedirectHeadersSections):
        (WI.ResourceHeadersContentView.prototype._refreshRequestHeadersSection):
        (WI.ResourceHeadersContentView.prototype._refreshResponseHeadersSection):
        (WI.ResourceHeadersContentView.prototype._refreshQueryStringSection):
        (WI.ResourceHeadersContentView.prototype._refreshRequestDataSection):
        (WI.ResourceHeadersContentView.prototype._markIncompleteSectionWithMessage): Deleted.
        (WI.ResourceHeadersContentView.prototype._markIncompleteSectionWithLoadingIndicator): Deleted.
        (WI.ResourceHeadersContentView.prototype._appendKeyValuePair): Deleted.
        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers .h1-status > .key,):
        (body[dir] .resource-headers > section.error > .details): Deleted.
        (.resource-headers > section.error .key): Deleted.
        (.resource-headers .details): Deleted.
        (.resource-headers .details .pair): Deleted.
        (body[dir=rtl] .resource-headers .details .pair): Deleted.
        (.resource-headers .details .key): Deleted.
        (.resource-headers .value): Deleted.
        (.resource-headers .go-to-arrow): Deleted.
        (.resource-headers.showing-find-banner .search-highlight): Deleted.
        * UserInterface/Views/ResourceDetailsSection.js:
        (WI.ResourceDetailsSection.prototype.markIncompleteSectionWithMessage): Added.
        (WI.ResourceDetailsSection.prototype.markIncompleteSectionWithLoadingIndicator): Added.
        (WI.ResourceDetailsSection.prototype.appendKeyValuePair): Added.
        * UserInterface/Views/ResourceDetailsSection.css:
        (.resource-details > section > .details): Added.
        (.resource-details > section > .details > .pair): Added.
        (body[dir=rtl] .resource-details > section > .details > .pair): Added.
        (.resource-details > section > .details > .pair > .key): Added.
        (.resource-details > section > .details > .pair > .value): Added.
        (body[dir] .resource-details > section.error > .details): Added.
        (.resource-details > section.error > .details > .pair > .key): Added.
        Move commonly used functions/styles from container classes onto this object.

        * UserInterface/Main.html:
        * Localizations/en.lproj/localizedStrings.js:

2018-11-12  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support shift-extending the row selection
        https://bugs.webkit.org/show_bug.cgi?id=189718
        <rdar://problem/44577942>

        Reviewed by Devin Rousso.

        Allow the table selection to be extended by shift-clicking a row, or by
        holding shift and pressing either the up or down arrow key. If both command
        and shift are pressed, shift is ignored. The selection behavior is modeled
        after AppKit's NSTableView.

        * UserInterface/Base/IndexSet.js:
        (WI.IndexSet.prototype.addRange):
        (WI.IndexSet.prototype.deleteRange):
        (WI.IndexSet.prototype.equals):
        (WI.IndexSet.prototype.difference):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype._handleKeyDown):
        Holding shift and pressing either the up or down arrow key extends the
        selection to the next unselected row adjacent to the anchor row, or causes
        the anchor row to be deselected, decreasing the selection. The table chooses
        the action to take based on the direction of movement (up or down), and
        the currently selected rows.

        (WI.Table.prototype._selectRowsFromArrowKey):
        (WI.Table.prototype._handleMouseDown.normalizeRange):
        (WI.Table.prototype._handleMouseDown):
        Clicking a row while holding down shift extends the selection to include
        the rows between the anchor row (exclusive) and clicked row (inclusive).
        The anchor row is equal to the value of `_selectedRowIndex` prior to
        clicking a new row.

        (WI.Table.prototype._deselectAllAndSelect):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._toggleSelectedRowStyle):
        (WI.Table.prototype._updateSelectedRows):
        Helper method for updating the selection to the specified rows, and updating
        DOM styles for rows that are added to or removed from the selection.

2018-11-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: inline swatches don't work when Multiple Properties Selection is enabled
        https://bugs.webkit.org/show_bug.cgi?id=191165
        <rdar://problem/45737972>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        `click` is fired after `mouseup` and inline swatches are activated by `click` event.
        Changing this to `click` allows swatches to activate before editing starts.

        (WI.SpreadsheetTextField.prototype._handleMouseDown):
        Clicking on the field that is being edited should't restart editing. It should move the text caret.

2018-11-12  Don Olmstead  <don.olmstead@sony.com>

        Shipped PNGs include bad profiles: iCCP: known incorrect sRGB profile
        https://bugs.webkit.org/show_bug.cgi?id=189230
        <rdar://problem/44050379>

        Reviewed by Joseph Pecoraro.

        Runs all png images through zopflipng. This results in a smaller file
        size and takes care of this issue as a byproduct.

        * UserInterface/Images/ApplicationCache.png:
        * UserInterface/Images/ApplicationCache@2x.png:
        * UserInterface/Images/ApplicationCacheManifest.png:
        * UserInterface/Images/ApplicationCacheManifest@2x.png:
        * UserInterface/Images/Breakpoint.png:
        * UserInterface/Images/Breakpoint@2x.png:
        * UserInterface/Images/BreakpointInactive.png:
        * UserInterface/Images/BreakpointInactive@2x.png:
        * UserInterface/Images/ClippingCSS.png:
        * UserInterface/Images/ClippingCSS@2x.png:
        * UserInterface/Images/ClippingCSSLarge.png:
        * UserInterface/Images/ClippingCSSLarge@2x.png:
        * UserInterface/Images/ClippingGeneric.png:
        * UserInterface/Images/ClippingGeneric@2x.png:
        * UserInterface/Images/ClippingGenericLarge.png:
        * UserInterface/Images/ClippingGenericLarge@2x.png:
        * UserInterface/Images/ClippingJS.png:
        * UserInterface/Images/ClippingJS@2x.png:
        * UserInterface/Images/ClippingJSLarge.png:
        * UserInterface/Images/ClippingJSLarge@2x.png:
        * UserInterface/Images/ColorIcon.png:
        * UserInterface/Images/ColorIcon@2x.png:
        * UserInterface/Images/Cookie.png:
        * UserInterface/Images/Cookie@2x.png:
        * UserInterface/Images/Database.png:
        * UserInterface/Images/Database@2x.png:
        * UserInterface/Images/DatabaseTable.png:
        * UserInterface/Images/DatabaseTable@2x.png:
        * UserInterface/Images/DocumentCSS.png:
        * UserInterface/Images/DocumentCSS@2x.png:
        * UserInterface/Images/DocumentCSSLarge.png:
        * UserInterface/Images/DocumentCSSLarge@2x.png:
        * UserInterface/Images/DocumentFont.png:
        * UserInterface/Images/DocumentFont@2x.png:
        * UserInterface/Images/DocumentFontLarge.png:
        * UserInterface/Images/DocumentFontLarge@2x.png:
        * UserInterface/Images/DocumentGL.png:
        * UserInterface/Images/DocumentGL@2x.png:
        * UserInterface/Images/DocumentGeneric.png:
        * UserInterface/Images/DocumentGeneric@2x.png:
        * UserInterface/Images/DocumentGenericLarge.png:
        * UserInterface/Images/DocumentGenericLarge@2x.png:
        * UserInterface/Images/DocumentImage.png:
        * UserInterface/Images/DocumentImage@2x.png:
        * UserInterface/Images/DocumentImageLarge.png:
        * UserInterface/Images/DocumentImageLarge@2x.png:
        * UserInterface/Images/DocumentJS.png:
        * UserInterface/Images/DocumentJS@2x.png:
        * UserInterface/Images/DocumentJSLarge.png:
        * UserInterface/Images/DocumentJSLarge@2x.png:
        * UserInterface/Images/DocumentMarkup.png:
        * UserInterface/Images/DocumentMarkup@2x.png:
        * UserInterface/Images/DocumentMarkupLarge.png:
        * UserInterface/Images/DocumentMarkupLarge@2x.png:
        * UserInterface/Images/FolderGeneric.png:
        * UserInterface/Images/FolderGeneric@2x.png:
        * UserInterface/Images/GradientStop.png:
        * UserInterface/Images/GradientStop@2x.png:
        * UserInterface/Images/GradientStopSelected.png:
        * UserInterface/Images/GradientStopSelected@2x.png:
        * UserInterface/Images/HoverMenuButton.png:
        * UserInterface/Images/HoverMenuButton@2x.png:
        * UserInterface/Images/InstructionPointer.png:
        * UserInterface/Images/InstructionPointer@2x.png:
        * UserInterface/Images/LocalStorage.png:
        * UserInterface/Images/LocalStorage@2x.png:
        * UserInterface/Images/SessionStorage.png:
        * UserInterface/Images/SessionStorage@2x.png:
        * UserInterface/Images/SliderThumb.png:
        * UserInterface/Images/SliderThumb@2x.png:
        * UserInterface/Images/SliderThumbPressed.png:
        * UserInterface/Images/SliderThumbPressed@2x.png:
        * UserInterface/Images/WebSocket.png:
        * UserInterface/Images/WebSocket@2x.png:
        * UserInterface/Images/WebSocketLarge.png:
        * UserInterface/Images/WebSocketLarge@2x.png:
        * UserInterface/Images/WorkerScript.png:
        * UserInterface/Images/WorkerScript@2x.png:
        * UserInterface/Images/WorkerScriptLarge.png:
        * UserInterface/Images/WorkerScriptLarge@2x.png:

2018-11-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Pressing Tab or Enter should start editing focused property
        https://bugs.webkit.org/show_bug.cgi?id=191510
        <rdar://problem/45970897>

        Reviewed by Dean Jackson.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Start moving toward better multi-target support
        https://bugs.webkit.org/show_bug.cgi?id=191345

        Reviewed by Devin Rousso.

        This change continues the move toward better multi-target support
        by explicitly using explicit target agents in more places, and
        converting generalized feature checks into target agnostic versions
        that use the new InspectorBackend.domains, which does not vary based
        on the connected targets / debuggable type.

        I also audited uses of RuntimeAgent, ConsoleAgent, and DebuggerAgent
        for better multi-target support since these agents should already
        have complete multi-target support.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.initialize):
        Move explicitly to target.Agent feature checks with a known target.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange):
        Move explicitly to target.DebuggerAgent for feature checks with a known target.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        Move explicitly to target.NetworkAgent for feature checks with a known target.

        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.initializeTarget):
        (WI.RuntimeManager.prototype.saveResult):
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.updatePreview):
        (WI.RemoteObject.prototype.getDisplayablePropertyDescriptors):
        (WI.RemoteObject.prototype.deprecatedGetDisplayableProperties):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._createTypeTokenAnnotator):
        (WI.SourceCodeTextEditor.prototype._createBasicBlockAnnotator):
        Move explicitly to target.RuntimeAgent for feature checks with a known target.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.initializeCSSCompletions):
        Move explicitly to target.CSSAgent for feature checks with a known target.

        * UserInterface/Views/ContextMenuUtilities.js:
        Use the DebuggerAgent from the target associated with the DOMNode's
        remote object instead of assuming the main target.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createGeneralSettingsView):
        Update the ConsoleAgent setting on all targets that support it.

        * UserInterface/Views/BreakpointActionView.js:
        (WI.BreakpointActionView):
        All backends support BreakpointActionType, the assertion can go away.

        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.get navigationItems):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.get navigationItems):
        Include additional `window.FooAgent` checks for these since they will need
        to be revisited in the future.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.get domains):
        (InspectorBackendClass.prototype.activateDomain):
        Expose InspectorBackend.domains.<Domain> for feature checking.

        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype._createPopoverContent):
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype._mainResourceDidChange):
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._attemptAutoCapturingForFrame):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        (WI.TimelineManager):
        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingFinished):
        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.functionReturnDivot):
        * UserInterface/Protocol/DebuggerObserver.js:
        (WI.DebuggerObserver):
        * UserInterface/Protocol/NetworkObserver.js:
        (WI.NetworkObserver.prototype.requestWillBeSent):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked):
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView):
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WI.ResourceDetailsSidebarPanel.prototype._refreshRequestAndResponse):
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView):
        (WI.NetworkManager.prototype.webSocketWillSendHandshakeRequest):
        (WI.DebuggerManager.prototype.debuggerDidResume):
        Feature check in a target agnostic way.

2018-11-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: ResourceQueryController should early return when query is longer than search string
        https://bugs.webkit.org/show_bug.cgi?id=191436

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/ResourceQueryController.js:

        * UserInterface/Models/ResourceQueryMatch.js:
        (WI.ResourceQueryMatch):
        Drive-by fixes.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Uncaught Exception: undefined is not an object (evaluating 'treeElement.parent.removeChild')
        https://bugs.webkit.org/show_bug.cgi?id=191454

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._scriptsCleared):
        This was intending to iterate the Map's values, which are tree elements.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Potential for watch expressions to never show results
        https://bugs.webkit.org/show_bug.cgi?id=191438

        Reviewed by Matt Baker.

        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WI.ScopeChainDetailsSidebarPanel.prototype._generateWatchExpressionsSection):
        If there was no object don't bail, continue and resolve the Promise.
        In this case we can fallback to show `undefined`. This code might not be
        reachable right now, but is wrong as is.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Popover does not work when paused in Worker
        https://bugs.webkit.org/show_bug.cgi?id=191342

        Reviewed by Devin Rousso.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression.populate):
        (WI.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression):
        When receiving the result of the popover evaluation associate the RemoteObject with
        the target we used to evaluate (such as the Debugger call frame), not the target
        associated with the editor.

2018-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Restrict domains at the target level instead of only at the window level
        https://bugs.webkit.org/show_bug.cgi?id=191344

        Reviewed by Devin Rousso.

        With this change the list of agents available on the target should accurately
        reflect the domains that target supports. We should start moving in the direction
        that if we are checking for, or using, a feature, we should ideally be using
        code that looks like `target.FooAgent.method` and not `window.FooAgent` or
        an unprefixed `FooAgent`. More changes to follow.

        * UserInterface/Controllers/AppControllerBase.js:
        * UserInterface/Base/DebuggableType.js: Added.
        Extract debuggable type enum out into its own file loaded early on.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        Load DebuggableType.js.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        With these changes target.ServiceWorker is only exposed on a ServiceWorker target.

        * UserInterface/Protocol/Connection.js:
        (InspectorBackend.WorkerConnection):
        With these changes Target.js restricts the domains exposed on the Target so just
        clone all of the agents (we don't need to do anything special).

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.activateDomain):
        Update supported domains per-type. If there is no explicit availability
        then the domain is supported on all types.

        (InspectorBackendClass.prototype.supportedDomainsForDebuggableType):
        Get supported domains per-type.

        (InspectorBackendClass.prototype.get workerSupportedDomains): Deleted.
        (InspectorBackendClass.prototype.workerSupportedDomain): Deleted.
        workerSupportedDomains is now unnecessary.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype._supportedDomainsForTargetType):
        Restrict supported domains for this target based on its type.

        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-10.3.json:
        * Versions/Inspector-iOS-11.0.json:
        * Versions/Inspector-iOS-11.3.json:
        * Versions/Inspector-iOS-12.0.json:
        Regenerate protocol files now that workerSupportedDomains is unnecessary
        and explicit availability has been added to other domains.

2018-11-07  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r236705): Web Inspector: wrong text color for selected DataGrid row
        https://bugs.webkit.org/show_bug.cgi?id=191405
        <rdar://problem/45893283>

        Reviewed by Matt Baker.

        Selection background color for both Dark Mode mode and Light Mode is dark blue.
        The text color for both cases should be white.

        * UserInterface/Views/DataGrid.css:
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:focus tr.editable.selected .cell-content > input):

2018-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix "Javascript" => "JavaScript" enum in protocol generated objects
        https://bugs.webkit.org/show_bug.cgi?id=191340

        Reviewed by Devin Rousso.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        Insert a missing break statement for the WebGPU case.

        * UserInterface/Models/MemoryTimelineRecord.js:
        (WI.MemoryTimelineRecord.memoryCategoriesFromProtocol):
        Use new enum name.

        * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/10.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js:
        Update enums with new generator.

2018-11-06  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: Web Inspector: Popovers drawing incorrectly in Network Tab (clicking between a few items)
        https://bugs.webkit.org/show_bug.cgi?id=191323

        Reviewed by Devin Rousso.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype._drawBackground):
        Save and restore the context state between updates. Something
        was affecting the clearRect, making it so that it didn't actually
        clear the entire rect each time.

2018-11-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: turn off Start button when all tests are removed
        https://bugs.webkit.org/show_bug.cgi?id=191235

        Reviewed by Matt Baker.

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved):

2018-11-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table selection should not require that rows be in the cache
        https://bugs.webkit.org/show_bug.cgi?id=190993
        <rdar://problem/45613812>

        Reviewed by Devin Rousso.

        Deselecting a table row shouldn't depend on it being in the cache. This
        allows us to implement select all, and other kinds of bulk selection
        actions that affect rows that haven't been revealed.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.deselectRow):

2018-11-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: show save/restore stack for recorded 2D Canvases
        https://bugs.webkit.org/show_bug.cgi?id=175283
        <rdar://problem/34040756>

        Reviewed by Matt Baker.

        Instead of using plain objects for holding the `WI.Recording`'s state, use a model object
        so that more data can be passed around. When visualizing the state, show any previously
        saved states in a `WI.DetailsSection` underneath the current state. If there are no saved
        states (meaning there is only the current state), don't use a `WI.DetailsSection`.

        * UserInterface/Models/RecordingState.js: Added.
        (WI.RecordingState):
        (WI.RecordingState.fromContext):
        (WI.RecordingState.async swizzleInitialState):
        (WI.RecordingState.prototype.get source):
        (WI.RecordingState.prototype.has):
        (WI.RecordingState.prototype.get return):
        (WI.RecordingState.prototype.toJSON):
        (WI.RecordingState.prototype.[Symbol.iterator]):

        * UserInterface/Models/Recording.js:
        (WI.Recording.prototype.async _process):
        (WI.Recording.prototype.async _swizzleState): Deleted.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.deriveCurrentState): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D):

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel):
        (WI.RecordingStateDetailsSidebarPanel.prototype.get scrollElement):
        (WI.RecordingStateDetailsSidebarPanel.prototype.sizeDidChange): Added.
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D.isColorProperty): Deleted.
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D.createInlineSwatch): Deleted.
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (.sidebar > .panel.details.recording-state > .content .details-section > .header .source): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr.modified): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr:not(.selected).non-standard .name-column): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid tr:not(.selected) .unavailable): Added.
        (.sidebar > .panel.details.recording-state > .content .data-grid .inline-swatch): Added.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr:not(.selected).non-standard): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr:not(.selected) .unavailable): Deleted.
        (.sidebar > .panel.details.recording-state > .content > .data-grid .inline-swatch): Deleted.

        * UserInterface/Main.html:
        * UserInterface/Test.html:

        * Localizations/en.lproj/localizedStrings.js:

2018-11-03  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture changes to <canvas> that would affect the recorded context
        https://bugs.webkit.org/show_bug.cgi?id=190854

        Reviewed by Matt Baker.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.isFunctionForType):
        (WI.RecordingAction.constantNameForParameter):
        (WI.RecordingAction.prototype.get contextReplacer): Added.
        (WI.RecordingAction.prototype.async.swizzle):
        (WI.RecordingAction.prototype.apply):
        Create a constant list of actions for each recording type that need to replace the context
        with a different value before being applied (e.g. `width` should be applied to the
        `context`'s `canvas` instead of directly to the `context`).

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D.actionModifiesPath): Added.
        (WI.RecordingContentView.prototype._generateContentCanvas2D):
        (WI.RecordingContentView._actionModifiesPath): Deleted.
        Generate the path context after the actions are applied to the preview context so that the
        final width/height are known and can be used. This is needed because changing the
        width/height causes the content to be erased.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM):
        (WI.RecordingActionTreeElement._classNameForAction):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.tree-outline:focus .item.action.selected:not(.invalid, .initial-state, .has-context-replacer) > .icon): Added.
        (.item.action > .titles .context-replacer::after): Added.
        (.item.action.has-context-replacer > .icon): Added.
        (@media (prefers-dark-interface) .item.action:not(.invalid, .initial-state, .has-context-replacer) > .icon): Added.
        (.tree-outline:focus .item.action.selected:not(.initial-state, .invalid) > .icon): Deleted.
        (@media (prefers-dark-interface) .item.action:not(.initial-state) > .icon): Deleted.
        (@media (prefers-dark-interface) .tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon): Deleted.
        Add the context replacer text to the beginning of the action's name if it exists.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype._refreshPixelSize):
        (WI.CanvasContentView.prototype._updatePixelSize): Deleted.
        Update preview image when the canvas' size changes.

2018-11-02  Matt Baker  <mattbaker@apple.com>

        Web Inspector: support multiple selection/deletion of cookie records
        https://bugs.webkit.org/show_bug.cgi?id=66381
        <rdar://problem/19281525>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView):
        (WI.CookieStorageContentView.prototype.get scrollableElements):
        (WI.CookieStorageContentView.prototype.tableNumberOfRows):
        (WI.CookieStorageContentView.prototype.tableSortChanged):
        (WI.CookieStorageContentView.prototype.tableCellContextMenuClicked):
        (WI.CookieStorageContentView.prototype.tableDidRemoveRows):
        (WI.CookieStorageContentView.prototype.tablePopulateCell):
        (WI.CookieStorageContentView.prototype.initialLayout):
        (WI.CookieStorageContentView.prototype._generateSortComparator):
        (WI.CookieStorageContentView.prototype._refreshButtonClicked):
        (WI.CookieStorageContentView.prototype._reloadCookies):
        (WI.CookieStorageContentView.prototype._updateSort):
        (WI.CookieStorageContentView.prototype._handleTableKeyDown):
        (WI.CookieStorageContentView.prototype.update): Deleted.
        (WI.CookieStorageContentView.prototype._rebuildTable): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.localeCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.numberCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid.expiresCompare): Deleted.
        (WI.CookieStorageContentView.prototype._sortDataGrid): Deleted.
        (WI.CookieStorageContentView.prototype._deleteCallback): Deleted.
        Replace DataGrid with Table. The content view serves as the table
        delegate and data source, and handles delete and backspace key events
        to allow deleting the selected cookies. Cookies may also be deleted from
        the table context menu and a new button in the navigation bar.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.isRowSelected):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype._getOrCreateRow):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._removeRows):
        (WI.Table.prototype._isRowSelected): Deleted.
        Make `isSelectedRow` public. It is more convenient and efficient than
        calling `Table.prototype.selectedRows.includes(rowIndex)`.

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: View: introduce a didLayoutSubtree
        https://bugs.webkit.org/show_bug.cgi?id=191176

        Reviewed by Matt Baker.

        Introduce logic to allow subclasses of `WI.View` to perform logic after every `WI.View` in
        their subtree has finished `layout`.

        * UserInterface/Views/View.js:
        (WI.View.prototype.didLayoutSubtree): Added.
        (WI.View.prototype._layoutSubtree):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.layout):
        (WI.NetworkTableContentView.prototype.didLayoutSubtree): Added.

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: remove unnecessary media event tracking
        https://bugs.webkit.org/show_bug.cgi?id=191174

        Reviewed by Joseph Pecoraro.

        Renames "Group by Node" to "Group Media Requests" for clarity.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkDetailViewClose):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype.layout):
        (WI.NetworkTableContentView.prototype._entryForDOMNode):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype._handleResourceEntryMousedownWaterfall):
        (WI.NetworkTableContentView.prototype._handleNodeEntryMousedownWaterfall):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .data-container .cell.name .range): Added.
        (.network-table .data-container .cell.name .range::before): Added.
        (.network-table:focus .data-container li.selected .cell.name .range): Added.
        (@media (prefers-dark-interface) .network-table .data-container .cell.name .range): Added.
        Always display the "Byte Range" title as a "subtitle", regardless of the media requests
        setting being toggled.
        Drive-by: update the position of the waterfall popover whenever the time range changes.
        Drive-by: close the details view if a node is selected and the media requests setting is
        turned off.

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype.resize): Added.
        (WI.Popover.prototype.handleEvent):

        * Localizations/en.lproj/localizedStrings.js:

2018-11-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: TypeError: null is not an object (evaluating 'mouseBlock.addEventListener')
        https://bugs.webkit.org/show_bug.cgi?id=191020

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineRuler.js:
        (WI.TimelineRuler):
        Since `undefined` is not a number, it isn't less than `0`, which caused us to divide by
        `undefined` (equivalent to dividing by `0`), resulting in `NaN`.

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Uncaught Exception: TypeError: undefined is not an object (evaluating 'WI.modifierKeys.metaKey') (at ScopeBarItem.js:87:67)
        https://bugs.webkit.org/show_bug.cgi?id=191173

        Reviewed by Devin Rousso.

        WI.modifierKeys was accessed before it was initialized. Move it from WI.contentLoaded to WI.loaded,
        which happens before WI.contentLoaded.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r237652): Web Inspector: dumpInspectorProtocolMessages is always enabled
        https://bugs.webkit.org/show_bug.cgi?id=191161

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.get dumpInspectorProtocolMessages):

2018-11-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Toggle selected properties by pressing Space or Command+/
        https://bugs.webkit.org/show_bug.cgi?id=181145
        <rdar://problem/36203388>

        Reviewed by Brian Burg.

        Pressing Space key or Command-/ toggles (comments out or uncomments) selected properties.

        This patch only works with "Enable Selection of Multiple Properties" checked. It shouldn't introduce any
        changes when this setting is unchecked.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get selectionRange):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype.update): Renamed from _update.
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):
        (WI.SpreadsheetStyleProperty.prototype.applyFilter):
        (WI.SpreadsheetStyleProperty.prototype.handleCopyEvent):
        Make `update` method public. No other changes were made.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: create a setting for auto-recording newly created contexts
        https://bugs.webkit.org/show_bug.cgi?id=190856

        Reviewed by Brian Burg.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.supportsRecordingAutoCapture): Added.
        (WI.CanvasManager.prototype.setRecordingAutoCaptureFrameCount): Added.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingStarted):
        (WI.Canvas.prototype.recordingFinished):

        * UserInterface/Models/Recording.js:

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype.get navigationItems):
        (WI.CanvasOverviewContentView.prototype.initialLayout): Added.
        (WI.CanvasOverviewContentView.prototype.attached):
        (WI.CanvasOverviewContentView.prototype.detached):
        (WI.CanvasOverviewContentView.prototype._setRecordingAutoCaptureFrameCount): Added.
        (WI.CanvasOverviewContentView.prototype._updateRecordingAutoCaptureInputElementSize): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureInput): Added.
        (WI.CanvasOverviewContentView.prototype._handleRecordingAutoCaptureCheckedDidChange): Added.
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureEnabledChanged): Added.
        (WI.CanvasOverviewContentView.prototype._handleCanvasRecordingAutoCaptureFrameCountChanged): Added.
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.navigation-bar > .item.canvas-recording-auto-capture > label): Added.
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input): Added.
        (.navigation-bar > .item.canvas-recording-auto-capture > label > input::-webkit-inner-spin-button): Added.
        (.popover-content > .tree-outline .item.recording > .icon): Deleted.
        (.popover-content > .tree-outline .item.recording:hover): Deleted.
        (.popover-content > .tree-outline .item.recording:hover > .icon): Deleted.
        Drive-by: removed unused CSS rules.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._updateProgressView):
        (WI.CanvasContentView.prototype._updateViewRelatedItems):

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):

        * UserInterface/Views/CheckboxNavigationItem.js:
        (WI.CheckboxNavigationItem):
        (WI.CheckboxNavigationItem.prototype._handleLabelClick): Added.

        * UserInterface/Base/Setting.js:

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: display low-power enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=190641
        <rdar://problem/45319049>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.videoLowPowerChanged): Added.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.videoLowPowerChanged): Added.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.prototype.get lowPowerRanges): Added.
        (WI.DOMNode.prototype.videoLowPowerChanged): Added.
        (WI.DOMNode.prototype.canEnterLowPowerMode): Added.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateDomainCell):
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode):
        (WI.NetworkTableContentView.prototype._handleNodeLowPowerChanged): Added.
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area):
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area.dom-fullscreen): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .area.low-power): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-fullscreen): Deleted.

        * UserInterface/Views/DOMNodeEventsContentView.js:
        (WI.DOMNodeEventsContentView):
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        (WI.DOMNodeEventsContentView.prototype.closed): Deleted.
        (WI.DOMNodeEventsContentView.prototype._handleDOMNodeDidFireEvent): Deleted.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView):
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype.layout): Added.
        (WI.DOMEventsBreakdownView.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.DOMEventsBreakdownView.prototype._handleDOMNodeLowPowerChanged): Added.
        (WI.DOMEventsBreakdownView.prototype.addEvent): Deleted.
        (WI.DOMEventsBreakdownView.prototype._populateTable.percentOfTotalTime): Deleted.
        (WI.DOMEventsBreakdownView.prototype._populateTable): Deleted.
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown .graph > .area): Added.
        (.dom-events-breakdown .graph > .area.fullscreen):
        (.dom-events-breakdown .graph > .area.low-power): Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: save imported audits across WebInspector sessions
        https://bugs.webkit.org/show_bug.cgi?id=190858
        <rdar://problem/45527625>

        Reviewed by Brian Burg.

        * UserInterface/Base/ObjectStore.js: Added.
        (WI.ObjectStore):
        (WI.ObjectStore.supported):
        (WI.ObjectStore._open):
        (WI.ObjectStore.get _databaseName):
        (WI.ObjectStore.prototype.associateObject):
        (WI.ObjectStore.prototype.async getAll):
        (WI.ObjectStore.prototype.async add):
        (WI.ObjectStore.prototype.async addObject):
        (WI.ObjectStore.prototype.async delete):
        (WI.ObjectStore.prototype.async deleteObject):
        (WI.ObjectStore.prototype._resolveKeyPath):
        (WI.ObjectStore.prototype.async _operation.listener):
        (WI.ObjectStore.prototype.async _operation):
        Wrapper for a global `IndexedDB` instance for all of WebInspector (per level). Instances of
        `WI.ObjectStore` are able to control a given `IDBObjectStore` using a promise-based API.

        *NOTE*: due to the constraint that `IDBObjectStore`s are only able to be created when the
        owner `IndexedDB` is "upgrade"d, all `WI.ObjectStore` must be declared before the database
        is opened for the first time. Additionally, any time a new `WI.ObjectStore` is added, the
        `version` needs to be incremented to ensure that the "upgrade" event fires.

        To use any of the `*Object` functions, one must implement a `toJSON` on the object provided.
        This is so that `WI.ObjectStore` is able to add the resulting identifier value to the owner
        object while storing its `toJSON` value in the IndexedDB (e.g. for objects that have cycles).

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.import):
        (WI.AuditManager.prototype.loadStoredTests): Added.
        (WI.AuditManager.prototype.removeTest): Added.
        (WI.AuditManager.prototype._addTest):

        * UserInterface/Views/AuditTabContentView.js:
        (WI.AuditTabContentView.prototype.initialLayout): Added.
        Attempt to load stored audits when the Audit tab is first shown (lazy-load).

        * UserInterface/Views/AuditNavigationSidebarPanel.js:
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestRemoved): Added.

        * UserInterface/Views/AuditTreeElement.js:
        (WI.AuditTreeElement.prototype.ondelete):
        Only allow top-level audits to be deleted, as that is what matches the `WI.ObjectStore`.

        * UserInterface/Main.html:
        * UserInterface/Test.html:

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move a few remaining global WI settings to WI.settings
        https://bugs.webkit.org/show_bug.cgi?id=191137

        Reviewed by Brian Burg.

        Move and better name some of the WI.settings created in Main.js
        to WI.settings, alongside other global settings.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        Move settings, and register for settings changes in contentLoaded.

        * UserInterface/Base/Setting.js:
        New settings, and sort values.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        Update setting values for tests.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.initializeTarget):
        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager.prototype.initializeTarget):
        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode.prototype.get children):
        (WI.DOMNode.prototype.get nextSibling):
        (WI.DOMNode.prototype.get previousSibling):
        (WI.DOMNode.prototype.get childNodeCount):
        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.initialize):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.closed):
        (WI.DOMTreeContentView.prototype._togglePaintFlashing):
        (WI.DOMTreeContentView.prototype._showPaintRectsSettingChanged):
        (WI.DOMTreeContentView.prototype._showShadowDOMSettingChanged):
        (WI.DOMTreeContentView.prototype._toggleShowsShadowDOMSetting):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline):
        (WI.DOMTreeOutline.prototype.close):
        (WI.DOMTreeOutline.prototype._revealAndSelectNode):
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype.initialLayout):
        (WI.LayerTreeDetailsSidebarPanel.prototype._updateDisplayWithLayers):
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.closed):
        (WI.Layers3DContentView.prototype._showPaintRectsSettingChanged):
        (WI.Layers3DContentView.prototype._togglePaintFlashing):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype._resourceCachingDisabledSettingChanged):
        (WI.NetworkTableContentView.prototype._toggleDisableResourceCache):
        * UserInterface/Views/ScriptContentView.js:
        (WI.ScriptContentView):
        (WI.ScriptContentView.prototype.closed):
        (WI.ScriptContentView.prototype._contentDidPopulate):
        (WI.ScriptContentView.prototype._enableControlFlowProfilerSettingChanged):
        (WI.ScriptContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.shown):
        (WI.SourceCodeTextEditor.prototype._proceedPopulateWithContent):
        (WI.SourceCodeTextEditor.prototype._setTypeTokenAnnotatorEnabledState):
        (WI.SourceCodeTextEditor.prototype.set _basicBlockAnnotatorEnabled):
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype.closed):
        (WI.TextResourceContentView.prototype._contentDidPopulate):
        (WI.TextResourceContentView.prototype._enableControlFlowProfilerSettingChanged):
        (WI.TextResourceContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        Renamed setting.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles: missing contextmenu items for links
        https://bugs.webkit.org/show_bug.cgi?id=191021

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):
        (WI.SpreadsheetStyleProperty.prototype._handleLinkContextMenu): Added.
        If the token is subtype of "link", add contextmenu items to the wrapper element.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL.showResourceWithOptions):
        (WI.appendContextMenuItemsForURL):
        Drive-by: don't assume that `options` will be provided.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-31  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: implement copying and deletion of multiple properties
        https://bugs.webkit.org/show_bug.cgi?id=191037
        <rdar://problem/45650078>

        Reviewed by Brian Burg.

        This patch should only work with "Enable Selection of Multiple Properties" checked. It shouldn't introduce any
        changes when this setting is unchecked.

        Mousedown on a property (1) and moving the mouse cursor to another property (2) should select properties 1, 2, and
        all properties between them until mouseup is fired.

        Once selected:
        - Pressing Command-C should copy the selected properties.
        - Pressing Delete should remove the properties.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.get formattedText):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected):
        (.multiple-properties-selection .spreadsheet-style-declaration-editor .property.selected:focus):
        (@media (prefers-dark-interface)):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.selectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.deselectProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseEnter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyMouseLeave):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyCopy):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._handleKeyDown):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._hasSelectedProperties):
        Property selection is defined as two numbers: anchorIndex and focusIndex.
        The property with focusIndex is actually focused. The focus outline is replaced by a more subtle left blue border.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration.selecting,):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyBlur):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseEnter):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorPropertyMouseLeave):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleWindowMouseUp):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        Implement copying the same way it's done for DataGrid: by adding copyHandler property to the focused element.
        Add `tabIndex=-1` so the property element can be focused.

        (WI.SpreadsheetStyleProperty.prototype.get property):
        (WI.SpreadsheetStyleProperty.prototype.get selected):
        (WI.SpreadsheetStyleProperty.prototype.set selected):
        (WI.SpreadsheetStyleProperty.prototype.remove):
        (WI.SpreadsheetStyleProperty.prototype.updateStatus):
        (WI.SpreadsheetStyleProperty.prototype.handleCopyEvent):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidCommit):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):
        (WI.SpreadsheetStyleProperty.prototype._handleNamePaste):

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: attempt to re-link DOM nodes for imported results
        https://bugs.webkit.org/show_bug.cgi?id=191044
        <rdar://problem/45687364>

        Reviewed by Brian Burg.

        When importing a `WI.AuditTestCaseResult`, attempt to `querySelector` for each item in
        `data.domNodes`. If a node is found, replace it with that node and show a tree instead.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.async fromPayload): Added.
        (WI.AuditTestCase.fromPayload): Deleted.

        * UserInterface/Models/AuditTestGroup.js:
        (WI.AuditTestGroup.async fromPayload): Added.
        (WI.AuditTestGroup.fromPayload): Deleted.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult.async fromPayload): Added.
        (WI.AuditTestCaseResult.fromPayload): Deleted.

        * UserInterface/Models/AuditTestGroupResult.js:
        (WI.AuditTestGroupResult.async fromPayload): Added.
        (WI.AuditTestGroupResult.fromPayload): Deleted.

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager.prototype.import):

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Follow-up review comment to r237652.

        Reviewed by Brian Burg.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):

2018-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Separate target initialization from frontend initialization
        https://bugs.webkit.org/show_bug.cgi?id=191052
        <rdar://problem/45658384>

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        Create the targets after the rest of frontend initialization. This is a step
        toward a frontend opening and being told about multiple targets instead of
        knowing in advance a single target it is connected to. All backend
        messages during frontend initialization now happen with an explicit target.

        * UserInterface/Controllers/ApplicationCacheManager.js:
        (WI.ApplicationCacheManager):
        (WI.ApplicationCacheManager.prototype.initializeTarget):
        (WI.ApplicationCacheManager.prototype.initialize):
        * UserInterface/Controllers/CSSManager.js:
        (WI.CSSManager):
        (WI.CSSManager.prototype.initializeTarget):
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.initializeTarget):
        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager):
        (WI.ConsoleManager.prototype.initializeLogChannels):
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype.initializeTarget):
        * UserInterface/Controllers/DOMStorageManager.js:
        (WI.DOMStorageManager):
        (WI.DOMStorageManager.prototype.initializeTarget):
        * UserInterface/Controllers/DatabaseManager.js:
        (WI.DatabaseManager):
        (WI.DatabaseManager.prototype.initializeTarget):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.restoreBreakpointsSoon): Deleted.
        * UserInterface/Controllers/HeapManager.js:
        (WI.HeapManager.prototype.initializeTarget):
        * UserInterface/Controllers/IndexedDBManager.js:
        (WI.IndexedDBManager):
        (WI.IndexedDBManager.prototype.initializeTarget):
        * UserInterface/Controllers/LayerTreeManager.js:
        (WI.LayerTreeManager.prototype.initializeTarget):
        * UserInterface/Controllers/MemoryManager.js:
        (WI.MemoryManager.prototype.initializeTarget):
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.initializeTarget):
        * UserInterface/Controllers/RuntimeManager.js:
        (WI.RuntimeManager):
        (WI.RuntimeManager.prototype.initializeTarget):
        * UserInterface/Controllers/TargetManager.js:
        (WI.TargetManager):
        (WI.TargetManager.prototype.initializeTargetsWithMainTarget):
        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager):
        (WI.TimelineManager.prototype.initializeTarget):
        (WI.TimelineManager.prototype.set enabledTimelineTypes):
        (WI.TimelineManager.prototype._updateAutoCaptureInstruments):
        * UserInterface/Controllers/WorkerManager.js:
        (WI.WorkerManager):
        (WI.WorkerManager.prototype.initializeTarget):
        Move Target initialization out of the constructor into a top level
        `initializeTarget` function. This will be expected to be called
        by any target that the frontend connects to.

        (WI.DebuggerManager.prototype._pauseForInternalScriptsDidChange):
        Drive-by fix. Update all targets if the setting changes.

        (WI.WorkerManager.prototype.workerCreated):
        Call initialize on the new target.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.initializeCSSCompletions):
        (WI.CSSCompletions.requestCSSCompletions): Deleted.
        Rename requestCSSCompletions to initializeCSSCompletions to try
        and standardize on "initialize" being used for most frontend one
        time initialization tasks. This being one such operation that
        only needs to be performed once on a target that supports it.

        * UserInterface/Protocol/Target.js:
        (WI.Target):
        (WI.Target.prototype.initialize):
        Perform explicit target initialization, such as initializing
        the state of all backend domains / agents. This is done by asking
        each of the managers to do initialization work for this target.

        (WI.Target.prototype.get ApplicationCacheAgent):
        (WI.Target.prototype.get CSSAgent):
        (WI.Target.prototype.get CanvasAgent):
        (WI.Target.prototype.get ConsoleAgent):
        (WI.Target.prototype.get DOMAgent):
        (WI.Target.prototype.get DOMDebuggerAgent):
        (WI.Target.prototype.get DOMStorageAgent):
        (WI.Target.prototype.get DatabaseAgent):
        (WI.Target.prototype.get DebuggerAgent):
        (WI.Target.prototype.get HeapAgent):
        (WI.Target.prototype.get IndexedDBAgent):
        (WI.Target.prototype.get InspectorAgent):
        (WI.Target.prototype.get LayerTreeAgent):
        (WI.Target.prototype.get MemoryAgent):
        (WI.Target.prototype.get NetworkAgent):
        (WI.Target.prototype.get PageAgent):
        (WI.Target.prototype.get RecordingAgent):
        (WI.Target.prototype.get RuntimeAgent):
        (WI.Target.prototype.get ScriptProfilerAgent):
        (WI.Target.prototype.get ServiceWorkerAgent):
        (WI.Target.prototype.get TargetAgent):
        (WI.Target.prototype.get TimelineAgent):
        (WI.Target.prototype.get WorkerAgent):
        Accessors for all of the agents on a Target.

        * UserInterface/Protocol/WorkerTarget.js:
        (WI.WorkerTarget):
        This is now automatically done in the base class.

        * UserInterface/Test/Test.js:
        (WI.loaded):
        (WI.performOneTimeFrontendInitializationsUsingTarget):
        New necessary top level hooks, and initialize more like Main.js.

2018-10-31  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: show metadata for results
        https://bugs.webkit.org/show_bug.cgi?id=190853
        <rdar://problem/45527623>

        Reviewed by Brian Burg.

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase.prototype.async run):
        Capture timestamps around the `RunetimeAgent.evaluate` call, as well as the URL of the page.

        * UserInterface/Models/AuditTestCaseResult.js:
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.fromPayload):
        (WI.AuditTestCaseResult.prototype.get metadata): Added.
        (WI.AuditTestCaseResult.prototype.toJSON):

        * UserInterface/Views/AuditTestCaseContentView.js:
        (WI.AuditTestCaseContentView.prototype.initialLayout):
        (WI.AuditTestCaseContentView.prototype.layout):
        * UserInterface/Views/AuditTestCaseContentView.css:
        (.content-view.audit-test-case > header h1): Added.
        (.content-view.audit-test-case > header h1 > img): Added.
        (.content-view.audit-test-case > header > .metadata): Added.
        (.content-view.audit-test-case > header > .metadata > .source > time): Added.
        (.content-view.audit-test-case > header > .metadata > .source > a): Added.
        (.content-view.audit-test-case > header > .metadata > .duration): Added.
        (.content-view.audit-test-case > header > h1): Deleted.
        (.content-view.audit-test-case > header > h1 > img): Deleted.
        Display any metadata information where the `WI.ScopeBar` is for `WI.AuditTestGroupContentView`s.

        * UserInterface/Views/AuditTestContentView.css:
        (.content-view.audit-test > header):
        (.content-view.audit-test > header > .information): Added.
        * UserInterface/Views/AuditTestGroupContentView.css:
        (.content-view.audit-test-group > header):
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .information): Deleted.
        Move common CSS rules to common parent class.

        * UserInterface/Base/Utilities.js:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: Audit: create Audit Tab
        https://bugs.webkit.org/show_bug.cgi?id=190754

        Reviewed by Matt Baker.

        Create an Audit tab for running audits on the inspected page. Leverage `Runtime.evaluate`
        for running the audit tests (arbitrary JavaScript), and use the returned value to generate
        a preview UI of the results. All tests/results can be exported/imported to formatted JSON:

        `AuditTestCase` JSON:
            {
                "type": "test-case",
                "name": <string>,
                <optional> "description": <string>,
                "test": <stringified JavaScript function>,
            }

        `AuditTestGroup` JSON:
            {
                "type": "test-group",
                "name": <string>,
                <optional> "description": <string>,
                "tests": [...<AuditTestCase, AuditTestGroup>],
            }

        `AuditTestCaseResult` JSON:
            {
                "type": "test-case-result",
                "name": <string>,
                <optional> "description": <string>,
                "level": <"pass", "warn", "fail", "error", "unsupported">,
                "data": {
                    "domNodes": [...<stringified CSS path>],
                    "domAttributes": [...<string>],
                    "errors": [...<string>],
                },
            }

        `AuditTestGroupResult` JSON:
            {
                "type": "test-group-result",
                "name": <string>,
                <optional> "description": <string>,
                "results": [...<AuditTestCaseResult, AuditTestGroupResult>],
            }

        More keys may be added in the future (especially for `AuditTestCaseResult.data`).

        * UserInterface/Controllers/AuditManager.js:
        (WI.AuditManager):
        (WI.AuditManager.synthesizeError): Added.
        (WI.AuditManager.prototype.get tests): Added.
        (WI.AuditManager.prototype.get results): Added.
        (WI.AuditManager.prototype.get runningState): Added.
        (WI.AuditManager.prototype.start): Added.
        (WI.AuditManager.prototype.stop): Added.
        (WI.AuditManager.prototype.import): Added.
        (WI.AuditManager.prototype.export): Added.
        (WI.AuditManager.prototype._addTest): Added.
        (WI.AuditManager.prototype._addResult): Added.
        (WI.AuditManager.prototype.get testSuites): Deleted.
        (WI.AuditManager.prototype.get reports): Deleted.
        (WI.AuditManager.prototype.async runAuditTestByRepresentedObject): Deleted.
        (WI.AuditManager.prototype.reportForId): Deleted.
        (WI.AuditManager.prototype.removeAllReports): Deleted.
        (WI.AuditManager.prototype.async _runTestCase): Deleted.

        * UserInterface/Models/AuditTestBase.js: Added.
        (WI.AuditTestBases):
        (WI.AuditTestBases.prototype.get name):
        (WI.AuditTestBases.prototype.get description):
        (WI.AuditTestBases.prototype.get runningState):
        (WI.AuditTestBases.prototype.get result):
        (WI.AuditTestBases.prototype.async start):
        (WI.AuditTestBases.prototype.stop):
        (WI.AuditTestBases.prototype.clearResult):
        (WI.AuditTestBases.prototype.saveIdentityToCookie):
        (WI.AuditTestBases.prototype.toJSON):
        (WI.AuditTestBases.prototype.async run):

        * UserInterface/Models/AuditTestCase.js:
        (WI.AuditTestCase):
        (WI.AuditTestCase.fromPayload): Added.
        (WI.AuditTestCase.prototype.toJSON): Added.
        (WI.AuditTestCase.prototype.async run): Added.
        (WI.AuditTestCase.prototype.async run.setLevel): Added.
        (WI.AuditTestCase.prototype.async run.addError): Added.
        (WI.AuditTestCase.prototype.async run.checkResultProperty.addErrorForValueType): Added.
        (WI.AuditTestCase.prototype.async run.checkResultProperty): Added.
        (WI.AuditTestCase.prototype.async run.async resultArrayForEach): Added.
        (WI.AuditTestCase.prototype.get id): Deleted.
        (WI.AuditTestCase.prototype.get name): Deleted.
        (WI.AuditTestCase.prototype.get suite): Deleted.
        (WI.AuditTestCase.prototype.get setup): Deleted.
        (WI.AuditTestCase.prototype.get tearDown): Deleted.
        (WI.AuditTestCase.prototype.get errorDetails): Deleted.

        * UserInterface/Models/AuditTestGroup.js: Added.
        (WI.AuditTestGroup):
        (WI.AuditTestGroup.fromPayload):
        (WI.AuditTestGroup.prototype.get tests):
        (WI.AuditTestGroup.prototype.stop):
        (WI.AuditTestGroup.prototype.clearResult):
        (WI.AuditTestGroup.prototype.async run):
        (WI.AuditTestGroup.prototype.toJSON):
        (WI.AuditTestGroup.prototype._updateResult):
        (WI.AuditTestGroup.prototype._handleTestCompleted):
        (WI.AuditTestGroup.prototype._handleTestProgress):

        * UserInterface/Models/AuditTestResultBase.js: Added.
        (WI.AuditTestResultBase):
        (WI.AuditTestResultBase.prototype.get name):
        (WI.AuditTestResultBase.prototype.get description):
        (WI.AuditTestResultBase.prototype.get result):
        (WI.AuditTestResultBase.prototype.get didPass):
        (WI.AuditTestResultBase.prototype.get didWarn):
        (WI.AuditTestResultBase.prototype.get didFail):
        (WI.AuditTestResultBase.prototype.get didError):
        (WI.AuditTestResultBase.prototype.get unsupported):
        (WI.AuditTestResultBase.prototype.saveIdentityToCookie):
        (WI.AuditTestResultBase.prototype.toJSON):

        * UserInterface/Models/AuditTestCaseResult.js: Added.
        (WI.AuditTestCaseResult):
        (WI.AuditTestCaseResult.fromPayload.checkArray):
        (WI.AuditTestCaseResult.fromPayload):
        (WI.AuditTestCaseResult.prototype.get level):
        (WI.AuditTestCaseResult.prototype.get data):
        (WI.AuditTestCaseResult.prototype.get didPass):
        (WI.AuditTestCaseResult.prototype.get didWarn):
        (WI.AuditTestCaseResult.prototype.get didFail):
        (WI.AuditTestCaseResult.prototype.get didError):
        (WI.AuditTestCaseResult.prototype.get unsupported):
        (WI.AuditTestCaseResult.prototype.toJSON):

        * UserInterface/Models/AuditTestGroupResult.js: Added.
        (WI.AuditTestGroupResult):
        (WI.AuditTestGroupResult.fromPayload):
        (WI.AuditTestGroupResult.prototype.get results):
        (WI.AuditTestGroupResult.prototype.get levelCounts):
        (WI.AuditTestGroupResult.prototype.get didPass):
        (WI.AuditTestGroupResult.prototype.get didWarn):
        (WI.AuditTestGroupResult.prototype.get didFail):
        (WI.AuditTestGroupResult.prototype.get didError):
        (WI.AuditTestGroupResult.prototype.get unsupported):
        (WI.AuditTestGroupResult.prototype.toJSON):

        * UserInterface/Views/AuditTabContentView.js: Added.
        (WI.AuditTabContentView):
        (WI.AuditTabContentView.tabInfo):
        (WI.AuditTabContentView.isTabAllowed):
        (WI.AuditTabContentView.prototype.get type):
        (WI.AuditTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.AuditTabContentView.prototype.canShowRepresentedObject):
        (WI.AuditTabContentView.prototype.shown):
        (WI.AuditTabContentView.prototype.hidden):
        (WI.AuditTabContentView.prototype._handleSpace):

        * UserInterface/Views/AuditNavigationSidebarPanel.js: Added.
        (WI.AuditNavigationSidebarPanel):
        (WI.AuditNavigationSidebarPanel.prototype.showDefaultContentView):
        (WI.AuditNavigationSidebarPanel.prototype.initialLayout):
        (WI.AuditNavigationSidebarPanel.prototype.closed):
        (WI.AuditNavigationSidebarPanel.prototype._addTest):
        (WI.AuditNavigationSidebarPanel.prototype._addResult):
        (WI.AuditNavigationSidebarPanel.prototype._updateStartStopButtonNavigationItemState):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestAdded):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestCompleted):
        (WI.AuditNavigationSidebarPanel.prototype._handleAuditTestScheduled):
        (WI.AuditNavigationSidebarPanel.prototype._treeSelectionDidChange):
        (WI.AuditNavigationSidebarPanel.prototype._handleStartStopButtonNavigationItemClicked):
        (WI.AuditNavigationSidebarPanel.prototype._handleImportButtonNavigationItemClicked):
        * UserInterface/Views/AuditNavigationSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.audit > .content):

        * UserInterface/Views/AuditTreeElement.js: Added.
        (WI.AuditTreeElement):
        (WI.AuditTreeElement.prototype.get result):
        (WI.AuditTreeElement.prototype.onattach):
        (WI.AuditTreeElement.prototype.ondetach):
        (WI.AuditTreeElement.prototype.onpopulate):
        (WI.AuditTreeElement.prototype.populateContextMenu):
        (WI.AuditTreeElement.prototype._start):
        (WI.AuditTreeElement.prototype._updateLevel):
        (WI.AuditTreeElement.prototype._showRunningSpinner):
        (WI.AuditTreeElement.prototype._showRunningProgress):
        (WI.AuditTreeElement.prototype._handleTestCaseCompleted):
        (WI.AuditTreeElement.prototype._handleTestResultCleared):
        (WI.AuditTreeElement.prototype._handleTestCaseScheduled):
        (WI.AuditTreeElement.prototype._handleTestGroupCompleted):
        (WI.AuditTreeElement.prototype._handleTestGroupProgress):
        (WI.AuditTreeElement.prototype._handleTestGroupScheduled):
        (WI.AuditTreeElement.prototype._handleStatusClick):
        * UserInterface/Views/AuditTreeElement.css: Added.
        (.tree-outline .item.audit > .status):
        (.tree-outline .item.audit > .status > img):
        (.tree-outline .item.audit:matches(.test-case, .test-group) > .status:hover > img):
        (.tree-outline .item.audit > .status:not(:hover) > img.show-on-hover, .tree-outline .item.audit.test-group.expanded > .status:not(:hover)):
        (.tree-outline .item.audit.test-group.expanded > .status:hover > :not(img), .tree-outline .item.audit.test-group-result.expanded > .status):
        (.tree-outline .item.audit > .status > img.pass):
        (.tree-outline .item.audit > .status > img.warn):
        (.tree-outline .item.audit > .status > img.fail):
        (.tree-outline .item.audit > .status > img.error):
        (.tree-outline .item.audit > .status > img.unsupported):
        (.audit.test-case .icon):
        (.audit.test-group .icon):
        (.audit.test-case-result .icon):
        (.audit.test-group-result .icon):

        * UserInterface/Views/AuditTestContentView.js: Added.
        (WI.AuditTestContentView):
        (WI.AuditTestContentView.prototype.get navigationItems):
        (WI.AuditTestContentView.prototype.get headerView):
        (WI.AuditTestContentView.prototype.get contentView):
        (WI.AuditTestContentView.prototype.get supportsSave):
        (WI.AuditTestContentView.prototype.get saveData):
        (WI.AuditTestContentView.prototype.initialLayout):
        (WI.AuditTestContentView.prototype.layout):
        (WI.AuditTestContentView.prototype.shown):
        (WI.AuditTestContentView.prototype.hidden):
        (WI.AuditTestContentView.prototype.get placeholderElement):
        (WI.AuditTestContentView.prototype.set placeholderElement):
        (WI.AuditTestContentView.prototype.showRunningPlaceholder):
        (WI.AuditTestContentView.prototype.showStoppingPlaceholder):
        (WI.AuditTestContentView.prototype.showNoResultPlaceholder):
        (WI.AuditTestContentView.prototype.showNoResultDataPlaceholder):
        (WI.AuditTestContentView.prototype.showFilteredPlaceholder):
        (WI.AuditTestContentView.prototype.hidePlaceholder):
        (WI.AuditTestContentView.prototype.applyFilter):
        (WI.AuditTestContentView.prototype.resetFilter):
        (WI.AuditTestContentView.prototype._exportAudit):
        (WI.AuditTestContentView.prototype._updateExportButtonNavigationItemState):
        (WI.AuditTestContentView.prototype._showPlaceholder):
        (WI.AuditTestContentView.prototype._handleExportButtonNavigationItemClicked):
        (WI.AuditTestContentView.prototype._handleTestChanged):
        * UserInterface/Views/AuditTestContentView.css: Added.
        (.content-view-container > .content-view.audit-test):
        (.content-view-container > .content-view.audit-test > header):
        (.content-view-container > .content-view.audit-test > header h1):
        (.content-view-container > .content-view.audit-test > header p):
        (.content-view.audit-test):
        (.content-view.audit-test h1):
        (.content-view.audit-test > header):
        (.content-view.audit-test > header p):
        (.content-view.audit-test .audit-test.filtered, .content-view.audit-test .audit-test .message-text-view):
        (.content-view.audit-test > section):
        (.content-view.audit-test > section > .message-text-view):
        (.content-view.audit-test.showing-placeholder):
        (.content-view.audit-test.showing-placeholder > section):
        (.content-view.audit-test.showing-placeholder > section > :not(.message-text-view)):
        (@media (prefers-dark-interface) .content-view.audit-test):

        * UserInterface/Views/AuditTestCaseContentView.js: Added.
        (WI.AuditTestCaseContentView):
        (WI.AuditTestCaseContentView.prototype.initialLayout):
        (WI.AuditTestCaseContentView.prototype.layout):
        (WI.AuditTestCaseContentView.prototype.showRunningPlaceholder):
        * UserInterface/Views/AuditTestCaseContentView.css: Added.
        (.content-view-container > .content-view.audit-test-case > header):
        (.content-view-container > .content-view.audit-test-case > section > :not(.message-text-view):first-child):
        (.content-view.audit-test-case > header > h1):
        (.content-view.audit-test-case > header > h1 > img):
        (.content-view.audit-test-case > section > :not(.message-text-view)):
        (.content-view.audit-test-case > section > :not(.message-text-view):last-child):
        (.content-view.audit-test-case > section > :not(.message-text-view) + :not(.message-text-view)):
        (.content-view.audit-test-case > section h1):
        (.content-view.audit-test-case > section table):
        (.content-view.audit-test-case > section table > tr + tr > td):
        (.content-view.audit-test-case > section table > tr > td > :not(.tree-outline)):
        (.content-view.audit-test-case > section table > tr > td:first-child):
        (.content-view.audit-test-case > section > .dom-nodes > table > tr > td:first-child):
        (.content-view.audit-test-case > section code):
        (.content-view.audit-test-case > section mark):

        * UserInterface/Views/AuditTestGroupContentView.js: Added.
        (WI.AuditTestGroupContentView):
        (WI.AuditTestGroupContentView.prototype.initialLayout):
        (WI.AuditTestGroupContentView.prototype.layout):
        (WI.AuditTestGroupContentView.prototype.shown):
        (WI.AuditTestGroupContentView.prototype.hidden):
        (WI.AuditTestGroupContentView.prototype.applyFilter):
        (WI.AuditTestGroupContentView.prototype.resetFilter):
        (WI.AuditTestGroupContentView.prototype.showRunningPlaceholder):
        (WI.AuditTestGroupContentView.prototype._subobjects):
        (WI.AuditTestGroupContentView.prototype._updateLevelScopeBar):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupCompleted):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupProgress):
        (WI.AuditTestGroupContentView.prototype._handleTestGroupScheduled):
        (WI.AuditTestGroupContentView.prototype._handleLevelScopeBarSelectionChanged):
        * UserInterface/Views/AuditTestGroupContentView.css: Added.
        (.content-view-container > .content-view.audit-test-group > header):
        (.content-view.audit-test-group > header):
        (.content-view.audit-test-group.no-matches + .audit-test-group > header):
        (.content-view.audit-test-group > header, .content-view.audit-test-group:not(.filtered):last-child > header):
        (.content-view.audit-test-group.contains-test-case > header):
        (.content-view.audit-test-group.contains-test-case + .audit-test-group.contains-test-case):
        (.content-view.audit-test-group.contains-test-case:not(.contains-test-group) > section, .content-view.audit-test-group.contains-test-case.contains-test-group > section > .audit-test-case):
        (.content-view.audit-test-group > header > .information):
        (.content-view.audit-test-group > header > .information > p):
        (.content-view.audit-test-group > header > nav):
        (.content-view.audit-test-group > header > nav:empty):
        (.content-view.audit-test-group > header > nav:not(:empty):before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li):
        (.content-view.audit-test-group > header > nav > .scope-bar > li:not(:hover, .selected)):
        (.content-view.audit-test-group > header > nav > .scope-bar > li:last-child):
        (.content-view.audit-test-group > header > nav > .scope-bar > li::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.pass::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.warn::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.fail::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.error::before):
        (.content-view.audit-test-group > header > nav > .scope-bar > li.unsupported::before):
        (.content-view.audit-test-group > header > .percentage-pass):
        (.content-view.audit-test-group > header > .percentage-pass:not(:empty)::after):
        (.content-view.audit-test-group > section > .audit-test-case:first-child, .content-view.audit-test-group > section > .audit-test-group + .audit-test-case, .content-view.audit-test-group > section > .audit-test-case + .audit-test-group):
        (.content-view.audit-test-group > section > .audit-test-case:last-child):

        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem):
        (WI.ScopeBarItem.prototype.set selected):
        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype.set selectedScopeBarItem):
        Add an `independent` option that prevents selection changes from deselecting other
        `WI.ScopeBarItem`s in the same `WI.ScopeBar` (`exclusive` takes precedence).

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement):
        (WI.DOMTreeElement.prototype.highlightAttribute):
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom li .highlight):

        * UserInterface/Views/ToggleButtonNavigationItem.js:
        (WI.ToggleButtonNavigationItem.prototype.set toggled):
        Also change the `label` if the `ButtonStyle` has text.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Views/DividerNavigationItem.css:
        (.navigation-bar .item.divider):

        * UserInterface/Base/Utilities.js:
        (Promise.chain): Added.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.createFromRepresentedObject):
        (WI.ContentView.isViewable):

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):

        * UserInterface/Test.html:
        * UserInterface/Base/Test.js:
        (WI.loaded):

        * UserInterface/Images/Audit.svg: Added.
        * UserInterface/Images/AuditStart.svg: Added.
        * UserInterface/Images/AuditStop.svg: Added.
        * UserInterface/Images/AuditTestCase.svg: Added.
        * UserInterface/Images/AuditTestCaseResult.svg: Added.
        * UserInterface/Images/AuditTestError.svg: Added.
        * UserInterface/Images/AuditTestFail.svg: Added.
        * UserInterface/Images/AuditTestGroup.svg: Added.
        * UserInterface/Images/AuditTestGroupResult.svg: Added.
        * UserInterface/Images/AuditTestNoResult.svg: Added.
        * UserInterface/Images/AuditTestPass.svg: Added.
        * UserInterface/Images/AuditTestUnsupported.svg: Added.
        * UserInterface/Images/AuditTestWarn.svg: Added.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide options to WI.cssPath for more verbosity
        https://bugs.webkit.org/show_bug.cgi?id=190987

        Reviewed by Brian Burg.

        * UserInterface/Base/DOMUtilities.js:
        (WI.cssPath):
        (WI.cssPathComponent):
        When the option `full` is true, print every attribute along with every node in the hierarchy
        until the root is reached. This partially duplicates the effect of an XPath, but instead
        uses CSS selectors, making it much more human readable and recognizable.

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: change WI.ColorWheel to use conic-gradient()
        https://bugs.webkit.org/show_bug.cgi?id=189485

        Reviewed by Brian Burg.

        Use the ("new") HSL `WI.ColorPicker` if `conic-gradient` is supported. Otherwise, use the
        ("old") RGB `WI.LegacyColorPicker`.

        * UserInterface/Views/ColorWheel.js:
        (WI.ColorWheel):
        (WI.ColorWheel.prototype.set dimension):
        (WI.ColorWheel.prototype.set brightness):
        (WI.ColorWheel.prototype.get tintedColor):
        (WI.ColorWheel.prototype.set tintedColor):
        (WI.ColorWheel.prototype.get rawColor):
        (WI.ColorWheel.prototype.get _hue): Added.
        (WI.ColorWheel.prototype.get _saturation): Added.
        (WI.ColorWheel.prototype._updateColorForMouseEvent):
        (WI.ColorWheel.prototype._setCrosshairPosition):
        (WI.ColorWheel.prototype._updateGradient): Added.
        (WI.ColorWheel.prototype._pointInCircleForEvent.distance): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent.angleFromCenterToPoint): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent.pointOnCircumference): Deleted.
        (WI.ColorWheel.prototype._pointInCircleForEvent): Deleted.
        (WI.ColorWheel.prototype._tintedColorToPointAndBrightness): Deleted.
        (WI.ColorWheel.prototype._drawRawCanvas): Deleted.
        (WI.ColorWheel.prototype._colorAtPointWithBrightness): Deleted.
        (WI.ColorWheel.prototype._drawTintedCanvas): Deleted.
        (WI.ColorWheel.prototype._draw): Deleted.
        * UserInterface/Views/ColorWheel.css:
        (.color-wheel > .gradient): Added.
        (.color-wheel > .crosshair): Added.

        * UserInterface/Views/LegacyColorWheel.js: Copied from Source/WebInspectorUI/UserInterface/Views/ColorWheel.js.

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.supportsConicGradient): Added.
        (WI.ColorPicker.prototype._updateSliders):

        * UserInterface/Models/Geometry.js:
        (WI.Point.prototype.distance):

        * UserInterface/Main.html:

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: make the layers sidebar in the Elements tab always visible
        https://bugs.webkit.org/show_bug.cgi?id=190158

        Reviewed by Brian Burg.

        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):

2018-10-30  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor WI.ScopeBarItem for better extensibility
        https://bugs.webkit.org/show_bug.cgi?id=190986

        Reviewed by Brian Burg.

        Renames `withModifier` to `extendSelection` for clarity of usage, and to allow the changes
        in <https://webkit.org/b/190754> (adding an option to allow `WI.ScopeBarItem`s to be
        selected without deselcting any other `WI.ScopeBarItem`s) to use the same variable.

        * UserInterface/Views/ScopeBarItem.js:
        (WI.ScopeBarItem):
        (WI.ScopeBarItem.prototype.set selected):
        (WI.ScopeBarItem.prototype._handleMouseDown):
        (WI.ScopeBarItem.prototype.setSelected): Deleted.

        * UserInterface/Views/ScopeBar.js:
        (WI.ScopeBar):
        (WI.ScopeBar.prototype._populate):
        (WI.ScopeBar.prototype._itemSelectionDidChange):

        * UserInterface/Views/MultipleScopeBarItem.js:
        (WI.MultipleScopeBarItem.prototype.set selectedScopeBarItem):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel):

2018-10-29  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Flash views with red outline on initial layout
        https://bugs.webkit.org/show_bug.cgi?id=191048

        Reviewed by Devin Rousso.

        * UserInterface/Views/View.js:
        (WI.View.prototype._layoutSubtree):
        (WI.View.prototype._drawLayoutFlashingOutline):

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: show warning when path moves offscreen
        https://bugs.webkit.org/show_bug.cgi?id=191016

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.deriveCurrentState):
        (WI.RecordingAction.prototype.get isVisual):
        (WI.RecordingAction.prototype.get warning): Added.
        (WI.RecordingAction.prototype.process.checkInvalidCurrentAxisPoint): Added.
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.prototype.get hasVisibleEffect): Deleted.
        Replace `hasVisibleEffect` with a more general `warning` value, so that it can be used for
        more types of warnings.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action.visual.warning:not(.invalid) > .status > .warning): Added.
        (.item.action.visual.no-visible-effect:not(.invalid) > .status > .warning): Deleted.

        * Localizations/en.lproj/localizedStrings.js:

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor code for getting properties via WI.RemoteObject
        https://bugs.webkit.org/show_bug.cgi?id=190989

        Reviewed by Matt Baker.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.getPropertyDescriptors): Added.
        (WI.RemoteObject.prototype.getPropertyDescriptorsAsObject): Added.
        (WI.RemoteObject.prototype.getOwnPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype.getAllPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype._getPropertyDescriptors): Deleted.
        (WI.RemoteObject.prototype.getOwnPropertyDescriptorsAsObject): Deleted.

        * UserInterface/Views/ErrorObjectView.js:
        (WI.ErrorObjectView.prototype.update):
        * UserInterface/Views/ObjectTreePropertyTreeElement.js:
        (WI.ObjectTreePropertyTreeElement.prototype._updateChildren):
        * UserInterface/Views/ObjectTreeView.js:
        (WI.ObjectTreeView.prototype.update):

2018-10-29  Tim Horton  <timothy_horton@apple.com>

        Modernize WebKit nibs and lprojs for localization's sake
        https://bugs.webkit.org/show_bug.cgi?id=190911
        <rdar://problem/45349466>

        Reviewed by Dan Bernstein.

        * WebInspectorUI.xcodeproj/project.pbxproj:
        English->en

2018-10-29  Devin Rousso  <drousso@apple.com>

        Web Inspector: prevent Canvas tab from listening for "space" when not visibile
        https://bugs.webkit.org/show_bug.cgi?id=190988

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.shown):
        (WI.CanvasTabContentView.prototype.hidden): Added.

2018-10-27  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support deleting rows
        https://bugs.webkit.org/show_bug.cgi?id=189803
        <rdar://problem/44655709>

        Reviewed by Devin Rousso.

        Add methods for removing rows from a Table without reloading the data
        source. This patch adds Table.prototype.removeRow for removing a single
        row, and Table.prototype.removeSelectedRows for removing the entire selection.
        The latter also attempts to select a new row, if possible, before removing
        the selection.

        * UserInterface/Base/IndexSet.js:
        (WI.IndexSet.prototype.copy):

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get numberOfRows):
        Cache the number of rows in the table data source. Invalidate cached
        value whenever table data is reloaded. Removing rows immediately updates
        cached value, without incurring a potentially expensive reload.

        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.removeRow):
        (WI.Table.prototype.removeSelectedRows):
        Remove the selected rows and select a new row, if possible.
        (WI.Table.prototype._updateVisibleRows):
        (WI.Table.prototype._handleKeyDown):
        (WI.Table.prototype._deselectAllAndSelect):
        Drive-by fix: should work when `rowToSelect` isn't already selected.
        (WI.Table.prototype._removeRows):
        Remove rows and adjust the indexes of rows that are shifted up as a result
        of preceding rows being removed.

2018-10-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: simplify some editing code checks
        https://bugs.webkit.org/show_bug.cgi?id=190970

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WI._focusChanged):

        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/EditingSupport.js:
        (WI.enclosingCodeMirror): Added.
        (WI.isBeingEdited):
        (WI.isEventTargetAnEditableField):

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):

2018-10-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Uncaught Exception: undefined is not an object (evaluating 'this._classListContainer.children')
        https://bugs.webkit.org/show_bug.cgi?id=190966

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.layout):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._classToggleButtonClicked):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._populateClassToggles):
        Don't try to reload the class toggles if the we haven't `layout` yet, as the element won't
        yet exist.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas Recording loading goes significantly slower when "Frame" tree element is expanded
        https://bugs.webkit.org/show_bug.cgi?id=190497

        Reviewed by Joseph Pecoraro.

        Save the `WI.TreeElement` that are in the DOM, and compare that with any `WI.TreeElement`
        that would be added to the DOM. If all of the following are true, don't edit the DOM:
         - no focused `WI.TreeElement` that isn't currently visible (we would scroll otherwise)
         - the set of previously visible `WI.TreeElement`s (e.g. not used for scroll padding) has at
           least one of the `WI.TreeElement`s that would be added from this update
            - this means that the user hasn't scrolled beyond the padding `WI.TreeElement`
         - there are no `WI.TreeElement`s that would be added from this update that were NOT added
           in a previous update
            - this covers the case that a `WI.TreeElement` is inserted in the visible area

        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements.walk):
        (WI.TreeOutline.prototype.updateVirtualizedElements):

2018-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Broken frontend, DOMAgent is used but does not exist
        https://bugs.webkit.org/show_bug.cgi?id=190922
        <rdar://problem/45569827>

        Reviewed by Devin Rousso.

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.requestDocument):
        Feature check for agents that may not exist in a JSContext.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: add corner rounding to the network timing "blocks"
        https://bugs.webkit.org/show_bug.cgi?id=190379

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.css:
        (.waterfall .block):
        (body[dir=ltr] .waterfall .block): Added.
        (body[dir=rtl] .waterfall .block): Added.
        (.network-table .waterfall .block + .block): Added.
        (.network-table .waterfall .block.filler + .block, .network-table .waterfall .block:not(.request, .response) + :matches(.request, .response)): Added.
        (.network-table .waterfall .block:last-child): Added.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: display fullscreen enter/exit events in Timelines and Network node waterfalls
        https://bugs.webkit.org/show_bug.cgi?id=189874
        <rdar://problem/44700000>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.didFireEvent):
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.didFireEvent):
        Allow `data` to be passed to the frontend with `didFireEvent`.

        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.getFullscreenDOMEvents): Added.
        (WI.DOMNode.prototype.didFireEvent):
        (WI.DOMNode.prototype._handleDOMNodeDidFireEvent): Added.
        (WI.DOMNode.prototype._addDOMEvent):
        (WI.DOMNode.prototype._shouldListenForEventListeners): Added.
        If an event is fired on an ancestor of this node, also record that event in this node's
        `domEvents`, including the `originator` node.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-fullscreen): Added.

        * UserInterface/Views/DOMEventsBreakdownView.js:
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype._populateTable):
        * UserInterface/Views/DOMEventsBreakdownView.css:
        (.dom-events-breakdown .graph > .area.fullscreen): Added.
        (.dom-events-breakdown .inherited > .name, .dom-events-breakdown .inherited > .graph > .point): Added.
        (.dom-events-breakdown:not(.has-inherited) .originator): Added.

2018-10-25  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: more aggressively snap timing blocks together
        https://bugs.webkit.org/show_bug.cgi?id=190439

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        If the time difference between the end of the previous block and the start of this block
        would result in less than 2px of space, extend the next block back to the previous block.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: popovers for function source code are malformed
        https://bugs.webkit.org/show_bug.cgi?id=190859

        Reviewed by Joseph Pecoraro.

        Previously, the `WI.Popover` would be drawn twice: once when the
        `WI.CodeMirrorTokenTrackingController` determines that the user has hovered on a function
        token, and once again when the source for that function is formatted (after being retrieved).
        In the case that the formatter is able to return the prettified source within a frame (or
        two), the `WI.Popover` is still in the middle of animating to its new size, meaning that the
        changes made by the formatted `update` will be overridden on the next rAF (creates a flash).

        * UserInterface/Views/Popover.js:
        (WI.Popover.prototype):
        (WI.Popover.prototype._animateFrame.drawBackground):
        (WI.Popover.prototype._drawBackground):
        Add a member variable to make sure that there is only ever one rAF firing at a time.
        Drive-by: rework the background code to only use one canvas.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._showPopoverForFunction.didGetDetails):
        Don't show the `WI.Popover` until the formatter has finished prettifying the function's
        source code, as otherwise there is brief moment that the popover appears and is empty.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION (r237232): changing resources via up/down blurs the TreeOutline in Resources
        https://bugs.webkit.org/show_bug.cgi?id=190862

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set selectedTextRange):
        Don't `focus` unless the `activeElement` is not a WebInspector element (e.g. <body>),
        meaning that the previously focused element has been removed from the DOM and no longer
        needs to keep the focus.

2018-10-24  Devin Rousso  <drousso@apple.com>

        Web Inspector: CSP request payload on medium.com is unreadable, should be pretty-printed
        https://bugs.webkit.org/show_bug.cgi?id=190354
        <rdar://problem/45090894>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set string.update):
        (WI.TextEditor.prototype._attemptToDetermineMIMEType): Added.
        If the content doesn't already have a MIME type, attempt to determine one by trying to
        format it as "javascript" (e.g. request JSON that is simply missing a MIME type).

        * UserInterface/Views/TextContentView.js:
        (WI.TextContentView):
        (WI.TextContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        * UserInterface/Views/ScriptContentView.js:
        (WI.ScriptContentView):
        (WI.ScriptContentView.prototype._handleTextEditorMIMETypeChanged): Added.
        Enable the "Pretty Print" navigation button if the MIME type changes to something that is
        able to be formatted.
        Drive-by: reorder the creation of the "Pretty Print" button so that it exists if
        `_attemptToDetermineMIMEType` finishes synchronously.

2018-10-23  Devin Rousso  <drousso@apple.com>

        Uncaught Exception: TypeError: null is not an object (evaluating 'mouseBlock.addEventListener')
        https://bugs.webkit.org/show_bug.cgi?id=190766

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        When creating the `mouseBlock`, if the `startTimestamp` and `endTimestamp` are equal, we
        don't create an element. If this is true for the total range of the `WI.Resouce` (meaning
        its `startTime` and `responseEnd`), don't even try to create blocks.

2018-10-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: "Queued NaNms" in Network tab
        https://bugs.webkit.org/show_bug.cgi?id=190767
        <rdar://problem/45420859>

        Reviewed by Brian Burg.

        * UserInterface/Models/ResourceTimingData.js:
        (WI.ResourceTimingData.prototype.get fetchStart):
        If the `WI.ResourceTimingData` has no `fetchStart` use the associated `WI.Resource`'s
        `requestSentTimestamp` (just like `startTime`).

2018-10-22  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Open Quickly dialog doesn't show named scripts that appear in the debugger sidebar
        https://bugs.webkit.org/show_bug.cgi?id=190649

        Reviewed by Devin Rousso.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype.didPresentDialog):
        (WI.OpenResourceDialog.prototype._addResourcesForTarget):
        (WI.OpenResourceDialog.prototype._addScriptsForTarget):
        Include non-resource named scripts from the main target in
        the open quickly dialog.

2018-10-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused member variable of DebuggerSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=190743

        Reviewed by Devin Rousso.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):

2018-10-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: Quickly Open to line/column does should have caret indicating where the position is
        https://bugs.webkit.org/show_bug.cgi?id=190643

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set selectedTextRange):
        (WI.TextEditor.prototype.revealPosition):
        Ensure that CodeMirror is focused before attempting to `setSelection`.
        Drive-by: allow selections past the "end" of the line (since there is a `\n` or `\r`).

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.dialogWasDismissedWithRepresentedObject):
        Remove the extra `focus` call after dismissing the `WI.GoToLineDialog` since it is now
        handled by `WI.TextEditor` via `revealPosition`.

2018-10-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ⌃G to jump to line in CSS file wipes the line
        https://bugs.webkit.org/show_bug.cgi?id=190645

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        * UserInterface/Views/Dialog.js:
        (WI.Dialog.prototype.dismiss):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.dialogWasDismissed): Deleted.
        Rename the handler when dismissing a dialog with a value so that
        it is clear this is only on a successful value and not an invalid value.
        Dialog now only calls this delegate with a valid value. This addresses
        exceptions seen when the GoToLineDialog was dimissed via Escape and
        an unexpected `null` value was being handled in the delegate.

        * UserInterface/Views/GoToLineDialog.js:
        (WI.GoToLineDialog.prototype._handleKeydownEvent):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._handleKeydownEvent):
        Prevent default on the event whenever we dismiss the dialog.
        Without this, the key event was also being sent to the editor.
        In this case, that meant an "Enter" key was replacing the new
        selection in the TextEditor with a newline!

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: capture previously saved states and add them to the recording payload
        https://bugs.webkit.org/show_bug.cgi?id=190473

        Reviewed by Joseph Pecoraro.

        Instead of sending a single object of the current state of the context, send an array of
        objects, one for each restore point. When replaying, recreate each restore point before
        applying the selected action(s).

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.fromPayload):
        (WI.Recording.prototype.toJSON):
        (WI.Recording.prototype.async._process):
        (WI.Recording.prototype.async._swizzleState): Added.
        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.deriveCurrentState): Added.
        (WI.RecordingAction.prototype.get states): Added.
        (WI.RecordingAction.prototype.process):
        (WI.RecordingAction.prototype.get state): Deleted.
        Drive-by: when `process`ing, also check to see if any values in the current state changed
        outside of those expected in `_stateModifiers` (e.g. `restore` may modify some state values).

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._generateContentCanvas2D):

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        Default to showing the most recent (current) state.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.initialLayout): Added.
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        (WI.CanvasTabContentView.prototype._addRecording): Added.
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._recordingAdded): Deleted.
        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.get importedRecordings): Added.
        (WI.CanvasManager.prototype.importRecording):
        Drive-by: store imported recordings on `WI.CanvasManager` so that if the Canvas tab is
        closed we can still show the list of imported recordings.

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas recording sidebar scroll position lost after switching tabs
        https://bugs.webkit.org/show_bug.cgi?id=190482

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Sidebar.js:
        (WI.Sidebar.prototype.removeSidebarPanel):
        (WI.Sidebar.prototype.set selectedSidebarPanel):
        Call `hidden` before setting `selected` to `false`, as that sets `display: none;` on the
        element, which sets the `scrollTop` to `0`.

        * UserInterface/Views/SidebarPanel.js:
        (WI.SidebarPanel.prototype.shown):
        (WI.SidebarPanel.prototype.hidden):
        (WI.SidebarPanel.prototype.get scrollElement): Added.
        Allow subclasses to specify the scrolling element for saving/restoring the scroll position.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.get scrollElement): Added.
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.get scrollElement): Added.

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: Should be a way to go directly from an event in the overview view to the specialized timeline for that event
        https://bugs.webkit.org/show_bug.cgi?id=135307
        <rdar://problem/17273966>

        Reviewed by Joseph Pecoraro.

        When a `WI.TimelineRecordBar` is clicked, call up the delegate chain to the overview and
        adjust the currently selected `WI.TimelineRecordBar` among the `WI.TimelineOverviewGraph`s.
        Similarly, selecting a `WI.DataGridNode` in any `WI.TimelineView` subclass will use the same
        logic to select the corresponding `WI.TimelineRecordBar`.

        * UserInterface/Views/TimelineOverview.js:
        (WI.TimelineOverview):
        (WI.TimelineOverview.prototype.reset):
        (WI.TimelineOverview.prototype._recordSelected):

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WI.TimelineOverviewGraph):
        (WI.TimelineOverviewGraph.prototype.set selectedRecord):
        (WI.TimelineOverviewGraph.prototype.get selectedRecordBar): Added.
        (WI.TimelineOverviewGraph.prototype.set selectedRecordBar): Added.
        (WI.TimelineOverviewGraph.prototype.timelineRecordBarClicked): Added.
        (WI.TimelineOverviewGraph.prototype._needsSelectedRecordLayout):

        * UserInterface/Views/TimelineRecordBar.js:
        (WI.TimelineRecordBar):
        (WI.TimelineRecordBar.prototype.get selected): Added.
        (WI.TimelineRecordBar.prototype.set selected): Added.
        (WI.TimelineRecordBar.prototype._handleClick): Added.
        * UserInterface/Views/TimelineRecordBar.css:
        (.timeline-record-bar.selected > .segment): Added.
        Add a `delegate` that is notified whenever the element is clicked.

        * UserInterface/Views/TimelineDataGridNode.js:
        (WI.TimelineDataGridNode.prototype.refreshGraph.createBar):
        * UserInterface/Views/LayoutTimelineOverviewGraph.js:
        (WI.LayoutTimelineOverviewGraph.prototype.updateSelectedRecord):
        (WI.LayoutTimelineOverviewGraph.prototype._updateRowLayout.createBar):
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        (WI.NetworkTimelineOverviewGraph.prototype.layout.createBar):
        * UserInterface/Views/ScriptTimelineOverviewGraph.js:
        (WI.ScriptTimelineOverviewGraph.prototype.layout.createBar):
        (WI.ScriptTimelineOverviewGraph.prototype.updateSelectedRecord):

        * UserInterface/Views/TimelineRecordingContentView.js:
        (WI.TimelineRecordingContentView.prototype.showTimelineViewForTimeline):

2018-10-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: sequences of spaces longer than 16 don't show a dot
        https://bugs.webkit.org/show_bug.cgi?id=190528

        Reviewed by Matt Baker.

        * UserInterface/Views/CodeMirrorAdditions.js:
        Create a new CSS rule and add it to a unique <style> whenever a whitespace sequence with
        a length is seen for the first time.

        * UserInterface/Views/CodeMirrorOverrides.css:
        (.show-whitespace-characters .CodeMirror .cm-whitespace-1::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-2::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-3::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-4::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-5::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-6::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-7::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-8::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-9::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-10::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-11::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-12::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-13::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-14::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-15::before): Deleted.
        (.show-whitespace-characters .CodeMirror .cm-whitespace-16::before): Deleted.

2018-10-15  Charles Vazac  <cvazac@gmail.com>

        Web Inspector: Expose Server Timing Response Headers in Network Tab
        https://bugs.webkit.org/show_bug.cgi?id=190440

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: new key "Server Timing:"
        * UserInterface/Main.html: add reference to Models/ServerTimingEntry.js
        * UserInterface/Models/Resource.js:
        (WI.Resource.prototype.get serverTiming):
        (WI.Resource.prototype.updateForResponse):
        * UserInterface/Models/ServerTimingEntry.js: Added.
        (WI.ServerTimingEntry):
        (WI.ServerTimingEntry.parseHeaders): parse raw response headers into an array of ServerTimingEntry objects
        (WI.ServerTimingEntry.parseHeaders.consumeDelimiter):
        (WI.ServerTimingEntry.parseHeaders.consumeToken):
        (WI.ServerTimingEntry.):
        * UserInterface/Test.html: add reference to Models/ServerTimingEntry.js
        * UserInterface/Views/ResourceTimingBreakdownView.js:
        (WI.ResourceTimingBreakdownView.prototype._appendServerTimingRow): render a table row per ServerTimingEntry object
        (WI.ResourceTimingBreakdownView.prototype.initialLayout):
        (WI.ResourceTimingBreakdownView):

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: pseudo elements in DOM tree are too dark
        https://bugs.webkit.org/show_bug.cgi?id=190541
        <rdar://problem/45238443>

        Reviewed by Matt Baker.

        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline.dom .html-pseudo-element):

2018-10-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r233824): execution highlight range missing/incorrect in pretty printed code
        https://bugs.webkit.org/show_bug.cgi?id=188082
        <rdar://problem/42640580>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        TextEditor expects positions returned by the delegate to be relative to
        the editor's text content, not the original source code content.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):
        Convert positions to CodeMirror format here rather than in the delegate
        method, which is a layer removed from CodeMirror.

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: unreadable text when hovering CSS properties while holding Command
        https://bugs.webkit.org/show_bug.cgi?id=190548
        <rdar://problem/45242098>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.meta-key-pressed .spreadsheet-css-declaration:not(.locked) :matches(.name, .value):not(.editing):hover):
        In the light mode the color remained the same.

2018-10-15  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: style editor warnings should not look like errors
        https://bugs.webkit.org/show_bug.cgi?id=190569
        <rdar://problem/45261689>

        Reviewed by Matt Baker.

        Make warnings in the style editor look the same as warnings in the content views.
        Unify warning and error background color variables.

        * UserInterface/Views/LogContentView.css:
        (@media (prefers-dark-interface)):
        (.console-error-level):
        (.console-warning-level):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.error):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error):
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-dark-interface)):

2018-10-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: previews aren't removed when the parent view is hidden
        https://bugs.webkit.org/show_bug.cgi?id=190525

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.get canvases):
        (WI.CanvasManager.prototype.get shaderPrograms):
        Drive-by: simplify these getters.

2018-10-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dark Mode: Highlight text in Network Headers search is too dark
        https://bugs.webkit.org/show_bug.cgi?id=190510

        Reviewed by Devin Rousso.

        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers.showing-find-banner .search-highlight):
        Use adaptive text-color.

2018-10-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: wrong color used for "goto arrow" for selected DOM breakpoint tree element
        https://bugs.webkit.org/show_bug.cgi?id=190180
        <rdar://problem/44927654>

        Reviewed by Matt Baker.

        * UserInterface/Views/Main.css:
        (@media (prefers-dark-interface)):
        (:focus .selected .go-to-arrow):

2018-10-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: Network: detail view reverts to "Response" when new requests are added
        https://bugs.webkit.org/show_bug.cgi?id=190443

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._showDetailView):
        Return early if we are already showing a detail view for the selected object.

2018-10-11  Matt Baker  <mattbaker@apple.com>

        Web Inspector: remove unused  TreeOutline style .force-focus
        https://bugs.webkit.org/show_bug.cgi?id=190480
        <rdar://problem/45203484>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CallFrameTreeElement.css:
        (.tree-outline:focus .item.call-frame.selected .status > .status-image):
        (.tree-outline:matches(:focus, .force-focus) .item.call-frame.selected .status > .status-image): Deleted.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:focus .item.processing.selected .subtitle > progress):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:matches(:focus, .force-focus) .item.processing.selected .subtitle > progress): Deleted.

        * UserInterface/Views/DataGrid.css:
        (body[dir=ltr] .data-grid:focus tr.selected td:not(:last-child)):
        (body[dir=rtl] .data-grid:focus tr.selected td:not(:last-child)):
        (.data-grid:focus tr.parent.selected td.disclosure::before):
        (.data-grid:focus tr.parent.expanded.selected td.disclosure::before):
        (.data-grid:focus tr.selected):
        (.data-grid:focus tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:focus tr.editable.selected .cell-content > input):
        (@media (prefers-dark-interface)):
        (body[dir=ltr] .data-grid:matches(:focus, .force-focus) tr.selected td:not(:last-child)): Deleted.
        (body[dir=rtl] .data-grid:matches(:focus, .force-focus) tr.selected td:not(:last-child)): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.parent.selected td.disclosure::before): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.parent.expanded.selected td.disclosure::before): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.selected): Deleted.
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle): Deleted.
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input): Deleted.

        * UserInterface/Views/Main.css:
        (:focus .selected .go-to-arrow):
        (:focus .selected .go-to-arrow:active):
        (:matches(:focus, .force-focus) .selected .go-to-arrow): Deleted.
        (:matches(:focus, .force-focus) .selected .go-to-arrow:active): Deleted.

        * UserInterface/Views/ProfileView.css:
        (.profile > .data-grid:focus tr.selected td .location):
        (.profile > .data-grid:matches(:focus, .force-focus) tr.selected td .location): Deleted.

        * UserInterface/Views/RecordingActionTreeElement.css:
        (.tree-outline:focus .item.action.selected:not(.initial-state, .invalid) > .icon):
        (body:not(.window-inactive, .window-docked-inactive) .tree-outline:focus .item.action.selected > .titles .parameter.swizzled,):
        (.tree-outline:matches(:focus, .force-focus) .item.action.selected:not(.initial-state, .invalid) > .icon): Deleted.
        (body:not(.window-inactive, .window-docked-inactive) .tree-outline:matches(:focus, .force-focus) .item.action.selected > .titles .parameter.swizzled,): Deleted.

        * UserInterface/Views/ScriptDetailsTimelineView.css:
        (.tree-outline:focus .item.selected .alternate-subtitle):
        (.tree-outline:matches(:focus, .force-focus) .item.selected .alternate-subtitle): Deleted.

        * UserInterface/Views/ShaderProgramTreeElement.css:
        (.tree-outline:focus .item.shader-program.selected .status > img):
        (.tree-outline:matches(:focus, .force-focus) .item.shader-program.selected .status > img): Deleted.

        * UserInterface/Views/ThreadTreeElement.css:
        (.tree-outline:focus > .item.thread.selected .status-button.resume):
        (.tree-outline:matches(:focus, .force-focus) > .item.thread.selected .status-button.resume): Deleted.

        * UserInterface/Views/TimelineRecordBar.css:
        (:focus .selected .timeline-record-bar > .segment):
        (:focus .selected .timeline-record-bar > .segment.inactive):
        (body[dir=ltr] :focus .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (body[dir=rtl] :focus .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (:matches(:focus, .force-focus) .selected .timeline-record-bar > .segment): Deleted.
        (:matches(:focus, .force-focus) .selected .timeline-record-bar > .segment.inactive): Deleted.
        (body[dir=ltr] :matches(:focus, .force-focus) .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)): Deleted.
        (body[dir=rtl] :matches(:focus, .force-focus) .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)): Deleted.

        * UserInterface/Views/TreeElementStatusButton.css:
        (:focus .item.selected > .status > .status-button):
        (:matches(:focus, .force-focus) .item.selected > .status > .status-button): Deleted.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline:focus .item.selected .disclosure-button):
        (.tree-outline:focus .item.selected.expanded .disclosure-button):
        (.tree-outline:focus .item.selected):
        (.tree-outline:focus .item.selected .subtitle):
        (.tree-outline:not(.large):focus .item.selected .status .indeterminate-progress-spinner):
        (.tree-outline:matches(:focus, .force-focus) .item.selected .disclosure-button): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected.expanded .disclosure-button): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected): Deleted.
        (.tree-outline:matches(:focus, .force-focus) .item.selected .subtitle): Deleted.
        (.tree-outline:not(.large):matches(:focus, .force-focus) .item.selected .status .indeterminate-progress-spinner): Deleted.

2018-10-11  Devin Rousso  <drousso@apple.com>

        Web Inspector: detail view is not re-shown after sorting the Network table
        https://bugs.webkit.org/show_bug.cgi?id=190330
        <rdar://problem/45089607>

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: create special Network waterfall for media events
        https://bugs.webkit.org/show_bug.cgi?id=189773
        <rdar://problem/44626605>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        * UserInterface/Base/Utilities.js:

        * UserInterface/Protocol/DOMObserver.js:
        (WI.DOMObserver.prototype.didFireEvent): Added.
        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager.prototype.didFireEvent): Added.
        * UserInterface/Models/DOMNode.js:
        (WI.DOMNode):
        (WI.DOMNode.prototype.get domEvents): Added.
        (WI.DOMNode.prototype.didFireEvent): Added.
        (WI.DOMNode.prototype._addDOMEvent): Added.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.shown):
        (WI.NetworkTableContentView.prototype.hidden):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkDetailViewClose): Added.
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype.tableSelectionDidChange):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.positionByStartOffset): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.setWidthForDuration): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.createDOMEventLine): Added.
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._rowIndexForRepresentedObject): Added.
        (WI.NetworkTableContentView.prototype._updateEntryForResource):
        (WI.NetworkTableContentView.prototype._hideDetailView): Added.
        (WI.NetworkTableContentView.prototype._showDetailView): Added.
        (WI.NetworkTableContentView.prototype._positionDetailView): Added.
        (WI.NetworkTableContentView.prototype._resourceTransferSizeDidChange):
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode):
        (WI.NetworkTableContentView.prototype._handleNodeDidFireEvent): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._typeFilterScopeBarSelectionChanged):
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContent): Added.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResourceEntry): Added.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForNodeEntry): Added.
        (WI.NetworkTableContentView.prototype._handleResourceEntryMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype._handleNodeEntryMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall): Added.
        (WI.NetworkTableContentView.prototype.networkResourceDetailViewClose): Deleted.
        (WI.NetworkTableContentView.prototype._rowIndexForResource): Deleted.
        (WI.NetworkTableContentView.prototype._hideResourceDetailView): Deleted.
        (WI.NetworkTableContentView.prototype._showResourceDetailView): Deleted.
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource): Deleted.
        * UserInterface/Views/NetworkTableContentView.css:
        (.content-view.network .network-table): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-event): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-activity): Added.
        (.network-table :not(.header) .cell.waterfall .waterfall-container > .dom-activity.playing): Added.

        * UserInterface/Views/NetworkDOMNodeDetailView.js: Added.
        (WI.NetworkDOMNodeDetailView):
        (WI.NetworkDOMNodeDetailView.prototype.initialLayout):
        (WI.NetworkDOMNodeDetailView.prototype.showContentViewForIdentifier):

        * UserInterface/Views/NetworkResourceDetailView.css:
        (.content-view.resource-details):
        (.network-resource-detail): Deleted.
        (.network-resource-detail .navigation-bar): Deleted.
        (.network-resource-detail .item.close > .glyph): Deleted.
        (.network-resource-detail .item.close > .glyph:hover): Deleted.
        (.network-resource-detail .item.close > .glyph:active): Deleted.
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only): Deleted.
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected): Deleted.
        (.network-resource-detail > .content-browser): Deleted.
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype.headersContentViewGoToRequestData):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToHeaders):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToRequestBody):
        (WI.NetworkResourceDetailView.prototype.sizesContentViewGoToResponseBody):
        (WI.NetworkResourceDetailView.prototype.initialLayout):
        (WI.NetworkResourceDetailView.prototype.showContentViewForIdentifier):
        (WI.NetworkResourceDetailView.prototype.get resource): Deleted.
        (WI.NetworkResourceDetailView.prototype.hidden): Deleted.
        (WI.NetworkResourceDetailView.prototype.dispose): Deleted.
        (WI.NetworkResourceDetailView.prototype.willShowWithCookie): Deleted.
        (WI.NetworkResourceDetailView.prototype.initialLayout): Deleted.
        (WI.NetworkResourceDetailView.prototype._showPreferredContentView): Deleted.
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem): Deleted.
        (WI.NetworkResourceDetailView.prototype._navigationItemSelected): Deleted.
        (WI.NetworkResourceDetailView.prototype._handleCloseButton): Deleted.

        * UserInterface/Views/NetworkDetailView.js: Added.
        (WI.NetworkDetailView):
        (WI.NetworkDetailView.prototype.get representedObject):
        (WI.NetworkDetailView.prototype.shown):
        (WI.NetworkDetailView.prototype.hidden):
        (WI.NetworkDetailView.prototype.dispose):
        (WI.NetworkDetailView.prototype.willShowWithCookie):
        (WI.NetworkDetailView.prototype.initialLayout):
        (WI.NetworkDetailView.prototype.createDetailNavigationItem):
        (WI.NetworkDetailView.prototype.detailNavigationItemForIdentifier):
        (WI.NetworkDetailView.prototype.showContentViewForIdentifier):
        (WI.NetworkDetailView.prototype._showPreferredContentView):
        (WI.NetworkDetailView.prototype._navigationItemSelected):
        (WI.NetworkDetailView.prototype._handleCloseButton):
        * UserInterface/Views/NetworkDetailView.css: Added.
        (.network-detail):
        (.network-detail .navigation-bar):
        (.network-detail .item.close > .glyph):
        (.network-detail .item.close > .glyph:hover):
        (.network-detail .item.close > .glyph:active):
        (.network .network-detail .navigation-bar .item.radio.button.text-only):
        (.network .network-detail .navigation-bar .item.radio.button.text-only.selected):
        (.network-detail > .content-browser):
        (@media (prefers-dark-interface)):
        Create base class for detail views shown in the Network tab.

        * UserInterface/Views/DOMNodeEventsContentView.js: Added.
        (WI.DOMNodeEventsContentView):
        (WI.DOMNodeEventsContentView.prototype.initialLayout):
        (WI.DOMNodeEventsContentView.prototype.closed):
        (WI.DOMNodeEventsContentView.prototype._handleDOMNodeDidFireEvent):
        * UserInterface/Views/DOMNodeEventsContentView.css: Added.
        (.dom-node-details.dom-events):

        * UserInterface/Views/DOMEventsBreakdownView.js: Added.
        (WI.DOMEventsBreakdownView):
        (WI.DOMEventsBreakdownView.prototype.addEvent):
        (WI.DOMEventsBreakdownView.prototype.initialLayout):
        (WI.DOMEventsBreakdownView.prototype._populateTable.percentOfTotalTime):
        (WI.DOMEventsBreakdownView.prototype._populateTable):
        * UserInterface/Views/DOMEventsBreakdownView.css: Added.
        (.waterfall-popover-content .dom-events-breakdown):
        (.dom-events-breakdown):
        (.dom-events-breakdown table):
        (.dom-events-breakdown tr > :matches(th, td)):
        (.dom-events-breakdown tbody > tr):
        (.dom-events-breakdown .graph):
        (.dom-events-breakdown .graph > :matches(.point, .area)):
        (.dom-events-breakdown .graph > .point):
        (.dom-events-breakdown .time):

        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td): Added.
        (.popover.waterfall-popover): Deleted.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236853): Uncaught Exception: undefined is not an object (evaluating 'entry.resource')
        https://bugs.webkit.org/show_bug.cgi?id=190442

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.reset):
        It's unnecessary to deselect rows in the `WI.Table` when we're about to remove them.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: selection in network table is lost when new entries are added
        https://bugs.webkit.org/show_bug.cgi?id=190362

        Reviewed by Matt Baker.

        The `_selectedRows` list is cleared each time `reloadData` is called, meaning that
        `WI.Table` expects its "owner" to restore the selection (since it doesn't know how). As a
        result, `WI.NetworkTableContentView` needs to call `selectRow` _after_ `reloadData` is
        called, not before.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._updateSort): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._reloadTable): Added.
        (WI.NetworkTableContentView.prototype._resetFilters):
        (WI.NetworkTableContentView.prototype._typeFilterScopeBarSelectionChanged):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):
        (WI.NetworkTableContentView.prototype._urlFilterDidChange):
        (WI.NetworkTableContentView.prototype._updateSortAndFilteredEntries): Deleted.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.reloadData):
        Ensure that the `_selectedRowIndex` is also reset.

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: notify the frontend when a canvas has started recording via console.record
        https://bugs.webkit.org/show_bug.cgi?id=190306

        Reviewed by Brian Burg.

        * UserInterface/Protocol/CanvasObserver.js:
        (WI.CanvasObserver.prototype.recordingStarted): Added.

        * UserInterface/Protocol/CanvasManager.js:
        (WI.CanvasManager.prototype.recordingStarted): Added.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.startRecording):
        (WI.Canvas.prototype.recordingStarted): Added.
        (WI.Canvas.prototype.recordingFinished):

2018-10-10  Devin Rousso  <drousso@apple.com>

        Web Inspector: indent all network entries when "Group by Node" is checked
        https://bugs.webkit.org/show_bug.cgi?id=190388

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange):

        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table.grouped .data-container .cell.name): Added.
        (.network-table.grouped .data-container .cell:not(.parent).name): Added.
        (.network-table.grouped .data-container .cell.child.name): Added.
        (.network-table .cell.grouped-by-node.name): Deleted.
        (body[dir=ltr] .network-table .cell.grouped-by-node.name): Deleted.
        (body[dir=rtl] .network-table .cell.grouped-by-node.name): Deleted.
        Apply a padding to all nodes when the `WI.Table` is grouped.

2018-10-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: show redirect requests in Network and Timelines tabs
        https://bugs.webkit.org/show_bug.cgi?id=150005
        <rdar://problem/5378164>

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/Variables.css:
        * UserInterface/Main.html:
        * UserInterface/Test.html:

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.get redirects): Added.
        (WI.Resource.prototype.get lastRedirectReceivedTimestamp):
        (WI.Resource.prototype.updateForRedirectResponse):
        Save each redirect in an array instead of just remembering the last timestamp.

        * UserInterface/Models/ResourceTimingData.js:
        (WI.ResourceTimingData):
        (WI.ResourceTimingData.fromPayload.offsetToTimestamp):
        (WI.ResourceTimingData.fromPayload):
        (WI.ResourceTimingData.prototype.get redirectStart): Added.
        (WI.ResourceTimingData.prototype.get redirectEnd): Added.
        (WI.ResourceTimingData.prototype.get fetchStart): Added.
        Add missing fields for `Network.types.ResourceTiming`.

        * UserInterface/Models/Redirect.js: Added.
        (WI.Redirect):
        (WI.Redirect.prototype.get url):
        (WI.Redirect.prototype.get requestMethod):
        (WI.Redirect.prototype.get requestHeaders):
        (WI.Redirect.prototype.get responseStatusCode):
        (WI.Redirect.prototype.get responseStatusText):
        (WI.Redirect.prototype.get responseHeaders):
        (WI.Redirect.prototype.get timestamp):
        (WI.Redirect.prototype.get urlComponents):

        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView):
        (WI.ResourceHeadersContentView.prototype.initialLayout):
        (WI.ResourceHeadersContentView.prototype.layout):
        (WI.ResourceHeadersContentView.prototype._refreshRedirectHeadersSections): Added.
        (WI.ResourceHeadersContentView.prototype._resourceRequestHeadersDidChange):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (body[dir] .resource-headers > section.summary > .details): Added.
        (body[dir] .resource-headers > section:matches(.redirect, .headers) > .details): Added.
        (.resource-headers .details .key):
        (.resource-headers .summary .key):
        (body[dir] .resource-headers > section > .details): Deleted.
        (body[dir] .resource-headers > section.headers > .details): Deleted.
        (.resource-headers .value): Deleted.
        Add a request/response header section for each redirect.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph.appendBlock):
        (WI.NetworkTableContentView.prototype._populateWaterfallGraph):
        (WI.NetworkTableContentView.prototype._checkURLFilterAgainstResource):
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        * UserInterface/Views/NetworkTableContentView.css:
        (.waterfall .block.redirect): Added.
        (.waterfall .block.queue):
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        (WI.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar):
        * UserInterface/Views/ResourceTimingBreakdownView.js:
        (WI.ResourceTimingBreakdownView.prototype.initialLayout):
        Add timeline/waterfall entries for total redirect time.

2018-10-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas Tab: grayed out Record button in navigator is nearly invisible
        https://bugs.webkit.org/show_bug.cgi?id=190365
        <rdar://problem/45097739>

        Reviewed by Brian Burg.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (@media (prefers-dark-interface)): Added.
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled): Added.

2018-10-09  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: fix canvas test failures after r236952 and r236954
        https://bugs.webkit.org/show_bug.cgi?id=190403

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        Clear the `shaderProgramCollection` when a `WI.Canvas` is removed so that a remove event is
        fired for each `WI.ShaderProgram`.

2018-10-08  Justin Fan  <justin_fan@apple.com>

        WebGPU: Rename old WebGPU prototype to WebMetal
        https://bugs.webkit.org/show_bug.cgi?id=190325
        <rdar://problem/44990443>

        Reviewed by Dean Jackson.

        Rename WebGPU prototype files to WebMetal in preparation for implementing the new (Oct 2018) WebGPU interface.
        For WebInspector, add WebMetal to valid enums for canvas types.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.displayNameForContextType):

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Dark Mode: canvas recording glyph is black on gray
        https://bugs.webkit.org/show_bug.cgi?id=190367
        <rdar://problem/45099304>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas > footer .view-recording): Added.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before): Deleted.

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow multiple canvases to be recorded at the same time
        https://bugs.webkit.org/show_bug.cgi?id=190305

        Reviewed by Brian Burg.

        Moved the logic for maintaining whether a canvas is actively recording from
        `WI.CanvasManager` to `WI.Canvas`, meaning that each canvas can now record independently of
        every other canvas in the page. If multiple recordings are all finished simultaneously, only
        show the first one to be recieved by the frontend.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager):
        (WI.CanvasManager.prototype.recordingProgress):
        (WI.CanvasManager.prototype.recordingFinished):
        (WI.CanvasManager.prototype.programCreated):
        (WI.CanvasManager.prototype.programDeleted):
        (WI.CanvasManager.prototype._removeCanvas):
        (WI.CanvasManager.prototype._mainResourceDidChange):
        (WI.CanvasManager.prototype.get recordingCanvas): Deleted.
        (WI.CanvasManager.prototype.startRecording): Deleted.
        (WI.CanvasManager.prototype.stopRecording): Deleted.
        (WI.CanvasManager.prototype._dispatchShaderProgramRemoved): Deleted.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.prototype.get recordingFrameCount): Added.
        (WI.Canvas.prototype.get recordingBufferUsed): Added.
        (WI.Canvas.prototype.get recordingActive): Added.
        (WI.Canvas.prototype.get isRecording): Deleted.
        (WI.Canvas.prototype.startRecording): Added.
        (WI.Canvas.prototype.stopRecording): Added.
        (WI.Canvas.prototype.recordingProgress): Added.
        (WI.Canvas.prototype.recordingFinished): Added.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype.detached):
        (WI.CanvasTabContentView.prototype._recordingImportedOrStopped):
        (WI.CanvasTabContentView.prototype._handleSpace):
        (WI.CanvasTabContentView):

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas.recording-active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .title): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .subtitle): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .navigation-bar > .item): Added.
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .recording-active) > header > .navigation-bar): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop.disabled): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop:not(.disabled):hover): Added.
        (.content-view.canvas-overview .content-view.canvas:not(.recording-active) > header > .navigation-bar > .item.record-start-stop:not(.disabled):active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > .progress-vie): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > .preview): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header): Added.
        (.content-view.canvas-overview .content-view.canvas.recording-active > header > .titles > .subtitle): Added.
        (.content-view.canvas-overview .content-view.canvas.is-recording): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .title): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .navigation-bar > .item): Deleted.
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .is-recording) > header > .navigation-bar): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop.disabled): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop:not(.disabled):hover): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop:not(.disabled):active): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > .progress-vie): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > .preview): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header): Deleted.
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle): Deleted.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype.detached):
        (WI.CanvasContentView.prototype._toggleRecording):
        (WI.CanvasContentView.prototype._recordingProgress):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._shaderProgramAdded):
        (WI.CanvasContentView.prototype._shaderProgramRemoved):
        (WI.CanvasContentView.prototype._updateRecordNavigationItem):
        (WI.CanvasContentView.prototype._updateProgressView):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set canvas):
        (WI.CanvasSidebarPanel.prototype._toggleRecording):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):

        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement):
        (WI.CanvasTreeElement.prototype._updateStatus):

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: replace Range.svg icon
        https://bugs.webkit.org/show_bug.cgi?id=190372

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/Range.svg:
        * UserInterface/Images/RangeLarge.svg: Added.

        * UserInterface/Models/Resource.js:
        (WI.Resource.classNameForResource): Added.
        Create a static function for specializing the `className` of `WI.Resource` objects.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):

        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement):

        * UserInterface/Views/ResourceIcons.css:
        (.resource-icon.resource-type-ping .icon, .resource-icon.resource-type-beacon .icon, .large .resource-icon.resource-type-ping .icon, .large .resource-icon.resource-type-beacon .icon):
        (.resource-icon.resource-type-range .icon):
        (.large .resource-icon.resource-type-range .icon): Added.
        Drive-by: added `.large` versions of `ping` and `beacon` icons for the
        `WI.OpenResourceDialog` elements.

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: group media network entries by the node that triggered the request
        https://bugs.webkit.org/show_bug.cgi?id=189606
        <rdar://problem/44438527>

        Reviewed by Brian Burg.

        Introduces a `WI.NavigationItem` for changing whether network entries are grouped by the
        node that initiated the load (if applicable). When grouped by node, a tree-like layout of
        the table cells (including expand/collapse) is used for resources that share the same
        initiator node. The values for the node's cell are based on it's initated resources.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:

        * UserInterface/Controllers/DOMManager.js:
        (WI.DOMManager):
        (WI.DOMManager.prototype._mainResourceDidChange): Added.
        Whenever the frame navigates, re-request the document so that `NetworkAgent` is able to send
        valid `nodeId` for each request's `initiatorNode`. This means that the document should
        always be available.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype.get filterNavigationItems):
        (WI.NetworkTableContentView.prototype.closed):
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.tableSortChanged):
        (WI.NetworkTableContentView.prototype.tableSelectedRowChanged):
        (WI.NetworkTableContentView.prototype.tablePopulateCell):
        (WI.NetworkTableContentView.prototype._populateNameCell.createIconElement): Added.
        (WI.NetworkTableContentView.prototype._populateNameCell):
        (WI.NetworkTableContentView.prototype._populateDomainCell.createIconAndText): Added.
        (WI.NetworkTableContentView.prototype._populateDomainCell):
        (WI.NetworkTableContentView.prototype._populateInitiatorCell):
        (WI.NetworkTableContentView.prototype._populateTransferSizeCell):
        (WI.NetworkTableContentView.prototype._generateSortComparator):
        (WI.NetworkTableContentView.prototype._processPendingEntries):
        (WI.NetworkTableContentView.prototype._updateEntryForResource.updateExistingEntry): Added.
        (WI.NetworkTableContentView.prototype._updateEntryForResource):
        (WI.NetworkTableContentView.prototype._insertResourceAndReloadTable):
        (WI.NetworkTableContentView.prototype._entryForDOMNode): Added.
        (WI.NetworkTableContentView.prototype._tryLinkResourceToDOMNode): Added.
        (WI.NetworkTableContentView.prototype._uniqueValuesForDOMNodeEntry): Added.
        (WI.NetworkTableContentView.prototype._updateFilteredEntries):
        (WI.NetworkTableContentView.prototype._handleGroupByDOMNodeCheckedDidChange): Added.
        * UserInterface/Views/NetworkTableContentView.css:
        (.network-table .cell.dom-node.name .icon): Added.
        (.network-table .cell.dom-node.name .disclosure): Added.
        (body[dir=rtl] .network-table .cell.dom-node.name .disclosure): Added.
        (.network-table:focus li.selected .cell.dom-node.name .disclosure): Added.
        (.network-table .cell.dom-node.name .disclosure.expanded): Added.
        (.network-table:focus li.selected .cell.node.name .disclosure.expanded): Added.
        (.network-table .cell.grouped-by-node.name): Added.
        (body[dir=ltr] .network-table .cell.grouped-by-node.name): Added.
        (body[dir=rtl] .network-table .cell.grouped-by-node.name): Added.
        (.network-table li:not(.selected) .cell:matches(.cache-type, .multiple)): Added.
        (.network-table li.selected .cell.domain > .lock): Added.
        (.network-table .cache-type): Deleted.
        When two resources are added that share the same `initiatorNode`, insert a node entry into
        the `WI.Table` before the first resource entry for that node (based on the current sort).
        This node entry is added after the resource entries are filtered, so they won't appear in
        the default entries list.

        * UserInterface/Models/Resource.js:
        (WI.Resource):
        (WI.Resource.prototype.initiatorNode): Added.
        (WI.Resource.prototype.requestedByteRange): Added.
        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype._initiatorNodeFromPayload): Added.

        * UserInterface/Images/Range.svg: Added.
        * UserInterface/Views/ResourceIcons.css:
        (.resource-icon.resource-type-range .icon): Added.

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: clicking initiator link in Network Tab table doesn't automatically switch to Preview section
        https://bugs.webkit.org/show_bug.cgi?id=190286

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem):

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: be more specific as to what types of WI.Collection are allowed for the Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=190304

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.tabContentViewClassForRepresentedObject):
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView.prototype.canShowRepresentedObject):

2018-10-08  Devin Rousso  <drousso@apple.com>

        Web Inspector: Open Resource Dialog should show path to resource (to disambiguate resources with same name)
        https://bugs.webkit.org/show_bug.cgi?id=178153
        <rdar://problem/34925686>

        Reviewed by Brian Burg.

        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._populateResourceTreeOutline):
        * UserInterface/Views/OpenResourceDialog.css:
        (.open-resource-dialog .tree-outline.large .item .titles[data-path]): Added.
        (.open-resource-dialog .tree-outline.large .item .titles[data-path]::after): Added.
        (.open-resource-dialog .tree-outline.large .item .titles .title): Added.
        (.open-resource-dialog .tree-outline.large .item .titles .subtitle): Added.
        (.open-resource-dialog .tree-outline.large .item .titles): Deleted.

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: add WebVTT MIME/file type mappings to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=190288

        Reviewed by Brian Burg.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        (WI.fileExtensionForMIMEType):

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.displayNameForResource):
        Also attempt to use the mime-type-to-extension when the `WI.Resource` is of type `Other`.

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: refactor constructor of WI.Resource
        https://bugs.webkit.org/show_bug.cgi?id=190318

        Reviewed by Joseph Pecoraro.

        Reworked constructor of `WI.Resource` to use an optional object for any non-essential arguments.

        Drive-by: moved some simple getters to the top of the class to save space.

        * UserInterface/Models/Resource.js:
        (WI.Resource):

        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource):

        * UserInterface/Models/WebSocketResource.js:
        (WI.WebSocketResource):

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype.frameDidNavigate):
        (WI.NetworkManager.prototype.resourceRequestWillBeSent):
        (WI.NetworkManager.prototype.webSocketWillSendHandshakeRequest):
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype.resourceRequestDidReceiveResponse):
        (WI.NetworkManager.prototype._addNewResourceToFrameOrTarget):
        (WI.NetworkManager.prototype._createFrame):
        (WI.NetworkManager.prototype._createResource):

2018-10-05  Devin Rousso  <drousso@apple.com>

        Web Inspector: use iframe's name attribute for FrameTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=190275

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FrameTreeElement.js:
        (WI.FrameTreeElement.prototype.get mainTitleText): Added.

        * UserInterface/Views/ResourceTreeElement.js:
        (WI.ResourceTreeElement.prototype.get mainTitleText): Added.
        (WI.ResourceTreeElement.prototype._updateTitles):
        Provide a way for subclasses to override what is used for the `mainTitle`.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._createExecutionContextPathComponentFromFrame):
        Update the execution context picker to match what `WI.FrameTreeElement`s show.

2018-10-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r236766): Storage tab no longer updates after main frame navigation
        https://bugs.webkit.org/show_bug.cgi?id=190298

        Reviewed by Joseph Pecoraro.

        Handle Cleared events from storage managers separately, so that successive
        events during page load does not cause the Storage tab to destroy newly
        created tree elements.

        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel):
        (WI.StorageSidebarPanel.prototype._closeContentViewForTreeElement):
        (WI.StorageSidebarPanel.prototype._domStorageCleared):
        (WI.StorageSidebarPanel.prototype._applicationCacheCleared):
        (WI.StorageSidebarPanel.prototype._indexedDatabaseCleared):
        (WI.StorageSidebarPanel.prototype._databaseCleared):
        (WI.StorageSidebarPanel.prototype._storageCleared): Deleted.

2018-10-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should support multiple selection and Cmd-click behavior
        https://bugs.webkit.org/show_bug.cgi?id=189705
        <rdar://problem/44571170>

        Reviewed by Devin Rousso.

        Add multiple row selection to Table, with new methods for programmatic
        selection (deselectRow, deselectAll), and Command-click support for
        selecting/deselecting Table rows.

        * UserInterface/Base/IndexSet.js: Added.
        (WI.IndexSet):
        (WI.IndexSet.prototype.get size):
        (WI.IndexSet.prototype.get firstIndex):
        (WI.IndexSet.prototype.get lastIndex):
        (WI.IndexSet.prototype.add):
        (WI.IndexSet.prototype.delete):
        (WI.IndexSet.prototype.has):
        (WI.IndexSet.prototype.clear):
        (WI.IndexSet.prototype.indexGreaterThan):
        (WI.IndexSet.prototype.indexLessThan):
        (WI.IndexSet.prototype.Symbol.iterator):
        (WI.IndexSet.prototype._indexClosestTo):
        (WI.IndexSet.prototype._validateIndex):
        Helper container for managing an ordered sequence of unique positive
        integers, with set semantics, backed by a sorted array. Used by Table,
        and eventually by TreeOutline.

        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        New files and stubs to make Table layout tests possible.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.reset):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        (WI.NetworkTableContentView.prototype.networkResourceDetailViewClose):
        (WI.NetworkTableContentView.prototype.tableSelectionDidChange):
        (WI.NetworkTableContentView.prototype._restoreSelectedRow):
        (WI.NetworkTableContentView.prototype.tableSelectedRowChanged): Deleted.
        Replace uses of `clearSelectedRow` with `deselectAll`, and updated
        selection changed delegate.

        * UserInterface/Views/Table.css:
        (.table > .data-container > .data-list > li):
        (.table > .data-container > .data-list > li.selected):
        (@media (prefers-dark-interface)):
        (.table,): Deleted.
        Removed styles that are no longer needed after https://webkit.org/b/189766,
        and provide a visual separation between adjacent selected rows.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype.get selectedRows):
        (WI.Table.prototype.get allowsMultipleSelection):
        (WI.Table.prototype.set allowsMultipleSelection):
        (WI.Table.prototype.reloadData):
        (WI.Table.prototype.selectRow):
        (WI.Table.prototype.deselectRow):
        (WI.Table.prototype.deselectAll):
        (WI.Table.prototype._getOrCreateRow):
        (WI.Table.prototype._handleMouseDown):
        (WI.Table.prototype._deselectAllAndSelect):
        (WI.Table.prototype._isRowSelected):
        (WI.Table.prototype._notifySelectionDidChange):
        (WI.Table.prototype.clearSelectedRow): Deleted.
        Table now tracks selected rows using an IndexSet. selectRow accepts an
        optional parameter, `extendSelection`, for adding rows to the selection.
        _selectedRowIndex is now used to track the most recently selected row.
        This will be the only selected row unless multiple selection is enabled,
        in which case it is the row that has the "focus", for purposes of selecting
        a new row using the up or down arrow keys.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236540): Uncaught Exception: TypeError: pauseReasonBreakpointTreeElement.removeStatusImage is not a function.
        https://bugs.webkit.org/show_bug.cgi?id=190230

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel._removeBreakpoint):
        Leverage existing `status` getter/setter for creating/removing the breakpoint icon element.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        (WI.BreakpointTreeElement.prototype.populateContextMenu):
        (WI.BreakpointTreeElement.prototype._updateStatus):
        (WI.BreakpointTreeElement.prototype.removeStatusImage): Deleted.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.onattach):
        (WI.DOMBreakpointTreeElement.prototype.ondetach):
        (WI.DOMBreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):

        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        (WI.XHRBreakpointTreeElement.prototype.onattach):
        (WI.XHRBreakpointTreeElement.prototype.ondetach):
        (WI.XHRBreakpointTreeElement.prototype._updateStatus):

2018-10-04  Dan Bernstein  <mitz@apple.com>

        WebInspectorUI part of [Xcode] Update some build settings as recommended by Xcode 10
        https://bugs.webkit.org/show_bug.cgi?id=190250

        Reviewed by Andy Estes.

        * Configurations/Base.xcconfig: Enabled CLANG_WARN_COMMA, CLANG_WARN_INFINITE_RECURSION,
          CLANG_WARN_SUSPICIOUS_MOVE, CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS, and
          CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF.

        * WebInspectorUI.xcodeproj/project.pbxproj: Let Xcode update LastUpgradeCheck.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: merge ProbeManager into DebuggerManager
        https://bugs.webkit.org/show_bug.cgi?id=190225

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.get probeSets): Added.
        (WI.DebuggerManager.prototype.probeForIdentifier): Added.
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype.didSampleProbe): Added.
        (WI.DebuggerManager.prototype._handleBreakpointActionsDidChange): Added.
        (WI.DebuggerManager.prototype._addProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._removeProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._updateProbesForBreakpoint): Added.
        (WI.DebuggerManager.prototype._probeSetForBreakpoint): Added.
        * UserInterface/Controllers/ProbeManager.js: Removed.

        * UserInterface/Protocol/DebuggerObserver.js:
        (WI.DebuggerObserver.prototype.didSampleProbe):

        * UserInterface/Controllers/TimelineManager.js:
        (WI.TimelineManager.prototype._processRecord):

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement.prototype.onattach):

        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        (WI.ProbeDetailsSidebarPanel.prototype.closed):
        (WI.ProbeDetailsSidebarPanel.prototype.initialLayout):

        * UserInterface/Views/TextResourceContentView.js:
        (WI.TextResourceContentView):
        (WI.TextResourceContentView.prototype.get supplementalRepresentedObjects):
        (WI.TextResourceContentView.prototype.closed):

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: some files not listed in OpenResourceDialog
        https://bugs.webkit.org/show_bug.cgi?id=190272

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/ResourceQueryController.js:
        (WI.ResourceQueryController.prototype._findQueryMatches):
        Allow the `searchIndex` to go past the end of the `searchString` to allow for backtracking
        if the last character of `searchString` is not found in `query`.

2018-10-04  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236783): Uncaught Exception: Can't find variable: sourceMapURL
        https://bugs.webkit.org/show_bug.cgi?id=190276

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager.prototype._sourceMapLoadAndParseFailed):

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: merge SourceMapManager into NetworkManager
        https://bugs.webkit.org/show_bug.cgi?id=190224

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):

        * UserInterface/Controllers/NetworkManager.js:
        (WI.NetworkManager):
        (WI.NetworkManager.prototype.downloadSourceMap): Added.
        (WI.NetworkManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WI.NetworkManager.prototype.resourceRequestDidFinishLoading):
        (WI.NetworkManager.prototype._createResource):
        (WI.NetworkManager.prototype._loadAndParseSourceMap): Added.
        (WI.NetworkManager.prototype._sourceMapLoadAndParseFailed): Added.
        (WI.NetworkManager.prototype._sourceMapLoadAndParseSucceeded): Added.
        (WI.NetworkManager.prototype._handleFrameMainResourceDidChange): Added.
        * UserInterface/Controllers/SourceMapManager.js: Removed.

        * UserInterface/Models/Script.js:
        (WI.Script):

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2018-10-02  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: start editing property name/value on mouseup instead of mousedown
        https://bugs.webkit.org/show_bug.cgi?id=190114
        <rdar://problem/44891030>

        Reviewed by Matt Baker.

        This change only affects the experimental multiple properties selection.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.multiple-properties-selection .spreadsheet-style-declaration-editor :matches(.name, .value):not(.editing)):
        Without this code, the focus outline flickers on click (after mousedown but before mouseup event).

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField):
        (WI.SpreadsheetTextField.prototype._handleMouseUp):

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: prevent layer events from firing until the layer information is re-requested
        https://bugs.webkit.org/show_bug.cgi?id=190159

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/LayerTreeManager.js:
        (WI.LayerTreeManager):
        (WI.LayerTreeManager.prototype.get supported):
        Remove `supported` member variable in favor of re-evaluating its value.

        * UserInterface/Protocol/LayerTreeObserver.js:
        (WI.LayerTreeObserver.prototype.layerTreeDidChange):

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r236766): WI.IssueManager no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=190226

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/ConsoleManager.js:
        (WI.ConsoleManager.prototype.issuesForSourceCode):

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: rename frontend managers to be more consistent with backend agents
        https://bugs.webkit.org/show_bug.cgi?id=190160

        Reviewed by Joseph Pecoraro.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        * UserInterface/Base/DOMUtilities.js:
        * UserInterface/Controllers/ApplicationCacheManager.js:
        * UserInterface/Controllers/CSSManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/CSSStyleManager.js.
        * UserInterface/Controllers/ConsoleManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/LogManager.js.
        * UserInterface/Controllers/DOMDebuggerManager.js:
        * UserInterface/Controllers/DOMManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/DOMTreeManager.js.
        * UserInterface/Controllers/DOMStorageManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/StorageManager.js.
        * UserInterface/Controllers/DashboardManager.js: Removed.
        * UserInterface/Controllers/DatabaseManager.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js.
        * UserInterface/Controllers/HARBuilder.js:
        * UserInterface/Controllers/IndexedDBManager.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DOMStorageManager.js.
        * UserInterface/Controllers/IssueManager.js: Removed.
        * UserInterface/Controllers/JavaScriptLogViewController.js:
        * UserInterface/Controllers/NetworkManager.js: Renamed from Source/WebInspectorUI/UserInterface/Controllers/FrameResourceManager.js.
        * UserInterface/Controllers/SourceMapManager.js:
        * UserInterface/Controllers/TimelineManager.js:
        * UserInterface/Debug/UncaughtExceptionReporter.js:
        * UserInterface/Models/CSSProperty.js:
        * UserInterface/Models/CSSSelector.js:
        * UserInterface/Models/CallFrame.js:
        * UserInterface/Models/Canvas.js:
        * UserInterface/Models/ConsoleMessage.js:
        * UserInterface/Models/DOMBreakpoint.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Models/DOMNodeStyles.js:
        * UserInterface/Models/DOMTree.js:
        * UserInterface/Models/DefaultDashboard.js:
        * UserInterface/Models/Script.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Models/SourceMapResource.js:
        * UserInterface/Models/TimelineRecording.js:
        * UserInterface/Protocol/CSSObserver.js:
        * UserInterface/Protocol/ConsoleObserver.js:
        * UserInterface/Protocol/DOMObserver.js:
        * UserInterface/Protocol/DOMStorageObserver.js:
        * UserInterface/Protocol/DatabaseObserver.js:
        * UserInterface/Protocol/InspectorFrontendAPI.js:
        * UserInterface/Protocol/InspectorObserver.js:
        * UserInterface/Protocol/MainTarget.js:
        * UserInterface/Protocol/NetworkObserver.js:
        * UserInterface/Protocol/PageObserver.js:
        * UserInterface/Protocol/RemoteObject.js:
        * UserInterface/Protocol/RuntimeObserver.js:
        * UserInterface/Protocol/WorkerTarget.js:
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        * UserInterface/Views/CanvasOverviewContentView.js:
        * UserInterface/Views/CanvasTreeElement.js:
        * UserInterface/Views/ContentView.js:
        * UserInterface/Views/ContextMenuUtilities.js:
        * UserInterface/Views/CookieStorageContentView.js:
        * UserInterface/Views/DOMDetailsSidebarPanel.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        * UserInterface/Views/DOMNodeTreeElement.js:
        * UserInterface/Views/DOMTreeContentView.js:
        * UserInterface/Views/DOMTreeDataGrid.js:
        * UserInterface/Views/DOMTreeElement.js:
        * UserInterface/Views/DOMTreeElementPathComponent.js:
        * UserInterface/Views/DOMTreeOutline.js:
        * UserInterface/Views/DOMTreeUpdater.js:
        * UserInterface/Views/DebuggerSidebarPanel.js:
        * UserInterface/Views/ElementsTabContentView.js:
        * UserInterface/Views/EventBreakpointPopover.js:
        * UserInterface/Views/EventBreakpointTreeElement.js:
        * UserInterface/Views/EventListenerSectionGroup.js:
        * UserInterface/Views/FormattedValue.js:
        * UserInterface/Views/FrameTreeElement.js:
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js:
        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        * UserInterface/Views/LayerTreeDataGridNode.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        * UserInterface/Views/Layers3DContentView.js:
        * UserInterface/Views/LogContentView.js:
        * UserInterface/Views/NetworkTableContentView.js:
        * UserInterface/Views/ObjectTreeBaseTreeElement.js:
        * UserInterface/Views/ObjectTreeView.js:
        * UserInterface/Views/OpenResourceDialog.js:
        * UserInterface/Views/ResourceSidebarPanel.js:
        * UserInterface/Views/SearchSidebarPanel.js:
        * UserInterface/Views/SettingsTabContentView.js:
        * UserInterface/Views/SourceCodeTextEditor.js:
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        * UserInterface/Views/StorageSidebarPanel.js:
        * UserInterface/Views/StyleDetailsPanel.js:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2018-10-02  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: replace constant numbers with their associated name on WebGL contexts
        https://bugs.webkit.org/show_bug.cgi?id=190026

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.constantNameForParameter): Added.
        (WI.RecordingAction.prototype.getColorParameters):
        (WI.RecordingAction.prototype.getImageParameters):
        Drive-by: add additional swatches to color/image arguments for WebGL actions.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        Drive-by: ensure that the `WI.RecordingContentView` is showing before applying the action.

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._generateDOM.createParameterElement):
        (WI.RecordingActionTreeElement._generateDOM):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action > .titles .parameter.constant): Added.

2018-10-01  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix a typo for execution context identifier
        https://bugs.webkit.org/show_bug.cgi?id=190185

        Reviewed by Matt Baker.

        * UserInterface/Protocol/MainTarget.js:
        (WI.MainTarget):
        * UserInterface/Protocol/WorkerTarget.js:
        (WI.WorkerTarget):

2018-10-01  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove analyzer manager
        https://bugs.webkit.org/show_bug.cgi?id=190162

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.loaded):

        * UserInterface/Controllers/AnalyzerManager.js: Removed.
        * UserInterface/Models/AnalyzerMessage.js: Removed.

        * Scripts/copy-user-interface-resources.pl:
        * UserInterface/External/ESLint/LICENSE: Removed.
        * UserInterface/External/ESLint/eslint.js: Removed.

2018-10-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: add an experimental setting for multi-property selection
        https://bugs.webkit.org/show_bug.cgi?id=190053
        <rdar://problem/44842787>

        Reviewed by Matt Baker.

        This patch only adds a setting. It doesn't change property selection behavior.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-10-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: use the same CSS variables for dark and light modes
        https://bugs.webkit.org/show_bug.cgi?id=189766
        <rdar://problem/44619650>

        Use --text-color and --background-color CSS variables for both dark and light modes.

        Reviewed by Matt Baker.

        * UserInterface/Views/BreakpointPopoverController.css:
        (.popover .edit-breakpoint-popover-content > label.toggle):
        Color of the label matches the color of the popover, no need to specify it.

        (.edit-breakpoint-popover-condition):
        (@media (prefers-dark-interface)):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (.completion-suggestions-container > .item):
        (@media (prefers-dark-interface)):
        (.completion-suggestions):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.details-section:matches(.computed-style-properties, .computed-style-box-model):not(.collapsed) > :matches(.header, .content)):
        (.computed-style-properties .property:hover .go-to-arrow):
        (@media (prefers-dark-interface)): Deleted.
        (.computed-style-properties.details-section): Deleted.
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)): Deleted.
        * UserInterface/Views/DOMTreeOutline.css:
        (.tree-outline.dom):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/DataGrid.css:
        (.data-grid th):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        * UserInterface/Views/InlineSwatch.css:
        (.inline-swatch):
        (.inline-swatch-variable-popover .CodeMirror pre):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/NetworkResourceDetailView.css:
        (.network-resource-detail):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (@media (prefers-dark-interface)):
        (.resource-headers .value): Deleted.
        Move this rule to ResourceHeadersContentView.css.

        * UserInterface/Views/ObjectPreviewView.css:
        (.object-preview):
        (@media (prefers-dark-interface)):
        (.object-preview .name):
        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree):
        (.object-tree-property :matches(.formatted-string, .formatted-regexp)):
        (@media (prefers-dark-interface)): Deleted.
        (.object-tree,): Deleted.

        (.object-preview .name): Deleted.
        (.object-preview > .size): Deleted.
        Move these rules to ObjectPreviewView.css.

        * UserInterface/Views/QuickConsole.css:
        (.quick-console):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (.resource-headers .value):
        (.resource-headers.showing-find-banner .search-highlight):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration .media-label):
        (.spreadsheet-css-declaration .selector:focus,):
        (@media (prefers-dark-interface)):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover):
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (.cm-s-default,):
        (@media (prefers-dark-interface)):
        (.syntax-highlighted,): Deleted.
        * UserInterface/Views/Table.css:
        (.table):
        (.table > .header):
        * UserInterface/Views/TimelineOverview.css:
        (.timeline-overview > .navigation-bar.timelines):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/TimelineRecordingContentView.css:
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        (.content-view.timeline-recording > .content-browser .recording-progress > .status > .indeterminate-progress-spinner):
        (@media (prefers-dark-interface)): Deleted.
        * UserInterface/Views/Variables.css:
        (:root):
        (@media (prefers-dark-interface)):
        * UserInterface/Views/XHRBreakpointPopover.css:
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):
        (@media (prefers-dark-interface)):

2018-09-28  Andy Estes  <aestes@apple.com>

        REGRESSION (r236091): CSSKeywordCompletions.js has "checkout" instead of "check-out" as a value for -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=190096

        Reviewed by Ryosuke Niwa.

        I changed "checkout" to "check-out" in r235754, but it somehow got flipped back to "checkout" in r236091.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-09-28  Andy Estes  <aestes@apple.com>

        [Apple Pay] Remove the "in-store" button type
        https://bugs.webkit.org/show_bug.cgi?id=190079

        Reviewed by Tim Horton.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-09-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: image resources without content are still shown when the Images folder is selected
        https://bugs.webkit.org/show_bug.cgi?id=190072

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceContentView.js:
        (WI.ResourceContentView.prototype.showGenericNoContentMessage):
        Treat paths that result in a "Resource has no content" message as a "content error".

2018-09-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: Hide DOM and XHR breakpoint sections when they are empty
        https://bugs.webkit.org/show_bug.cgi?id=182406
        <rdar://problem/37131512>

        Reviewed by Joseph Pecoraro.

        Combine all breakpoint sections (e.g. DOM, XHR, and Event) into the main "Breakpoints"
        section, including all the various "+" buttons for creating different types of breakpoints.

        Global breakpoints (except "All Exceptions" and "Uncaught Exceptions") are now deletable,
        and can be re-added via the "+" button of the "Breakpoints" section. Deletable global
        breakpoints (e.g. "Assertion Failures" and "All Requests") are able to remain visible while
        disabled, and will only be hidden when the user specifically deletes them.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:

        * UserInterface/Controllers/DOMBreakpointTreeController.js: Removed.
        * UserInterface/Controllers/EventBreakpointTreeController.js: Removed.
        * UserInterface/Controllers/XHRBreakpointTreeController.js: Removed.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype.get uncaughtExceptionsBreakpoint): Added.
        (WI.DebuggerManager.prototype.get assertionFailuresBreakpoint): Added.
        (WI.DebuggerManager.prototype.isBreakpointRemovable):
        (WI.DebuggerManager.prototype.isBreakpointSpecial): Added.
        (WI.DebuggerManager.prototype.isBreakpointEditable):
        (WI.DebuggerManager.prototype.addBreakpoint):
        (WI.DebuggerManager.prototype.removeBreakpoint):
        (WI.DebuggerManager.prototype.initializeTarget):
        (WI.DebuggerManager.prototype._breakpointDisabledStateDidChange):
        (WI.DebuggerManager.prototype._updateBreakOnExceptionsState):
        (WI.DebuggerManager.prototype.get allUncaughtExceptionsBreakpoint): Deleted.
        (WI.DebuggerManager.prototype.get assertionsBreakpoint): Deleted.
        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.prototype.isBreakpointSpecial): Added.
        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.addXHRBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeXHRBreakpoint):
        (WI.DOMDebuggerManager.prototype.isBreakpointRemovable): Deleted.
        Always fire add/remove events, including for special breakpoints, so that any listeners will
        be able to adjust accordingly. Even though special breakpoints don't get stored in the lists
        held by each manager, we are still able to enable/disable them, and that should be reported.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype.closed):
        (WI.DebuggerSidebarPanel.prototype.saveStateToCookie):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie.revealAndSelect):
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):
        (WI.DebuggerSidebarPanel.prototype._addBreakpoint):
        (WI.DebuggerSidebarPanel.prototype._removeBreakpoint): Added.
        (WI.DebuggerSidebarPanel.prototype._addTreeElementForSourceCodeToTreeOutline):
        (WI.DebuggerSidebarPanel.prototype._mainResourceDidChange):
        (WI.DebuggerSidebarPanel.prototype._breakpointRemoved):
        (WI.DebuggerSidebarPanel.prototype._removeDebuggerTreeElement):
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        (WI.DebuggerSidebarPanel.prototype._addTreeElement.comparator): Added.
        (WI.DebuggerSidebarPanel.prototype._addTreeElement): Added.
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._domBreakpointResolvedStateDidChange): Added.
        (WI.DebuggerSidebarPanel.prototype._handleBreakpointElementAddedOrRemoved): Added.
        (WI.DebuggerSidebarPanel.prototype._handleCreateBreakpointClicked): Added.
        (WI.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements.isSpecialBreakpoint): Deleted.
        (WI.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements): Deleted.
        (WI.DebuggerSidebarPanel.prototype._domBreakpointAddedOrRemoved): Deleted.
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved): Deleted.
        (WI.DebuggerSidebarPanel.prototype._addEventBreakpointButtonClicked): Deleted.
        (WI.DebuggerSidebarPanel.prototype._addXHRBreakpointButtonClicked): Deleted.
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .titles): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node .icon): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.dom-breakpoints .item.dom-node:not(:hover, .selected) .status .go-to-arrow): Deleted.
        (.sidebar > .panel.navigation.debugger .details-section.xhr-breakpoints .item.breakpoint .subtitle): Deleted.
        Unify the logic for adding/removing breakpoints of all types.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        (WI.BreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        (WI.DOMBreakpointTreeElement.prototype.ondelete):
        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement):
        (WI.DOMNodeTreeElement.prototype.ondelete):
        (WI.DOMNodeTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        (WI.XHRBreakpointTreeElement.prototype.ondelete):
        (WI.XHRBreakpointTreeElement.prototype.populateContextMenu):
        * UserInterface/Views/XHRBreakpointTreeElement.css: Added.
        (.breakpoint.xhr .subtitle):
        Add/remove checks for whether the associated breakpoint can be deleted.

        * UserInterface/Views/DOMNodeTreeElement.css: Added.
        (.tree-outline .item.dom-node .titles):
        (.tree-outline .item.dom-node .icon):
        (.tree-outline .item.dom-node:not(:hover, .selected) .status .go-to-arrow):

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):
        (WI.appendContextMenuItemsForDOMNodeBreakpoints): Added.
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._statusImageContextmenu):

        * UserInterface/Views/XHRBreakpointPopover.js:
        (WI.XHRBreakpointPopover):
        (WI.XHRBreakpointPopover.prototype.get breakpoint): Added.
        (WI.XHRBreakpointPopover.prototype.show):
        (WI.XHRBreakpointPopover.prototype.dismiss): Added.
        (WI.XHRBreakpointPopover.prototype._createEditor):
        (WI.XHRBreakpointPopover.prototype._updateEditor):
        (WI.XHRBreakpointPopover.prototype.get result): Deleted.
        (WI.XHRBreakpointPopover.prototype.get type): Deleted.
        (WI.XHRBreakpointPopover.prototype.get value): Deleted.
        Drive-by: remove the erroneous usage of `WI.InputPopover.Result`.

2018-09-26  Devin Rousso  <drousso@apple.com>

        Web Inspector: determine hasVisibleEffect for each RecordingAction as it's processed
        https://bugs.webkit.org/show_bug.cgi?id=189860

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Base/Utilities.js:

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process.getContent):
        (WI.RecordingAction.prototype.process):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype._updateImageGrid):
        Drive-by: don't attempt to show the image grid if we haven't called initialized yet.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        Drive-by: ensure that the `WI.RecordingContentView` is showing before applying the action.

2018-09-26  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: new watch expression popover has light background
        https://bugs.webkit.org/show_bug.cgi?id=190013
        <rdar://problem/44810000>

        Reviewed by Matt Baker.

        Make the background dark to match the CodeMirror editor background.

        * UserInterface/Views/ScopeChainDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.watch-expression-editor):

2018-09-21  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r236237): Web Inspector: DarkMode: white background in Elements and Timelines
        https://bugs.webkit.org/show_bug.cgi?id=189852

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Main.css:
        (body):
        (#main):

2018-09-21  Brian Burg  <bburg@apple.com>

        Web Inspector: remove unnecessary WI.Platform.version checks
        https://bugs.webkit.org/show_bug.cgi?id=189845

        Reviewed by Matt Baker.

        * UserInterface/Base/Platform.js:
        (osVersionMatch): Add name for macOS Mojave.

        * UserInterface/Base/Main.js:
        * UserInterface/Views/Popover.js:
        Remove old logic that's no longer needed.

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove setting for Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=189817

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:
        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._debuggerDidPause):
        (WI.isShowingSourcesTab): Removed.
        (WI.showSourcesTab): Removed.

        * UserInterface/Views/SourcesSidebarPanel.css: Removed.
        * UserInterface/Views/SourcesSidebarPanel.js: Removed.
        * UserInterface/Views/SourcesTabContentView.js: Removed.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):

2018-09-20  Simon Fraser  <simon.fraser@apple.com>

        Make "overflow: overlay" a synonym for "overflow: auto"
        https://bugs.webkit.org/show_bug.cgi?id=189811

        Reviewed by Zalan Bujtas.
        
        Remove "overlay" from the overflow values.

        * UserInterface/Models/CSSKeywordCompletions.js:
        * UserInterface/Views/VisualStyleDetailsPanel.js:
        (WI.VisualStyleDetailsPanel.prototype._populateDisplaySection):

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: hide Accessibility Audit Tab setting
        https://bugs.webkit.org/show_bug.cgi?id=189816

        Reviewed by Joseph Pecoraro.

        Considering that this tab doesn't exist, there's no reason to have a setting/UI for it.

        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-09-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove Legacy Style Editor
        https://bugs.webkit.org/show_bug.cgi?id=189808

        Reviewed by Joseph Pecoraro.

        The Legacy Style Editor has been hidden behind an "experimental" setting for almost a year.
        It's time that we remove it, especially since the new Style Editor is at a similar, if not
        more advanced, state.

        * .eslintrc:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        * Localizations/en.lproj/localizedStrings.js:
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Base/Setting.js:

        * UserInterface/Base/TextUtilities.js: Removed.
        * UserInterface/Base/Utilities.js:

        * UserInterface/Views/RulesStyleDetailsPanel.css: Removed.
        * UserInterface/Views/RulesStyleDetailsPanel.js: Removed.
        * UserInterface/Views/CSSStyleDeclarationSection.css: Removed.
        * UserInterface/Views/CSSStyleDeclarationSection.js: Removed.
        * UserInterface/Views/CSSStyleDeclarationTextEditor.css: Removed.
        * UserInterface/Views/CSSStyleDeclarationTextEditor.js: Removed.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.get text):
        (WI.CSSProperty.prototype.get synthesizedText): Deleted.

        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.set text):
        (WI.CSSStyleDeclaration.prototype.resetText): Deleted.
        (WI.CSSStyleDeclaration.prototype.get modified): Deleted.
        (WI.CSSStyleDeclaration.prototype.generateCSSRuleString): Deleted.
        (WI.CSSStyleDeclaration.prototype.isInspectorRule): Deleted.

        * UserInterface/Models/CSSSelector.js:
        (WI.CSSSelector.prototype.isGreaterThan): Deleted.

        * UserInterface/Models/CSSRule.js:
        (WI.CSSRule.prototype.update):
        (WI.CSSRule.prototype.get matchedSelectors): Deleted.
        (WI.CSSRule.prototype.get matchedSelectorText): Deleted.
        (WI.CSSRule.prototype.hasMatchedPseudoElementSelector): Deleted.
        (WI.CSSRule.prototype.get mediaText): Deleted.
        (WI.CSSRule.prototype.get mostSpecificSelector): Deleted.
        (WI.CSSRule.prototype.selectorIsGreater): Deleted.
        (WI.CSSRule.prototype._determineMostSpecificSelector): Deleted.

        * UserInterface/Models/DOMNodeStyles.js:
        (WI.DOMNodeStyles.prototype.changeRule.changeCompleted): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.styleChanged): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.changeText): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule.ruleSelectorChanged): Deleted.
        (WI.DOMNodeStyles.prototype.changeRule): Deleted.

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions.prototype.isValidPropertyName):
        (WI.CSSCompletions):
        (WI.CSSCompletions.prototype.keySet): Deleted.
        (WI.CSSCompletions.prototype.propertyRequiresWebkitPrefix): Deleted.
        (WI.CSSCompletions.prototype.getClosestPropertyName): Deleted.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorStartEditingAdjacentRule): Deleted.

        * UserInterface/Views/RulesStyleDetailsSidebarPanel.js:
        (WI.RulesStyleDetailsSidebarPanel):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorStartEditingRuleSelector): Added.
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.cssStyleDeclarationTextEditorStartEditingRuleSelector): Deleted.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover): Added.
        (.sidebar > .panel.details.css-style > .content > .rules > .message-text-view): Added.
        (.sidebar > .panel.details.css-style > .content > .rules:not(.filter-non-matching) > .message-text-view): Added.
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .rules .section-header): Added.
        (.sidebar > .panel.details.css-style > .content > .rules .section-header .node-link:hover): Added.
        (.spreadsheet-style-panel .section-header): Deleted.
        (.spreadsheet-style-panel .section-header .node-link): Deleted.
        (.spreadsheet-style-panel .section-header .node-link:hover): Deleted.
        (.spreadsheet-style-panel .section-header): Deleted.
        (.spreadsheet-style-panel .section-header .node-link:hover): Deleted.

        * UserInterface/Views/CodeMirrorAdditions.js:
        (extendedCSSRuleStartState): Removed.
        * UserInterface/Views/CodeMirrorFormatters.js:
        Remove "css-rule" CodeMirror mode.

        * UserInterface/Views/CodeMirrorTextMarkers.js:
        (createCodeMirrorVariableTextMarkers): Deleted.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-09-21  Mike Gorse  <mgorse@suse.com>

        Build tools should work when the /usr/bin/python is python3
        https://bugs.webkit.org/show_bug.cgi?id=156674

        Reviewed by Michael Catanzaro.

        * Scripts/copy-user-interface-resources.pl: Use $PYTHON if set
        in the environment.

2018-09-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: remove Visual Style CSS details sidebar panel
        https://bugs.webkit.org/show_bug.cgi?id=189807

        Reviewed by Joseph Pecoraro.

        The Visual Style CSS details sidebar panel has been hidden behind an "experimental" setting
        for almost a year.  It's time that we remove it.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:

        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

        * UserInterface/Images/AnimationPlayStatePaused.svg: Removed.
        * UserInterface/Images/AnimationPlayStateRunning.svg: Removed.
        * UserInterface/Images/ClearBoth.svg: Removed.
        * UserInterface/Images/ClearLeft.svg: Removed.
        * UserInterface/Images/ClearRight.svg: Removed.
        * UserInterface/Images/FloatLeft.svg: Removed.
        * UserInterface/Images/FloatRight.svg: Removed.
        * UserInterface/Images/FontStyleItalic.svg: Removed.
        * UserInterface/Images/FontStyleNormal.svg: Removed.
        * UserInterface/Images/ListStylePositionInside.svg: Removed.
        * UserInterface/Images/ListStylePositionOutside.svg: Removed.
        * UserInterface/Images/TextAlignCenter.svg: Removed.
        * UserInterface/Images/TextAlignJustify.svg: Removed.
        * UserInterface/Images/TextAlignLeft.svg: Removed.
        * UserInterface/Images/TextAlignRight.svg: Removed.
        * UserInterface/Images/TextDecorationLineThrough.svg: Removed.
        * UserInterface/Images/TextDecorationOverline.svg: Removed.
        * UserInterface/Images/TextDecorationUnderline.svg: Removed.
        * UserInterface/Images/TextTransformCapitalize.svg: Removed.
        * UserInterface/Images/TextTransformLowercase.svg: Removed.
        * UserInterface/Images/TextTransformUppercase.svg: Removed.
        * UserInterface/Images/VisualStyleNone.svg: Removed.
        * UserInterface/Images/VisualStylePropertyLinked.svg: Removed.
        * UserInterface/Images/VisualStylePropertyUnlinked.svg: Removed.

        * UserInterface/Views/VisualStyleBackgroundPicker.css: Removed.
        * UserInterface/Views/VisualStyleBackgroundPicker.js: Removed.
        * UserInterface/Views/VisualStyleBasicInput.js: Removed.
        * UserInterface/Views/VisualStyleColorPicker.css: Removed.
        * UserInterface/Views/VisualStyleColorPicker.js: Removed.
        * UserInterface/Views/VisualStyleCommaSeparatedKeywordEditor.css: Removed.
        * UserInterface/Views/VisualStyleCommaSeparatedKeywordEditor.js: Removed.
        * UserInterface/Views/VisualStyleDetailsPanel.css: Removed.
        * UserInterface/Views/VisualStyleDetailsPanel.js: Removed.
        * UserInterface/Views/VisualStyleDetailsSidebarPanel.js: Removed.
        * UserInterface/Views/VisualStyleFontFamilyListEditor.js: Removed.
        * UserInterface/Views/VisualStyleFontFamilyTreeElement.js: Removed.
        * UserInterface/Views/VisualStyleKeywordCheckbox.css: Removed.
        * UserInterface/Views/VisualStyleKeywordCheckbox.js: Removed.
        * UserInterface/Views/VisualStyleKeywordIconList.css: Removed.
        * UserInterface/Views/VisualStyleKeywordIconList.js: Removed.
        * UserInterface/Views/VisualStyleKeywordPicker.js: Removed.
        * UserInterface/Views/VisualStyleNumberInputBox.css: Removed.
        * UserInterface/Views/VisualStyleNumberInputBox.js: Removed.
        * UserInterface/Views/VisualStylePropertyCombiner.js: Removed.
        * UserInterface/Views/VisualStylePropertyEditor.css: Removed.
        * UserInterface/Views/VisualStylePropertyEditor.js: Removed.
        * UserInterface/Views/VisualStylePropertyEditorLink.css: Removed.
        * UserInterface/Views/VisualStylePropertyEditorLink.js: Removed.
        * UserInterface/Views/VisualStylePropertyNameInput.js: Removed.
        * UserInterface/Views/VisualStyleRelativeNumberSlider.css: Removed.
        * UserInterface/Views/VisualStyleRelativeNumberSlider.js: Removed.
        * UserInterface/Views/VisualStyleSelectorSection.css: Removed.
        * UserInterface/Views/VisualStyleSelectorSection.js: Removed.
        * UserInterface/Views/VisualStyleSelectorTreeItem.css: Removed.
        * UserInterface/Views/VisualStyleSelectorTreeItem.js: Removed.
        * UserInterface/Views/VisualStyleTabbedPropertiesRow.css: Removed.
        * UserInterface/Views/VisualStyleTabbedPropertiesRow.js: Removed.
        * UserInterface/Views/VisualStyleTimingEditor.css: Removed.
        * UserInterface/Views/VisualStyleTimingEditor.js: Removed.
        * UserInterface/Views/VisualStyleURLInput.js: Removed.
        * UserInterface/Views/VisualStyleUnitSlider.css: Removed.
        * UserInterface/Views/VisualStyleUnitSlider.js: Removed.

        * UserInterface/Controllers/VisualStyleCompletionsController.js: Removed.

2018-09-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Styles Redesign: rework Computed panel to use Spreadsheet classes
        https://bugs.webkit.org/show_bug.cgi?id=183627

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel):
        (WI.ComputedStyleDetailsPanel.prototype.refresh):
        (WI.ComputedStyleDetailsPanel.prototype.applyFilter):
        (WI.ComputedStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationEditorShowProperty):
        (WI.ComputedStyleDetailsPanel.prototype.initialLayout):
        (WI.ComputedStyleDetailsPanel.prototype.filterDidChange):
        (WI.ComputedStyleDetailsPanel.prototype._computedStyleShowAllCheckboxValueChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handlePropertiesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleVariablesSectionCollapsedStateChanged):
        (WI.ComputedStyleDetailsPanel.prototype._handleEditorFilterApplied):
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorShowProperty.delegateShowProperty): Deleted.
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorShowProperty): Deleted.
        Replace CSSStyleDeclarationTextEditor with SpreadsheetCSSStyleDeclarationEditor.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set showsImplicitProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set alwaysShowPropertyNames):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set propertyVisibilityMode):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set hideFilterNonMatchingProperties):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set sortPropertiesByName): Added.
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get propertiesToRender):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.highlightProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.applyFilter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyShowProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get _propertiesToRender): Deleted.
        Create setters for the "special" functionality required by the Computed panel and tie them
        into the logic that determines what properties are rendered.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._update):
        Create go-to arrow if the property has a shorthand version or a source code location.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
        Don't reapply the filter after refreshing, as the current panel will handle applying it.

        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (.details-section:matches(.computed-style-properties, .computed-style-box-model):not(.collapsed) > :matches(.header, .content)):
        (.computed-style-properties .property .go-to-arrow):
        (.computed-style-properties .property:hover .go-to-arrow):
        (.computed-style-properties.details-section): Deleted.
        (.details-section > .content > .group > .row .CodeMirror-code pre .go-to-arrow): Deleted.
        (.details-section > .content > .group > .row .CodeMirror-code pre:hover .go-to-arrow): Deleted.
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)): Deleted.
        * UserInterface/Views/DetailsSection.css:
        (.details-section.computed-style-properties:not(.collapsed) > .header): Deleted.
        Consolidate Computed panel styles to it's respective CSS file.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor):
        (.spreadsheet-style-declaration-editor .property:matches(.implicit, .not-inherited) .content > *):
        (.spreadsheet-style-declaration-editor .property.not-inherited .content > *): Deleted.
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (.spreadsheet-css-declaration):
        * UserInterface/Views/Variables.css:
        (:root):
        Move `css-declaration` padding variables so they can be used by SpreadsheetCSSStyleDeclarationEditor
        without a parent SpreadsheetCSSStyleDeclarationSection.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (.style-spreadsheet .style-rule): Deleted.
        (.style-spreadsheet .selector-line): Deleted.
        (.style-spreadsheet .selector): Deleted.
        (.style-spreadsheet :matches(.selector .matched, .selector:focus)): Deleted.
        (.style-spreadsheet .name): Deleted.
        (.style-spreadsheet .value): Deleted.
        (.style-spreadsheet :matches(.selector, .name, .value)): Deleted.
        (.style-spreadsheet :matches(.selector, .name, .value):focus): Deleted.
        (.style-spreadsheet .selector-inline): Deleted.
        (.style-spreadsheet .property): Deleted.
        (.style-spreadsheet .property-disabled,): Deleted.
        (.style-spreadsheet .property-disabled :matches(.name, .value)): Deleted.
        (.style-spreadsheet .styles-source): Deleted.
        (.style-spreadsheet :matches(a, .node-link)): Deleted.
        (.style-spreadsheet :matches(a, .node-link):hover): Deleted.
        (.style-spreadsheet .declarations): Deleted.
        (.style-spreadsheet input[type="checkbox"]): Deleted.
        (.style-spreadsheet input[type="checkbox"]:not(:checked)): Deleted.
        (.style-spreadsheet .declarations:hover input[type="checkbox"]): Deleted.
        Drive-by fix: remove styles that don't apply to anything.

2018-09-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: move DarkMode.css rules into appropriate CSS files
        https://bugs.webkit.org/show_bug.cgi?id=189673

        Reviewed by Matt Baker.

        * UserInterface/Main.html:
        * UserInterface/Views/BezierEditor.css:
        (@media (prefers-dark-interface)):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview > div):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):
        * UserInterface/Views/BreakpointActionView.css:
        (@media (prefers-dark-interface)):
        (.breakpoint-action-block-body):
        (.breakpoint-action-block-body > .description):
        (.breakpoint-action-append-button,):
        (.breakpoint-action-eval-editor):
        * UserInterface/Views/BreakpointPopoverController.css:
        (@media (prefers-dark-interface)):
        (.popover .edit-breakpoint-popover-content > label.toggle):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        (.edit-breakpoint-popover-condition):
        * UserInterface/Views/ButtonNavigationItem.css:
        (@media (prefers-dark-interface)):
        (.navigation-bar .item.button):
        * UserInterface/Views/ButtonToolbarItem.css:
        (@media (prefers-dark-interface)):
        (.toolbar .item.button):
        (.toolbar .item.button:not(.disabled):active):
        (.toolbar .item.button:not(.disabled):matches(:focus, .activate.activated)):
        (.toolbar .item.button:not(.disabled):active:matches(:focus, .activate.activated)):
        * UserInterface/Views/CallFrameView.css:
        (@media (prefers-dark-interface)):
        (.call-frame .subtitle,):
        (.call-frame:hover .subtitle .source-link,):
        (.call-frame .separator):
        * UserInterface/Views/CanvasContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.canvas:not(.tab)):
        * UserInterface/Views/CanvasOverviewContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.canvas-overview):
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .title):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .subtitle,):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle):
        * UserInterface/Views/CanvasTabContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.canvas-2d .icon,):
        (.content-view.canvas > .preview > img,):
        * UserInterface/Views/CodeMirrorOverrides.css:
        (@media (prefers-dark-interface)):
        (.CodeMirror-cursor):
        (.CodeMirror .CodeMirror-gutters):
        (.cm-s-default .cm-link):
        (.CodeMirror .CodeMirror-lines .CodeMirror-matchingbracket):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (@media (prefers-dark-interface)):
        (.completion-suggestions):
        (.completion-suggestions-container > .item):
        * UserInterface/Views/ComputedStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.computed-style-properties.details-section):
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)):
        * UserInterface/Views/ConsoleMessageView.css:
        (@media (prefers-dark-interface)):
        (.console-message .syntax-highlighted):
        (.console-warning-level .console-message-text):
        (.console-error-level .console-message-text):
        (.console-user-command > .console-message-text):
        (.console-message .repeat-count):
        * UserInterface/Views/ConsolePrompt.css:
        (@media (prefers-dark-interface)):
        (.console-prompt):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners > .header > .filter:hover):
        * UserInterface/Views/DOMTreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline.dom):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom li.selected .selection-area):
        (.tree-outline.dom:focus li.selected .selection-area):
        (.tree-outline.dom li.selected + ol.children.expanded):
        (.tree-outline.dom .shadow):
        (.tree-outline.dom li.parent.shadow + ol.children.expanded,):
        (.showing-find-banner .tree-outline.dom .search-highlight):
        * UserInterface/Views/DarkMode.css: Removed.
        * UserInterface/Views/DataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th):
        (.data-grid td .subtitle):
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (.data-grid tr.editable .cell-content > input):
        (.data-grid td.spanning):
        * UserInterface/Views/DebuggerDashboardView.css:
        (@media (prefers-dark-interface)):
        (.toolbar .dashboard.debugger):
        (.dashboard.debugger .navigation-bar .item.button > .glyph):
        (.dashboard.debugger > .location .function-name):
        (.dashboard.debugger > .location .go-to-link):
        (.dashboard.debugger > .divider):
        * UserInterface/Views/DefaultDashboardView.css:
        (@media (prefers-dark-interface)):
        (.toolbar .dashboard.default > .item > div):
        (.toolbar .dashboard.default > .item.enabled > div):
        (.toolbar .dashboard.default > .item.enabled:hover):
        (.toolbar .dashboard.default > .item.enabled:hover > div):
        (.toolbar .dashboard.default > .resourcesCount > img,):
        (body.latest-mac .toolbar .dashboard .item.button):
        (.dashboard-container .advance-arrow):
        * UserInterface/Views/DetailsSection.css:
        (@media (prefers-dark-interface)):
        (.details-section > .header):
        (.details-section > .header > label):
        (.details-section .details-section,):
        (.details-section .details-section:not(.collapsed) > .header):
        (.details-section > .content > .group > .row.simple > .label):
        (.details-section > .content > .group:nth-child(even)):
        (.details-section > .content > .group > .row:matches(.empty, .text)):
        * UserInterface/Views/DividerNavigationItem.css:
        (@media (prefers-dark-interface)):
        (.navigation-bar .item.divider):
        * UserInterface/Views/Editing.css:
        (@media (prefers-dark-interface)):
        (.editing):
        (.editing, .editing *):
        * UserInterface/Views/FindBanner.css:
        (@media (prefers-dark-interface)):
        (.find-banner > input[type="search"]):
        (.find-banner.console-find-banner > input[type=search]:not(:placeholder-shown)):
        * UserInterface/Views/FontResourceContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.font .preview > .line):
        (.content-view.resource.font .metric.top):
        (.content-view.resource.font .metric.baseline):
        (.content-view.resource.font .metric.middle):
        (.content-view.resource.font .metric.xheight):
        (.content-view.resource.font .metric.bottom):
        * UserInterface/Views/FormattedValue.css:
        (@media (prefers-dark-interface)):
        (.formatted-object,):
        (.formatted-null,):
        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes > .group > label):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):
        * UserInterface/Views/HoverMenu.css:
        (@media (prefers-dark-interface)):
        (.hover-menu > svg > :matches(path, rect)):
        * UserInterface/Views/ImageResourceContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.image):
        * UserInterface/Views/InlineSwatch.css:
        (@media (prefers-dark-interface)):
        (.inline-swatch):
        * UserInterface/Views/LogContentView.css:
        (@media (prefers-dark-interface)):
        (.console-messages):
        (.console-item):
        (.console-messages:focus .console-item.selected):
        (.console-messages:focus .console-item.selected + .console-item):
        (.console-session:first-of-type .console-session-header):
        (.console-session:not(:first-of-type) .console-session-header):
        (.console-messages a):
        (.console-messages a:hover):
        (.console-messages:focus .console-item.selected::after):
        (.console-error-level):
        (.console-error-level:not(.filtered-out, .filtered-out-by-search), .console-error-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.console-warning-level):
        (.console-warning-level:not(.filtered-out, .filtered-out-by-search), .console-warning-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted.selected):
        * UserInterface/Views/Main.css:
        (#main):
        (@media (prefers-dark-interface)):
        (.go-to-arrow):
        (.resource-link,):
        (.expand-list-button):
        (:matches(img, canvas).show-grid):
        * UserInterface/Views/NetworkResourceDetailView.css:
        (@media (prefers-dark-interface)):
        (.network-resource-detail):
        (.network-resource-detail .item.close > .glyph):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (.resource-headers .value):
        * UserInterface/Views/NetworkTableContentView.css:
        (@media (prefers-dark-interface)):
        (.network-table .cell.domain > .lock):
        * UserInterface/Views/NewTabContentView.css:
        (@media (prefers-dark-interface)):
        (.new-tab.tab.content-view):
        * UserInterface/Views/ObjectTreePropertyTreeElement.css:
        (@media (prefers-dark-interface)):
        (.object-tree-property .getter,):
        (.item.object-tree-property.prototype-property):
        (.object-tree-property.prototype-property:hover,):
        (.object-tree-property .value.error):
        * UserInterface/Views/ObjectTreeView.css:
        (@media (prefers-dark-interface)):
        (.object-tree,):
        (.object-preview .name):
        (.object-preview > .size):
        * UserInterface/Views/OpenResourceDialog.css:
        (@media (prefers-dark-interface)):
        (.open-resource-dialog):
        (.open-resource-dialog > .field > input):
        (.open-resource-dialog > .field > input::placeholder):
        (.open-resource-dialog > .tree-outline .item.selected):
        (.open-resource-dialog > .field::before):
        * UserInterface/Views/ProgressView.css:
        (@media (prefers-dark-interface)):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.indeterminate-progress-spinner):
        * UserInterface/Views/QuickConsole.css:
        (@media (prefers-dark-interface)):
        (.quick-console):
        (.CodeMirror .jump-to-symbol-highlight,):
        (.quick-console.showing-log):
        * UserInterface/Views/RecordingActionTreeElement.css:
        (@media (prefers-dark-interface)):
        (.item.action:not(.initial-state)::before):
        (.tree-outline .item.action.visual:not(.selected, .invalid)):
        (.item.action:not(.initial-state) > .icon):
        (.tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon):
        * UserInterface/Views/RecordingContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view:not(.tab).recording):
        (.content-view:not(.tab).recording > header > .slider-container):
        (.content-view:not(.tab).recording > header > .slider-container > input[type=range]):
        * UserInterface/Views/RecordingStateDetailsSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified):
        * UserInterface/Views/ResourceHeadersContentView.css:
        (@media (prefers-dark-interface)):
        (.resource-headers .value):
        * UserInterface/Views/ResourceSizesContentView.css:
        (@media (prefers-dark-interface)):
        (.resource-sizes > .content .label):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (@media (prefers-dark-interface)):
        (.popover.waterfall-popover):
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (.resource-timing-breakdown > table > tr > td.label,):
        (.resource-timing-breakdown > table hr):
        * UserInterface/Views/ScopeBar.css:
        (@media (prefers-dark-interface)):
        (.scope-bar > li):
        * UserInterface/Views/SearchBar.css:
        (@media (prefers-dark-interface)):
        (:matches(.search-bar, .filter-bar) > input[type="search"],):
        (:matches(.search-bar, .filter-bar) > input[type="search"]::placeholder):
        (:matches(.search-bar, .filter-bar) > input[type="search"]:focus):
        * UserInterface/Views/SearchSidebarPanel.css:
        (@media all):
        * UserInterface/Views/SettingsTabContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.settings .navigation-bar):
        (.content-view.settings .navigation-bar .item.radio.button.text-only.selected):
        * UserInterface/Views/ShaderProgramContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.shader-program > .text-editor.shader):
        (.content-view.shader-program > .text-editor.shader > .type-title):
        * UserInterface/Views/ShaderProgramTreeElement.css:
        (@media (prefers-dark-interface)):
        (.item.shader-program .status > img):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning,):
        (.source-code.text-editor > .CodeMirror .issue-widget.error,):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration.locked):
        (.spreadsheet-css-declaration .selector.style-attribute):
        (.spreadsheet-css-declaration .selector:focus,):
        (.spreadsheet-css-declaration.locked .origin::after):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        (.spreadsheet-css-declaration .media-label):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.css:
        (@media (prefers-dark-interface)):
        (.spreadsheet-style-panel .section-header):
        (.spreadsheet-style-panel .section-header .node-link:hover):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (@media (prefers-dark-interface)):
        (.syntax-highlighted,):
        (.cm-s-default,):
        (.cm-s-default .cm-attribute):
        (.cm-s-default .cm-m-xml.cm-attribute,):
        (.cm-s-default .cm-meta):
        (.cm-s-default .cm-variable-3):
        (.cm-s-default .cm-builtin):
        * UserInterface/Views/TabBar.css:
        (@media (prefers-dark-interface)):
        (.tab-bar):
        (.tab-bar > .item):
        (.tab-bar > .item > .title):
        (.tab-bar > .item:not(.disabled).selected):
        (.tab-bar:not(.animating) > .item:not(.selected):hover):
        (.tab-bar > .item > .close,):
        (body.window-inactive .tab-bar):
        (body.window-inactive .tab-bar > .item):
        (body.window-inactive .tab-bar > .item.selected):
        (body.window-inactive .tab-bar > .item > .title):
        * UserInterface/Views/Table.css:
        (@media (prefers-dark-interface)):
        (.table,):
        (.table > .header > .sortable:active):
        (.table > .header > :matches(.sort-ascending, .sort-descending)):
        (.table > .header > :matches(.sort-ascending, .sort-descending)::after):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        * UserInterface/Views/TimelineDataGrid.css:
        (@media (prefers-dark-interface)):
        (.data-grid th:matches(.sort-ascending, .sort-descending)):
        * UserInterface/Views/TimelineIcons.css:
        (@media (prefers-dark-interface)):
        (.time-icon .icon):
        * UserInterface/Views/TimelineOverview.css:
        (@media (prefers-dark-interface)):
        (.timeline-overview > .navigation-bar.timelines):
        (.timeline-overview:not(.frames) > .graphs-container > .timeline-overview-graph:nth-child(even)):
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item:not(:first-child),):
        * UserInterface/Views/TimelineRecordingContentView.css:
        (@media (prefers-dark-interface)):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        * UserInterface/Views/Toolbar.css:
        (@media (prefers-dark-interface)):
        (body .toolbar):
        (body.window-inactive .toolbar):
        (body.latest-mac .toolbar .item.button,):
        (body.latest-mac .toolbar .search-bar > input[type="search"]):
        (body.latest-mac .toolbar .search-bar > input[type="search"]:focus):
        (body.latest-mac .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button):
        (body.latest-mac .toolbar .dashboard-container):
        (body.latest-mac .toolbar .item.button:active):
        (body.latest-mac.window-inactive .toolbar .item.button,):
        * UserInterface/Views/TreeOutline.css:
        (@media (prefers-dark-interface)):
        (.tree-outline .item .subtitle):
        * UserInterface/Views/Variables.css:
        (@media (prefers-dark-interface)):
        (:root):
        (body.window-inactive):
        (body.window-inactive *):
        * UserInterface/Views/WebSocketContentView.css:
        (@media (prefers-dark-interface)):
        (.web-socket.content-view .data-grid table.data tr.revealed):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.outgoing):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.non-text-frame):
        * UserInterface/Views/XHRBreakpointPopover.css:
        (@media (prefers-dark-interface)):
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):

2018-09-17  Devin Rousso  <drousso@apple.com>

        Web Inspector: generate CSSKeywordCompletions from backend values
        https://bugs.webkit.org/show_bug.cgi?id=189041

        Reviewed by Joseph Pecoraro.

        Moves the longhands map to `WI.CSSKeywordCompletions` for more global access. Creates an
        aliases map to support completions on aliases with the same values as the non-alias name.
        Removes all keyword-only properties from `WI.CSSKeywordCompletions._propertyKeywordMap` as
        they are now generated by the backend (kept for compatibility).

        * UserInterface/Models/CSSCompletions.js:
        (WI.CSSCompletions):
        (WI.CSSCompletions.requestCSSCompletions.propertyNamesCallback):
        (WI.CSSCompletions.prototype.isShorthandPropertyName):

        * UserInterface/Models/CSSKeywordCompletions.js:
        (WI.CSSKeywordCompletions.forProperty.addKeywordsForName): Added.
        (WI.CSSKeywordCompletions.forProperty):
        (WI.CSSKeywordCompletions.addCustomCompletions):

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.isInheritedPropertyName):

2018-09-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: breakpoint context menu appears twice in DOM tree
        https://bugs.webkit.org/show_bug.cgi?id=189308

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DOMBreakpointTreeController.js:
        (WI.DOMBreakpointTreeController.appendBreakpointContextMenuItems):
        Set a symbol on the `contextMenu` to ensure that the same items are not added twice.

2018-09-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Source View doesn't scroll to show line when breakpoint is hit inside of <script> in HTML resource
        https://bugs.webkit.org/show_bug.cgi?id=189638
        <rdar://problem/43359278>

        Reviewed by Matt Baker.

        Pausing in Document resources on page load have special considerations where we
        may not receive their full content immediately, so we may synthesize inline script
        content for the resource until we have full content. Unfortunately, when we get
        full content and update the TextEditor we were losing the revealed position and
        other editor information. This change specifically targets those cases, by
        re-applying editor state when updating such a resource from partial to full content.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._contentAvailable):
        Signal to the editor that when updating the content it should carry
        over editor state. Only do this if we had partial content before.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor):
        (WI.TextEditor.prototype.set repeatReveal):
        Provide a way to signal we should restore state when update the content.

        (WI.TextEditor.set string.update):
        (WI.TextEditor.prototype.set string):
        When repeatReveal was enabled, restore editor state such as the
        revealed location and text selection.

2018-09-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Record actions performed on ImageBitmapRenderingContext
        https://bugs.webkit.org/show_bug.cgi?id=181341

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Recording.js:
        (WI.Recording.fromPayload):
        (WI.Recording.prototype.createContext):

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.getImageParameters):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement._classNameForAction.classNameForActionName):

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.shown):
        (WI.RecordingContentView.prototype.hidden):
        (WI.RecordingContentView.prototype._generateContentFromSnapshot): Renamed.
        (WI.RecordingContentView.prototype._updateImageGrid):
        (WI.RecordingContentView.prototype._generateContentCanvasWebGL): Deleted.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):

2018-09-13  Jamal Nasser  <jamaln@mail.com>

        Web Inspector: Dark Mode: bezier curve editor should be updated
        https://bugs.webkit.org/show_bug.cgi?id=187657

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.bezier-editor > .bezier-preview-timing):
        (.bezier-editor > .bezier-container .bezier-curve):
        (.bezier-editor > .bezier-container .linear-curve):
        (.bezier-editor > .bezier-preview):
        (.bezier-editor > .bezier-preview > div):
        (.bezier-editor > .bezier-container .control-handle):
        (.bezier-editor > .bezier-container .control-line):

2018-09-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Timelines: clicking a row in Script > Events grid triggers Location popover when column is hidden
        https://bugs.webkit.org/show_bug.cgi?id=189603
        <rdar://problem/44431403>

        Reviewed by Joseph Pecoraro.

        TimelineDataGrid controls showing/hiding the call frame popover, with subclasses
        overriding callFramePopoverAnchorElement to position it. This patch adds
        another overridable base class method, shouldShowCallFramePopover, which subclasses
        can use to block the popover when the Location column is hidden.

        * UserInterface/Views/DataGrid.js:
        (WI.DataGrid.prototype.layout):
        (WI.DataGrid.prototype._positionResizerElements):
        (WI.DataGrid.prototype._isColumnVisible): Deleted.

        * UserInterface/Views/LayoutTimelineDataGrid.js:
        (WI.LayoutTimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.LayoutTimelineDataGrid):

        * UserInterface/Views/ScriptTimelineDataGrid.js:
        (WI.ScriptTimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.ScriptTimelineDataGrid):

        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid.prototype.shouldShowCallFramePopover):
        (WI.TimelineDataGrid.prototype._dataGridSelectedNodeChanged):

2018-09-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Opening inspector with a selected element might immediately scroll that element off screen in the DOM Tree outline
        https://bugs.webkit.org/show_bug.cgi?id=189569
        <rdar://problem/44397098>

        Reviewed by Devin Rousso.

        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView.prototype.layout):
        Re-select the selected DOM node in the DOM Tree when the view resizes.
        Typically this can happen if the sidebar opens/closes/resizes, in which
        case we will want the selected DOM node to stay in view even if the DOM
        tree starts wrapping earlier content.

2018-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: fix test case failures in js-isLikelyStackTrace.html
        https://bugs.webkit.org/show_bug.cgi?id=180664

        Reviewed by Devin Rousso.

        * UserInterface/Models/StackTrace.js:
        (WI.StackTrace.isLikelyStackTrace):
        In a quick benchmark 50% of the time was rebuilding the same complex regular
        expression over and over again. Instead just build the regex once and reset
        it before each use.

2018-09-12  Devin Rousso  <drousso@apple.com>

        Web Inspector: imported recordings are unable to be viewed after navigation
        https://bugs.webkit.org/show_bug.cgi?id=189208

        Reviewed by Joseph Pecoraro.

        Move the "Imported Recordings" folder to the top level (instead of under "Overview") so that
        it is selectable when there are no canvases but there is an imported recording.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        Null out the `source` of each `WI.Recording` for the removed `WI.Canvas`.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        Add each `WI.Recording`for the removed `WI.Canvas` to the "Imported Recordings" folder.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.refresh):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._showError):
        Drive-by: don't recreate the error preview element if it already exists.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.updateRepresentedObjects): Added.
        (WI.CanvasSidebarPanel.prototype.shown):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange): Deleted.

2018-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix typo "vritualized"
        https://bugs.webkit.org/show_bug.cgi?id=189511

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements):

2018-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Address some ESLint warnings
        https://bugs.webkit.org/show_bug.cgi?id=188824

        Reviewed by Matt Baker.

        * .eslintrc:
        * UserInterface/Base/Platform.js:
        * UserInterface/Controllers/AuditManager.js:
        * UserInterface/Controllers/BasicBlockAnnotator.js:
        * UserInterface/Controllers/CallFrameTreeController.js:
        * UserInterface/Controllers/HARBuilder.js:
        * UserInterface/Models/AuditReport.js:
        * UserInterface/Models/AuditResult.js:
        * UserInterface/Models/AuditTestCase.js:
        * UserInterface/Models/AuditTestSuite.js:
        * UserInterface/Models/Cookie.js:
        * UserInterface/Models/SourceCodePosition.js:
        * UserInterface/Test/FrontendTestHarness.js:
        * UserInterface/Test/TestSuite.js:
        * UserInterface/Views/CanvasContentView.js:
        * UserInterface/Views/CollectionContentView.js:
        * UserInterface/Views/ContentBrowser.js:
        * UserInterface/Views/CookieStorageContentView.js:
        * UserInterface/Views/DataGrid.js:
        * UserInterface/Views/DatabaseTableContentView.js:
        * UserInterface/Views/FindBanner.js:
        * UserInterface/Views/JSONResourceContentView.js:
        * UserInterface/Views/LogContentView.js:
        * UserInterface/Views/ResourceSidebarPanel.js:
        * UserInterface/Views/SourceCodeTextEditor.js:
        * UserInterface/Views/SpreadsheetTextField.js:
        * UserInterface/Workers/Formatter/FormatterUtilities.js:

2018-09-06  Andy Estes  <aestes@apple.com>

        [Apple Pay] Rename the -apple-pay-button-type value "checkout" to "check-out"
        https://bugs.webkit.org/show_bug.cgi?id=189366
        <rdar://problem/44193218>

        Reviewed by Sam Weinig.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-31  Jamal Nasser  <xnasser@outlook.com>

        Added a CSS rule to DarkMode.css to fix color on sidebar toggle.
        <https://webkit.org/b/189139>

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .toggle-class-toggle):

2018-08-29  David Kilzer  <ddkilzer@apple.com>

        Remove empty directories from from svn.webkit.org repository
        <https://webkit.org/b/189081>

        * WebInspectorUI.esproj: Removed.

2018-08-28  Devin Rousso  <drousso@apple.com>

        console.log() shows (anonymous function) instead of the passed string when a certain format is used
        https://bugs.webkit.org/show_bug.cgi?id=188946
        <rdar://problem/43756428>

        Reviewed by Brian Burg.

        Stack trace URLs are much more likely to follow the following format:

            <protocol>://<path>:<line>:<column>

        Modify the test regexp to always require that a protocol exists and to check that there are
        no ":" inside the protocol or path. Additionally, stack traces usually have more than one
        frame, so return false if there isn't more than one line.

        * UserInterface/Models/StackTrace.js:
        (WI.StackTrace.isLikelyStackTrace):

2018-08-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: CanvasSidebarPanel is empty for imported recordings
        https://bugs.webkit.org/show_bug.cgi?id=189061

        Reviewed by Brian Burg.

        When recordings are imported, they don't have an associated `WI.Canvas`, meaning that the
        `WI.Recording` is never added to the canvas' `WI.RecordingCollection`. Previously, the
        canvas sidebar relied upon the `ItemAdded` event to update the recording `WI.ScopeBar`.
        Since the imported recording isn't ever added to the collection, this is never fired.

        This patch moves the function call that updates the `WI.ScopeBar` to a more universal path,
        ensuring that no matter how a `WI.Recording` is set for the sidebar, it will be shown.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):

2018-08-28  Devin Rousso  <drousso@apple.com>

        Web Inspector: Search bar is too narrow in some localizations
        https://bugs.webkit.org/show_bug.cgi?id=189060
        <rdar://problem/43006369>

        Reviewed by Brian Burg.

        * UserInterface/Views/Toolbar.css:
        (.toolbar .search-bar):

2018-08-27  Keith Rollin  <krollin@apple.com>

        Unreviewed build fix -- disable LTO for production builds

        * Configurations/Base.xcconfig:

2018-08-27  Andy Estes  <aestes@apple.com>

        Teach Web Inspector how to complete keywords for -apple-pay-button-style and -apple-pay-button-type
        https://bugs.webkit.org/show_bug.cgi?id=189001

        Reviewed by Devin Rousso.

        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: when scrolling a virtualized TreeOutline, only update the DOM periodically
        https://bugs.webkit.org/show_bug.cgi?id=188960

        Reviewed by Brian Burg.

        After each `updateVirtualizedElements` call, remember the `WI.TreeElement` that is located
        halfway within the visible list. When handling each "scroll", only regenerate the
        `WI.TreeOutline` DOM if the user has scrolled `extraRows` distance.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline):
        (WI.TreeOutline.prototype.registerScrollVirtualizer):
        (WI.TreeOutline.prototype.updateVirtualizedElements):
        (WI.TreeOutline.prototype._calculateVirtualizedValues): Added.

2018-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: provide autocompletion for event breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=188717

        Reviewed by Brian Burg.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager):
        (WI.DOMTreeManager.prototype.getSupportedEventNames): Added.

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover):
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype.dismiss): Added.
        (WI.EventBreakpointPopover.prototype.completionSuggestionsClickedCompletion): Added.
        (WI.EventBreakpointPopover.prototype._presentOverTargetElement):
        (WI.EventBreakpointPopover.prototype._showSuggestionsView): Added.

2018-08-27  Keith Rollin  <krollin@apple.com>

        Build system support for LTO
        https://bugs.webkit.org/show_bug.cgi?id=187785
        <rdar://problem/42353132>

        Reviewed by Dan Bernstein.

        Update Base.xcconfig and DebugRelease.xcconfig to optionally enable
        LTO.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2018-08-27  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: virtualized TreeOutline is empty when filtering
        https://bugs.webkit.org/show_bug.cgi?id=188959

        Reviewed by Brian Burg.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.set hidden):
        Only set `focusedTreeElement` if the `WI.TreeElement` is selected and not hidden. There is
        no reason to focus a hidden or unselected `WI.TreeElement`.

2018-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: Color picker: can't enter decimal numbers for opacity
        https://bugs.webkit.org/show_bug.cgi?id=187026
        <rdar://problem/41446500>

        Reviewed by Brian Burg.

        After every "input" event, we update the `color` value of the `WI.ColorPicker` based on a
        generated string using the values of the various <input>. The issue with this approach is
        that adding a decimal point (e.g. "0.") would still be construed as 0, meaning that the
        color wouldn't change and would instead be reset back to it's old value. This patch adds an
        early return if the newly generated color has the same value as the current color, thereby
        meaning that the `color` wouldn't change when changing from "0" to "0.".

        * UserInterface/Views/ColorPicker.js:
        (WI.ColorPicker):
        (WI.ColorPicker.createColorInput):
        (WI.ColorPicker.prototype._handleColorInputInput):

2018-08-23  Simon Fraser  <simon.fraser@apple.com>

        Add support for dumping GC heap snapshots, and a viewer
        https://bugs.webkit.org/show_bug.cgi?id=186416

        Reviewed by Joseph Pecoraro.

        Make a way to dump information about the GC heap that is useful for looking for leaked
        or abandoned objects. This dump is obtained (on Apple platforms) via:
            notifyutil -p com.apple.WebKit.dumpGCHeap
        which writes a JSON file to /tmp which can then be loaded into the viewer in Tools/GCHeapInspector.

        This leverages the heap snapshot used by Web Inspector, adding an alternate format for
        the snapshot JSON that adds additional data about objects and why they are GC roots.

        The generated bindings code is changed to include the output root reason from isReachableFromOpaqueRoots(),
        and to implement heapSnapshot() which provides the address of the wrapped object. A new IDL attribute,
        CustomHeapSnapshot, is used to allow custom heapSnapshot() implementations for classes like JSDocument
        that need to decorate the heap snapshot cell data with things like the document URL.

        GCController registers a notifyutil callback which gathers the debug heap snapshot, and dumps it
        to a file in /tmp. The file path is printed out to the system log.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot):

2018-08-23  Brian Burg  <bburg@apple.com>

        Web Inspector: fix typos in some compositing reasons
        https://bugs.webkit.org/show_bug.cgi?id=188905
        <rdar://problem/43624825>

        Reviewed by Simon Fraser.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js:
        (WI.LayerTreeDetailsSidebarPanel.prototype._populateListOfCompositingReasons):
        (WI.LayerTreeDetailsSidebarPanel):
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype._updateReasonsList):
        (WI.Layers3DContentView):

2018-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: support breakpoints for timers and animation-frame events
        https://bugs.webkit.org/show_bug.cgi?id=188778

        Reviewed by Brian Burg.

        Add a `type` to `WI.EventBreakpoint` that matches `DOMDebugger.EventBreakpointType`:
         - `AnimationFrame` for `requestAnimationFrame`
         - `Listener` for any named DOM Event
         - `Timer` for `setTimeout` and `setInterval`

        Modified `WI.EventBreakpointPopover` to provide ways for selecting these other types, which
        is then passed to `WI.DOMDebuggerManager`, which now calls through to the newly added
        `DOMDebugger.removeEventBreakpoint` and `DOMDebugger.setEventBreakpoint` that sets
        breakpoints for all event types.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Images/EventBreakpointAnimationFrame.svg: Added.
        * UserInterface/Images/EventBreakpointListener.svg: Renamed from Source/WebInspectorUI/UserInterface/Images/EventBreakpoint.svg.
        * UserInterface/Images/EventBreakpointTimer.svg: Added.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager.supportsEventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.eventBreakpointForTypeAndEventName): Added.
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint.breakpointRemoved): Added.
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint):
        (WI.DOMDebuggerManager.prototype.eventBreakpointForEventName): Deleted.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager.prototype.setBreakpointForEventListener):

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):

        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.fromPayload):
        (WI.EventBreakpoint.prototype.get type): Added.
        (WI.EventBreakpoint.prototype.get serializableInfo):
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):

        * UserInterface/Views/EventBreakpointPopover.js:
        (WI.EventBreakpointPopover):
        (WI.EventBreakpointPopover.prototype.get breakpoint): Added.
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype.show.createOption): Added.
        (WI.EventBreakpointPopover.prototype.dismiss): Added.
        (WI.EventBreakpointPopover.prototype._presentOverTargetElement):
        (WI.EventBreakpointPopover.prototype._handleTypeSelectChange): Added.
        (WI.EventBreakpointPopover.prototype.get result): Deleted.
        (WI.EventBreakpointPopover.prototype.get value): Deleted.
        * UserInterface/Views/EventBreakpointPopover.css:
        (.popover .event-breakpoint-content > .event-type): Added.
        (.popover .event-breakpoint-content > input): Deleted.

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        * UserInterface/Views/EventBreakpointTreeElement.css:
        (.breakpoint.event.animation-frame:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.listener:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event.timer:not(.breakpoint-paused-icon) .icon): Added.
        (.breakpoint.event:not(.breakpoint-paused-icon) .icon): Deleted.

2018-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: `console.inspect(sessionStorage)` first time does not show Session Storage content view if Storage tab was previously unvisited
        https://bugs.webkit.org/show_bug.cgi?id=188801

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.tabContentViewClassForRepresentedObject):
        (WI._storageWasInspected):
        Since the `WI.StorageSidebarPanel` is not created until the `WI.StorageTabContentView` is
        created, the `WI.StorageManager.Event.DOMStorageObjectWasInspected` and
        `WI.StorageManager.Event.DatabaseWasInspected` events do not reach the sidebar. We should
        follow what `WI._domNodeWasInspected` does and additionally call `WI.showRepresentedObject`
        on the inspected object.

2018-08-23  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION: InspectorStyleSheet not visible in the resources sidebar
        https://bugs.webkit.org/show_bug.cgi?id=188819
        <rdar://problem/43579039>

        Reviewed by Brian Burg.

        * UserInterface/Models/ResourceCollection.js:
        (WI.ResourceCollection.prototype.objectIsRequiredType):

2018-08-23  Joseph Pecoraro  <pecoraro@apple.com>

        JSContext Inspector: Scripts not showing up in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=188814
        <rdar://problem/43576117>

        Reviewed by Brian Burg.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._addScript):
        This path shouldn't apply to JSContext inspection which will
        never have a pageTarget and but doesn't have a mainResource.

2018-08-22  Devin Rousso  <drousso@apple.com>

        Web Inspector: cannot delete multiple event breakpoints by repeatedly hitting delete
        https://bugs.webkit.org/show_bug.cgi?id=188803
        <rdar://problem/43572838>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._domBreakpointAddedOrRemoved):
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved):

2018-08-22  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Do not include TreeOutlineDataGridSynchronizer.js in inspector main.

        The script was removed in r235151.

        * UserInterface/Main.html:

2018-08-21  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove TreeOutlineDataGridSynchronizer
        https://bugs.webkit.org/show_bug.cgi?id=188449
        <rdar://problem/43107980>

        Reviewed by Devin Rousso.

        * UserInterface/Views/HeapAllocationsTimelineView.js:
        (WI.HeapAllocationsTimelineView.prototype.layout):
        * UserInterface/Views/LayoutTimelineView.js:
        (WI.LayoutTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/NetworkTimelineView.js:
        (WI.NetworkTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/RenderingFrameTimelineView.js:
        (WI.RenderingFrameTimelineView.prototype._processPendingRecords):
        (WI.RenderingFrameTimelineView.prototype.dataGridNodeForTreeElement): Deleted.
        * UserInterface/Views/ScriptDetailsTimelineView.js:
        (WI.ScriptDetailsTimelineView.prototype._processPendingRecords):
        * UserInterface/Views/TimelineDataGrid.js:
        (WI.TimelineDataGrid):
        (WI.TimelineDataGrid.prototype.reset):
        (WI.TimelineDataGrid.prototype.shown):
        (WI.TimelineDataGrid.prototype.addRowInSortOrder):
        (WI.TimelineDataGrid.prototype._refreshDirtyDataGridNodes):
        (WI.TimelineDataGrid.prototype._sort):
        (WI.TimelineDataGrid.prototype.treeElementForDataGridNode): Deleted.
        (WI.TimelineDataGrid.prototype.dataGridNodeForTreeElement): Deleted.
        * UserInterface/Views/TreeOutlineDataGridSynchronizer.js: Removed.

2018-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ⌘G does not while find banner is focused
        https://bugs.webkit.org/show_bug.cgi?id=188815
        <rdar://problem/43577158>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Allow an <input> element to be the current focus element, which is what will
        our global KeyboardShortcut handlers will interact with. Also make sure
        that showing the find banner for the first time still focuses it.

2018-08-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r235095): duplicate actions existing in WI.CanvasSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=188808

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        Check that the `WI.RecordingAction` is not already represented in the `WI.TreeOutline`
        before adding it.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle > progress):
        Drive-by: vertically center the <progress> shown for `WI.RecordingFrame` during processing.

2018-08-21  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas: provide default icon for all actions
        https://bugs.webkit.org/show_bug.cgi?id=188807

        Reviewed by Matt Baker.

        * UserInterface/Views/RecordingActionTreeElement.css:
        (.item.action > .icon):
        (.item.action.initial-state > .icon): Deleted.

2018-08-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rulers.svg is missing
        https://bugs.webkit.org/show_bug.cgi?id=188806
        <rdar://problem/43574273>

        Reviewed by Devin Rousso.

        * UserInterface/Images/Rulers.svg: Added.

2018-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: allow breakpoints to be set for specific event listeners
        https://bugs.webkit.org/show_bug.cgi?id=183138

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Models/EventBreakpoint.js:
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.fromPayload): Added.
        (WI.EventBreakpoint.prototype.get eventListener): Added.

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager):
        (WI.DOMTreeManager.prototype.get eventBreakpoints): Added.
        (WI.DOMTreeManager.prototype._setDocument):
        (WI.DOMTreeManager.prototype.setEventListenerDisabled):
        (WI.DOMTreeManager.prototype.setBreakpointForEventListener): Added.
        (WI.DOMTreeManager.prototype.removeBreakpointForEventListener): Added.
        (WI.DOMTreeManager.prototype.breakpointForEventListenerId): Added.

        * UserInterface/Controllers/EventBreakpointTreeController.js:
        (WI.EventBreakpointTreeController):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):

        * UserInterface/Views/EventListenerSectionGroup.js:
        (WI.EventListenerSectionGroup):
        (WI.EventListenerSectionGroup.prototype._createDisabledToggleRow):
        (WI.EventListenerSectionGroup.prototype._createBreakpointToggleRow): Added.

        * UserInterface/Views/EventBreakpointTreeElement.js:
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):

2018-08-20  Devin Rousso  <drousso@apple.com>

        Web Inspector: Canvas tab: allow recording processing to be stopped midway
        https://bugs.webkit.org/show_bug.cgi?id=185152

        Reviewed by Joseph Pecoraro.

        Previously, `WI.Recording` used a `WI.YieldableTask` to process every action in such a way
        as to not block the UI. The downside to this approach was that it used a message view to
        indicate the progress of this process, and prevented the user from viewing the `WI.Recording`
        until that process was completed.

        This patch changes `WI.Recording` to instead use `async/await` and fire events whenever a
        `WI.RecordingAction` (and `WI.RecordingFrame`) finished processing, allowing it to be added
        to the recording `WI.TreeOutline` and selected by the user. Additionally, a pause/resume
        button is added to the `WI.CanvasSidebarPanel` so the user has greater control over what
        how much of the `WI.Recording` they want to process.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Utilities.js:
        (Promise.delay)
        Utility function for promisifying `setTimeout`.

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.prototype.get processing): Added.
        (WI.Recording.prototype.get ready): Added.
        (WI.Recording.prototype.startProcessing): Added.
        (WI.Recording.prototype.stopProcessing): Added.
        (WI.Recording.prototype.async._process): Added.
        (WI.Recording.prototype.process): Deleted.
        (WI.Recording.prototype.async.yieldableTaskWillProcessItem): Deleted.
        (WI.Recording.prototype.async.yieldableTaskDidFinish): Deleted.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.prototype.get ready): Added.
        (WI.RecordingAction.prototype.async.swizzle):
        (WI.RecordingAction.prototype.apply):

        * UserInterface/Models/RecordingInitialStateAction.js:
        (WI.RecordingInitialStateAction):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged.createPauseButton): Added.
        (WI.CanvasSidebarPanel.prototype._recordingChanged.createResumeButton): Added.
        (WI.CanvasSidebarPanel.prototype._createRecordingFrameTreeElement): Added.
        (WI.CanvasSidebarPanel.prototype._createRecordingActionTreeElement): Added.
        (WI.CanvasSidebarPanel.prototype._handleRecordingProcessedAction): Added.
        (WI.CanvasSidebarPanel.prototype._handleRecordingStartProcessingFrame): Added.
        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle > progress): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline:matches(:focus, .force-focus) .item.processing.selected .subtitle > progress): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.processing .subtitle::before): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .recording-processing-options): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .recording-processing-options > .indeterminate-progress-spinner): Added.
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .indeterminate-progress-spinner): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.initialLayout):
        (WI.RecordingContentView.prototype._updateCanvasPath):
        (WI.RecordingContentView.prototype._handleRecordingProcessedAction): Added.
        (WI.RecordingContentView.prototype._updateProcessProgress): Deleted.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionSwizzle): Deleted.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionApply): Deleted.
        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > header > .slider-container > .slider-value): Added.

        * UserInterface/Views/FolderTreeElement.js:
        (WI.FolderTreeElement):

        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.get statusElement): Added.
        (WI.GeneralTreeElement.prototype._updateTitleElements):

        * UserInterface/Views/RecordingContentView.js:
        (WI.CanvasContentView.prototype._handleViewShaderButtonClicked):
        (WI.CanvasContentView.prototype._handleViewRecordingButtonClicked):
        Drive-by: `WI.Collection` doesn't have a `values()` accessor for the underlying `Set`.

        * UserInterface/Views/RecordingNavigationSidebarPanel.css: Removed.
        * UserInterface/Views/RecordingNavigationSidebarPanel.js: Removed.
        These files are no longer used since they were "merged" into `WI.CanvasSidebarPanel`.

2018-08-20  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: create icons for recordings/shaders in the preview tile
        https://bugs.webkit.org/show_bug.cgi?id=183650

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype.attached):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._shaderProgramAdded):
        (WI.CanvasContentView.prototype._shaderProgramRemoved):
        (WI.CanvasContentView.prototype._updateViewRelatedItems):
        (WI.CanvasContentView.prototype._handleViewShaderButtonClicked):
        (WI.CanvasContentView.prototype._handleViewRecordingButtonClicked):
        (WI.CanvasContentView.prototype._addRecording): Deleted.
        (WI.CanvasContentView.prototype._handleRecordingSelectElementChange): Deleted.
        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > :matches(.view-shader, .view-recording)):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > img + img):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > .view-shader):
        (.content-view.canvas-overview .content-view.canvas > footer > .view-related-items > .view-recording):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings > select): Deleted.
        (.content-view.canvas-overview .content-view.canvas > footer .recordings > select:focus): Deleted.
        Create two image buttons in the bottom left corner of each canvas tile that appear when the
        canvas has associated shaders and/or recordings. Clicking each image button will function
        similar to path components, in that if there is only one shader/recording, it is immediately
        selected, whereas if there are multiple a dropdown is shown.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        Drive-by: ensure that the selected recording action is properly updated when first loading a
        recording and when scrubbing through one.

2018-08-16  Devin Rousso  <drousso@apple.com>

        Web Inspector: support breakpoints for arbitrary event names
        https://bugs.webkit.org/show_bug.cgi?id=183118

        Reviewed by Joseph Pecoraro.

        Create UI for setting breakpoints on event names. Ties into renamed DOMDebugger commands,
        specifically `setEventBreakpoint` and `removeEventBreakpoint`, that will pause execution if
        any DOM event is fired that matches any previously registered breakpoints.

        Event breakpoints are distinguished by name, and they currently apply globally, meaning
        that only one breakpoint per event name can be registered.

        Event breakpoints are created in the Debugger tab in a new "Event Breakpoints" section in
        the Navigation sidebar. A new type of popover, EventBreakpointPopover, is used, but right
        now all it contains is a basic text input for the event name. Similarly, a new TreeElement
        subclass, EventBreakpointTreeElement, is used when showing the list of event listener
        breakpoints, but all it shows now is the event name.

        The majority of the logic in this patch was derived from XHR breakpoints.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        * UserInterface/Images/EventBreakpoint.svg: Added.

        * UserInterface/Models/EventBreakpoint.js: Added.
        (WI.EventBreakpoint):
        (WI.EventBreakpoint.prototype.get eventName):
        (WI.EventBreakpoint.prototype.get disabled):
        (WI.EventBreakpoint.prototype.set disabled):
        (WI.EventBreakpoint.prototype.get serializableInfo):
        (WI.EventBreakpoint.prototype.saveIdentityToCookie):

        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WI.DOMDebuggerManager):
        (WI.DOMDebuggerManager.prototype.get eventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype.eventBreakpointForEventName): Added.
        (WI.DOMDebuggerManager.prototype.addEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._speculativelyResolveBreakpoints):
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint.breakpointUpdated): Added.
        (WI.DOMDebuggerManager.prototype._updateEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._resolveEventBreakpoint): Added.
        (WI.DOMDebuggerManager.prototype._saveEventBreakpoints): Added.
        (WI.DOMDebuggerManager.prototype._eventBreakpointDisabledStateDidChange): Added.

        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._pauseReasonFromPayload):

        * UserInterface/Controllers/EventBreakpointTreeController.js: Added.
        (WI.EventBreakpointTreeController):
        (WI.EventBreakpointTreeController.prototype.revealAndSelect):
        (WI.EventBreakpointTreeController.prototype._eventBreakpointAdded):
        (WI.EventBreakpointTreeController.prototype._eventBreakpointRemoved):
        (WI.EventBreakpointTreeController.prototype._addTreeElement):

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel):
        (WI.DebuggerSidebarPanel.prototype._updatePauseReasonSection):
        (WI.DebuggerSidebarPanel.prototype._eventBreakpointAddedOrRemoved): Added.
        (WI.DebuggerSidebarPanel.prototype._addEventBreakpointButtonClicked): Added.
        (WI.DebuggerSidebarPanel.prototype.willDismissPopover):

        * UserInterface/Views/EventBreakpointTreeElement.js: Added.
        (WI.EventBreakpointTreeElement):
        (WI.EventBreakpointTreeElement.prototype.onattach):
        (WI.EventBreakpointTreeElement.prototype.ondetach):
        (WI.EventBreakpointTreeElement.prototype.ondelete):
        (WI.EventBreakpointTreeElement.prototype.onenter):
        (WI.EventBreakpointTreeElement.prototype.onspace):
        (WI.EventBreakpointTreeElement.prototype.populateContextMenu):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementClicked):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementFocused):
        (WI.EventBreakpointTreeElement.prototype._statusImageElementMouseDown):
        (WI.EventBreakpointTreeElement.prototype._toggleBreakpoint):
        (WI.EventBreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/EventBreakpointTreeElement.css: Added.
        (.breakpoint.event-listener:not(.breakpoint-paused-icon) .icon):

        * UserInterface/Views/EventBreakpointPopover.js: Added.
        (WI.EventBreakpointPopover):
        (WI.EventBreakpointPopover.prototype.get result):
        (WI.EventBreakpointPopover.prototype.get value):
        (WI.EventBreakpointPopover.prototype.show):
        (WI.EventBreakpointPopover.prototype._presentOverTargetElement):
        * UserInterface/Views/EventBreakpointPopover.css: Added.
        (.popover .event-listener-breakpoint-content):
        (.popover .event-listener-breakpoint-content > input):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):

2018-08-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Show Initiator information in Network Table
        https://bugs.webkit.org/show_bug.cgi?id=188590
        <rdar://problem/43305488>

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkResourceDetailView.js:
        (WI.NetworkResourceDetailView):
        (WI.NetworkResourceDetailView.prototype.shown):
        (WI.NetworkResourceDetailView.prototype.willShowWithCookie):
        (WI.NetworkResourceDetailView.prototype._showContentViewForNavigationItem):
        When a ResourceDetailView gets shown, it may also want to show its initial content view
        with a cookie as the cookie may contain position highlight information.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView):
        (WI.NetworkTableContentView.prototype._showResourceDetailView):
        (WI.NetworkTableContentView.prototype.showRepresentedObject):
        When showing a represented object, pass the cookie information on to the detail
        view's so that it may include the cookie when showing the final content view.

        (WI.NetworkTableContentView.prototype.tablePopulateCell):
        (WI.NetworkTableContentView.prototype._populateInitiatorCell):
        (WI.NetworkTableContentView.prototype.initialLayout):
        New initiator column contains a source code link to the call site.

        (WI.NetworkTableContentView.prototype._generateSortComparator):
        (WI.NetworkTableContentView.prototype._entryForResource):
        Entry data for the initiator is a display string that can be sorted easily.

2018-08-16  Joseph Pecoraro  <pecoraro@apple.com>

        LayoutTest inspector/worker/debugger-pause.html sometimes times out
        https://bugs.webkit.org/show_bug.cgi?id=188580

        Reviewed by Matt Baker.

        * UserInterface/Protocol/Target.js:
        (WI.Target.prototype.get mainResource):
        (WI.Target.prototype.set mainResource):
        Dispatch an event when the Main Resource is set.

2018-08-15  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        Add keyword completion for 'list-button'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-15  Devin Rousso  <drousso@apple.com>

        Web Inspector: REGRESSION(r?): the probe sidebar doesn't show up when adding probes
        https://bugs.webkit.org/show_bug.cgi?id=188594

        Reviewed by Brian Burg.

        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        (WI.ProbeDetailsSidebarPanel.prototype.set inspectedProbeSets):
        (WI.ProbeDetailsSidebarPanel.prototype.initialLayout):
        Add checks to ensure that DOM elements for each probe section exist before trying to
        add/remove them from the sidebar. This can happen if probes are inspected before the sidebar
        is shown for the first time.

        * UserInterface/Views/ProbeSetDataGrid.js:
        (WI.ProbeSetDataGrid):
        (WI.ProbeSetDataGrid.columnIdentifierForProbe): Added.
        (WI.ProbeSetDataGrid.prototype._setupProbe):
        (WI.ProbeSetDataGrid.prototype._teardownProbe):
        (WI.ProbeSetDataGrid.prototype._probeExpressionChanged):
        * UserInterface/Views/ProbeSetDataGridNode.js:
        (WI.ProbeSetDataGridNode.prototype.set frame):
        Provide better column identifiers for each probe's `WI.DataGrid`. It's possible for the
        numeric probe ID value to be stringified when passing it into the constructor of
        `WI.DataGrid`, which will not match the original numeric value on later retrieval.

2018-08-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should not center rows when scrolling them into view
        https://bugs.webkit.org/show_bug.cgi?id=188593
        <rdar://problem/43311660>

        Reviewed by Devin Rousso.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleKeyDown):

2018-08-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Table should handle row selection instead of the table delegate
        https://bugs.webkit.org/show_bug.cgi?id=188534
        <rdar://problem/43253335>

        Reviewed by Joseph Pecoraro.

        Row selection should be implemented by Table, rather than its delegate.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableShouldSelectRow):
        (WI.NetworkTableContentView.prototype.tableCellMouseDown): Deleted.
        Prevent selection unless the clicked cell belongs to the name column.

        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype.tableShouldSelectRow):
        Always prevent selection.

        * UserInterface/Views/Table.js:
        (WI.Table):
        (WI.Table.prototype._handleMouseDown):

2018-08-12  Aditya Keerthi  <akeerthi@apple.com>

        [macOS] Color wells should appear pressed when presenting a color picker
        https://bugs.webkit.org/show_bug.cgi?id=188477

        Reviewed by Tim Horton.

        Add keyword completion for 'color-well'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

2018-08-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: SourceCodeTextEditor error/warning text widget is too light
        https://bugs.webkit.org/show_bug.cgi?id=188126
        <rdar://problem/42674963>

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .issue-widget.warning,): Added.
        (.source-code.text-editor > .CodeMirror .issue-widget.error,): Added.

2018-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version (iOS 12)
        https://bugs.webkit.org/show_bug.cgi?id=188359
        <rdar://problem/42981364>

        Reviewed by Brian Burg.

        * UserInterface/Protocol/Legacy/12.0/InspectorBackendCommands.js: Added.
        * Versions/Inspector-iOS-12.0.json: Added.

2018-08-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Global search sometimes returns duplicate results for a resource
        https://bugs.webkit.org/show_bug.cgi?id=188270
        <rdar://problem/42867498>

        Reviewed by Brian Burg.

        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype.performSearch.resourcesCallback):
        Avoid duplicate search results in the frontend. We should also fix the backend
        but a frontend fix will also be desired for backends that have the issue.

2018-08-03  Alex Christensen  <achristensen@webkit.org>

        Fix spelling of "overridden"
        https://bugs.webkit.org/show_bug.cgi?id=188315

        Reviewed by Darin Adler.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView.prototype.treeElementForRepresentedObject):
        * UserInterface/Views/GeneralTreeElement.js:
        (WI.GeneralTreeElement.prototype.ondetach):
        * UserInterface/Views/NavigationBar.js:
        (WI.NavigationBar.prototype.get sizesToFit):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.shouldFilterPopulate):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.canBeFormatted):
        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype.onpopulate):

2018-08-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: SourceCodeTextEditor thread indicator widget is too light
        https://bugs.webkit.org/show_bug.cgi?id=188119
        <rdar://problem/42670811>

        Reviewed by Matt Baker.

        Make the background of the thread indicator widget darker.

        Reduce the number of HTML elements and simplify CSS by removing the HTML element that drew an arrow and using clip-path on inline widgets instead.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        * UserInterface/Views/SourceCodeTextEditor.css:
        (.source-code.text-editor .CodeMirror-linewidget):
        (.source-code.text-editor > .CodeMirror .line-indicator-widget.inline):
        (@media (prefers-dark-interface)):
        (.source-code.text-editor > .CodeMirror .thread-widget.inline):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._updateThreadIndicatorWidget):
        (WI.SourceCodeTextEditor.prototype._updateIssueWidgetForIssues):
        * UserInterface/Views/TextEditor.css:
        (@media (prefers-dark-interface)):
        (.text-editor > .CodeMirror .execution-line.primary .CodeMirror-linenumber::after):
        * UserInterface/Views/Variables.css:
        (:root):

2018-08-01  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: disabled breakpoints banner is too light
        https://bugs.webkit.org/show_bug.cgi?id=188120
        <rdar://problem/42671348>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.navigation.debugger .warning-banner):

2018-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include a full URL tooltip when hovering the name in the Network Tab
        https://bugs.webkit.org/show_bug.cgi?id=188199

        Reviewed by Matt Baker.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateNameCell):
        Give a tooltip to the entire cell since the entire cell has interactivity.

2018-07-30  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Search sidebar panel text field has a white background
        https://bugs.webkit.org/show_bug.cgi?id=188128
        <rdar://problem/42678270>

        Reviewed by Matt Baker.

        Make the search bar in Search tab match the style of the filter bar.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:matches(.search-bar, .filter-bar) > input[type="search"],):
        (:matches(.search-bar, .filter-bar) > input[type="search"]::placeholder):
        (:matches(.search-bar, .filter-bar) > input[type="search"]:focus):
        (.filter-bar > input[type="search"]): Deleted.
        (.filter-bar > input[type="search"]::placeholder): Deleted.
        (.filter-bar > input[type="search"]:focus): Deleted.

2018-07-26  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r234281.

        Broke internal builds.

        Reverted changeset:

        "[Datalist] Add button to TextFieldInputs with a datalist"
        https://bugs.webkit.org/show_bug.cgi?id=187741
        https://trac.webkit.org/changeset/234281

2018-07-26  Aditya Keerthi  <akeerthi@apple.com>

        [Datalist] Add button to TextFieldInputs with a datalist
        https://bugs.webkit.org/show_bug.cgi?id=187741

        Reviewed by Tim Horton.

        Add keyword completion for 'list-button'.

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:

2018-07-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Breakpoint editor in JS debugger has inconsistent background
        https://bugs.webkit.org/show_bug.cgi?id=188026

        Reviewed by Matt Baker.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.edit-breakpoint-popover-condition):
        (.breakpoint-action-eval-editor):

2018-07-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: remove odd-looking top border
        https://bugs.webkit.org/show_bug.cgi?id=187885

        Reviewed by Matt Baker.

        This border doesn't exist in the light mode, and it shouldn't be in the dark mode either.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (body .toolbar):

2018-07-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Layers tab background should be dark
        https://bugs.webkit.org/show_bug.cgi?id=187660
        <rdar://problem/42179616>

        Reviewed by Brian Burg.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype.initialLayout):
        * UserInterface/Views/Variables.css:
        (:root):

2018-07-19  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers visualization shouldn't select on mousedown
        https://bugs.webkit.org/show_bug.cgi?id=187488

        Reviewed by Matt Baker.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.initialLayout):
        (WI.Layers3DContentView.prototype._canvasMouseDown):
        (WI.Layers3DContentView.prototype._canvasMouseUp):
        Don't update selection on mousedown, update on mouseup!
        Specifically, only update when mousedown & mouseup targets are the same and mousemove hasn't been triggered.

2018-07-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: poor contrast for Search Tab's "the page's content has changed" message
        https://bugs.webkit.org/show_bug.cgi?id=187792

        Reviewed by Brian Burg.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):
        Make the background color slightly more yellow and less red. This slightly dicreases the contrast
        but makes the text look less like an error.

        * UserInterface/Views/SearchSidebarPanel.css:
        (@media (prefers-dark-interface)):
        (.sidebar > .panel.navigation.search.changed > .banner):

2018-07-18  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION(r232591): CodeMirrorEditor should not use a RegExp lineSeparator option
        https://bugs.webkit.org/show_bug.cgi?id=187772
        <rdar://problem/42331640>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        (WI.CodeMirrorEditor):
        CodeMirror should be left to auto-detect line separators. By default
        it detects \n, \r\n, and \r. By specifying a regular expression we
        merely cause problems when CodeMirror uses the supplied lineSeparator
        when joining its array of lines together.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.set string.update):
        (WI.TextEditor.prototype.set string):
        This assertion was only true when we forced "\n" line endings everywhere.
        It no longer holds for source text with "\r\n" (Windows-style) line endings.

2018-07-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Fix execution highlighting after r233820
        https://bugs.webkit.org/show_bug.cgi?id=187703
        <rdar://problem/42246167>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.currentPositionToOriginalPosition):
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):

2018-07-16  Aaron Chu  <aaron_chu@apple.com>

        AX: Audit Tab should have an Audit Manager
        https://bugs.webkit.org/show_bug.cgi?id=184071
        <rdar://problem/38946364>

        Reviewed by Brian Burg.

        This implements the AuditManager for the audit feature. This patch revolves
        around building out an AuditManager that facilitates an audit. The AuditManager
        is responsible for managing and storing AuditReports and AuditTestSuites. It is
        also tasked to decide how to run a test -- whether as a test case or as a test
        suite. This patch also includes 4 models with which the AuditManager works to
        perform an audit and to generate a report. These models include AuditTestCase,
        which as a collection is stored inside an AuditTestSuite; and AuditResult,
        which, as a collection is stored inside an AuditReport.

        * UserInterface/Controllers/AuditManager.js: Added.
        (WI.AuditManager):
        (WI.AuditManager.prototype.get testSuites):
        (WI.AuditManager.prototype.get reports):
        (WI.AuditManager.prototype.async.runAuditTestByRepresentedObject):
        (WI.AuditManager.prototype.reportForId):
        (WI.AuditManager.prototype.removeAllReports):
        (WI.AuditManager.prototype.async._runTestCase):
        * UserInterface/Main.html:
        * UserInterface/Models/AuditReport.js: Added.
        (WI.AuditReport):
        (WI.AuditReport.prototype.get representedTestCases):
        (WI.AuditReport.prototype.get representedTestSuite):
        (WI.AuditReport.prototype.get resultsData):
        (WI.AuditReport.prototype.get isWritable):
        (WI.AuditReport.prototype.get failedCount):
        (WI.AuditReport.prototype.addResult):
        (WI.AuditReport.prototype.close):
        * UserInterface/Models/AuditResult.js: Added.
        (WI.AuditResult):
        (WI.AuditResult.prototype.get testResult):
        (WI.AuditResult.prototype.get name):
        (WI.AuditResult.prototype.get logLevel):
        (WI.AuditResult.prototype.get failed):
        * UserInterface/Models/AuditTestCase.js: Added.
        (WI.AuditTestCase.prototype.get id):
        (WI.AuditTestCase.prototype.get name):
        (WI.AuditTestCase.prototype.get suite):
        (WI.AuditTestCase.prototype.get test):
        (WI.AuditTestCase.prototype.get setup):
        (WI.AuditTestCase.prototype.get tearDown):
        (WI.AuditTestCase.prototype.get errorDetails):
        (WI.AuditTestCase):
        * UserInterface/Models/AuditTestSuite.js: Added.
        (WI.AuditTestSuite):
        (WI.AuditTestSuite.testCaseDescriptors):
        (WI.AuditTestSuite.prototype.get id):
        (WI.AuditTestSuite.prototype.get name):
        (WI.AuditTestSuite.prototype.get testCases):
        (WI.AuditTestSuite.prototype._buildTestCasesFromDescriptors):
        * UserInterface/Test.html:

2018-07-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Console filter field buttons should be darker
        https://bugs.webkit.org/show_bug.cgi?id=187626
        <rdar://problem/42142744>

        Reviewed by Brian Burg.

        * UserInterface/Views/FindBanner.css:
        (@media (prefers-dark-interface)):
        (.find-banner > button.segmented):
        (.find-banner > button.segmented > .glyph):

2018-07-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: selected item background color is too light
        https://bugs.webkit.org/show_bug.cgi?id=187691
        <rdar://problem/42225308>

        Reviewed by Brian Burg.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):
        (.tree-outline.dom li.elements-drag-over .selection-area):
        (.tree-outline.dom:focus li.selected .selection-area):

2018-07-14  Kocsen Chung  <kocsen_chung@apple.com>

        Ensure WebKit stack is ad-hoc signed
        https://bugs.webkit.org/show_bug.cgi?id=187667

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r195723): Improve support for resources with '\r' and '\r\n' line endings
        https://bugs.webkit.org/show_bug.cgi?id=186453
        <rdar://problem/39689180>

        Reviewed by Joseph Pecoraro.

        Now that the frontend no longer uses offsets from the original source
        file to calculate positions within CodeMirror, it is possible to support
        resources with '\r' and '\r\n' line endings in the editor.

        * UserInterface/Views/CodeMirrorEditor.js:
        (WI.CodeMirrorEditor.create):
        (WI.CodeMirrorEditor):

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Basic blocks highlighting should use line/column locations instead of offsets
        https://bugs.webkit.org/show_bug.cgi?id=187613
        <rdar://problem/42131808>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/BasicBlockAnnotator.js:
        Basic blocks sent from the backend include offsets into the original
        file, rather than line/column locations. In order to translate to positions
        within CodeMirror, we need to calculate the original line and column
        for each block.

        (WI.BasicBlockAnnotator.prototype.insertAnnotations):
        (WI.BasicBlockAnnotator.prototype._calculateBasicBlockPositions.offsetToPosition):
        (WI.BasicBlockAnnotator.prototype._calculateBasicBlockPositions):
        (WI.BasicBlockAnnotator.prototype._annotateBasicBlockExecutionRanges.):
        (WI.BasicBlockAnnotator.prototype._annotateBasicBlockExecutionRanges):
        (WI.BasicBlockAnnotator.prototype._highlightTextForBasicBlock):

        * UserInterface/Models/SourceCodePosition.js:
        (WI.SourceCodePosition.prototype.offsetColumn):

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.getTextInRange):
        (WI.TextEditor.prototype.addStyleToTextRange):
        Better encapsulation for CodeMirror positions.

        * UserInterface/Workers/Formatter/FormatterUtilities.js:
        (get if):
        Update String.prototype.lineEndings to support additional line separators.

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Execution highlighting in the frontend should be line/column-based
        https://bugs.webkit.org/show_bug.cgi?id=187532
        <rdar://problem/42035580>

        Reviewed by Joseph Pecoraro.

        Source code offsets from Esprima should not be used to calculate ranges
        in CodeMirror for expression highlighting.

        This also fixes a long standing bug when adjusting for the starting
        position of an inline script. Previously the start offset from the script
        TextRange was used for this purpose, but the value is often incorrect (see
        https://bugs.webkit.org/show_bug.cgi?id=187532#c5). By using the starting
        line/column instead, we avoid the problem.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.prototype.containersOfPosition):
        (WI.ScriptSyntaxTree.prototype.containersOfOffset): Deleted.

        * UserInterface/Models/SourceCodePosition.js:
        (WI.SourceCodePosition.prototype.offsetColumn):

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.toInlineScriptPosition):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.fromInlineScriptPosition):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange):
        (WI.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange.convertRangeOffsetsToSourceCodeOffsets): Deleted.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._updateExecutionRangeHighlight):

2018-07-13  Matt Baker  <mattbaker@apple.com>

        Web Inspector: SourceCodePosition.js missing from Test.html
        https://bugs.webkit.org/show_bug.cgi?id=187644

        Reviewed by Brian Burg.

        * UserInterface/Test.html:

2018-07-12  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Type token positioning should use line/column locations from Esprima instead of offsets
        https://bugs.webkit.org/show_bug.cgi?id=187612
        <rdar://problem/42131910>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/TypeTokenAnnotator.js:
        (WI.TypeTokenAnnotator.prototype.insertAnnotations):
        (WI.TypeTokenAnnotator.prototype._insertTypeToken):
        (WI.TypeTokenAnnotator.prototype._insertToken):
        Use line/column locations, instead of offsets, from the AST when calculating
        token positions for CodeMirror. Once in CodeMirror's string space, we
        can safely convert to/from offsets.

        * UserInterface/Models/ScriptSyntaxTree.js:
        Retrieve line/column locations for AST nodes, in addition to offsets.
        Offsets into the original file are still needed for getting type information
        from the profiler in the backend.

        (WI.ScriptSyntaxTree):
        (WI.ScriptSyntaxTree.prototype.filterByRange):
        Filter by positions, which can be safely used from CodeMirror, instead of offsets.

        (WI.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
        (WI.ScriptSyntaxTree.prototype.filterByRange.filterForNodesInRange): Deleted.

        * UserInterface/Models/SourceCodePosition.js:
        Add convenience methods for comparing line/column positions, and for
        converting to the format expected by CodeMirror. SourceCodePosition could
        be made to interoperate with CodeMirror by exposing properties `line`
        and `ch`, but making the conversion explicit improves code readability.

        (WI.SourceCodePosition.prototype.equals):
        (WI.SourceCodePosition.prototype.isBefore):
        (WI.SourceCodePosition.prototype.isAfter):
        (WI.SourceCodePosition.prototype.isWithin):
        (WI.SourceCodePosition.prototype.toCodeMirror):
        (WI.SourceCodePosition):

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.visibleRangePositions):
        (WI.TextEditor.prototype.originalPositionToCurrentPosition):
        (WI.TextEditor.prototype.currentOffsetToCurrentPosition):
        (WI.TextEditor.prototype.currentPositionToCurrentOffset):
        (WI.TextEditor.prototype.setInlineWidget):

2018-07-10  Fujii Hironori  <Hironori.Fujii@sony.com>

        REGRESSION(r229932) Use of uninitialized value in subroutine entry at copy-user-interface-resources.pl
        https://bugs.webkit.org/show_bug.cgi?id=187511

        Reviewed by Brian Burg.

        copy-user-interface-resources.pl output warning messages unless
        BUILT_PRODUCTS_DIR and BUILT_PRODUCTS_DIR env vars are defined.

        * Scripts/copy-user-interface-resources.pl:
        (webInspectorUIAdditionsDir): Added. Return UNDEF if
        BUILT_PRODUCTS_DIR and SDKROOT env vars aren't defined.
        (combineOrStripResourcesForWebKitAdditions): Check
        $webInspectorUIAdditionsDir is defined.

2018-07-10  Ross Kirsling  <rkirsling@gmail.com>

        Web Inspector: Layers inspector should allow control-dragging to pan the 3D render
        https://bugs.webkit.org/show_bug.cgi?id=185109

        Reviewed by Matt Baker.

        Addressed in the three.js repo itself (https://github.com/mrdoob/three.js/pull/13972),
        so this patch simply updates three.js and its OrbitControls module.

        * UserInterface/External/three.js/LICENSE:
        * UserInterface/External/three.js/three.js:
        Update to r94.

        * UserInterface/External/three.js/OrbitControls.js:
        Update to latest.

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView.prototype.initialLayout):
        (WI.Layers3DContentView.prototype._restrictPan):
        Adapt to recent changes in three.js.

2018-07-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove unused NavigationSidebarPanel.treeElementAddedOrChanged
        https://bugs.webkit.org/show_bug.cgi?id=187508

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WI.NavigationSidebarPanel.prototype.treeElementAddedOrChanged): Deleted.

2018-07-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r217505): Debugger content view doesn't update when left sidebar is collapsed
        https://bugs.webkit.org/show_bug.cgi?id=187482
        <rdar://problem/41989190>

        Reviewed by Brian Burg.

        Subclasses of NavigationSidebarPanel must process tree selection changes
        even when collapsed. Sidebar panels perform critical controller tasks
        for their tabs, such as updating the view when pausing in the debugger,
        and when the hierarchical path component selection changes.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WI.ResourceSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SearchSidebarPanel.js:
        (WI.SearchSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/SourcesSidebarPanel.js:
        (WI.SourcesSidebarPanel.prototype._treeSelectionDidChange):
        * UserInterface/Views/StorageSidebarPanel.js:
        (WI.StorageSidebarPanel._treeSelectionDidChange):

2018-07-09  Brian Burg  <bburg@apple.com>

        REGRESSION: Web Inspector no longer pauses in internal injected scripts like WDFindNodes.js
        https://bugs.webkit.org/show_bug.cgi?id=187350
        <rdar://problem/41728249>

        Reviewed by Matt Baker.

        * UserInterface/Base/Setting.js: Add a new setting to allow pausing in internal scripts.
        * UserInterface/Controllers/DebuggerManager.js: Listen to the setting change and toggle
        the backend setting accordingly. The default is to not break into internal scripts.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createDebugSettingsView):
        Expose the new setting in the Debug settings panel.

2018-07-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: resource search field has white text on white background
        https://bugs.webkit.org/show_bug.cgi?id=187423

        Reviewed by Timothy Hatcher.

        Match the colors of sidebar filter fields.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.find-banner > input[type="search"]):

2018-07-04  Tim Horton  <timothy_horton@apple.com>

        Introduce PLATFORM(IOSMAC)
        https://bugs.webkit.org/show_bug.cgi?id=187315

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-06-28  Matt Baker  <mattbaker@apple.com>

        Web Inspector: REGRESSION (r213000): copy from Search results content view broken
        https://bugs.webkit.org/show_bug.cgi?id=187020
        <rdar://problem/40928766>

        Reviewed by Timothy Hatcher.

        Since WI._copy listens for a copy event from the document, it is called
        after CodeMirror handles the event and sets clipboard data. If WI._copy
        finds a custom copy handler to call, that handler can determine whether
        to overwrite the current clipboard data, or leave it alone.

        SearchTabContentView's handleCopyEvent method should return early if the
        content tree outline doesn't have the focus. This prevents the selection
        in the TextEditor from being overwritten, without any special knowledge of
        the content browser's current view.

        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView.prototype.handleCopyEvent):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Box Model section should have dark background
        https://bugs.webkit.org/show_bug.cgi?id=186976

        Reviewed by Brian Burg.

        Replace all instances of black text on white background with the default text and background colors.

        * UserInterface/Views/BoxModelDetailsSectionRow.css:
        (@media (prefers-dark-interface)):
        (.details-section .row.box-model):
        (.details-section .row.box-model .label):
        (.details-section .row.box-model :matches(.position, .margin, .border, .padding, .content)):
        (.details-section .row.box-model:not(.hovered) :matches(.margin, .border, .padding, .content),):
        (.details-section .row.box-model .margin):
        (.details-section .row.box-model .border):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: color outline is too dark
        https://bugs.webkit.org/show_bug.cgi?id=186975

        Reviewed by Brian Burg.

        Make the outline lighter than the background.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.hover-menu > svg > :matches(path, rect)):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Media query names are unreadable
        https://bugs.webkit.org/show_bug.cgi?id=186974

        Reviewed by Brian Burg.

        Change media query names from dark blue to light blue.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.CodeMirror .CodeMirror-lines .CodeMirror-matchingbracket):
        (.cm-s-default .cm-attribute):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Network headers colors are too dim
        https://bugs.webkit.org/show_bug.cgi?id=186985

        Reviewed by Brian Burg.

        Increasing the luminance of network header colors by increasing lightness and brightness.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (:root):

2018-06-25  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Dark Mode: Font guideline colors are too bright
        https://bugs.webkit.org/show_bug.cgi?id=186986

        Reviewed by Brian Burg.

        Make the guidelines less distractive from the font glyphs.

        * UserInterface/Views/DarkMode.css:
        (@media (prefers-dark-interface)):
        (.content-view.resource.font .preview > .line):
        (.content-view.resource.font .metric.top):
        (.content-view.resource.font .metric.baseline):
        (.content-view.resource.font .metric.middle):
        (.content-view.resource.font .metric.xheight):
        (.content-view.resource.font .metric.bottom):

2018-06-20  Daniel Bates  <dabates@apple.com>

        Web Inspector: All non-Same-Site cookies are marked as Same-Site Strict in Storage tab
        https://bugs.webkit.org/show_bug.cgi?id=186867
        <rdar://problem/41175424>

        Reviewed by Matt Baker.

        Fixes an issue where cookies that do not have a Same-Site policy would be marked up as Same-
        Site Strict in Web Inspector's cookie storage content view (under the storage tab).

        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._rebuildTable): Only compute the display name if
        we cookie.sameSite is non-null and is not WI.Cookie.SameSiteType.None. Moreover, remove
        an extraneous call to WI.Cookie.parseSameSiteAttributeValue() as cookie.SameSite represents
        the already parsed value (one of the WI.Cookie.SameSiteType-scoped values).

2018-06-18  Brian Burg  <bburg@apple.com>

        Web Inspector: TypeError: Array.prototype.sort passed bad value in NetworkTableContentView _updateSortAndFilteredEntries
        https://bugs.webkit.org/show_bug.cgi?id=186787
        <rdar://problem/41175680>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._updateSortAndFilteredEntries):

2018-06-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: open source Dark Mode
        https://bugs.webkit.org/show_bug.cgi?id=186606

        Reviewed by Timothy Hatcher.

        The dark mode is currently only available on macOS Mojave via prefers-dark-interface CSS media query.

        * UserInterface/Main.html:
        * UserInterface/Views/DarkMode.css: Added.
        (@media (prefers-dark-interface)):
        (:root):
        (body.window-inactive):
        (body.window-inactive *):
        (#main):
        (.tree-outline.dom li.selected .selection-area):
        (.tab-bar > .item > .icon):
        (.go-to-arrow):
        (.resource-link,):
        (.expand-list-button):
        (:matches(img, canvas).show-grid):
        (.formatted-object,):
        (.formatted-null,):
        (.editing):
        (.editing, .editing *):
        (.text-editor > .CodeMirror .execution-line):
        (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext),):
        (.details-section > .header):
        (.details-section > .header > label):
        (.details-section .details-section,):
        (.details-section .details-section:not(.collapsed) > .header):
        (.details-section > .content > .group > .row.simple > .label):
        (.details-section > .content > .group:nth-child(even)):
        (.details-section > .content > .group > .row:matches(.empty, .text)):
        (.data-grid th):
        (.data-grid td .subtitle):
        (.data-grid:matches(:focus, .force-focus) tr.selected td .subtitle):
        (body:not(.window-inactive, .window-docked-inactive) .data-grid:matches(:focus, .force-focus) tr.editable.selected .cell-content > input):
        (.data-grid tr.editable .cell-content > input):
        (.data-grid td.spanning):
        (.object-tree,):
        (.object-preview .name):
        (.object-preview > .size):
        (.tab-bar):
        (.tab-bar > .item):
        (.tab-bar > .item > .title):
        (.tab-bar > .item:not(.disabled).selected):
        (.tab-bar:not(.animating) > .item:not(.selected):hover):
        (.tab-bar > .item > .close):
        (body.window-inactive .tab-bar):
        (body.window-inactive .tab-bar > .item):
        (body.window-inactive .tab-bar > .item.selected):
        (body.window-inactive .tab-bar > .item > .title):
        (body .toolbar):
        (body.window-inactive .toolbar):
        (body.latest-mac .toolbar .item.button,):
        (body.latest-mac .toolbar .search-bar > input[type="search"]):
        (body.latest-mac .toolbar .search-bar > input[type="search"]:focus):
        (body.latest-mac .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::placeholder):
        (body.latest-mac.window-inactive .toolbar .search-bar > input[type="search"]::-webkit-search-results-button):
        (body.latest-mac .toolbar .dashboard-container):
        (body.latest-mac .toolbar .item.button:active):
        (body.latest-mac.window-inactive .toolbar .item.button,):
        (.navigation-bar .item.divider):
        (.toolbar .item.button):
        (.toolbar .item.button:not(.disabled):active):
        (.toolbar .item.button:not(.disabled):matches(:focus, .activate.activated)):
        (.toolbar .item.button:not(.disabled):active:matches(:focus, .activate.activated)):
        (.toolbar .dashboard.default > .item > div):
        (.toolbar .dashboard.default > .item.enabled > div):
        (.toolbar .dashboard.default > .item.enabled:hover):
        (.toolbar .dashboard.default > .item.enabled:hover > div):
        (.toolbar .dashboard.default > .resourcesCount > img,):
        (body.latest-mac .toolbar .dashboard .item.button):
        (.dashboard-container .advance-arrow):
        (.toolbar .dashboard.debugger):
        (.dashboard.debugger .navigation-bar .item.button > .glyph):
        (.dashboard.debugger > .location .function-name):
        (.dashboard.debugger > .location .go-to-link):
        (.dashboard.debugger > .divider):
        (.popover .edit-breakpoint-popover-content > label.toggle):
        (.popover .edit-breakpoint-popover-content > table > tr > th):
        (.breakpoint-action-block-body):
        (.breakpoint-action-block-body > .description):
        (.breakpoint-action-append-button,):
        (.popover .xhr-breakpoint-content > .editor-wrapper > .editor):
        (.navigation-bar .item.button):
        (.spreadsheet-style-declaration-editor .property:not(.disabled) .value):
        (.spreadsheet-css-declaration):
        (.spreadsheet-css-declaration .selector:focus,):
        (.spreadsheet-css-declaration.locked .origin::after):
        (.spreadsheet-css-declaration .origin .go-to-link,):
        (.spreadsheet-style-declaration-editor :matches(.name, .value).editing):
        (.spreadsheet-style-declaration-editor .property.has-warning):
        (.spreadsheet-style-declaration-editor .property.has-warning .warning):
        (.spreadsheet-css-declaration .media-label):
        (.quick-console):
        (.syntax-highlighted,):
        (.cm-s-default,):
        (.CodeMirror .jump-to-symbol-highlight,):
        (.console-prompt):
        (.completion-suggestions):
        (.completion-suggestions-container > .item):
        (.CodeMirror-cursor):
        (.CodeMirror .CodeMirror-gutters):
        (.cm-s-default .cm-link):
        (.cm-s-default .cm-m-xml.cm-attribute,):
        (.cm-s-default .cm-meta):
        (.cm-s-default .cm-variable-3):
        (.cm-s-default .cm-builtin):
        (.tree-outline .item .subtitle):
        (.object-tree-property .getter,):
        (.item.object-tree-property.prototype-property):
        (.object-tree-property.prototype-property:hover,):
        (.object-tree-property .value.error):
        (.tree-outline.dom):
        (.tree-outline.dom li.selected + ol.children.expanded):
        (.tree-outline.dom .shadow):
        (.tree-outline.dom li.parent.shadow + ol.children.expanded,):
        (.showing-find-banner .tree-outline.dom .search-highlight):
        (.sidebar > .panel.dom-node-details .details-section.dom-node-event-listeners > .header > .filter:hover):
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes > .group > label):
        (.spreadsheet-css-declaration.locked):
        (.spreadsheet-css-declaration .selector.style-attribute):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (.inline-swatch):
        (.spreadsheet-style-panel .section-header):
        (.spreadsheet-style-panel .section-header .node-link:hover):
        (.computed-style-properties.details-section):
        (.details-section.style-box-model:not(.collapsed) > :matches(.header, .content)):
        (.table,):
        (.table > .header > .sortable:active):
        (.table > .header > :matches(.sort-ascending, .sort-descending)):
        (.table > .header > :matches(.sort-ascending, .sort-descending)::after):
        (.scope-bar > li):
        (.timeline-overview > .navigation-bar.timelines):
        (.timeline-overview:not(.frames) > .graphs-container > .timeline-overview-graph:nth-child(even)):
        (.timeline-overview.edit-instruments > .tree-outline.timelines .item:not(:first-child),):
        (.time-icon .icon):
        (.data-grid th:matches(.sort-ascending, .sort-descending)):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple):
        (.content-view.timeline-recording > .content-browser > .navigation-bar > .item.scope-bar.default-item-selected > .multiple .arrows):
        (.content-view.settings .navigation-bar):
        (.content-view.settings .navigation-bar .item.radio.button.text-only.selected):
        (.new-tab.tab.content-view):
        (.filter-bar > input[type="search"]):
        (.filter-bar > input[type="search"]::placeholder):
        (.filter-bar > input[type="search"]:focus):
        (.content-view.resource.image):
        (.console-messages):
        (.console-item):
        (.console-messages:focus .console-item.selected):
        (.console-messages:focus .console-item.selected + .console-item):
        (.console-session:first-of-type .console-session-header):
        (.console-session:not(:first-of-type) .console-session-header):
        (.console-messages a):
        (.console-messages a:hover):
        (.console-messages:focus .console-item.selected::after):
        (.console-error-level):
        (.console-error-level:not(.filtered-out, .filtered-out-by-search), .console-error-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.console-warning-level):
        (.console-warning-level:not(.filtered-out, .filtered-out-by-search), .console-warning-level:not(.filtered-out, .filtered-out-by-search) + .console-item):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted):
        (.search-in-progress .console-item:not(.filtered-out-by-search) .highlighted.selected):
        (.source-code.text-editor > .CodeMirror .error):
        (.source-code.text-editor > .CodeMirror .warning):
        (.source-code.text-editor > .CodeMirror .issue-widget):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.warning > .arrow):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error):
        (.source-code.text-editor > .CodeMirror .issue-widget.inline.error > .arrow):
        (.console-message .syntax-highlighted):
        (.console-warning-level .console-message-text):
        (.console-error-level .console-message-text):
        (.console-user-command > .console-message-text):
        (.console-message .repeat-count):
        (.call-frame .subtitle,):
        (.call-frame:hover .subtitle .source-link,):
        (.call-frame .separator):
        (.quick-console.showing-log):
        (.find-banner.console-find-banner > input[type=search]:not(:placeholder-shown)):
        (.network-resource-detail):
        (.network-resource-detail .item.close > .glyph):
        (.network .network-resource-detail .navigation-bar .item.radio.button.text-only.selected):
        (.resource-headers .value):
        (.network-table .cell.domain > .lock):
        (.resource-sizes > .content .label):
        (.popover.waterfall-popover):
        (.resource-timing-breakdown > table > tr.header:not(.total-row) > td):
        (.resource-timing-breakdown > table > tr > td.label,):
        (.resource-timing-breakdown > table hr):
        (.sidebar > .panel.details.css-style > .content ~ .options-container > .new-rule):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.web-socket.content-view .data-grid table.data tr.revealed):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.outgoing):
        (.web-socket.content-view .data-grid.variable-height-rows table.data tr.non-text-frame):
        (.item.action:not(.initial-state)::before):
        (.tree-outline .item.action.visual:not(.selected, .invalid)):
        (.item.action:not(.initial-state) > .icon):
        (.tree-outline:not(.hide-disclosure-buttons) .item.action:not(.initial-state, .parent) > .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon,):
        (.content-view.canvas > .preview > img,):
        (.content-view.canvas-overview):
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .title):
        (.content-view.canvas-overview .content-view.canvas > header > .titles > .subtitle,):
        (.content-view.canvas-overview .content-view.canvas > footer > .recordings::before):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header > .titles > .subtitle):
        (.content-view.canvas:not(.tab)):
        (.content-view:not(.tab).recording):
        (.content-view:not(.tab).recording > header > .slider-container):
        (.content-view:not(.tab).recording > header > .slider-container > input[type=range]):
        (.sidebar > .panel.details.recording-state > .content > .data-grid tr.modified):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.indeterminate-progress-spinner):
        (.content-view.shader-program > .text-editor.shader):
        (.content-view.shader-program > .text-editor.shader > .type-title):
        (.item.shader-program .status > img):
        (.open-resource-dialog):
        (.open-resource-dialog > .field > input):
        (.open-resource-dialog > .field > input::placeholder):
        (.open-resource-dialog > .tree-outline .item.selected):
        (.open-resource-dialog > .field::before):

2018-06-09  Dan Bernstein  <mitz@apple.com>

        [Xcode] Clean up and modernize some build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=186463

        Reviewed by Sam Weinig.

        * Configurations/Base.xcconfig: Removed definition for macOS 10.11.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/Version.xcconfig: Ditto.

2018-06-05  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Tab picker is briefly visible when TabBar initially shown
        https://bugs.webkit.org/show_bug.cgi?id=186317

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TabBar.js:
        (WI.TabBar): Picker should be initially hidden.

2018-06-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Text in "Add New Class" in auto-capitalizes
        https://bugs.webkit.org/show_bug.cgi?id=186311

        Reviewed by Matt Baker.

        Disable spellcheck to prevent auto-capitalization.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):

2018-06-04  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Cannot copy a link address in Elements tab
        https://bugs.webkit.org/show_bug.cgi?id=186281
        <rdar://problem/39193355>

        Reviewed by Brian Burg.

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):

2018-05-30  Daniel Bates  <dabates@apple.com>

        Web Inspector: Annotate Same-Site cookies
        https://bugs.webkit.org/show_bug.cgi?id=184897
        <rdar://problem/35178209>

        Reviewed by Brian Burg.

        Add a new column for the value of the Same-Site cookie attribute to the resource cookie content
        view (shown for a resource under the Network tab) and cookie storage content view (shown under
        the Storage tab).

        The SameSite column in the resource cookie content view reflects the parsing of the Same-Site
        attribute from the HTTP response by Web Inspector. This parsing is materially consistent with
        the parsing of the SameSite atttribute in CFNetwork. The Same-Site column in the cookie storage
        content view reflects the Same-Site cookie policy associated with the cookies provided by the
        network stack, if supported. This column will be blank on systems whose network stack does not
        support Same-Site cookies (e.g libsoup).

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/HARBuilder.js:
        (WI.HARBuilder.cookies):
        * UserInterface/Models/Cookie.js:
        (WI.Cookie):
        (WI.Cookie.displayNameForSameSiteType):
        (WI.Cookie.parseSameSiteAttributeValue):
        (WI.Cookie.parseSetCookieResponseHeader):
        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._rebuildTable):
        (WI.CookieStorageContentView.prototype._sortDataGrid):
        * UserInterface/Views/ResourceCookiesContentView.js:
        (WI.ResourceCookiesContentView.prototype.tablePopulateCell):
        (WI.ResourceCookiesContentView.prototype._generateSortComparator):
        (WI.ResourceCookiesContentView.prototype._refreshResponseCookiesSection):

2018-05-25  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Popover dismissed while attempting to move cursor inside
        https://bugs.webkit.org/show_bug.cgi?id=185741
        <rdar://problem/40340938>

        Reviewed by Joseph Pecoraro.

        Hovering a token within the bounds of the current popover should not
        show a new popover. This prevents the popover from being dismissed when
        the cursor passes over a token under the transparent portion of the
        popover frame.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype._showPopover):

2018-05-22  Ryan Haddad  <ryanhaddad@apple.com>

        Unreviewed, rolling out r232052.

        Breaks internal builds.

        Reverted changeset:

        "Use more C++17"
        https://bugs.webkit.org/show_bug.cgi?id=185176
        https://trac.webkit.org/changeset/232052

2018-05-21  Yusuke Suzuki  <utatane.tea@gmail.com>

        Use more C++17
        https://bugs.webkit.org/show_bug.cgi?id=185176

        Reviewed by JF Bastien.

        * Configurations/Base.xcconfig:

2018-05-18  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas: put `hasVisualEffect` behind an experimental setting
        https://bugs.webkit.org/show_bug.cgi?id=185758

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Setting.js:

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.process):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement.prototype.onattach):

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-05-16  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: create a navigation item for toggling the overlay rulers/guides
        https://bugs.webkit.org/show_bug.cgi?id=185644

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype.get navigationItems):
        (WI.DOMTreeContentView.prototype.closed):
        (WI.DOMTreeContentView.prototype._showRulersChanged): Added.
        (WI.DOMTreeContentView.prototype._toggleShowRulers): Added.

2018-05-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Canvas: Remove unused --value-visual-highlight CSS variable
        https://bugs.webkit.org/show_bug.cgi?id=185636

        Reviewed by Matt Baker.

        * UserInterface/Views/Variables.css:
        (:root):

2018-05-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: don't automatically select a recording when viewing a canvas
        https://bugs.webkit.org/show_bug.cgi?id=182950

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Add a "dummy" ScopeBarItem to the recording ScopeBar that is selected whenever a TreeElement
        that doesn't correspond to a Recording is selected. This way, the Recording ScopeBar will
        become deselected, and the list of actions will disappear. Clicking on the Recording ScopeBar
        will show the previously selected Recording.

2018-05-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Console drawer resizing is broken when console prompt has >1 line of code
        https://bugs.webkit.org/show_bug.cgi?id=185369
        <rdar://problem/40013202>

        Reviewed by Devin Rousso.

        Mouse offset calculation should account for the height of the quick console.
        The only reason resizing worked with the single-line quick console is that
        the offset calculation included the resizer height, which is very close
        to that of the single-line quick console (27px and 30px respectively).

        * UserInterface/Views/ConsoleDrawer.js:

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: simplify the WI.Collection interface
        https://bugs.webkit.org/show_bug.cgi?id=185187

        Reviewed by Brian Burg.

        * UserInterface/Models/Collection.js:
        (WI.Collection.prototype.get size): Added.
        (WI.Collection.prototype.has): Added.
        (WI.Collection.prototype.toJSON):
        (WI.Collection.prototype.[Symbol.iterator]): Added.
        (WI.Collection.prototype.get items): Deleted.
        (WI.Collection.prototype.toArray): Deleted.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype._removeCanvas):
        * UserInterface/Controllers/DOMDebuggerManager.js:
        (WebInspector.DOMDebuggerManager.prototype.get domBreakpoints):
        * UserInterface/Models/Frame.js:
        (WI.Frame.prototype.removeAllChildFrames):
        (WI.Frame.prototype.resourceForURL):
        (WI.Frame.prototype.removeAllResources):
        * UserInterface/Models/Script.js:
        (WI.Script):
        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype.initialLayout):
        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView.prototype._updateNavigationItems):
        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.prototype.onpopulate):
        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.initialLayout):
        (WI.CollectionContentView.prototype.attached):
        * UserInterface/Views/CookieStorageContentView.js:
        (WI.CookieStorageContentView.prototype._filterCookies):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype._addResourcesRecursivelyForFrame):
        * UserInterface/Views/FolderizedTreeElement.js:
        (WI.FolderizedTreeElement.prototype.updateParentStatus):
        (WI.FolderizedTreeElement.prototype._shouldGroupIntoFolders):
        * UserInterface/Views/FrameTreeElement.js:
        (WI.FrameTreeElement.prototype.onpopulate):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.get contentTreeOutlines):
        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._populateWithInitialResourcesIfNeeded):
        * UserInterface/Views/OpenResourceDialog.js:
        (WI.OpenResourceDialog.prototype._addResourcesForFrame):
        (WI.OpenResourceDialog.prototype._addResourcesForTarget):
        * UserInterface/Views/TreeOutlineGroup.js:
        (WI.TreeOutlineGroup.prototype.get selectedTreeElement):
        (WI.TreeOutlineGroup.prototype._removeConflictingTreeSelections):
        * UserInterface/Views/WorkerTreeElement.js:
        (WI.WorkerTreeElement.prototype.onpopulate):

2018-05-04  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Newly added unsupported properties sometimes don't have warnings
        https://bugs.webkit.org/show_bug.cgi?id=183097
        <rdar://problem/37843816>

        Reviewed by Matt Baker.

        Update status of properties warnings every time focus moves.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updatePropertiesStatus):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidBlur):

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Styles Redesign: ensure that tabbing through the last section wraps back to the first
        https://bugs.webkit.org/show_bug.cgi?id=181973

        Reviewed by Matt Baker.

        Unified delegate functions to start editing previous/next rules into a single function for
        simplicity.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.startEditingRuleSelector):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetSelectorFieldDidChange):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.spreadsheetCSSStyleDeclarationEditorStartEditingAdjacentRule):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.cssStyleDeclarationEditorStartEditingAdjacentRule): Deleted.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.focusFirstSection):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.focusLastSection):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.spreadsheetCSSStyleDeclarationSectionStartEditingAdjacentRule):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.cssStyleDeclarationSectionStartEditingNextRule): Deleted.
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.cssStyleDeclarationSectionStartEditingPreviousRule): Deleted.

        * UserInterface/Views/GeneralStyleDetailsSidebarPanel.js:
        (WI.GeneralStyleDetailsSidebarPanel.prototype.styleDetailsPanelFocusLastPseudoClassCheckbox):
        (WI.GeneralStyleDetailsSidebarPanel.prototype.styleDetailsPanelFocusFilterBar):
        (WI.GeneralStyleDetailsSidebarPanel.prototype.initialLayout):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._handleForcedPseudoClassCheckboxKeydown):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._forcedPseudoClassCheckboxChanged):
        (WI.GeneralStyleDetailsSidebarPanel.prototype._handleFilterBarInputFieldKeyDown):

        Drive-by fix: provide tabbing support for the Computed styles panel.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:
        (WI.CSSStyleDeclarationTextEditor.prototype._handleShiftTabKey.switchRule):
        (WI.CSSStyleDeclarationTextEditor.prototype._handleTabKey.switchRule):

        * UserInterface/Views/ComputedStyleDetailsPanel.js:
        (WI.ComputedStyleDetailsPanel.prototype.focusFirstSection):
        (WI.ComputedStyleDetailsPanel.prototype.focusLastSection):
        (WI.ComputedStyleDetailsPanel.prototype.cssStyleDeclarationTextEditorStartEditingAdjacentRule):

2018-05-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: Determine isFunction by looking at the prototype
        https://bugs.webkit.org/show_bug.cgi?id=184990

        Reviewed by Brian Burg.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.isFunctionForType):
        (WI.RecordingAction._prototypeForType):
        (WI.RecordingAction.prototype.async.swizzle):

2018-05-01  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: determine hasVisibleEffect for all actions immediately after recording is added
        https://bugs.webkit.org/show_bug.cgi?id=182995

        Reviewed by Matt Baker.

        Previously, we'd swizzle the entirety of the `WI.Recording` in one, which would usually
        freeze the UI, especially for larger recordings. This patch uses `WI.YieldableTask` to split
        the work and allow the rest of the UI to still be usable while `WI.Recording` are processing.
        Additionally, since we no longer have to worry about hangs, we can do more work upfront,
        such as calculating `hasVisibleEffect` and the current state of 2D canvases.

        These changes require that all uses of `WI.Recording` call `process()` before attempting to
        use any `frames`/`actions`/`initialState`, as they will have their original payload values
        and will have not been swizzled or applied.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Models/Recording.js:
        (WI.Recording):
        (WI.Recording.prototype.process):
        (WI.Recording.prototype.createContext): Added.
        (WI.Recording.prototype.async yieldableTaskWillProcessItem): Added.
        (WI.Recording.prototype.async yieldableTaskDidFinish): Added.

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction):
        (WI.RecordingAction.prototype.process): Added.
        (WI.RecordingAction.prototype.async swizzle): Added.
        (WI.RecordingAction.prototype.apply):
        (WI.RecordingAction.prototype.toJSON):
        (WI.RecordingAction.prototype.set state): Deleted.
        (WI.RecordingAction.prototype.swizzle): Deleted.
        (WI.RecordingAction.prototype.apply.getContent): Deleted.
        (WI.RecordingAction.prototype.async _swizzle): Deleted.
        * UserInterface/Models/RecordingInitialStateAction.js:
        (WI.RecordingInitialStateAction):

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .indeterminate-progress-spinner):

        * UserInterface/Views/RecordingActionTreeElement.js:
        (WI.RecordingActionTreeElement):
        (WI.RecordingActionTreeElement.prototype.onattach):
        (WI.RecordingActionTreeElement.prototype._handleHasVisibleEffectChanged): Deleted.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.initialLayout):
        (WI.RecordingContentView.prototype._generateContentCanvas2D): Added.
        (WI.RecordingContentView.prototype._generateContentCanvasWebGL): Added.
        (WI.RecordingContentView.prototype._updateCanvasPath):
        (WI.RecordingContentView.prototype._updateProcessProgress): Added.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionSwizzle): Added.
        (WI.RecordingContentView.prototype._handleRecordingProcessedActionApply): Added.
        (WI.RecordingContentView.supportsCanvasPathDebugging): Deleted.
        (WI.RecordingContentView.prototype.async _generateContentCanvas2D): Deleted.
        (WI.RecordingContentView.prototype.async _generateContentCanvasWebGL): Deleted.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > .preview-container):

        * UserInterface/Base/ImageUtilities.js:
        (WI.ImageUtilities.supportsCanvasPathDebugging):

2018-04-26  Jer Noble  <jer.noble@apple.com>

        Unreviewed build fix; fix WebInspectorUI copy resources step after r231063.

        * Configurations/Base.xcconfig:

2018-04-26  Jer Noble  <jer.noble@apple.com>

        WK_COCOA_TOUCH all the things.
        https://bugs.webkit.org/show_bug.cgi?id=185006

        Reviewed by Tim Horton.

        * Configurations/WebInspectorUIFramework.xcconfig:

2018-04-21  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION(r214076): Web Inspector: Timelines load and DOMContentLoaded markers aren't visible
        https://bugs.webkit.org/show_bug.cgi?id=184858

        Reviewed by Brian Burg.

        r214076 changed the color of all markers to light gray.

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .markers > .marker):
        (body[dir=ltr] .timeline-ruler > .markers > .marker):
        (body[dir=rtl] .timeline-ruler > .markers > .marker):
        (.timeline-ruler > .markers > .marker.current-time):
        (.timeline-ruler > .markers > .marker.load-event):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        (.timeline-ruler > .markers > .marker.timestamp):
        (body[dir=ltr] .timeline-ruler > .markers > .marker.current-time): Deleted.
        (body[dir=rtl] .timeline-ruler > .markers > .marker.current-time): Deleted.

2018-04-19  Chris Dumez  <cdumez@apple.com>

        Rename JSDOMWindowProxy to JSWindowProxy
        https://bugs.webkit.org/show_bug.cgi?id=184797

        Reviewed by Sam Weinig.

        Rename JSDOMWindowProxy to JSWindowProxy for consistency with WindowProxy.

        * UserInterface/Workers/HeapSnapshot/HeapSnapshot.js:
        (HeapSnapshot.prototype._isNodeGlobalObject):

2018-04-19  David Kilzer  <ddkilzer@apple.com>

        Enable Objective-C weak references
        <https://webkit.org/b/184789>
        <rdar://problem/39571716>

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        (CLANG_ENABLE_OBJC_WEAK): Enable.

2018-04-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Can't select and copy text from Network tab popover
        https://bugs.webkit.org/show_bug.cgi?id=184606

        Reviewed by Matt Baker.

        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.waterfall-popover .resource-timing-breakdown):

2018-04-12  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Refactoring: move popover styles from JS to CSS
        https://bugs.webkit.org/show_bug.cgi?id=184558

        Reviewed by Brian Burg.

        Introduce several CSS variables to customize popover appearance in CSS
        and not JavaScript.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/Popover.css:
        (.popover):
        * UserInterface/Views/Popover.js:
        (WI.Popover):
        (WI.Popover.prototype._drawBackground):
        Replace `var` with `let`.

        (WI.Popover.prototype.get backgroundStyle): Deleted.
        (WI.Popover.prototype.set backgroundStyle): Deleted.
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.popover.waterfall-popover):
        (.waterfall-popover-content .resource-timing-breakdown):
        (.waterfall-popover .resource-timing-breakdown): Deleted.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype._waterfallPopoverContentForResource):
        (WI.NetworkTableContentView.prototype._handleMousedownWaterfall):
        * UserInterface/Views/Popover.css:
        (.popover):
        * UserInterface/Views/Popover.js:
        (WI.Popover):
        (WI.Popover.prototype._drawBackground):
        * UserInterface/Views/ResourceTimingBreakdownView.css:
        (.popover.waterfall-popover):
        (.waterfall-popover-content .resource-timing-breakdown):

2018-04-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Errors glyph doesn't fully change to blue when active
        https://bugs.webkit.org/show_bug.cgi?id=184389

        Reviewed by Joseph Pecoraro.

        The dot of the exclamation mark was always black.

        * UserInterface/Images/Errors.svg:

2018-04-03  Aaron Chu  <aaron_chu@apple.com>

        AX: Add Experimental setting for Accessibility Audit
        https://bugs.webkit.org/show_bug.cgi?id=183646
        <rdar://problem/38478583>

        Reviewed by Brian Burg.

        Added experimental feature flag for Accessibility Audit work.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):

2018-04-01  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Remove dead TabBrowser/TabContentView code
        https://bugs.webkit.org/show_bug.cgi?id=184104

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI._tryToRestorePendingTabs):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView.prototype.shown):
        (WI.NewTabContentView.prototype.hidden):
        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.addTabForContentView):
        (WI.TabBrowser.prototype.showTabForContentView):
        (WI.TabBrowser._tabBarItemRemoved):
        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.prototype.get parentTabBrowser): Deleted.
        (WI.TabContentView.prototype.set parentTabBrowser): Deleted.

2018-03-30  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: tint all pixels drawn by shader program when hovering ShaderProgramTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=175223

        Reviewed by Matt Baker.

        * UserInterface/Models/ShaderProgram.js:
        (WI.ShaderProgram):
        (WI.ShaderProgram.prototype.showHighlight):
        (WI.ShaderProgram.prototype.hideHighlight):

        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.onattach):
        (WI.ShaderProgramTreeElement.prototype._handleMouseOver):
        (WI.ShaderProgramTreeElement.prototype._handleMouseOut):
        Whenever a ShaderProgramTreeElement is hovered, highlight the corresponding shader program
        by tinting the pixels it draws via a blend.

2018-03-27  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Modernize some utility functions
        https://bugs.webkit.org/show_bug.cgi?id=184047

        Reviewed by Matt Baker.

        * UserInterface/Base/Utilities.js:
        (Node.prototype.enclosingNodeOrSelfWithClass): Use parentElement instead of parentNode, so we don't need to check for document.
        (Node.prototype.enclosingNodeOrSelfWithNodeNameInArray): Ditto. Also just toUpperCase input, since nodeName is already upper case.
        (String.prototype.escapeCharacters): Use Set and string iteration instead of indexOf and charAt.

2018-03-27  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Command-Shift-left/right arrow keys should not switch tabs when focused on color picker text fields
        https://bugs.webkit.org/show_bug.cgi?id=184028

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/EditingSupport.js:
        (WI.isEventTargetAnEditableField):
        Detect <input type="number"> as an editable text field.

2018-03-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: don't show checkboxes for invalid properties
        https://bugs.webkit.org/show_bug.cgi?id=183951
        <rdar://problem/38807602>

        Reviewed by Matt Baker.

        Since toggling of invalid properties isn't supported by the backend, don't show checkboxes for invalid properties.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-css-declaration:matches(:hover, :focus) .property:not(:matches(.invalid-name, .invalid-value)) .property-toggle,):
        (.spreadsheet-css-declaration:matches(:hover, :focus) .property-toggle,): Deleted.
        Don't show checkboxes for invalid properties but still show them for duplicate properties.

2018-03-23  Brian Burg  <bburg@apple.com>

        Web Inspector: add WebKitAdditions hooks for WebInspectorUI
        https://bugs.webkit.org/show_bug.cgi?id=183940
        <rdar://problem/38796310>

        Reviewed by Timothy Hatcher.

        * Scripts/combine-resources.pl:
        (debugLog): Added. Leave in the logging I used to debug this.

        (concatenateIncludedFilesMatchingPattern):
        (stripIncludedFilesMatchingPattern):
        (concatenateFiles): Deleted.
        This function tried to do too many things. Split it into
        two functions, one for stripping includes and one for concatenating
        files referenced by includes.

        Lastly, add a negative lookahead clause for 'WebKitAdditions' so includes
        containing that string are not combined when no input directory is passed
        to the script.

        * Scripts/copy-user-interface-resources.pl:
        WebKitAdditions is computed either from BUILT_PRODUCTS_DIR or SDKROOT,
        depending on the build style. Just try them in order and use the first
        one that exists. WebInspectorUI files are in their own directory, so
        we can assume there are files to process if that directory exists.

        Copy Main.html to derived sources before doing any processing on it.
        This makes all combining phases have the same --input-html argument.

        (debugLog): Added. Leave in the logging I used to debug this.

        (combineOrStripResourcesForWebKitAdditions):
        (stripResourcesForWebKitAdditions):
        (combineResourcesForWebKitAdditions):
        Determine if WebKitAdditions exists and whether there are any
        resources for WebInspectorUI present that need to be processed.

        * UserInterface/Main.html:
        Add stub .js and .css WebKitAdditions files. We can add more later
        if it makes sense but this is good enough to validate the build machinery.

2018-03-23  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: flashing when switching between nodes
        https://bugs.webkit.org/show_bug.cgi?id=179291
        <rdar://problem/35352660>

        Reviewed by Matt Baker.

        Flashing was happening because the layout was a two-step process:
        1. Append empty sections.
        2. Layout everything inside of the section on requestAnimationFrame.

        SpreadsheetRulesStyleDetailsPanel was converted to use layout method,
        so both steps happen on requestAnimationFrame.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.refresh):
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.layout):
        The removed lines from the refresh method moved to the layout method without any changes.

2018-03-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Uncaught Exception: TypeError: this._textEditor.toggleUnexecutedCodeHighlights().then is not a function
        https://bugs.webkit.org/show_bug.cgi?id=181912
        <rdar://problem/36700022>

        Reviewed by Matt Baker.

        The uncaught exception was caused by returning `false` instead of a promise object.
        This patch only fixes the exception. Further enhancements should be done in <https://webkit.org/b/183887>.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.toggleTypeAnnotations):
        (WI.SourceCodeTextEditor.prototype.toggleUnexecutedCodeHighlights):

2018-03-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Loses focus when editing a property while page is being loaded
        https://bugs.webkit.org/show_bug.cgi?id=182619
        <rdar://problem/37363185>

        Reviewed by Matt Baker.

        Adding or removing a stylesheet causes SpreadsheetRulesStyleDetailsPanel to refresh, triggering a layout
        of all SpreadsheetCSSStyleDeclarationSection child views. This resets the focus, selection, and
        auto-completion state.

        This patch prevents SpreadsheetCSSStyleDeclarationSection from performing a layout when a property is being edited.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        Allow re-layout after creating a blank CSS property and pasting CSS code.
        - _pendingAddBlankPropertyIndexOffset is a number after pasting CSS rules.
        - _propertyPendingStartEditing is a property model after creating a new property.

2018-03-20  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Session dividers are not added when Console tab is not visible
        https://bugs.webkit.org/show_bug.cgi?id=168622

        Reviewed by Matt Baker.

        Restructure `_pendingMessages` to be a `Map [ConsoleSession, ConsoleMessageView]`. Instead
        of rendering to the `_currentConsoleGroup`, we now render to the saved `ConsoleSession`.
        Also ensure that `_pendingMessages` is cleared when navigating and "Preserve Log" is off.

        * UserInterface/Controllers/JavaScriptLogViewController.js:
        (WI.JavaScriptLogViewController):
        (WI.JavaScriptLogViewController.prototype.startNewSession):
        (WI.JavaScriptLogViewController.prototype.consolePromptHistoryDidChange):
        (WI.JavaScriptLogViewController.prototype._appendConsoleMessageView):
        (WI.JavaScriptLogViewController.prototype.renderPendingMessages):
        (WI.JavaScriptLogViewController.prototype.get prompt): Deleted.
        (WI.JavaScriptLogViewController.prototype.get currentConsoleGroup): Deleted.

2018-03-20  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Can't add a new class by editing class attribute in DOM outline
        https://bugs.webkit.org/show_bug.cgi?id=180890

        Reviewed by Ryosuke Niwa.

        Typing "my-foo my-bar" creates a single "my-foo\xA0my-bar" class name because
        contentEditable-based attribute editor sometimes inserts non-breaking space characters (\xA0).

        Replace all non-breaking space characters with the regular space characters when
        commiting attribute change.

        * UserInterface/Views/DOMTreeElement.js:

2018-03-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Elements: "Force Print Media Styles" should not persist across Web Inspector sessions
        https://bugs.webkit.org/show_bug.cgi?id=183708
        <rdar://problem/36452183>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        * UserInterface/Views/DOMTreeContentView.js:
        (WI.DOMTreeContentView):
        (WI.DOMTreeContentView.prototype._showPrintStylesChanged):
        (WI.DOMTreeContentView.prototype._togglePrintStyles):
        (WI.DOMTreeContentView.prototype._showPrintStylesSettingChanged): Deleted.
        (WI.DOMTreeContentView.prototype._togglePrintStylesSetting): Deleted.

2018-03-14  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas: a recording initiated by the user should be shown immediately on completion
        https://bugs.webkit.org/show_bug.cgi?id=183647
        <rdar://problem/38479187>

        Reviewed by Matt Baker.

        When recordings are initiated via `console.record`, we don't want to automatically show the
        recording after it's payload is sent to the frontend. We determine whether a recording came
        from the console by comparing the recording's associated canvas with the current value of
        `_recordingCanvas`. Previously, when stopping a recording, we would always null the value,
        which meant that all non-single-frame recordings (single-frame recordings are stopped by
        the agent after the first paint or tick after an action is performed) would be categorized
        as coming from the console, since `_recordingCanvas` would be null by the time the frontend
        recieved the payload.

        This patch changes it so that the nulling of `_recordingCanvas` in `stopRecording` is only
        done if the agent command errors. It was already the case that `_recordingCanvas` was nulled
        in `stopRecording`, so this patch just prevents it from being nulled too early.

        * UserInterface/Controllers/CanvasManager.js:
        (WI.CanvasManager.prototype.stopRecording):

2018-03-12  Jon Davis  <jond@apple.com>

        Web Inspector: Remove redundant tooltips
        https://bugs.webkit.org/show_bug.cgi?id=183099

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        Instantiate ConsoleDrawer so the keyboard shortcuts for FindBanner are available.

        * UserInterface/Views/BreakpointTreeElement.js:
        (WI.BreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/ButtonNavigationItem.js:
        (WI.ButtonNavigationItem):
        Only show tooltips when the button style is an image.

        * UserInterface/Views/ConsoleDrawer.js:
        (WI.ConsoleDrawer):
        (WI.ConsoleDrawer.prototype.toggleButtonShortcutTooltip):
        Added helper to set the toggle button keyboard shortcut tooltip.

        * UserInterface/Views/DOMBreakpointTreeElement.js:
        (WI.DOMBreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/DOMNodeTreeElement.js:
        (WI.DOMNodeTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/FindBanner.js:
        (WI.FindBanner):
        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent):
        (WI.HierarchicalPathComponent.prototype.get tooltip):
        (WI.HierarchicalPathComponent.prototype.set tooltip):
        (WI.HierarchicalPathComponent.prototype.get hideTooltip):
        (WI.HierarchicalPathComponent.prototype.set hideTooltip):
        (WI.HierarchicalPathComponent.prototype._updateElementTitleAndText):
        Add tooltip management features to manage tooltips separately of the displayName,
        and provide a behavior to hide tooltips while retaining the tooltip data.

        * UserInterface/Views/HierarchicalPathNavigationItem.js:
        (WI.HierarchicalPathNavigationItem.prototype.updateLayout):
        Hide tooltips when fully visible, show tooltips for collapsed items.

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem.prototype.titleDidChange):
        Set tooltips for pinned tab bar items.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole):
        Set the ConsoleDrawer toggle button tooltip after the keyboard shortcut is registered.

        * UserInterface/Views/StorageTreeElement.js:
        (WI.StorageTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/TabBarItem.js:
        (WI.TabBarItem.prototype.get title):
        (WI.TabBarItem.prototype.set title):
        (WI.TabBarItem.prototype.titleDidChange):
        (WI.TabBarItem):
        Add title property management with an overridable titleDidChange handler for
        setting tooltips when needed.

        * UserInterface/Views/TimelineTreeElement.js:
        (WI.TimelineTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

        * UserInterface/Views/ToggleButtonNavigationItem.js:
        (WI.ToggleButtonNavigationItem.prototype.set defaultToolTip):
        Added a setter for manging the default tooltip of a toggle button.

        * UserInterface/Views/XHRBreakpointTreeElement.js:
        (WI.XHRBreakpointTreeElement):
        Suppress tooltips by setting the tooltipHandledSeprately flag with no custom handler.

2018-03-09  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Sources: Open all resources in Sources tab instead of Resources/Debugger
        https://bugs.webkit.org/show_bug.cgi?id=183317
        <rdar://problem/38108455>

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForURL):
        Introduce preferredTabType option instead of listing ignoreResourcesTab, ignoreDebuggerTab, ignoreSearchTab, and ignoreNetworkTab.
        The only correct outcome of selecting "Reveal in Sources Tab" context menu is to open Sources tab, not any other tab.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WI.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):

2018-03-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Sources: add SourcesTabContentView and SourceSidebarPanel classes
        https://bugs.webkit.org/show_bug.cgi?id=183316
        <rdar://problem/38107639>

        Reviewed by Matt Baker.

        Add Sources tab and sidebar panel, which are copies of the corresponding Resources classes.
        The Sources tab is shown when it's enabled in the experimental settings. This patch doesn't
        remove existing Resources and Debugger tabs.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        * UserInterface/Main.html:
        * UserInterface/Views/SourcesSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.sources > .content):
        (.sidebar > .panel.navigation.sources > .navigation-bar):
        * UserInterface/Views/SourcesSidebarPanel.js: Added.
        (WI.SourcesSidebarPanel):
        (WI.SourcesSidebarPanel.shouldPlaceResourcesAtTopLevel):
        (WI.SourcesSidebarPanel.prototype.get minimumWidth):
        (WI.SourcesSidebarPanel.prototype.closed):
        (WI.SourcesSidebarPanel.prototype.showDefaultContentView):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject.isAncestor):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject.getParent):
        (WI.SourcesSidebarPanel.prototype.treeElementForRepresentedObject):
        (WI.SourcesSidebarPanel.prototype.initialLayout):
        (WI.SourcesSidebarPanel.prototype.hasCustomFilters):
        (WI.SourcesSidebarPanel.prototype.matchTreeElementAgainstCustomFilters.match):
        (WI.SourcesSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.SourcesSidebarPanel.prototype._mainResourceDidChange):
        (WI.SourcesSidebarPanel.prototype._mainFrameDidChange):
        (WI.SourcesSidebarPanel.prototype._mainFrameMainResourceDidChange.delayedWork):
        (WI.SourcesSidebarPanel.prototype._mainFrameMainResourceDidChange):
        (WI.SourcesSidebarPanel.prototype._scriptWasAdded):
        (WI.SourcesSidebarPanel.prototype._addScript):
        (WI.SourcesSidebarPanel.prototype._scriptWasRemoved):
        (WI.SourcesSidebarPanel.prototype._scriptsCleared):
        (WI.SourcesSidebarPanel.prototype._styleSheetAdded):
        (WI.SourcesSidebarPanel.prototype._addTargetWithMainResource):
        (WI.SourcesSidebarPanel.prototype._targetRemoved):
        (WI.SourcesSidebarPanel.prototype._treeSelectionDidChange):
        (WI.SourcesSidebarPanel.prototype._compareTreeElements):
        (WI.SourcesSidebarPanel.prototype._extraDomainsActivated):
        (WI.SourcesSidebarPanel.prototype._scopeBarSelectionDidChange):
        * UserInterface/Views/SourcesTabContentView.js: Added.
        (WI.SourcesTabContentView):
        (WI.SourcesTabContentView.tabInfo):
        (WI.SourcesTabContentView.isTabAllowed):
        (WI.SourcesTabContentView.prototype.get type):
        (WI.SourcesTabContentView.prototype.get supportsSplitContentBrowser):
        (WI.SourcesTabContentView.prototype.canShowRepresentedObject):

2018-03-07  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas tab: ensure that the Recording TreeOutline has a specified height for virtualization
        https://bugs.webkit.org/show_bug.cgi?id=183015

        Reviewed by Matt Baker.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .recording-content):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .navigation-bar): Deleted.
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .tree-outline.canvas): Deleted.

        * UserInterface/Views/TreeElement.js:
        (WI.TreeElement.prototype._detach):

2018-02-26  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: Scroll into view / Inspect element if Canvas has DOM node
        https://bugs.webkit.org/show_bug.cgi?id=181769

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/Markup.svg: Added.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.initialLayout):
        (WI.CanvasContentView.prototype._canvasElementButtonClicked):

2018-02-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: hide navigation sidebar when viewing the overview
        https://bugs.webkit.org/show_bug.cgi?id=182597
        <rdar://problem/37341564>

        Reviewed by Devin Rousso.

        Support showing/hiding the navigation sidebar panel based on the current
        represented object. Individual TabContentViews can opt-in to this behavior,
        by overriding TabContentView.prototype.managesNavigationSidebarPanel.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel.prototype.canShowRepresentedObject):
        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView.prototype.get managesNavigationSidebarPanel):
        Hide the Canvas navigation sidebar when viewing the overview.

        * UserInterface/Views/ContentBrowserTabContentView.js:
        (WI.ContentBrowserTabContentView):
        (WI.ContentBrowserTabContentView.prototype.showNavigationSidebarPanel):
        (WI.ContentBrowserTabContentView.prototype._navigationSidebarCollapsedStateDidChange):
        (WI.ContentBrowserTabContentView.prototype._contentBrowserCurrentRepresentedObjectsDidChange):

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel.prototype.canShowRepresentedObject):
        Provide default implementation that just defers to the TabContentView.
        This exists so that a NavigationSidebarPanel that implements canShowRepresentedObject
        will have a meaningful default to fall back on.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype._sidebarCollapsedStateDidChange):
        (WI.TabBrowser.prototype._showNavigationSidebarPanelForTabContentView):

        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.prototype.get managesNavigationSidebarPanel):

2018-02-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: remove top-level search field and pin the Search tab
        https://bugs.webkit.org/show_bug.cgi?id=182353
        <rdar://problem/37088644>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        Create Search UI based on experimental setting. When the new TabBar is
        enabled, the Search tab is a pinned tab. Since it is also saveable, it
        needs to be added to the TabBrowser (the browser adds the item to the bar).

        When restoring saved tabs, make an additional check to prevent a tab
        from being added twice. This can occur now that the Search tab is pinned.

        * UserInterface/Images/Search.svg:
        Update art to better match Safari/macOS. Slightly increase the radius of
        the lens, and shorten the length of the handle.

        * UserInterface/Views/GoToLineDialog.css:
        (.go-to-line-dialog > div::before):
        Update styles for new Search icon.

        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype.get saveableTabCount):
        Backported new TabBar method which is called by TabBrowser.

        * UserInterface/Views/OpenResourceDialog.css:
        (.open-resource-dialog > .field::before):
        Update styles for new Search icon.

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem.prototype.fromTabInfo):
        Match GeneralTabBarItem.fromTabInfo.

        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        (WI.SearchTabContentView.tabInfo):
        New image (magnifying glass without border) when new TabBar is enabled.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView):

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        Move creation of the Settings item out of TabBar. The TabBar should
        only be concerned with managing tabs.

        (WI.TabBar.prototype.get saveableTabCount):
        (WI.TabBar.prototype._handleContextMenu):
        (WI.TabBar.prototype.get normalNonEphemeralTabCount): Deleted.
        Now that the Search tab is pinned, there aren't any normal tabs that
        are also ephemeral. For the LegacyTabBar, both the Search and New Tab
        tabs are still in this category.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.addTabForContentView):
        (WI.TabBrowser.prototype.closeTabForContentView):
        (WI.TabBrowser.prototype._tabBarItemSelected):
        (WI.TabBrowser._tabBarItemRemoved):
        Recent tab list should be validated against the list of saveable tabs,
        since the Search tab is no longer a normal tab (a GeneralTabBarItem),
        but is still persisted across Inspector sessions.

2018-02-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: TabBarItem close button is incorrectly positioned
        https://bugs.webkit.org/show_bug.cgi?id=182844
        <rdar://problem/37586749>

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem.prototype.set title):
        Insert the title before the last flexible space item.

        * UserInterface/Views/TabBar.css:
        (.tab-bar > .item):
        (.tab-bar > .item > .close):
        (.tab-bar > .item > .flex-space):
        (.tab-bar > .item.ephemeral > .flex-space:last-child):
        (.tab-bar.collapsed > .item):
        (.tab-bar.collapsed > .item > .flex-space):
        (.tab-bar.collapsed > .item > .close):
        (.tab-bar.collapsed > .item:hover > .close):
        (.tab-bar.collapsed > .item.ephemeral:hover > .icon):
        (.tab-bar > .item:hover > .close): Deleted.
        (.tab-bar:not(.collapsed) > .item.ephemeral:hover > .icon): Deleted.

        * UserInterface/Views/TabBarItem.js:
        (WI.TabBarItem):
        Restore flexible space items before and after the icon.

2018-02-14  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: completion popover doesn't hide when switching panels
        https://bugs.webkit.org/show_bug.cgi?id=182464
        <rdar://problem/37202763>

        Reviewed by Timothy Hatcher.

        Save the position of the anchor, an element the popover is shown for, and hide the completion popover
        when the position changes.

        * UserInterface/Views/CompletionSuggestionsView.js:
        (WI.CompletionSuggestionsView.prototype.showUntilAnchorMoves):
        When the popover is visible, check every 200ms if the anchor moved.

        (WI.CompletionSuggestionsView.prototype.hide):
        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        (WI.SpreadsheetTextField.prototype._getCaretRect):
        getBoundingClientRect returns {x: 0, y: 0} when it can't determine node's position.
        This happens when a node isn't attached to DOM, attached to DOM but not visible, and
        a number of odd cases.

2018-02-14  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: only show allowed tabs in the available tabs context menu
        https://bugs.webkit.org/show_bug.cgi?id=182721
        <rdar://problem/37479019>

        Reviewed by Timothy Hatcher.

        In addition to only including allowed tabs in the TabBar context menu,
        perform a sanity check when setting the selected tab item, since the
        serialized selection index could refer to a tab that is no longer allowed.

        * UserInterface/Views/LegacyTabBar.js:
        (WI.LegacyTabBar.prototype.set selectedTabBarItem):
        (WI.LegacyTabBar.prototype._handleContextMenu):

        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype._handleContextMenu):

2018-02-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: tree selection abruptly changes when selecting a recording frame
        https://bugs.webkit.org/show_bug.cgi?id=182667
        <rdar://problem/37412639>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CanvasSidebarPanel.css:
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.recording > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.folder-icon > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .recording-content > .tree-outline .item.folder-icon > .status):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.recording > .icon): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .icon): Deleted.
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .status): Deleted.
        Style changes for the additional DOM element required to virtualize the recording tree outline.

        * UserInterface/Views/CanvasSidebarPanel.js:
        (WI.CanvasSidebarPanel):
        In order to be virtualized, the tree must be the only child of its parent.

        (WI.CanvasSidebarPanel.prototype.set action):
        Ensure that a frame tree element isn't deselected when the last action
        in the frame becomes selected in the RecordingContentView.

        (WI.CanvasSidebarPanel.prototype.shown):
        Refresh the sidebar, as represented objects may have changed while hidden.

        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        Unset the recording when no valid represented objects are found, to
        prevent a stale recording tree from being shown when viewing the overview.

        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Moved toggling of the "has-recordings" style to _canvasChanged, since
        the navigation bar should be hidden when no canvas exists.

        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.addContentViewForItem):
        (WI.CollectionContentView.prototype.removeContentViewForItem):
        Drive by fixes for child view visible state.

        * UserInterface/Views/TreeOutline.css:
        (.tree-outline:not(.large):matches(:focus, .force-focus) .item.selected .status .indeterminate-progress-spinner):
        Make spinner easier to see against the selection background color.

2018-02-09  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Object.shallowEqual always fails when comparing array property values
        https://bugs.webkit.org/show_bug.cgi?id=182634
        <rdar://problem/37374639>

        Reviewed by Devin Rousso.

        Object.shallowEqual should use Array.shallowEqual when comparing property
        values, since strictly comparing objects/arrays is only true if both
        operands reference the same Object.

        * UserInterface/Base/Utilities.js:
        (value):

2018-02-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: add listing of Canvases/Programs/Recordings to the NavigationSidebar
        https://bugs.webkit.org/show_bug.cgi?id=178744
        <rdar://problem/35374379>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/Canvas2D.svg:
        * UserInterface/Images/Canvas3D.svg:
        * UserInterface/Images/Recording.svg:
        Update canvas icons to be monochrome. Simplified the recording icon.

        * UserInterface/Main.html:

        * UserInterface/Models/RecordingAction.js:
        (WI.RecordingAction.prototype.get state):
        (WI.RecordingAction.prototype.set state):
        Allow (2D) snapshot state to be associated with the action. Used by
        RecordingActionDetailsSidebarPanel to retrieve the snapshot state.

        * UserInterface/Views/CanvasContentView.css:
        (.content-view.canvas:not(.tab)):
        (.content-view.canvas:not(.tab) > .progress): Deleted.
        (.content-view.canvas:not(.tab) > .progress > .frame-count): Deleted.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView):
        (WI.CanvasContentView.prototype.get navigationItems):
        (WI.CanvasContentView.prototype.layout):
        (WI.CanvasContentView.prototype.shown):
        (WI.CanvasContentView.prototype._recordingStarted):
        (WI.CanvasContentView.prototype._recordingProgress):
        (WI.CanvasContentView.prototype._recordingStopped):
        (WI.CanvasContentView.prototype._updateRecordNavigationItem):
        (WI.CanvasContentView.prototype._updateProgressView):
        Replace progress UI with a reusable ProgressView class.
        When in the overview, clicking the CanvasContentView shows a dedicated
        CanvasContentView for inspecting shaders and recordings. This behavior
        is controlled by CollectionContentView, so we need to prevent it when
        clicking inside the header and footer elements, which contain clickable UI.

        * UserInterface/Views/CanvasDetailsSidebarPanel.js:
        (WI.CanvasDetailsSidebarPanel.prototype.inspect):

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas):
        (.content-view.canvas-overview .content-view.canvas.is-recording):
        (.content-view.canvas-overview .content-view.canvas > :matches(header, footer)):
        (.content-view.canvas-overview .content-view.canvas > header):
        (.content-view.canvas-overview .content-view.canvas.is-recording > header):
        (.content-view.canvas-overview .content-view.canvas > header > .navigation-bar):
        (.content-view.canvas-overview .content-view.canvas:matches(:hover, .is-recording) > header > .navigation-bar):
        (.content-view.canvas-overview .content-view.canvas.is-recording > .progress-view,):
        (.content-view.canvas-overview .content-view.canvas.is-recording > .preview):
        (.content-view.canvas-overview .content-view.canvas > :matches(header, .progress, .preview, footer)): Deleted.
        (.content-view.canvas-overview .content-view.canvas.selected > :matches(.progress, .preview, footer),): Deleted.
        (.content-view.canvas-overview .content-view.canvas:not(:hover, .is-recording, .selected) > header > .navigation-bar): Deleted.
        (.content-view.canvas-overview .content-view.canvas > :matches(.progress, .preview)): Deleted.
        (.content-view.canvas-overview .content-view.canvas > .preview): Deleted.
        (.content-view.canvas-overview .content-view.canvas > .progress ~ .preview): Deleted.
        Clean up styles, and remove selection styles as canvases are no longer selectable in the overview.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype.get navigationItems):
        (WI.CanvasOverviewContentView.prototype.attached):
        (WI.CanvasOverviewContentView.prototype.detached):
        (WI.CanvasOverviewContentView.prototype.get selectionPathComponents): Deleted.
        (WI.CanvasOverviewContentView.prototype._changeSelectedItemVertically): Deleted.
        (WI.CanvasOverviewContentView.prototype._changeSelectedItemHorizontally): Deleted.
        (WI.CanvasOverviewContentView.prototype._selectionPathComponentsChanged): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleUp): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleRight): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleDown): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleLeft): Deleted.
        (WI.CanvasOverviewContentView.prototype._handleSpace): Deleted.
        (WI.CanvasOverviewContentView.prototype._supplementalRepresentedObjectsDidChange): Deleted.
        Disable canvas selection. Remove logic for supplemental represented objects,
        path components, and selection keyboard shortcuts.

        * UserInterface/Views/CanvasSidebarPanel.css: Added.
        (.sidebar > .panel.navigation.canvas > .content):
        (.sidebar > .panel.navigation.canvas > .navigation-bar > .item.record-start-stop.disabled):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas.canvas-2d .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.canvas.webgl .icon):
        (.sidebar > .panel.navigation.canvas > .content > .navigation-bar):
        (.sidebar > .panel.navigation.canvas.has-recordings > .content > .tree-outline.canvas):
        (.sidebar > .panel.navigation.canvas:not(.has-recordings) > .filter-bar,):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.recording > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.shader-program > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .icon):
        (.sidebar > .panel.navigation.canvas > .content > .tree-outline .item.folder-icon > .status):

        * UserInterface/Views/CanvasSidebarPanel.js: Added.
        (WI.CanvasSidebarPanel):
        (WI.CanvasSidebarPanel.prototype.get canvas):
        (WI.CanvasSidebarPanel.prototype.set canvas):
        (WI.CanvasSidebarPanel.prototype.set recording):
        (WI.CanvasSidebarPanel.prototype.set action):
        (WI.CanvasSidebarPanel.prototype.shown):
        (WI.CanvasSidebarPanel.prototype.hidden):
        (WI.CanvasSidebarPanel.prototype.hasCustomFilters):
        (WI.CanvasSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WI.CanvasSidebarPanel.prototype.initialLayout):
        (WI.CanvasSidebarPanel.prototype._recordingAdded):
        (WI.CanvasSidebarPanel.prototype._recordingRemoved):
        (WI.CanvasSidebarPanel.prototype._scopeBarSelectionChanged):
        (WI.CanvasSidebarPanel.prototype._toggleRecording):
        (WI.CanvasSidebarPanel.prototype._currentRepresentedObjectsDidChange):
        (WI.CanvasSidebarPanel.prototype._treeOutlineSelectionDidChange):
        (WI.CanvasSidebarPanel.prototype._canvasChanged):
        (WI.CanvasSidebarPanel.prototype._recordingChanged):
        (WI.CanvasSidebarPanel.prototype._updateRecordNavigationItem):
        (WI.CanvasSidebarPanel.prototype._updateRecordingScopeBar):
        Add new navigation sidebar, split into two sections. The upper section
        contains a tree with a single element for the current canvas, and child
        elements for any shader programs. The maximum height of this section is 50%
        of the sidebar's height. The lower section contains a tree for the selected
        recording, and a scope bar for choosing between recordings.

        * UserInterface/Views/CanvasTabContentView.css:
        (.content-view.tab.canvas .navigation-bar > .item .canvas-overview .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.canvas-2d .icon):
        (.content-view.tab.canvas .navigation-bar > .item .canvas.webgl .icon):
        (.content-view.tab.canvas .navigation-bar > .item .shader-program > .icon):
        (.content-view.tab.canvas .navigation-bar > .item > .hierarchical-path-component > .icon): Deleted.
        (.content-view.tab.canvas .navigation-bar > .item .canvas .icon): Deleted.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        (WI.CanvasTabContentView.prototype.canShowRepresentedObject):
        (WI.CanvasTabContentView.prototype.attached):
        (WI.CanvasTabContentView.prototype._addCanvas):
        (WI.CanvasTabContentView.prototype._removeCanvas):
        (WI.CanvasTabContentView.prototype._canvasTreeOutlineSelectionDidChange):
        (WI.CanvasTabContentView.prototype._recordingAdded):
        (WI.CanvasTabContentView.prototype._handleSpace):
        (WI.CanvasTabContentView.prototype.showRepresentedObject): Deleted.
        (WI.CanvasTabContentView.prototype._navigationSidebarTreeOutlineSelectionChanged): Deleted.
        (WI.CanvasTabContentView.prototype._recordingActionIndexChanged): Deleted.
        (WI.CanvasTabContentView.prototype._updateActionIndex): Deleted.
        The canvas tab now maintains a tree outline of all canvases, with an
        "Overview" element as the root. The Overview element is always the first
        item of content browser's hierarchical path.

        * UserInterface/Views/CanvasTreeElement.js:
        (WI.CanvasTreeElement.createRecordingTreeElement):
        (WI.CanvasTreeElement):
        (WI.CanvasTreeElement.prototype.onattach):
        (WI.CanvasTreeElement.prototype.onpopulate):
        (WI.CanvasTreeElement.prototype._updateStatus):
        (WI.CanvasTreeElement.prototype.ondetach): Deleted.
        Make it possible to not show recordings under the Canvas element.
        Create `isRecording` status element (spinner).

        * UserInterface/Views/CollectionContentView.js:
        (WI.CollectionContentView.prototype.shown):
        (WI.CollectionContentView.prototype.hidden):
        Child ContentViews need to be updated when the collection's visibility changes.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.isViewable):

        * UserInterface/Views/ProgressView.css: Added.
        (.progress-view):
        (.progress-view > .titles):
        (.progress-view > .titles > .title):
        (.progress-view > .titles > .subtitle):
        (.progress-view > .titles > .subtitle::before):
        (.progress-view > .indeterminate-progress-spinner):

        * UserInterface/Views/ProgressView.js: Added.
        (WI.ProgressView):
        (WI.ProgressView.prototype.get title):
        (WI.ProgressView.prototype.set title):
        (WI.ProgressView.prototype.get subtitle):
        (WI.ProgressView.prototype.set subtitle):
        (WI.ProgressView.prototype.get visible):
        (WI.ProgressView.prototype.set visible):
        (WI.ProgressView.prototype.initialLayout):
        (WI.ProgressView.prototype._updateTitles):
        New view class (not a ContentView) for showing a generic progress message,
        with a title, subtitle, and progress spinner.

        * UserInterface/Views/RecordingContentView.css:
        (.content-view:not(.tab).recording > .preview-container):
        Remove unnecessary styles.

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView):
        (WI.RecordingContentView.prototype.get navigationItems):
        (WI.RecordingContentView.prototype.get supplementalRepresentedObjects):
        (WI.RecordingContentView.prototype.updateActionIndex):
        (WI.RecordingContentView.prototype.get saveData):
        (WI.RecordingContentView.prototype._exportRecording):
        Relocate the recording export logic and UI.
        (WI.RecordingContentView.prototype.async._generateContentCanvas2D):
        (WI.RecordingContentView.prototype.async._generateContentCanvasWebGL):
        (WI.RecordingContentView.prototype._sliderChanged):
        Refactor logic for notifying the rest of the UI of changes to the action slider.
        The selected action is now exposed as a supplemental represented object, and a
        corresponding SupplementalRepresentedObjectsDidChange event.

        * UserInterface/Views/RecordingStateDetailsSidebarPanel.js:
        (WI.RecordingStateDetailsSidebarPanel.prototype.inspect):
        (WI.RecordingStateDetailsSidebarPanel.prototype.set action):
        (WI.RecordingStateDetailsSidebarPanel.prototype._generateDetailsCanvas2D):
        (WI.RecordingStateDetailsSidebarPanel):
        (WI.RecordingStateDetailsSidebarPanel.prototype.updateAction): Deleted.

        * UserInterface/Views/RecordingTraceDetailsSidebarPanel.js:
        (WI.RecordingTraceDetailsSidebarPanel.prototype.inspect):
        (WI.RecordingTraceDetailsSidebarPanel.prototype.set action):
        (WI.RecordingTraceDetailsSidebarPanel):
        (WI.RecordingTraceDetailsSidebarPanel.prototype.updateAction): Deleted.
        Now that the selected action is exposed to the UI as a supplemental
        represented object, details sidebars can be more decoupled from the
        canvas tab, and be notified of changes to the selection via `inspect()`.

        * UserInterface/Views/ResourceIcons.css:
        (.canvas > .icon): Deleted.
        (.shader-program .icon): Deleted.

2018-02-08  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: Typing value and quickly moving focus away may display outdated value in UI
        https://bugs.webkit.org/show_bug.cgi?id=182588
        <rdar://problem/37332161>

        Reviewed by Matt Baker.

        CSSProperty models were updated with a 250ms delay. Quickly adding a blank property after modifying
        an existing property could result in outdated values being shown.

        This patch removes the 250ms delay.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidChange):

2018-02-07  Matt Baker  <mattbaker@apple.com>

        Web Inspector: replace isAncestor with Node.contains() in LegacyTabBar
        https://bugs.webkit.org/show_bug.cgi?id=182586

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/LegacyTabBar.js:

2018-02-07  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: completion popover doesn't hide when switching panels
        https://bugs.webkit.org/show_bug.cgi?id=182464
        <rdar://problem/37202763>

        Reviewed by Timothy Hatcher.

        Hide completion popover by triggering blur event on the focused text field.
        Removing text fields from the DOM tree would hide the completion popovers as well,
        but switching sidebar panels doesn't remove them from the DOM.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.hidden):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype.hidden):
        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel.prototype.hidden):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.hidden):

2018-02-06  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Replace isAncestor and isDescendant with native DOM contains method
        https://bugs.webkit.org/show_bug.cgi?id=182069

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.restoreFocusFromElement):
        (WI._mouseDown):
        (WI._focusedContentBrowser):
        (WI._focusedContentView):
        * UserInterface/Base/Utilities.js:
        (Node.prototype.traverseNextNode):
        (Node.prototype.isAncestor): Deleted.
        (Node.prototype.isDescendant): Deleted.
        (Node.prototype.isSelfOrAncestor): Deleted.
        (Node.prototype.isSelfOrDescendant): Deleted.
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WI.BoxModelDetailsSectionRow.prototype._handleKeyDown):
        * UserInterface/Views/CSSStyleDeclarationSection.js:
        (WI.CSSStyleDeclarationSection.prototype._handleSelectorPaste):
        * UserInterface/Views/DOMTreeOutline.js:
        (WI.DOMTreeOutline.prototype._onmouseout):
        * UserInterface/Views/DetailsSection.js:
        (WI.DetailsSection.prototype._headerElementClicked):
        * UserInterface/Views/EditingSupport.js:
        (WI.incrementElementValue):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype._handleContextMenuEvent):
        * UserInterface/Views/ShaderProgramTreeElement.js:
        (WI.ShaderProgramTreeElement.prototype.selectOnMouseDown):
        * UserInterface/Views/SoftContextMenu.js:
        (WI.SoftContextMenu.prototype._menuItemMouseOut):
        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        * UserInterface/Views/TabBar.js:
        (WI.TabBar.prototype.insertTabBarItem):

2018-02-06  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Elements tab should have "Jump to Layer" functionality
        https://bugs.webkit.org/show_bug.cgi?id=181800

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.isShowingElementsTab):
        (WI.showLayersTab):
        (WI.isShowingLayersTab):

        * UserInterface/Views/ContextMenuUtilities.js:
        (WI.appendContextMenuItemsForDOMNode):

        * UserInterface/Views/LayersTabContentView.js:
        (WI.LayersTabContentView.prototype.selectLayerForNode):

        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.selectLayerForNode):
        (WI.Layers3DContentView.prototype.layout):

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel):
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        (WI.LayerDetailsSidebarPanel.prototype._updateDataGrid):

2018-02-06  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Rename String.prototype.trimEnd to avoid conflicts with native trimEnd
        https://bugs.webkit.org/show_bug.cgi?id=182545

        Reviewed by Brian Burg.

        Rename:
        - trimEnd to truncateEnd
        - trimMiddle to truncateMiddle

        * UserInterface/Base/Utilities.js:
        (String.prototype.trimMiddle): Deleted.
        (String.prototype.trimEnd): Deleted.
        (String.prototype.truncateMiddle): Added.
        (String.prototype.truncateEnd): Added.
        Use strict mode. Scrict mode allows `this` to be a primitive (a string, in our case).
        In non-strict mode, `this` is always an object. Without the strict mode,
        "a".truncateEnd(42) !== "a", because truncateEnd returns a string object.

        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._buildAttributeDOM):
        * UserInterface/Views/DOMTreeElementPathComponent.js:
        (WI.DOMTreeElementPathComponent):
        * UserInterface/Views/SearchResultTreeElement.js:
        Remove an obvious comment.

        (WI.SearchResultTreeElement.truncateAndHighlightTitle):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._renderValue):

2018-02-05  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Add an experimental setting to enable Sources tab
        https://bugs.webkit.org/show_bug.cgi?id=182461

        Reviewed by Brian Burg.

        This patch only adds a setting. It doesn't add the Sources tab.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Setting.js:
        * UserInterface/Views/SettingsTabContentView.js:

2018-02-02  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Styles Redesign: Pasting multiple properties should create properties instead of a bad property
        https://bugs.webkit.org/show_bug.cgi?id=179622
        <rdar://problem/35511170>

        Reviewed by Matt Baker.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._remove):
        (WI.SpreadsheetStyleProperty.prototype._update):
        (WI.SpreadsheetStyleProperty.prototype.spreadsheetTextFieldDidCommit):
        (WI.SpreadsheetStyleProperty.prototype._handleNamePaste):
        When the user pastes into the name field, parse the text for a list of name-value pairs and
        replace the property being edited with the text of those pairs.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.addBlankProperty):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyFocusMoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyAddBlankPropertySoon):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved): Deleted.
        Calling `addBlankProperty` will trigger a layout on the next frame, but that might be before
        the CSSAgent has had a chance to finish refreshing, so we need a way to defer the creation
        of a new property until after we have finished the next layout (which is after the refresh).
        Drive-by: fix naming of some delegate functions.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.replaceWithText):
        Provide a way for replacing the property with new text.

2018-02-02  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: remove New Tab button and add experimental feature flag
        https://bugs.webkit.org/show_bug.cgi?id=182342
        <rdar://problem/37078662>

        Reviewed by Devin Rousso.

        This patch adds a new experimental setting group, "User Interface", with
        a single setting, "Enable New TabBar". When enabled, the New Tab button is
        no longer available in the top-level TabBar. The 'open tabs' context menu
        no longer allows the last non-ephemeral open tab to be closed (unchecked).

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        (WI._tryToRestorePendingTabs):
        Retain legacy behavior behind experimental feature setting.
        (WI.isNewTabWithTypeAllowed):

        * UserInterface/Base/Setting.js:
        * UserInterface/Main.html:

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        * UserInterface/Views/ConsoleTabContentView.js:
        (WI.ConsoleTabContentView):
        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView):
        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.prototype.fromTabInfo):
        (WI.GeneralTabBarItem.prototype.get isEphemeral):
        (WI.GeneralTabBarItem.fromTabContentViewConstructor): Deleted.

        * UserInterface/Views/LayersTabContentView.js:
        (WI.LayersTabContentView):

        * UserInterface/Views/LegacyTabBar.js: Copied from Source/WebInspectorUI/UserInterface/Views/TabBar.js.
        (WI.LegacyTabBar):
        (WI.LegacyTabBar.prototype.get newTabTabBarItem):
        (WI.LegacyTabBar.prototype.updateNewTabTabBarItemState):
        (WI.LegacyTabBar.prototype.addTabBarItem):
        (WI.LegacyTabBar.prototype.insertTabBarItem.animateTabs):
        (WI.LegacyTabBar.prototype.insertTabBarItem.removeStyles):
        (WI.LegacyTabBar.prototype.insertTabBarItem):
        (WI.LegacyTabBar.prototype.removeTabBarItem.animateTabs):
        (WI.LegacyTabBar.prototype.removeTabBarItem.removeStyles):
        (WI.LegacyTabBar.prototype.removeTabBarItem):
        (WI.LegacyTabBar.prototype.selectPreviousTab):
        (WI.LegacyTabBar.prototype.selectNextTab):
        (WI.LegacyTabBar.prototype.get selectedTabBarItem):
        (WI.LegacyTabBar.prototype.set selectedTabBarItem):
        (WI.LegacyTabBar.prototype.get tabBarItems):
        (WI.LegacyTabBar.prototype.get normalTabCount):
        (WI.LegacyTabBar.prototype.layout.forceItemHidden):
        (WI.LegacyTabBar.prototype.layout):
        (WI.LegacyTabBar.prototype._tabBarItemsFromLeftToRight):
        (WI.LegacyTabBar.prototype._findTabBarItem):
        (WI.LegacyTabBar.prototype._hasMoreThanOneNormalTab):
        (WI.LegacyTabBar.prototype._openDefaultTab):
        (WI.LegacyTabBar.prototype._recordTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._applyTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._clearTabBarItemSizesAndPositions):
        (WI.LegacyTabBar.prototype._finishExpandingTabsAfterClose.):
        (WI.LegacyTabBar.prototype._finishExpandingTabsAfterClose):
        (WI.LegacyTabBar.prototype._handleMouseDown):
        (WI.LegacyTabBar.prototype._handleClick):
        (WI.LegacyTabBar.prototype._handleMouseMoved):
        (WI.LegacyTabBar.prototype._handleMouseUp):
        (WI.LegacyTabBar.prototype._handleMouseLeave):
        (WI.LegacyTabBar.prototype._handleContextMenu):
        (WI.LegacyTabBar.prototype._handleNewTabClick):
        (WI.LegacyTabBar.prototype._handleTabPickerTabContextMenu):
        (WI.LegacyTabBar.prototype._handleNewTabMouseEnter):

        * UserInterface/Views/NetworkTabContentView.js:
        (WI.NetworkTabContentView):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView):
        (WI.NewTabContentView.tabInfo):
        (WI.NewTabContentView.isEphemeral): Deleted.
        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        (WI.SearchTabContentView.tabInfo):
        (WI.SearchTabContentView.isEphemeral): Deleted.

        * UserInterface/Views/SettingsTabContentView.js:
        (WI.SettingsTabContentView.tabInfo):
        (WI.SettingsTabContentView.prototype._createExperimentalSettingsView):
        (WI.SettingsTabContentView.isEphemeral): Deleted.

        * UserInterface/Views/StorageTabContentView.js:
        (WI.StorageTabContentView):

        * UserInterface/Views/TabBar.css:
        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype.insertTabBarItem):
        (WI.TabBar.prototype.removeTabBarItem):
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype.get normalNonEphemeralTabCount):
        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleClick):
        (WI.TabBar.prototype._handleMouseMoved):
        (WI.TabBar.prototype._handleMouseLeave):
        (WI.TabBar.prototype._handleContextMenu):
        (WI.TabBar.prototype._handleTabPickerTabContextMenu):
        (WI.TabBar.prototype.get newTabTabBarItem): Deleted.
        (WI.TabBar.prototype.updateNewTabTabBarItemState): Deleted.
        (WI.TabBar.prototype._openDefaultTab): Deleted.
        (WI.TabBar.prototype._handleNewTabClick): Deleted.
        (WI.TabBar.prototype._handleNewTabMouseEnter): Deleted.
        Remove support for the New Tab button and default tab. Without a default
        tab, there is nothing to display when no tabs are open, so prevent the
        last non-pinned tab from being removed.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser._tabBarItemRemoved):
        * UserInterface/Views/TabContentView.js:
        (WI.TabContentView.isEphemeral): Deleted.
        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):

2018-01-30  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Replace Object.shallowMerge with ES2018 spread operator
        https://bugs.webkit.org/show_bug.cgi?id=182219

        Reviewed by Brian Burg.

        * UserInterface/Base/Utilities.js:
        (Object.shallowMerge): Deleted.
        * UserInterface/Base/DOMUtilities.js:
        (WI.linkifyNodeReference):
        * UserInterface/Base/Main.js:
        (WI.handlePossibleLinkClick):
        (WI.openURL):
        (WI.showSourceCodeLocation):
        (WI.showOriginalUnformattedSourceCodeLocation):
        (WI.showOriginalOrFormattedSourceCodeLocation):
        (WI.showOriginalOrFormattedSourceCodeTextRange):
        (WI.linkifyLocation):
        * UserInterface/Views/DOMTreeElement.js:
        (WI.DOMTreeElement.prototype._insertAdjacentHTML):
        * UserInterface/Views/WebSocketContentView.js:
        (WI.WebSocketContentView.prototype._addRow):

2018-01-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Timelines content browser NavigationBar is squashed at narrow heights
        https://bugs.webkit.org/show_bug.cgi?id=182196
        <rdar://problem/36929899>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/NavigationBar.css:
        (.navigation-bar):

2018-01-26  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: improvements to tab layout and resize behavior
        https://bugs.webkit.org/show_bug.cgi?id=181468
        <rdar://problem/36395439>

        Reviewed by Devin Rousso.

        * Localizations/en.lproj/localizedStrings.js:

        * UserInterface/Images/TabPicker.svg: Added.
        New ">>" icon for the tab picker button.

        * UserInterface/Views/CanvasTabContentView.js:
        (WI.CanvasTabContentView):
        * UserInterface/Views/ConsoleTabContentView.js:
        (WI.ConsoleTabContentView):
        * UserInterface/Views/DebuggerTabContentView.js:
        (WI.DebuggerTabContentView):
        * UserInterface/Views/ElementsTabContentView.js:
        (WI.ElementsTabContentView):

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.fromTabContentViewConstructor):
        (WI.GeneralTabBarItem.prototype.get title):
        Add missing override for getter/setter pair.
        (WI.GeneralTabBarItem.prototype.set title):
        (WI.GeneralTabBarItem.prototype._handleContextMenuEvent):
        Show the close button on ephemeral tabs only (Search, New Tab).
        Replace unused `representedObject` parameter with `isEphemeral`, which
        determines whether to show a close button for the tab.

        * UserInterface/Views/LayersTabContentView.js:
        (WI.LayersTabContentView):

        * UserInterface/Views/NavigationBar.js:
        Remove unused symbol.

        * UserInterface/Views/NetworkTabContentView.js:
        (WI.NetworkTabContentView):
        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView):

        * UserInterface/Views/PinnedTabBarItem.js:
        (WI.PinnedTabBarItem):
        Remove unused parameter.

        * UserInterface/Views/ResourcesTabContentView.js:
        (WI.ResourcesTabContentView):
        * UserInterface/Views/SearchTabContentView.js:
        (WI.SearchTabContentView):
        * UserInterface/Views/StorageTabContentView.js:
        (WI.StorageTabContentView):

        * UserInterface/Views/TabBar.css:
        (.tab-bar > .item):
        (.tab-bar.calculate-width > .item):
        (.tab-bar > .item.pinned.tab-picker):
        (.tab-bar > .item > .close):
        (.tab-bar > .item > .title):
        (.tab-bar:not(.collapsed) > .item > .title):
        (.tab-bar.collapsed > .item:not(.pinned) > .icon):
        (.tab-bar > .item:hover > .close):
        (.tab-bar.collapsed > .item:hover > .close):
        (.tab-bar:not(.collapsed) > .item.ephemeral:hover > .icon):
        (.tab-bar.collapsed > .item.ephemeral:hover > .title):
        (body[dir=ltr] .tab-bar > .item > .close): Deleted.
        (body[dir=rtl] .tab-bar > .item > .close): Deleted.
        (.tab-bar > .item > .flex-space): Deleted.
        (.tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=ltr] .tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=rtl] .tab-bar > .item:not(.pinned) > .flex-space:last-child): Deleted.
        (body[dir=ltr] .tab-bar > .item > .title): Deleted.
        (body[dir=rtl] .tab-bar > .item > .title): Deleted.
        (.tab-bar.collapsed > .item): Deleted.
        (.tab-bar.collapsed > .item > .flex-space): Deleted.
        (.tab-bar.collapsed > .item > .close): Deleted.
        (body[dir=ltr] .tab-bar.collapsed > .item > .close): Deleted.
        (body[dir=rtl] .tab-bar.collapsed > .item > .close): Deleted.
        (.tab-bar.hide-titles > .item > .title): Deleted.
        (.tab-bar.collapsed:not(.hide-titles) > .item:not(.pinned):hover > .icon,): Deleted.
        (.tab-bar.collapsed:not(.hide-titles) > .item:hover > .close,): Deleted.
        Clean up tab styles and prevent tabs from shrinking during flex layout.
        Added new `calculate-width` class, to disable flex layout when measuring
        the minimum width of the TabBar required to fit all tab items.

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype.set selectedTabBarItem):
        (WI.TabBar.prototype.layout.forceItemHidden):
        (WI.TabBar.prototype.layout):
        Perform two layout passes, similar to NavigationBar. The first pass disables
        flex layout and measures tab items at full size. If the bar isn't wide enough
        to show all the tabs, hide their icons and measure again. If there still isn't
        room, hide tabs starting from the end of the bar and display the tab picker.

        (WI.TabBar.prototype._handleMouseDown):
        (WI.TabBar.prototype._handleTabPickerTabContextMenu):

        * UserInterface/Views/TabBarItem.js:
        (WI.TabBarItem):

        * UserInterface/Views/TimelineTabContentView.js:
        (WI.TimelineTabContentView):

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Table: Sort indicator is not displayed when sorted column is hidden and re-shown
        https://bugs.webkit.org/show_bug.cgi?id=182164
        <rdar://problem/36892619>

        Reviewed by Brian Burg.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype.showColumn):
        Re-add the sort classes if the column being shown is the active sort column.

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network - Cookies view should behave better at narrow widths, all data is hidden
        https://bugs.webkit.org/show_bug.cgi?id=182163
        <rdar://problem/36893241>

        Reviewed by Brian Burg.

        * UserInterface/Views/ResourceCookiesContentView.css:
        (.resource-cookies .table):
        Give these tables a reasonable minimum size so that if the inspector
        is narrow, the content view can still be scrolled to see all of
        the table data.

        * UserInterface/Views/Table.css:
        (.table > .header):
        Match the data-container and mark overflow as hidden, otherwise
        super narrow widths show header content beyond the edge.

2018-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Displayed Columns" should not be displayed in context menu if all columns are required columns
        https://bugs.webkit.org/show_bug.cgi?id=182162
        <rdar://problem/36893758>

        Reviewed by Matt Baker.

        * UserInterface/Views/Table.js:
        (WI.Table.prototype._handleHeaderContextMenu):
        Only add the header column when we know there are hideable columns.

2018-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Simplify update-LegacyInspectorBackendCommands.rb
        https://bugs.webkit.org/show_bug.cgi?id=182067

        Reviewed by Brian Burg.

        * Scripts/update-LegacyInspectorBackendCommands.rb:
        Remove stale dependency_json, it has always been empty for a while now.
        Switch to framework WebInspectorUI to generate only the backend commands
        and not spend time generating a bunch of cpp files.

2018-01-24  Nikita Vasilyev  <nvasilyev@apple.com>

        REGRESSION (r226994): Web Inspector: Styles: Suggestions popover floats in top-left corner of Web Inspector after tabbing
        https://bugs.webkit.org/show_bug.cgi?id=182027

        Reviewed by Matt Baker.

        r226994 added a layout of all properties on property removal. Layout caused
        a property element to be removed from DOM right before dislaying the suggestion
        popover, resulting in the popover being displayed at the top left corner.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.layout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        Only update property view indices when a property is removed.

        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype.set index):

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):
        Checking this._element.parentNode to see if the element is attached to the DOM tree is unreliable,
        since the element may have a non-null parent node that is detached from the DOM tree. To fix that,
        we could traverse element's ancestors, but I used a concise isConnected property instead.

2018-01-24  Joseph Pecoraro  <pecoraro@apple.com>

        ReferenceError:​ Can't find variable:​ DOMAgent (at ScriptSyntaxTree.js:​178:​22)​
        https://bugs.webkit.org/show_bug.cgi?id=182059

        Reviewed by Matt Baker.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WI.ScriptSyntaxTree.functionReturnDivot):
        DOMAgent won't be available in a ServiceWorker or JSContext inspector. So add
        a check for DOMAgent, and assume if DOMAgent doesn't exist that we should fall
        back to the latest path (non-iOS 9) target.

2018-01-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network's columns shake when scrolling at non-default zoom level
        https://bugs.webkit.org/show_bug.cgi?id=181998
        <rdar://problem/36449808>

        Reviewed by Matt Baker.

        * UserInterface/Views/Table.js:
        When zoomed the bounding client rect values were fractional, which was
        unexpected by this area of code. Floor the values to get a value we expect
        to be able to evenly distribute.

2018-01-22  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: data corruption when updating values quickly
        https://bugs.webkit.org/show_bug.cgi?id=179461
        <rdar://problem/35431882>

        Reviewed by Joseph Pecoraro.

        Data corruption used to happen because CSSStyleDeclaration.prototype.text didn't
        update synchronously. Making two or more quick changes resulted in corrupted data.

        Imagine we modify a CSS value 3 times:

        Front-end:  (1)-(2)---(3)
        Back-end:          (1)-----(2)-(3)

        The first response from the backend could happen after the 2nd edit. In this patch,
        CSSStyleDeclaration is locked when its view is being edited.

        To correctly display invalid and overridden properties, the backend is allowed to update
        CSSStyleDeclaration and CSSProperty when they're locked if the text from the backend
        matches the model's text. This should happen when the backend is caught up with the
        front-end changes.

        * UserInterface/Models/CSSProperty.js:
        (WI.CSSProperty.prototype.update):
        * UserInterface/Models/CSSStyleDeclaration.js:
        (WI.CSSStyleDeclaration):
        (WI.CSSStyleDeclaration.prototype.get locked):
        (WI.CSSStyleDeclaration.prototype.set locked):
        (WI.CSSStyleDeclaration.prototype.set text):

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.initialLayout):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.detached):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.get editing):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set focused):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.set inlineSwatchActive):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.stylePropertyInlineSwatchActivated):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.stylePropertyInlineSwatchDeactivated):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._propertiesChanged):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._updateStyleLock):
        Lock CSSStyleDeclaration when a CSS property name or value is focused or
        an inline widget is active.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationSection.js:
        (WI.SpreadsheetCSSStyleDeclarationSection):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleMouseDown):
        (WI.SpreadsheetCSSStyleDeclarationSection.prototype._handleClick):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty):
        (WI.SpreadsheetStyleProperty.prototype._createInlineSwatch):
        When selector is focused, clicking on the white-space should not add a new blank property.

2018-01-19  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers tab should do away with popovers (if possible)
        https://bugs.webkit.org/show_bug.cgi?id=181805

        Reviewed by Matt Baker.

        * Localizations/en.lproj/localizedStrings.js:
        Remove superfluous colon from a string.

        * UserInterface/Main.html:
        * UserInterface/Views/LayerDetailsSidebarPanel.css:
        * UserInterface/Views/Layers3DContentView.css: Added.
        Remove popover styling from sidebar, add new file with similar styling for canvas overlay.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel):
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        (WI.LayerDetailsSidebarPanel.prototype._dataGridSelectedNodeChanged):
        (WI.LayerDetailsSidebarPanel.prototype._updateLayers):
        (WI.LayerDetailsSidebarPanel.prototype._updateBottomBar):
        (WI.LayerDetailsSidebarPanel.prototype.willDismissPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._showPopoverForSelectedNode): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._presentPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._contentForPopover): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._populateListOfCompositingReasons.addReason): Deleted.
        (WI.LayerDetailsSidebarPanel.prototype._populateListOfCompositingReasons): Deleted.
        * UserInterface/Views/Layers3DContentView.js:
        (WI.Layers3DContentView):
        (WI.Layers3DContentView.prototype.shown):
        (WI.Layers3DContentView.prototype.selectLayerById):
        (WI.Layers3DContentView.prototype._canvasMouseDown):
        (WI.Layers3DContentView.prototype._buildLayerInfoElement):
        (WI.Layers3DContentView.prototype._updateLayerInfoElement):
        (WI.Layers3DContentView.prototype._updateReasonsList):
        Remove popover from sidebar table, overlay div with same data arrangement on top of the canvas.
        Also reverse the fix from r226671 since the visualization is no longer unusable without the sidebar!

2018-01-19  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas Tab: Multiple "waiting for frames" messages displayed
        https://bugs.webkit.org/show_bug.cgi?id=181865
        <rdar://problem/36664737>

        Reviewed by Devin Rousso.

        * UserInterface/Views/CanvasContentView.js:
        (WI.CanvasContentView.prototype._recordingStarted):
        (WI.CanvasContentView.prototype._recordingStopped):

2018-01-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: tabbing on commented out property throws exception
        https://bugs.webkit.org/show_bug.cgi?id=180676
        <rdar://problem/35981058>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingFirstProperty):
        Tabbing from the selector field should focus on the first editable property.
        When no editable properties are present, a new blank property should be added after the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.startEditingLastProperty):
        Shift-tabbing from the selector field should focus on the last editable property of the previous CSS rule.
        When no editable properties are present, a new blank property should be added after the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetCSSStyleDeclarationEditorFocusMoved):
        When navigating between properties skip the commented out ones.

        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._editablePropertyAfter):
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype._editablePropertyBefore):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype.get enabled):
        (WI.SpreadsheetStyleProperty.prototype._update):

2018-01-19  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Make styles sidebar always LTR
        https://bugs.webkit.org/show_bug.cgi?id=175357
        <rdar://problem/33787988>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetRulesStyleDetailsPanel.js:
        (WI.SpreadsheetRulesStyleDetailsPanel):

2018-01-19  Keith Miller  <keith_miller@apple.com>

        HaveInternalSDK includes should be "#include?"
        https://bugs.webkit.org/show_bug.cgi?id=179670

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2018-01-18  Dan Bernstein  <mitz@apple.com>

        [Xcode] Streamline and future-proof target-macOS-version-dependent build setting definitions
        https://bugs.webkit.org/show_bug.cgi?id=181803

        Reviewed by Tim Horton.

        * Configurations/Base.xcconfig: Updated.
        * Configurations/DebugRelease.xcconfig: Ditto.
        * Configurations/Version.xcconfig: Ditto.

2018-01-18  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: Canvas Tab: record button on canvas card doesn't always show on hover, or is misplaced
        https://bugs.webkit.org/show_bug.cgi?id=179183

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.css:
        (.content-view.canvas-overview .content-view.canvas:not(.is-recording) > header > .navigation-bar > .item.record-start-stop): Deleted.

2018-01-17  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: clicking on a path component that has no siblings should select it
        https://bugs.webkit.org/show_bug.cgi?id=181772

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent.prototype._updateSelectElement):
        (WI.HierarchicalPathComponent.prototype._selectElementMouseDown):

2018-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add back localized strings for Styles sidebar panels
        https://bugs.webkit.org/show_bug.cgi?id=181748
        <rdar://problem/36583184>

        Reviewed by Brian Burg.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ComputedStyleDetailsSidebarPanel.js:
        (WI.ComputedStyleDetailsSidebarPanel):
        * UserInterface/Views/RulesStyleDetailsSidebarPanel.js:
        (WI.RulesStyleDetailsSidebarPanel):
        * UserInterface/Views/VisualStyleDetailsSidebarPanel.js:
        (WI.VisualStyleDetailsSidebarPanel):
        Add back localized strings for panel titles lost in r225547.

2018-01-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Super long URL string causes bad wrapping in Resources detail sidebar
        https://bugs.webkit.org/show_bug.cgi?id=181617

        Reviewed by Brian Burg.

        * UserInterface/Views/DetailsSection.css:
        (.details-section > .content > .group > .row.simple > .value):
        Set the break to all characters.

2018-01-16  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: typing a "space" in the QuickConsole shouldn't trigger a recording
        https://bugs.webkit.org/show_bug.cgi?id=181706
        <rdar://problem/36558221>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/CanvasOverviewContentView.js:
        (WI.CanvasOverviewContentView):
        (WI.CanvasOverviewContentView.prototype._handleSpace):

2018-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Make Console's Execution Context picker stand out when it is non-default
        https://bugs.webkit.org/show_bug.cgi?id=181628
        <rdar://problem/36492044>

        Reviewed by Matt Baker.

        * UserInterface/Views/HierarchicalPathComponent.css:
        (.hierarchical-path-component > .selector-arrows):
        * UserInterface/Views/HierarchicalPathComponent.js:
        (WI.HierarchicalPathComponent.prototype.set selectorArrows):
        Switch to SVG element so we can style the arrows.

        * UserInterface/Views/QuickConsole.css:
        (.quick-console > .navigation-bar > .hierarchical-path .execution-context):
        (.quick-console > .navigation-bar > .hierarchical-path .execution-context .separator):
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context):
        (.quick-console > .navigation-bar > .hierarchical-path.non-default-execution-context .execution-context .selector-arrows):
        Styles for the execution context picker. We hide the unused separator
        and instead use margin so that the selected background and border don't
        have an extra 7px on the right/end side.

        * UserInterface/Views/QuickConsole.js:
        (WI.QuickConsole.prototype._activeExecutionContextChanged):
        Toggle the non-default class name on the path.

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles: pressing down key should select first item from completion list when focusing on empty value
        https://bugs.webkit.org/show_bug.cgi?id=181633
        <rdar://problem/36501797>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetTextField.js:
        (WI.SpreadsheetTextField.prototype._updateCompletions):

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: Long value causes bad wrapping
        https://bugs.webkit.org/show_bug.cgi?id=181618
        <rdar://problem/36485175>

        Reviewed by Joseph Pecoraro.

        Wrap long values only when editing.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .value.editing):

2018-01-16  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: clicking on the white space after the property sometimes places a blank property at the wrong index
        https://bugs.webkit.org/show_bug.cgi?id=179585
        <rdar://problem/35490780>

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.js:
        (WI.SpreadsheetCSSStyleDeclarationEditor.prototype.spreadsheetStylePropertyRemoved):
        Layout call is needed to update data-property-index attributes on the property views.

2018-01-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Network Tab - Export HAR Context Menu not working
        https://bugs.webkit.org/show_bug.cgi?id=181694
        <rdar://problem/36479197>

        Reviewed by Brian Burg.

        * UserInterface/Views/NetworkTableContentView.js:
        (WI.NetworkTableContentView.prototype.tableCellContextMenuClicked):
        Ensure `this` works in the handler.

2018-01-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: TabBar redesign: add context menu to TabBar for toggling available tabs
        https://bugs.webkit.org/show_bug.cgi?id=181448
        <rdar://problem/36383298>

        Reviewed by Devin Rousso.

        * UserInterface/Base/Main.js:
        (WI.loaded):
        (WI.contentLoaded):
        Reorder production tab classes and default (open) tabs.
        (WI.registerTabClass): Removed.
        Not used.

        * UserInterface/Base/Object.js:
        Remove notification that is no longer used.

        * UserInterface/Views/GeneralTabBarItem.js:
        (WI.GeneralTabBarItem):
        (WI.GeneralTabBarItem.prototype.set title):
        (WI.GeneralTabBarItem.prototype._handleContextMenuEvent): Deleted.
        Remove per-tab context menu (provided Close Tab and Close Other Tabs).

        * UserInterface/Views/NewTabContentView.js:
        (WI.NewTabContentView):

        * UserInterface/Views/TabBar.js:
        (WI.TabBar):
        (WI.TabBar.prototype._handleContextMenu):

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser):
        (WI.TabBrowser._handleNewTabContextMenu): Deleted.
        No longer needed.

2018-01-13  Nikita Vasilyev  <nvasilyev@apple.com>

        Web Inspector: Styles Redesign: properties should never be semitransparent or crossed out while editing
        https://bugs.webkit.org/show_bug.cgi?id=180793
        <rdar://problem/36038813>

        Reviewed by Devin Rousso.

        * UserInterface/Views/SpreadsheetCSSStyleDeclarationEditor.css:
        (.spreadsheet-style-declaration-editor .value.editing):
        (.spreadsheet-style-declaration-editor .property:matches(.invalid-name, .other-vendor, .overridden):not(.disabled) .content > *):
        (.spreadsheet-style-declaration-editor .property.invalid-name:not(.disabled) .content > *):
        (.spreadsheet-style-declaration-editor .property.invalid-value:not(.disabled) .content .value):
        (.spreadsheet-style-declaration-editor .property.not-inherited .content > *):
        * UserInterface/Views/SpreadsheetStyleProperty.js:
        (WI.SpreadsheetStyleProperty.prototype._update):

2018-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Drop support for iOS 7 targets
        https://bugs.webkit.org/show_bug.cgi?id=181549
        <rdar://problem/36444813>

        Reviewed by Brian Burg.

        * Versions/Inspector-iOS-7.0.json: Removed.
        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js: Removed.
        Remove protocol snapshot and generated commands for iOS 7.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/BreakpointPopoverController.js:
        (WI.BreakpointPopoverController.prototype._createPopoverContent):
        * UserInterface/Controllers/DebuggerManager.js:
        (WI.DebuggerManager.prototype._setBreakpoint):
        * UserInterface/Controllers/SourceMapManager.js:
        (WI.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/Instrument.js:
        (WI.Instrument.startLegacyTimelineAgent):
        * UserInterface/Models/ResourceTimingData.js:
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WI.ScriptTimelineRecord.EventType.displayName):
        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource.prototype.requestContentFromBackend):
        * UserInterface/Protocol/CSSObserver.js:
        (WI.CSSObserver.prototype.regionLayoutUpdated): Deleted.
        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.fromPayload):
        Remove code that was only necessary to support iOS 7.

2018-01-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Support JSX (React) syntax highlighting
        https://bugs.webkit.org/show_bug.cgi?id=181607
        <rdar://problem/36442564>

        Reviewed by Brian Burg.

        * UserInterface/Base/MIMETypeUtilities.js:
        (WI.mimeTypeForFileExtension):
        (WI.fileExtensionForMIMEType):
        * UserInterface/Models/Resource.js:
        Support the jsx extension and mime types.

        * UserInterface/Main.html:
        * Scripts/update-codemirror-resources.rb:
        * UserInterface/External/CodeMirror/jsx.js: Added.
        Include new mode from CodeMirror@d8926768.

2018-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Rename "Query String" section as "Query String Parameters" for clarity
        https://bugs.webkit.org/show_bug.cgi?id=181464

        Reviewed by Darin Adler.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ResourceHeadersContentView.js:
        (WI.ResourceHeadersContentView.prototype.initialLayout):

2018-01-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused variable in WI.DebuggerSidebarPanel
        https://bugs.webkit.org/show_bug.cgi?id=181517

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r218975): Web Inspector: Add back NavigationSidebarPanel initialization parameter used by SearchSidebarPanel (top overflow shadow)
        https://bugs.webkit.org/show_bug.cgi?id=181518
        <rdar://problem/36427197>

        Reviewed by Matt Baker.

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .overflow-shadow.top):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WI.NavigationSidebarPanel):
        Add back the initialization parameter still used by SearchSidebarPanel
        and add back its implementation. There were still references to
        dynamically update _topOverflowShadowElement in NavigationSidebarPanel.

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Incorrect check with WI.debuggableType
        https://bugs.webkit.org/show_bug.cgi?id=181515
        <rdar://problem/36425509>

        Reviewed by Brian Burg.

        * UserInterface/Base/Main.js:
        (WI.contentLoaded):
        This moved to WI.sharedApp a while ago.

2018-01-10  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Canvas tab: throttle recording slider updates
        https://bugs.webkit.org/show_bug.cgi?id=180839
        <rdar://problem/36057849>

        Reviewed by Joseph Pecoraro

        * UserInterface/Base/Utilities.js:
        Add Object.throttle and Function.cancelThrottle. Repeated calls to a
        function on a throttled object are delayed, so that the function isn't
        invoked more frequently than the specified delay value.

        For a description of throttling behavior see:
          - http://www.chrislondon.co/throttling-vs-debouncing
          - http://benalman.com/projects/jquery-throttle-debounce-plugin

        * UserInterface/Views/RecordingContentView.js:
        (WI.RecordingContentView.prototype.updateActionIndex):
        Throttle frequency of canvas snapshot creation to 200ms.
        (WI.RecordingContentView.prototype.hidden):
        Prevent trailing edge call after hiding the view.

2018-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Should not try to autocomplete subsections of a string
        https://bugs.webkit.org/show_bug.cgi?id=181461
        <rdar://problem/36369421>

        Reviewed by Brian Burg.

        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        (WI.CodeMirrorCompletionController.prototype._completeAtCurrentPosition):
        Disable autocompletion within strings.

2018-01-09  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION(r201855): Web Inspector: Should see "length" autocompletion suggestion on a string literal
        https://bugs.webkit.org/show_bug.cgi?id=181462
        <rdar://problem/36390699>

        Reviewed by Matt Baker.

        * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js:
        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded.inspectedPage_evalResult_getCompletions):
        This is code that runs on the inspected target, which may have an old version of
        WebKit/JavaScriptCore, so don't use new syntax like this.

        (WI.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded):
        We intended to return the result by as a JSON value instead of a RemoteObject.

2018-01-09  Ross Kirsling  <ross.kirsling@sony.com>

        Web Inspector: Layers sidebar shows popover on selection even when collapsed
        https://bugs.webkit.org/show_bug.cgi?id=181465

        Reviewed by Matt Baker.

        * UserInterface/Views/LayerDetailsSidebarPanel.js:
        (WI.LayerDetailsSidebarPanel.prototype.selectNodeByLayerId):
        Have sidebar show itself if necessary before displaying popover.

2018-01-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Find next / previous within a resource content view does not have bouncy highlight when editor scrolls
        https://bugs.webkit.org/show_bug.cgi?id=181279
        <rdar://problem/36291097>

        Reviewed by Brian Burg.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype._revealSearchResult):
        Reposition the bouncy highlight on scroll based on the CodeMirror
        line/ch position of the search result.

        (WI.TextEditor.prototype._removeBouncyHighlightElementIfNeeded):
        Track the bouncy highlight scroll handler in a member variable so that
        we always remember to remove it and don't leak scroll handlers.

2018-01-07  David Kilzer  <ddkilzer@apple.com>

        Enable -Wcast-qual for WebInspectorUI, WebKitLegacy, WebKit projects
        <https://webkit.org/b/181256>
        <rdar://problem/36281730>

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        (WARNING_CFLAGS): Add -Wcast-qual.

2018-01-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add another Protocol Version
        https://bugs.webkit.org/show_bug.cgi?id=181354
        <rdar://problem/35432817>

        Reviewed by Matt Baker.

        * UserInterface/Protocol/Legacy/11.3/InspectorBackendCommands.js: Added.
        * Versions/Inspector-iOS-11.3.json: Added.

2018-01-04  Devin Rousso  <webkit@devinrousso.com>

        Web Inspector: replace HTMLCanvasElement with CanvasRenderingContext for instrumentation logic
        https://bugs.webkit.org/show_bug.cgi?id=180770

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Canvas.js:
        (WI.Canvas.fromPayload):
        (WI.Canvas.prototype.get contextType):
        (WI.Canvas.prototype.saveIdentityToCookie):
        (WI.Canvas.prototype.get frame): Deleted.

2018-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION (r225709): Web Inspector: CSS Source maps not loading
        https://bugs.webkit.org/show_bug.cgi?id=181314
        <rdar://problem/36177620>

        Reviewed by Brian Burg.

        * UserInterface/Controllers/SourceMapManager.js:
        (WI.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/SourceMapResource.js:
        (WI.SourceMapResource.prototype.requestContentFromBackend):
        Correct this so that we only fall back to a reasonable frame id
        if we couldn't determine a frame id from earlier. Previously this
        was incorrectly clearing the frame id if we had gotten it earlier.

        * UserInterface/Test.html:
        * UserInterface/Test/Test.js:
        (WI.loaded):
        Add SourceMap related files for tests.

2018-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: Capture Element Screenshot looks fuzzy
        https://bugs.webkit.org/show_bug.cgi?id=175734
        <rdar://problem/33803377>

        Reviewed by Joseph Pecoraro and Simon Fraser.

        Spruce up these functions a bit. They now optionally return a promise
        if no callback is supplied. They now can take either a WI.DOMNode or a node id.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WI.DOMTreeManager.prototype.querySelector):
        (WI.DOMTreeManager.prototype.querySelectorAll):

2018-01-04  Brian Burg  <bburg@apple.com>

        Web Inspector: add RemoteObject.fetchProperties and some basic tests for RemoteObject API
        https://bugs.webkit.org/show_bug.cgi?id=180945

        Reviewed by Joseph Pecoraro.

        Add a new method, fetchProperties, which async fetches an arbitrary list of properties
        from a RemoteObject. This is intended for writing tests and other quick evaluations,
        so it has some behaviors that are suitable in these situations:
        - If the evaluation throws an exception, the result will reject with that exception.
        - If there is a protocol error for some reason, the result will reject with an exception.
        - Non-string and non-number keys cause an exception, as this is probably not intended.
        - Does not accept a callback, returns a promise only. New code should use async.

        For full fidelity introspection of property descriptors, clients should use the existing
        getOwnPropertyDescriptor[s] class of methods.

        * UserInterface/Protocol/RemoteObject.js:
        (WI.RemoteObject.prototype.async.fetchProperties): Added.
        - Validate specified keys and remove duplicates.
        - Request properties one-by-one to avoid fetching all descriptors and dealing with previews.
        - Unwrap returned primitive values to avoid unnecessary munging in tests.

        (WI.RemoteObject.prototype.getProperty):
        - Rework this to return a promise if no callback was supplied.
        - Introduce stricter property type checking to avoid unintended mistakes.

        (WI.RemoteObject.prototype.callFunction):
        - Rework this to return a promise if no callback was supplied.
        - Turn thrown exceptions and protocol errors into rejected promises.

2018-01-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: ⌘G / ⇧⌘G text search does not working after closing find banner
        https://bugs.webkit.org/show_bug.cgi?id=181280
        <rdar://problem/36291175>

        Reviewed by Matt Baker.

        * UserInterface/Views/ContentBrowser.js:
        (WI.ContentBrowser.prototype._findBannerDidHide):
        When the find banner is hidden trigger a new ContentView method,
        searchHidden instead of the destructive searchCleared. This allows
        most content views (text editors, DOM tree, Network Headers view)
        to keep their populated search results.

        * UserInterface/Views/ContentView.js:
        (WI.ContentView.prototype.searchHidden):
        * UserInterface/Views/LogContentView.js:
        (WI.LogContentView.prototype.searchHidden):
        By default searchHidden does nothing. The Console's LogContentView
        treats the find banner differently and clears its search results.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.searchCleared):
        Modernize some code while working in this area.

        * UserInterface/Views/Main.css:
        (.bouncy-highlight):
        Ensure black text on yellow background in the bouncy highlight. In the
        DOM Tree it could have been white if the find banner was closed.

2018-01-03  Ting-Wei Lan  <lantw44@gmail.com>

        Replace hard-coded paths in shebangs with #!/usr/bin/env
        https://bugs.webkit.org/show_bug.cgi?id=181040

        Reviewed by Alex Christensen.

        * Scripts/combine-resources.pl:
        * Scripts/copy-user-interface-resources-dryrun.rb:
        * Scripts/copy-user-interface-resources.pl:
        * Scripts/fix-worker-imports-for-optimized-builds.pl:
        * Scripts/remove-console-asserts-dryrun.rb:
        * Scripts/remove-console-asserts.pl:
        * Scripts/update-LegacyInspectorBackendCommands.rb:
        * Scripts/update-codemirror-resources.rb:
        * WebInspectorUI.vcxproj/build-webinspectorui.pl:

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Log Value" context menu is sometimes unavailable
        https://bugs.webkit.org/show_bug.cgi?id=181278
        <rdar://problem/36281649>

        Reviewed by Devin Rousso.

        * UserInterface/Views/ObjectPreviewView.css:
        (.object-preview > .title):
        * UserInterface/Views/ObjectTreeView.css:
        (.object-tree.expanded > .title):
        Make the expanded object title information 16px tall to match ObjectTree
        tree element row heights. This eliminates the floating console message
        location from overlapping the first ObjectTree's TreeElement and causing
        truncation and other behavior issues (like Context Menu identification).

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: RTL - DOM Tree Element selection doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=181275
        <rdar://problem/36290450>

        Reviewed by Devin Rousso.

        * UserInterface/Views/TreeOutline.js:
        (WI.TreeOutline.prototype.treeElementFromEvent):
        Provide a better explanation for why we are making the `x` adjustment here,
        to detect the inner most tree element along the horizontal. Fix the algorithm
        for RTL, since the intent is to adjust to the trailing edge of the container
        which is on the opposite side in RTL.

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Find banner sometimes does not work (when already populated and shown for first time on resource)
        https://bugs.webkit.org/show_bug.cgi?id=181255
        <rdar://problem/36248855>

        Reviewed by Matt Baker.

        * UserInterface/Views/TextEditor.js:
        (WI.TextEditor.prototype.set string):
        Defer any early searches until the initial content of a TextEditor has been set.
        Such searches can happen when the FindBanner already has content when a
        ContentView is first opened and needs to load its content from the backend.
        Further, even though the content may be loaded from the backend before the
        search results, microtask hops might cause the content to get to the TextEditor
        after the search results.

2018-01-03  Joseph Pecoraro  <pecoraro@apple.com>

        REGRESSION: Web Inspector: Debugger tab doesn't restore selected resource on reload
        https://bugs.webkit.org/show_bug.cgi?id=181253
        <rdar://problem/36280564>

        Reviewed by Matt Baker.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WI.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        Add braces to ensure the trailing else is actually trailing the outer
        chain as it was intended to be.

2018-01-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Clicking source location link in Console unexpectedly jumps to Network tab
        https://bugs.webkit.org/show_bug.cgi?id=181229
        <rdar://problem/36075219>

        Reviewed by Matt Baker.

        * UserInterface/Base/Main.js:
        Cleanup linkifyURLAsNode. Ignore Search tab in generic handlePossibleLinkClick
        when not already in the Search tab.

        * UserInterface/Views/CallFrameView.js:
        (WI.CallFrameView):
        Ignore Search and Network tab in CallFrame links.

        * UserInterface/Views/TabBrowser.js:
        (WI.TabBrowser.prototype.bestTabContentViewForRepresentedObject):
        Improve style.

== Rolled over to ChangeLog-2018-01-01 ==
