ChangeLog   [plain text]


2018-02-12  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r228362. rdar://problem/37449316

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r228336. rdar://problem/37408902

    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-09  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r228301. rdar://problem/37408879

    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-09  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r228296. rdar://problem/37408890

    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-04  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r228030. rdar://problem/37220121

    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-01-30  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227707. rdar://problem/37019463

    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-30  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227666. rdar://problem/37019530

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227585. rdar://problem/36873363

    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-25  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227572. rdar://problem/36873386

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227463. rdar://problem/36807123

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227370. rdar://problem/36763189

    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-22  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227243. rdar://problem/36722430

    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-22  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227232. rdar://problem/36722564

    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-22  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227228. rdar://problem/36722601

    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-22  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227008. rdar://problem/36722458

    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-17  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r227078. rdar://problem/36597996

    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-16  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226995. rdar://problem/36568070

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226996. rdar://problem/36568089

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226994. rdar://problem/36568074

    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  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226992. rdar://problem/36568053

    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-16  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226821. rdar://problem/36568038

    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-16  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226765. rdar://problem/36568045

    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-16  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226674. rdar://problem/36568078

    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-11  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226755. rdar://problem/36429123

    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-09  Jason Marcell  <jmarcell@apple.com>

        Cherry-pick r226517. rdar://problem/36392371

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