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