2014-11-13  Andres Gomez  <agomez@igalia.com>

        Web Inspector: Replace PDF icon with SVG version
        https://bugs.webkit.org/show_bug.cgi?id=137296

        Reviewed by Timothy Hatcher.

        Add another free icon for the Web Inspector in GTK+.

        * UserInterface/Images/gtk/NavigationItemProbes.svg: Added.

2014-11-13  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Replace PDF Probes icon with SVG version
        https://bugs.webkit.org/show_bug.cgi?id=137296

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/NavigationItemProbes.pdf: Removed.
        * UserInterface/Images/NavigationItemProbes.svg: Added.
        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        (WebInspector.ProbeDetailsSidebarPanel): Use NavigationItemProbes.svg.

2014-11-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Reduce work when activating multiple agents sequentially
        https://bugs.webkit.org/show_bug.cgi?id=138677

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WebInspector.activateExtraDomains):
        * UserInterface/Controllers/FrameResourceManager.js:
        (WebInspector.FrameResourceManager.prototype._extraDomainsActivated):
        * UserInterface/Controllers/StorageManager.js:
        (WebInspector.StorageManager.prototype._extraDomainsActivated):

2014-11-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Handle activating extra agents properly after inspector has connected
        https://bugs.webkit.org/show_bug.cgi?id=138639

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WebInspector.activateExtraDomains):

2014-11-11  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Main.js missing many trailing semicolons
        https://bugs.webkit.org/show_bug.cgi?id=138624

        Add semicolons to function variable assignments.

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js: Added semicolons.

2014-11-10  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Update Esprima, remove WebInspector.Esprima global.
        https://bugs.webkit.org/show_bug.cgi?id=138579

        Reviewed by Timothy Hatcher.

        Update esprima.js file to be unchanged by removing WebInspector.Esprima global object. Move esprima.js include
        so that all external libraries load before the WebInspector namespace is declared in the combined Main.js.

        * UserInterface/External/Esprima/esprima.js: File updated, no changes made.
        * UserInterface/Main.html: esprima.js script tag moved up with other externals.
        * UserInterface/Models/ScriptSyntaxTree.js: WebInspector.Esprima changed to esprima
        (WebInspector.ScriptSyntaxTree):

2014-11-10  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Add infrastructure for eslint based static analyzer
        https://bugs.webkit.org/show_bug.cgi?id=137890

        Reviewed by Timothy Hatcher.

        Fix to previous patch to add AnalyzerManager and AnalyzerMessage classes. Changed Main.html to include ESLint.js
        before Main.js in the combined resources.

        * UserInterface/Base/Main.js:
        * UserInterface/Controllers/AnalyzerManager.js: Added.
        (WebInspector.AnalyzerManager):
        (set WebInspector.AnalyzerManager.prototype.getAnalyzerMessagesForSourceCode.):
        (set WebInspector.AnalyzerManager.prototype.getAnalyzerMessagesForSourceCode):
        (set WebInspector.AnalyzerManager.prototype.set get sourceCodeCanBeAnalyzed):
        (set WebInspector.AnalyzerManager.prototype._handleSourceCodeContentDidChange):
        * UserInterface/Main.html:
        * UserInterface/Models/AnalyzerMessage.js: Added.
        (WebInspector.AnalyzerMessage):
        (WebInspector.AnalyzerMessage.prototype.get sourceCodeLocation):
        (WebInspector.AnalyzerMessage.prototype.get sourceCode):
        (WebInspector.AnalyzerMessage.prototype.get text):
        (WebInspector.AnalyzerMessage.prototype.get ruleIdentifier):
        * UserInterface/Models/SourceCode.js:

2014-11-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: decouple child element folderization logic from FrameTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=138364

        Reviewed by Timothy Hatcher.

        Created FolderizedTreeElement base class, which FrameTreeElement now inherits via SourceCodeTreeElement.
        FolderizedTreeElement uses settings provided by derived classes for labeling subfolders and to determine
        folder membership for child items.

        * UserInterface/Base/Main.js:
        (WebInspector.canArchiveMainFrame):
        * UserInterface/Main.html:
        * UserInterface/Models/LayoutTimelineRecord.js:
        (WebInspector.LayoutTimelineRecord.displayNameForEventType):
        (WebInspector.LayoutTimelineRecord.EventType.displayName): Deleted.
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.typeFromMIMEType):
        (WebInspector.Resource.displayNameForType):
        (WebInspector.Resource.prototype.get syntheticMIMEType):
        (WebInspector.Resource.prototype.updateForResponse):
        (WebInspector.Resource.Type.fromMIMEType): Deleted.
        (WebInspector.Resource.Type.displayName): Deleted.
        * UserInterface/Models/SourceMapResource.js:
        (WebInspector.SourceMapResource):
        * UserInterface/Views/FolderizedTreeElement.js: Added.
        (WebInspector.FolderizedTreeElement):
        (WebInspector.FolderizedTreeElement.prototype.get groupedIntoFolders):
        (WebInspector.FolderizedTreeElement.prototype.set folderSettingsKey):
        (WebInspector.FolderizedTreeElement.prototype.registerFolderizeSettings):
        (WebInspector.FolderizedTreeElement.prototype.set removeChildren):
        (WebInspector.FolderizedTreeElement.prototype.addChildForRepresentedObject):
        (WebInspector.FolderizedTreeElement.prototype.addRepresentedObjectToNewChildQueue):
        (WebInspector.FolderizedTreeElement.prototype.removeChildForRepresentedObject):
        (WebInspector.FolderizedTreeElement.prototype.compareChildTreeElements):
        (WebInspector.FolderizedTreeElement.prototype.updateParentStatus):
        (WebInspector.FolderizedTreeElement.prototype._clearNewChildQueue):
        (WebInspector.FolderizedTreeElement.prototype._populateFromNewChildQueue):
        (WebInspector.FolderizedTreeElement.prototype._removeRepresentedObjectFromNewChildQueue):
        (WebInspector.FolderizedTreeElement.prototype._addTreeElement):
        (WebInspector.FolderizedTreeElement.prototype._compareTreeElementsByMainTitle):
        (WebInspector.FolderizedTreeElement.prototype._insertFolderTreeElement):
        (WebInspector.FolderizedTreeElement.prototype._insertChildTreeElement):
        (WebInspector.FolderizedTreeElement.prototype._removeTreeElement):
        (WebInspector.FolderizedTreeElement.prototype._parentTreeElementForRepresentedObject):
        (WebInspector.FolderizedTreeElement.prototype._folderTreeElementExpandedStateChange):
        (WebInspector.FolderizedTreeElement.prototype._settingsForRepresentedObject):
        (WebInspector.FolderizedTreeElement.prototype._shouldGroupIntoFolders.pushCategory):
        (WebInspector.FolderizedTreeElement.prototype._shouldGroupIntoFolders):
        * UserInterface/Views/FrameTreeElement.js:
        (.this):
        (WebInspector.FrameTreeElement.prototype.updateSourceMapResources):
        (WebInspector.FrameTreeElement.prototype.onattach):
        (WebInspector.FrameTreeElement.prototype.ondetach):
        (WebInspector.FrameTreeElement.prototype.compareChildTreeElements):
        (WebInspector.FrameTreeElement.prototype.onpopulate):
        (WebInspector.FrameTreeElement.prototype._mainResourceDidChange):
        (WebInspector.FrameTreeElement.prototype._resourceWasAdded):
        (WebInspector.FrameTreeElement.prototype._resourceWasRemoved):
        (WebInspector.FrameTreeElement.prototype._childFrameWasAdded):
        (WebInspector.FrameTreeElement.prototype._childFrameWasRemoved):
        (WebInspector.FrameTreeElement.prototype._childContentFlowWasAdded):
        (WebInspector.FrameTreeElement.prototype._childContentFlowWasRemoved):
        (WebInspector.FrameTreeElement.prototype._rootDOMNodeInvalidated):
        (WebInspector.FrameTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype.removeChildren): Deleted.
        (WebInspector.FrameTreeElement.prototype._updateParentStatus): Deleted.
        (WebInspector.FrameTreeElement.prototype._addRepresentedObjectToNewChildQueue): Deleted.
        (WebInspector.FrameTreeElement.prototype._removeRepresentedObjectFromNewChildQueue): Deleted.
        (WebInspector.FrameTreeElement.prototype._populateFromNewChildQueue): Deleted.
        (WebInspector.FrameTreeElement.prototype._clearNewChildQueue): Deleted.
        (WebInspector.FrameTreeElement.prototype._addChildForRepresentedObject): Deleted.
        (WebInspector.FrameTreeElement.prototype._removeChildForRepresentedObject): Deleted.
        (WebInspector.FrameTreeElement.prototype._addTreeElementForRepresentedObject): Deleted.
        (WebInspector.FrameTreeElement.prototype._addTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype._compareTreeElementsByMainTitle): Deleted.
        (WebInspector.FrameTreeElement.prototype._insertFolderTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype._compareResourceTreeElements): Deleted.
        (WebInspector.FrameTreeElement.prototype._insertResourceTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype._removeTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype._folderNameForResourceType): Deleted.
        (WebInspector.FrameTreeElement.prototype._parentTreeElementForRepresentedObject.createFolderTreeElement): Deleted.
        (WebInspector.FrameTreeElement.prototype._parentTreeElementForRepresentedObject): Deleted.
        (WebInspector.FrameTreeElement.prototype._folderTreeElementExpandedStateChange): Deleted.
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders.pushResourceType): Deleted.
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders.pushCategory): Deleted.
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders): Deleted.
        * UserInterface/Views/LayoutTimelineDataGridNode.js:
        (WebInspector.LayoutTimelineDataGridNode.prototype.createCellContent):
        * UserInterface/Views/LayoutTimelineView.js:
        (WebInspector.LayoutTimelineView): Deleted.
        * UserInterface/Views/NetworkTimelineView.js:
        (WebInspector.NetworkTimelineView): Deleted.
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshResourceType):
        * UserInterface/Views/ResourceTimelineDataGridNode.js:
        (WebInspector.ResourceTimelineDataGridNode.prototype.createCellContent):
        * UserInterface/Views/SourceCodeTreeElement.js:
        (WebInspector.SourceCodeTreeElement):
        * UserInterface/Views/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.createColumnScopeBar):
        * UserInterface/Views/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement):
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2014-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Layer summary should be bottom sticky
        https://bugs.webkit.org/show_bug.cgi?id=138518

        Reviewed by Timothy Hatcher.

        Previously only NavigationSidebars had a content view. Now, give all
        Sidebars a contentElement section for content.

        Update all Details Sidebars to append content to the contentElement
        instead of directly to the element. Only two Details sidebars append
        to the element:

          - CSSStyleDetailsSidebarPanel for the navigation bar at the top
          - LayerTreeDetailsSidebarPanel for the summary view at the bottom

        Take this opportunity to fix up some naming and styles as well.

        * UserInterface/Views/SidebarPanel.js:
        (WebInspector.SidebarPanel):
        (WebInspector.SidebarPanel.prototype.get contentElement):
        Give every SidebarPanel a content element.

        * UserInterface/Views/DetailsSidebarPanel.css: Removed.
        (.sidebar > .panel > .content):
        * UserInterface/Views/SidebarPanel.css: Added.
        (.sidebar > .panel > .content):
        And give that content element a default style.

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .content):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel):
        (WebInspector.NavigationSidebarPanel.prototype.createContentTreeOutline):
        (WebInspector.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WebInspector.NavigationSidebarPanel.prototype.get contentElement): Deleted.
        Navigation sidebar panels now use the parent's contentElement.
        Also, carry over their default styles, overriding the base.

        * UserInterface/Views/LayerTreeDetailsSidebarPanel.js: Renamed from Source/WebInspectorUI/UserInterface/Views/LayerTreeSidebarPanel.js.
        (WebInspector.LayerTreeDetailsSidebarPanel.prototype._buildLayerInfoSection):
        (WebInspector.LayerTreeDetailsSidebarPanel.prototype._buildDataGridSection):
        (WebInspector.LayerTreeDetailsSidebarPanel.prototype._buildBottomBar):
        Rename LayerTreeSidebarPanel to make it clear this is a DetailsSidebarPanel.
        Add the "bottom bar" to the root element, and sections to the contentElement.

        * UserInterface/Views/LayerTreeDetailsSidebarPanel.css: Renamed from Source/WebInspectorUI/UserInterface/Views/LayerTreeSidebarPanel.css.
        (.sidebar > .layer-tree.panel > .content):
        (body.mac-platform.legacy .sidebar > .layer-tree.panel > .content):
        Style the bottom bar to pin it to the bottom of the sidebar panel.

        (WebInspector.CSSStyleDetailsSidebarPanel):
        (WebInspector.CSSStyleDetailsSidebarPanel.prototype.refresh):
        (WebInspector.CSSStyleDetailsSidebarPanel.prototype._navigationItemSelected):
        Add the navigation bar to the root element, and sections to the contentElement.

        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded):
        * UserInterface/Main.html:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        Update for new names.

        * UserInterface/Views/ApplicationCacheDetailsSidebarPanel.js:
        (WebInspector.ApplicationCacheDetailsSidebarPanel):
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.js:
        * UserInterface/Views/DOMDetailsSidebarPanel.js:
        (WebInspector.DOMDetailsSidebarPanel):
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WebInspector.DOMNodeDetailsSidebarPanel):
        * UserInterface/Views/DetailsSidebarPanel.js:
        (WebInspector.DetailsSidebarPanel):
        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshURL):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshImageSizeSection):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshRequestDataSection):
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WebInspector.ScopeChainDetailsSidebarPanel.prototype.refresh.delayedWork):
        (WebInspector.ScopeChainDetailsSidebarPanel.prototype.refresh):
        All details sidebar panels now use the contentElement instead of element for content.

2014-11-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Cursor and scroll view jumps around when modifying styles
        https://bugs.webkit.org/show_bug.cgi?id=137467

        This merges commit e2962a5b0df56c8ee5a4482899d308decf3d7677 from CodeMirror.

        Reviewed by Joseph Pecoraro.

        * UserInterface/External/CodeMirror/codemirror.js:
        (maybeScrollWindow): Signal the scrollCursorIntoView event.
        (signalDOMEvent): Support string events by transforming them to event objects.

        * UserInterface/Views/CodeMirrorAdditions.js:
        (scrollCursorIntoView): Added. Default event listener that provides our own
        implementation using WebKit's scrollIntoViewIfNeeded.

        * UserInterface/Views/RulesStyleDetailsPanel.js:
        (WebInspector.RulesStyleDetailsPanel.prototype.refresh): Stop doing an
        extra scrollIntoViewIfNeeded call, CodeMirror does this.

2014-11-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pseudo element matchedCSSRules do not include matching selector info
        https://bugs.webkit.org/show_bug.cgi?id=138438

        Reviewed by Benjamin Poulain.

        * UserInterface/Base/Test.js:
        (WebInspector.loaded):
        Include a global setting for shadow dom used by DOM model classes.
        Give it a "test" specific name to not override non-test setting values.

2014-11-05  Commit Queue  <commit-queue@webkit.org>

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

        Totally borked the web inspector (Requested by smfr on
        #webkit).

        Reverted changeset:

        "Web Inspector: Add infrastructure for eslint based static
        analyzer"
        https://bugs.webkit.org/show_bug.cgi?id=137890
        http://trac.webkit.org/changeset/175628

2014-11-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Specificity not shown for pseudo element styles
        https://bugs.webkit.org/show_bug.cgi?id=138436

        Reviewed by Benjamin Poulain.

        * UserInterface/Views/CSSStyleDeclarationSection.js:
        (WebInspector.CSSStyleDeclarationSection.prototype.refresh):
        Previously we were skipping the pre-selector <span>s when we were
        not getting a listing of matched selector indices, and missing out
        on the opportunity to give each selector a specificity. Now, always
        loop over selectors if we have them.

2014-11-05  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Add infrastructure for eslint based static analyzer
        https://bugs.webkit.org/show_bug.cgi?id=137890

        Reviewed by Timothy Hatcher.

        Adding a manager to analyze source code, return warnings (AnalyzerMessages), and cache warnings.

        * UserInterface/Base/Main.js: Create analyzerManager singleton.
        * UserInterface/Controllers/AnalyzerManager.js: Added.
        (WebInspector.AnalyzerManager):
        (set WebInspector.AnalyzerManager.prototype.getAnalyzerMessagesForSourceCode.):
        (set WebInspector.AnalyzerManager.prototype.getAnalyzerMessagesForSourceCode):
        (set WebInspector.AnalyzerManager.prototype.set get sourceCodeCanBeAnalyzed):
        (set WebInspector.AnalyzerManager.prototype._handleSourceCodeContentDidChange):
        * UserInterface/Main.html: Add new files.
        * UserInterface/Models/AnalyzerMessage.js: Added.
        (WebInspector.AnalyzerMessage):
        (WebInspector.AnalyzerMessage.prototype.get sourceCodeLocation):
        (WebInspector.AnalyzerMessage.prototype.get sourceCode):
        (WebInspector.AnalyzerMessage.prototype.get text):
        (WebInspector.AnalyzerMessage.prototype.get ruleIdentifier):
        * UserInterface/Models/SourceCode.js: Added call to WebInspector.Object.addConstructorFunctions().

2014-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Too much whitespace in resource details sidebar in groups
        https://bugs.webkit.org/show_bug.cgi?id=138386

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DetailsSection.css:
        (.details-section > .content > .group:first-child > .row.simple:first-child > *):
        (body.mac-platform.legacy .details-section > .content > .group:first-child > .row.simple:first-child > *):
        (body.mac-platform.legacy .details-section > .content > .group > .row.text):
        (.details-section > .content > .group > .row.properties:not(.empty)):
        (body.mac-platform.legacy .details-section > .content > .group > .row.properties:not(.empty)):
        Adjust top and bottom padding.

2014-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Lots of TimelineDataGridNode asserts on reloads
        https://bugs.webkit.org/show_bug.cgi?id=138387

        Reviewed by Brian Burg.

        The TimelineRuler.secondsPerPixel in the TimelineOverview is initialized
        with a non-0 value and saved in a setting. However the TimelineRuler in
        the OverviewTimelineView is not initialized with this value, and instead
        initialized to 0. This patch initializes them to the same non-0 value.

        * UserInterface/Views/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.set secondsPerPixel):
        * UserInterface/Views/TimelineContentView.js:

2014-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Pause on exceptions should show the actual exception
        https://bugs.webkit.org/show_bug.cgi?id=63096

        Reviewed by Timothy Hatcher.

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

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.get pauseReason):
        (WebInspector.DebuggerManager.prototype.get pauseData):
        (WebInspector.DebuggerManager.prototype.reset):
        (WebInspector.DebuggerManager.prototype.debuggerDidPause):
        (WebInspector.DebuggerManager.prototype._pauseReasonFromPayload):
        Maintain the current pause reason and auxiliary data in the manager.

        * UserInterface/Protocol/DebuggerObserver.js:
        (WebInspector.DebuggerObserver.prototype.paused):
        Pass previously unused event parameters on to the manager.

        * UserInterface/Views/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl):
        Style error objects in the console like Objects. The new description
        string provides a richer message if you console.log(exception).

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause):
        (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidResume):
        (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReason):
        Update the UI when we pause / resume to show / hide a pause reason section.

        * UserInterface/Views/DetailsSectionRow.js:
        (WebInspector.DetailsSectionRow.prototype.set emptyMessage):
        Fix a latent bug that would have thrown an exception if the setter was ever used.

        * UserInterface/Views/DetailsSectionTextRow.js: Added.
        (WebInspector.DetailsSectionTextRow):
        (WebInspector.DetailsSectionTextRow.prototype.get text):
        (WebInspector.DetailsSectionTextRow.prototype.set text):
        * UserInterface/Views/DetailsSection.css:
        (.details-section > .content > .group > .row.simple.data > .value):
        (.details-section > .content > .group > .row.text):
        Simple class for a section of centered text. This is modelled after
        the empty message text style in other sections.

        * UserInterface/Views/LogContentView.css:
        (.console-formatted-object, .console-formatted-node, .console-formatted-error):
        (.console-formatted-object .section, .console-formatted-node .section, .console-formatted-error .section):
        (.console-formatted-object .properties, .console-formatted-node .properties, .console-formatted-error .properties):
        Style "error" objects like regular objects. We may wish to treat differently later.

        * UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        Regenerate legacy backend commands to get the new enum.

2014-11-04  Andrei Bucur  <abucur@adobe.com>

        Building WebInspectorUI should not run the clang static analyzer by default
        https://bugs.webkit.org/show_bug.cgi?id=137652

        Reviewed by Timothy Hatcher.

        There's no need to have the static analyzer enabled at compile time by default for the WebInspectorUI project.
        It also breaks the ASAN build because the static analyzing step runs using the default compiler not the
        ASAN clang.

        * Configurations/DebugRelease.xcconfig: Remove the RUN_CLANG_STATIC_ANALYZER variable.

2014-11-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exceptions when paused and hovering JavaScript without CallFrames
        https://bugs.webkit.org/show_bug.cgi?id=138338

        Reviewed by Geoffrey Garen.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression):
        Fallback to using the main page's context if there is no active call frame we can use.

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

        Web Inspector: TextEditor search doesn't work after editing contents
        https://bugs.webkit.org/show_bug.cgi?id=138198

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype.customPerformSearch):
        Fallback to pure TextEditor content searching (CodeMirror) if the editor has edits.

        * UserInterface/Views/TextEditor.js:
        (WebInspector.TextEditor.prototype.hasEdits):
        Check the CodeMirror clean state to known if we have edits or not.

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

        Web Inspector: Show Selector's Specificity
        https://bugs.webkit.org/show_bug.cgi?id=138189

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Main.html:
        * UserInterface/Test.html:
        Add new files and strings.

        * UserInterface/Models/CSSMedia.js:
        Constructor functions are not needed, remove unnecessary code.

        * UserInterface/Models/CSSRule.js:
        (WebInspector.CSSRule.prototype.set selectors): Deleted.
        This was unused and is no longer correct.

        (WebInspector.CSSRule.prototype.get matchedSelectorText):
        Update now that selectors are a list of objects, not just strings.

        * UserInterface/Models/CSSSelector.js:
        (WebInspector.CSSSelector):
        (WebInspector.CSSSelector.prototype.get specificity):
        New model object for protocol type CSS.CSSSelector.

        * UserInterface/Models/DOMNodeStyles.js:
        (WebInspector.DOMNodeStyles.prototype._parseSelectorListPayload.return):
        (WebInspector.DOMNodeStyles.prototype._parseSelectorListPayload):
        (WebInspector.DOMNodeStyles.prototype._parseRulePayload):
        Handle parsing old and new SelectorLists.

        * UserInterface/Views/CSSStyleDeclarationSection.js:
        (WebInspector.CSSStyleDeclarationSection.prototype.refresh.appendSelector):
        (WebInspector.CSSStyleDeclarationSection.prototype.refresh.appendSelectorText):
        (WebInspector.CSSStyleDeclarationSection.prototype.refresh):
        Update the code now that the list of selectors are model objects instead
        of just selector text strings.

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

        Web Inspector: ALTERNATE_DISPATCHERS Let the frontend know about extra agents
        https://bugs.webkit.org/show_bug.cgi?id=138236

        Reviewed by Brian Burg.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.activateDomain):
        * UserInterface/Protocol/InspectorObserver.js:
        (WebInspector.InspectorObserver.prototype.activateExtraDomains):
        * UserInterface/Base/Object.js:
        * UserInterface/Base/Test.js:
        * UserInterface/Base/Main.js:
        (WebInspector.activateExtraDomains):
        Default state is that there are no extra domains. When extra domains
        are activated, some agents need to be re-initialized. Dispatch a
        model event so views also know to re-initialize.

        * UserInterface/Controllers/ApplicationCacheManager.js:
        (WebInspector.ApplicationCacheManager.prototype._mainResourceDidChange):
        * UserInterface/Controllers/DOMTreeManager.js:
        Be more careful about direct agent use during main resource changes.
        That can happen with a JSContext extended with a Page agent.

        * UserInterface/Controllers/FrameResourceManager.js:
        (WebInspector.FrameResourceManager):
        (WebInspector.FrameResourceManager.prototype._mainFrameDidChange):
        (WebInspector.FrameResourceManager.prototype._extraDomainsActivated):
        * UserInterface/Controllers/StorageManager.js:
        (WebInspector.StorageManager):
        (WebInspector.StorageManager.prototype._databaseForIdentifier):
        (WebInspector.StorageManager.prototype._extraDomainsActivated):
        It is possible new window.FooAgent's are available. Perform expected
        initialization re-checking if the agents are now available.

        * UserInterface/Models/CSSCompletions.js:
        Avoid re-initialization if we already did it. This should never
        happen but this is just to be safe.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        (WebInspector.ResourceSidebarPanel.prototype._extraDomainsActivated):
        Don't disallow expandable tree elements if this is a JSContext with
        extra domains. If that JSContext has resources, we would have been
        unable to see child resources.

2014-10-30  Dana Burkart  <dburkart@apple.com>

        <rdar://problem/18821260> Prepare for the mysterious future

        Reviewed by Lucas Forschler.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2014-10-10 Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: timelines should not count time elapsed while paused in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=136351

        Reviewed by Timothy Hatcher.

        Don't update the timeline's current time when the debugger is paused.

        Start and end times for timeline records are now in seconds elapsed since timeline
        recording started, rather than milliseconds since the epoch. Also convert code that
        tracks page/resource load timings to use elapsed times rather than timestamps.

        Add a workaround to preserve compatibility with old backends. Convert legacy timestamps
        in multiple agents to elapsed times.

        * UserInterface/Controllers/FrameResourceManager.js:
        (WebInspector.FrameResourceManager.prototype.resourceRequestWillBeSent):
        (WebInspector.FrameResourceManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WebInspector.FrameResourceManager.prototype.resourceRequestDidReceiveResponse):
        (WebInspector.FrameResourceManager.prototype.resourceRequestDidReceiveData):
        (WebInspector.FrameResourceManager.prototype.resourceRequestDidFinishLoading):
        (WebInspector.FrameResourceManager.prototype.resourceRequestDidFailLoading):
        (WebInspector.FrameResourceManager.prototype._addNewResourceToFrame):
        * UserInterface/Controllers/ProbeManager.js:
        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.computeElapsedTime): Forward to the active TimelineRecording.
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        (WebInspector.TimelineManager.prototype.pageDidLoad):
        (WebInspector.TimelineManager.prototype._loadNewRecording):
        * UserInterface/Models/Probe.js:
        (WebInspector.ProbeSample):
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource.prototype.updateForRedirectResponse):
        (WebInspector.Resource.prototype.updateForResponse):
        (WebInspector.Resource.prototype.increaseSize):
        (WebInspector.Resource.prototype.markAsFinished):
        (WebInspector.Resource.prototype.markAsFailed):
        (WebInspector.Resource.prototype.revertMarkAsFinished):
        * UserInterface/Models/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.computeElapsedTime):
        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._debuggerPaused):
        (WebInspector.TimelineContentView.prototype._debuggerResumed):


2014-10-23  Jono Wells  <jonowells@apple.com>

        Web Inspector: Double border appearing in node sidebar in expanded items in OS X Mavericks.
        https://bugs.webkit.org/show_bug.cgi?id=138011

        Reviewed by Timothy Hatcher.

        Selector added for OS X Mavericks and earlier versions using .mac-platform.legacy.

        * UserInterface/Views/DetailsSection.css:
        (body.mac-platform.legacy .details-section .details-section:first-child):

2014-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Test TestWebKitAPI/WebKit2Gtk/TestInspectorServer fails
        https://bugs.webkit.org/show_bug.cgi?id=132044

        Reviewed by Brian Burg.

        Make sure Protocol/InspectorFrontendHostStub.js is loaded before
        Base/Platform.js, because Platform uses the InspectorFrontendHost
        object.

        * UserInterface/Main.html:

2014-10-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: InspectorBackendCommands should include when to activate particular domains
        https://bugs.webkit.org/show_bug.cgi?id=137753

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        * UserInterface/Base/Test.js:
        (WebInspector.loaded):
        Activation now happens automatically so remove the hardcoded activations.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.activateDomain):
        Given no filter, always activate a domain. Otherwise only activate
        if the debuggable type matches the provided filter.

        * UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js:
        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js:
        Only web debuggables are supported in iOS 6 and 7. The JSON files do not
        need to change, all agents will auto activate.

        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-8.0.json:
        Specify which are web debuggables in iOS 8 since JS inspection is possible.

2014-10-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Generate all Inspector domains together in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=137748

        Reviewed by Brian Burg.

        Change the frontend to always load all agents, but only activate a subset
        of the agents depending on the type of the backend.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.activateDomains):
        (InspectorBackendClass.prototype.activateAllDomains):
        (InspectorBackendClass.prototype._agentForDomain):
        (InspectorBackendClass.prototype._dispatchEvent):
        (InspectorBackend.Agent):
        (InspectorBackend.Agent.prototype.get active):
        (InspectorBackend.Agent.prototype.activate):
        * UserInterface/Base/Test.js:
        Only expose "window.FooAgent" or allow dispatches in the "Foo" domain
        when that particular agent is activated. Currently we hardcode the list
        of agents to activate for a debuggable type. This should be generated.

        * UserInterface/Protocol/LoadInspectorBackendCommands.js:
        Now there should always be a single "InspectorBackendCommands.js" file to load.
        We may want to change the RWI path to return a single file instead of an array.

        * Scripts/update-LegacyInspectorBackendCommands.rb:
        * UserInterface/Protocol/Legacy/6.0/InspectorBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/Protocol/Legacy/6.0/InspectorWebBackendCommands.js.
        * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js.
        * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/Protocol/Legacy/8.0/InspectorWebBackendCommands.js.
        * UserInterface/Protocol/Legacy/8.0/InspectorJSBackendCommands.js: Removed.
        * Versions/Inspector-iOS-8.0.json: Renamed from Source/WebInspectorUI/Versions/InspectorWeb-iOS-8.0.json.
        * Versions/InspectorJS-iOS-8.0.json: Removed.
        Update Legacy versions to output a single InspectorBackendCommands.js file.
        Do a straightforward merge of the iOS 8 JS/Web inputs to a single json file.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/WebInspectorUIFramework.xcconfig:
        * Scripts/copy-user-interface-resources-dryrun.rb:
        * Scripts/copy-user-interface-resources.pl:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        * WebInspectorUI.vcxproj/build-webinspectorui.pl:
        We no longer needed WebCore's Private Headers, so simplify build files
        and update file names where appropriate.

2014-10-17  Jono Wells  <jonowells@apple.com>

        Web Inspector: Add ESLint open source library to the inspector
        https://bugs.webkit.org/show_bug.cgi?id=137714

        Reviewed by Joseph Pecoraro.

        This adds back the eslint.js external library with a correction to Scripts/copy-user-interface-resources.pl
        to prevent a build failure.

        * Scripts/copy-user-interface-resources.pl: Added copy commands for ESLint.js.
        * UserInterface/External/ESLint/LICENSE: Added.
        * UserInterface/External/ESLint/eslint.js: Added.

2014-10-14  Jono Wells  <jonowells@apple.com>

        Web Inspector: Add ESLint open source library to the inspector
        https://bugs.webkit.org/show_bug.cgi?id=137714

        Reviewed by Timothy Hatcher.

        This adds the eslint.js external library for static analysis and the necessary license.

        * Scripts/copy-user-interface-resources.pl:
        * UserInterface/External/ESLint/LICENSE: Added.
        * UserInterface/External/ESLint/eslint.js: Added.

2014-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: paint flashing mode should be disabled when remote inspecting legacy iOS versions
        https://bugs.webkit.org/show_bug.cgi?id=137575

        Reviewed by Simon Fraser.

        Remove setShowPaintRects from the legacy iOS protocol definitions.
        The methods were unimplemented by the backends, so they should
        not advertise supporting it.

        * UserInterface/Protocol/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:
        * Versions/InspectorWeb-iOS-8.0.json:

2014-10-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Processing Instruction Nodes appear poorly in DOM Tree
        https://bugs.webkit.org/show_bug.cgi?id=137681

        Reviewed by Timothy Hatcher.

        Handle processing instruction node types in more places. The
        backend sends the contents as a pure string, not as attribute
        pairs, so just include the string in the UI.

        * UserInterface/Models/DOMSearchMatchObject.js:
        (WebInspector.DOMSearchMatchObject.prototype._generateClassName):
        (WebInspector.DOMSearchMatchObject.titleForDOMNode):
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype._nodeTitleInfo):
        Display the value in the UI.

        * UserInterface/Views/DOMTreeElementPathComponent.js:
        (WebInspector.DOMTreeElementPathComponent):
        Include an icon like DOCTYPE.

        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        (.syntax-highlighted .html-processing-instruction):
        Style gray like a DOCTYPE.

2014-10-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Paint Flashing button does not match page state after reload
        https://bugs.webkit.org/show_bug.cgi?id=137680

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        Make paint flashing a frontend setting. Enable it when the inspector
        is opened if it was previously enabled.

        * UserInterface/Views/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        (WebInspector.DOMTreeContentView.prototype._togglePaintFlashing):
        (WebInspector.DOMTreeContentView.prototype._showPaintRectsSettingChanged):
        Have the paint flashing button always match the global setting.

2014-10-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve appearance of alpha color swatches
        https://bugs.webkit.org/show_bug.cgi?id=137627

        Reviewed by Andreas Kling.

        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * UserInterface/Protocol/Legacy/8.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-7.0.json:
        * Versions/InspectorWeb-iOS-8.0.json:

2014-10-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve appearance of alpha color swatches
        https://bugs.webkit.org/show_bug.cgi?id=137627

        Reviewed by Timothy Hatcher.

        This improves the sizes. The color-swatch size is 1em x 1em,
        which ends up being 11px, and thus there is still an imbalance.
        However on both 1x and 2x displays this looks more even.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        (.css-style-text-editor > .CodeMirror .CodeMirror-lines .color-swatch):

2014-10-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: assert always logs undefined instead of the desired string
        https://bugs.webkit.org/show_bug.cgi?id=137632

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.dispatch):
        Fix the assert log to include the method name.

2014-10-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS minification should not strip whitespace around calc +/- binary operators
        https://bugs.webkit.org/show_bug.cgi?id=137624

        Reviewed by Timothy Hatcher.

        Be careful when stripping whitespace around "+". We want to strip for
        selectors "a + b" but not for calc expressions "calc(1px + 2px)".

        This is not a perfect solution, but it does a good job. It may still break
        with more complex calc expressions, like "calc(1px + calc())" but this
        handles the basics.

        * Scripts/copy-user-interface-resources-dryrun.rb: Added.
        * Scripts/cssmin.py:
        (cssminify):

2014-10-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DOM Storage Editing is broken in many ways, frustrating
        https://bugs.webkit.org/show_bug.cgi?id=137547

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DOMStorageObject.js:
        (WebInspector.DOMStorageObject.prototype.getEntries): Deleted.
        When getting entires, populate the model object with these keys/values
        so we can accurately detect duplicates in editing.

        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.determineNextCell):
        (WebInspector.DataGrid.prototype.moveToNextCell):
        When the users uses "Enter" to commit, stop editing.

        (WebInspector.DataGrid.prototype._editingCommitted):
        Fix title property accessor. This is not a map. This fixes an exception
        when showing context menus on editable data grid rows.

        * UserInterface/Views/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView.prototype.cleanup):
        (WebInspector.DOMStorageContentView.prototype.restoreOriginalValues):
        (WebInspector.DOMStorageContentView.prototype._editingCallback):
        Completely rewrite editing here. As soon as an edit is made, enter
        an uncommitted state with the original key/value. When a commit is
        allowed, update as appropriate based on the original values.

2014-10-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS Pretty Printing fails to put space between value functions around ending parenthesis
        https://bugs.webkit.org/show_bug.cgi?id=137415

        Reviewed by Timothy Hatcher.

        Add a space after a closing parenthesis if we are still inside a property.
        This adds space between space separated function lists such as
        -webkit-transform:foo(...)bar(...). Also add a test for keyframe syntax.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/css-tests/keyframes-expected.css: Added.
        * Tools/PrettyPrinting/css-tests/keyframes.css: Added.
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Views/CodeMirrorFormatters.js:

2014-10-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS Pretty Printing fails to put space between rgb(...) and numbers in minified gradients
        https://bugs.webkit.org/show_bug.cgi?id=137414

        Reviewed by Timothy Hatcher.

        Add whitespace between rgb(...) and a number, possible in gradient
        syntax like "linear-gradient(rgb(...)0%,rgb(...)100%)".

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/css-tests/gradient-expected.css: Added.
        (.dot-nav:nth-child(1n) li a.active):
        * Tools/PrettyPrinting/css-tests/gradient.css: Added.
        (.dot-nav:nth-child(1n) li a.active):
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Views/CodeMirrorFormatters.js:

2014-10-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS Pretty Printing fails to wrap long lines of selectors with pseudo classes/elements
        https://bugs.webkit.org/show_bug.cgi?id=137413

        Reviewed by Timothy Hatcher.

        Long line wrapping was breaking as soon as there was a ':' for a psuedo
        class or element. Likewise it was counting comment strings as part of
        the length of the line even though it would get a newline after it.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/css-tests/basic-expected.css:
        (progress, section, summary, time):
        * Tools/PrettyPrinting/css-tests/wrapping-expected.css: Added.
        (a.tryamacs, a.upgradenows):
        (a.tryamacs:hover, a.upgradenows:hover):
        * Tools/PrettyPrinting/css-tests/wrapping.css: Added.
        (a.browsewebappss,a.businessstores,a.buyiphones,a.buynows,a.buynows-arrow,a.comingsoons,p::before,a.descargarahoras,a.downloadituness,a.downloadnows,a.finds,a.freetrials,a.getstarteds,a.gos,a.howtoapplys,a.howtobuys,a.joinnows,a.learnmores,a.nikebuynows,a.notifymes,a.ordernows,a.preordernows,a.preorders,a.reserves,a.startyoursearchs,a.submits,a.tryamacs,a.upgradenows):
        (a.browsewebappss:hover,a.businessstores:hover,a.buyiphones:hover,a.buynows:hover,a.buynows-arrow:hover,a.comingsoons:hover,p::before,a.descargarahoras:hover,a.downloadituness:hover,a.downloadnows:hover,a.finds:hover,a.freetrials:hover,a.getstarteds:hover,a.gos:hover,a.howtoapplys:hover,a.howtobuys:hover,a.joinnows:hover,a.learnmores:hover,a.nikebuynows:hover,a.notifymes:hover,a.ordernows:hover,a.preordernows:hover,a.preorders:hover,a.reserves:hover,a.startyoursearchs:hover,a.submits:hover,a.tryamacs:hover,a.upgradenows:hover):
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Views/CodeMirrorFormatters.js:

2014-10-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add PrettyPrinter CSS tests
        https://bugs.webkit.org/show_bug.cgi?id=134005

        Reviewed by Timothy Hatcher.

        Add CSS pretty printing tests. Improve pretty printing of calc()
        expressions and media-queries with whitespace around operators
        and keywords. Also fix the debug output in the tool for CSS.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype._appendIndent):
        * Tools/PrettyPrinting/FormatterDebug.js:
        (.debugToken):
        (Formatter.prototype.debug):
        * Tools/PrettyPrinting/css-tests/basic-expected.css: Added.
        * Tools/PrettyPrinting/css-tests/basic.css: Added.
        * Tools/PrettyPrinting/css-tests/calc-expected.css: Added.
        * Tools/PrettyPrinting/css-tests/calc.css: Added.
        * Tools/PrettyPrinting/css-tests/media-query-expected.css: Added.
        * Tools/PrettyPrinting/css-tests/media-query.css: Added.
        * Tools/PrettyPrinting/css-tests/selectors-expected.css: Added.
        * Tools/PrettyPrinting/css-tests/selectors.css: Added.
        * Tools/PrettyPrinting/index.html:
        * UserInterface/Views/CodeMirrorFormatters.js:

2014-10-04  Brian J. Burg  <burg@cs.washington.edu>

        Unreviewed, rolling out r174319.

        Causes assertions in fast/profiler tests. Needs nontrivial
        investigation, will take offline.

        Reverted changeset:

        "Web Inspector: timelines should not count time elapsed while
        paused in the debugger"
        https://bugs.webkit.org/show_bug.cgi?id=136351
        http://trac.webkit.org/changeset/174319

2014-10-04  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: timelines should not count time elapsed while paused in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=136351

        Reviewed by Timothy Hatcher.

        Don't update the timeline's current time when the debugger is paused.

        Start and end times for timeline records are now in seconds elapsed since timeline
        recording started, rather than milliseconds since the epoch. Add a workaround to
        preserve compatibility with old backends.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.capturingStarted):
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._debuggerPaused):
        (WebInspector.TimelineContentView.prototype._debuggerResumed):

2014-10-03  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: Move the computation that results in UI strings from JSC to the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=137295

        Reviewed by Timothy Hatcher.

        The inspector now computes a set of properties that was previously 
        computed inside JSC. 

        This patch also addresses the weird experience of the 
        type of an expression claiming to be both a Number and 
        an Integer. This could be a bit confusing because Number 
        is supposed to represent Double|Integer and the previous
        UI implied that Number was equivalent to Double. The new UI only 
        ever shows either the type of Number or Integer when showing
        the type information of an expression. It never shows both Number
        and Integer simultaneously to describe a single expression.

        * UserInterface/Models/TypeSet.js:
        (WebInspector.TypeSet):
        (WebInspector.TypeSet.prototype.isContainedIn):
        (WebInspector.TypeSet.prototype.get primitiveTypeNames):
        * UserInterface/Views/TypePropertiesSection.js:
        (WebInspector.TypePropertiesSection):
        (WebInspector.TypePropertiesSection.prototype.onpopulate):
        * UserInterface/Views/TypeTokenView.js:
        (WebInspector.TypeTokenView):
        (WebInspector.TypeTokenView.prototype.update):
        (WebInspector.TypeTokenView.prototype._shouldShowPopover):
        (WebInspector.TypeTokenView.prototype._displayTypeName):

2014-10-02  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Cannot add a new CSS Rule to elements with 3 or more class names
        https://bugs.webkit.org/show_bug.cgi?id=137375

        Reviewed by Timothy Hatcher.

        Correctly merge all class names with dots instead of just the first two.

        * UserInterface/Models/DOMNode.js:

2014-10-02  Mark Lam  <mark.lam@apple.com>

        Fixed the Inspector to be able to properly distinguish between scope types.
        <https://webkit.org/b/137279>

        Reviewed by Geoffrey Garen and Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/DebuggerManager.js:
        * UserInterface/Models/ScopeChainNode.js:
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        - Added handling of the FunctionNameScope case.

2014-10-02  Andres Gomez  <agomez@igalia.com>

        Web Inspector: [GTK] Missing icons and enhancing the proportion and visibility of some icons
        https://bugs.webkit.org/show_bug.cgi?id=137248

        Reviewed by Carlos Garcia Campos.

        Add more free icons and removed some unused ones for the Web
        Inspector in GTK+.
        Also, enhanced the visibility and/or proportion of several of the
        icons.

        * UserInterface/Images/gtk/AUTHORS:
        * UserInterface/Images/gtk/COPYING:
        * UserInterface/Images/gtk/Checkers.svg: Added.
        * UserInterface/Images/gtk/Circle.svg: Added.
        * UserInterface/Images/gtk/CloseLarge.svg: Added.
        * UserInterface/Images/gtk/CloseTimeline.png: Removed.
        * UserInterface/Images/gtk/CloseTimeline@2x.png: Removed.
        * UserInterface/Images/gtk/Crosshair.svg:
        * UserInterface/Images/gtk/DOMCharacterData.svg:
        * UserInterface/Images/gtk/DOMComment.svg:
        * UserInterface/Images/gtk/DOMDocument.svg:
        * UserInterface/Images/gtk/DOMDocumentType.svg:
        * UserInterface/Images/gtk/DOMElement.svg:
        * UserInterface/Images/gtk/DOMNode.svg:
        * UserInterface/Images/gtk/DOMTextNode.svg:
        * UserInterface/Images/gtk/DOMTree.svg:
        * UserInterface/Images/gtk/EventListener.svg:
        * UserInterface/Images/gtk/Exception.svg:
        * UserInterface/Images/gtk/Function.svg:
        * UserInterface/Images/gtk/GradientStop.png: Added.
        * UserInterface/Images/gtk/GradientStop@2x.png: Added.
        * UserInterface/Images/gtk/GradientStopSelected.png: Added.
        * UserInterface/Images/gtk/GradientStopSelected@2x.png: Added.
        * UserInterface/Images/gtk/Issues.svg:
        * UserInterface/Images/gtk/IssuesEnabled.svg:
        * UserInterface/Images/gtk/LessColumns.svg: Removed.
        * UserInterface/Images/gtk/Logs.svg:
        * UserInterface/Images/gtk/Memory.svg: Removed.
        * UserInterface/Images/gtk/MoreColumns.svg: Removed.
        * UserInterface/Images/gtk/Native.svg:
        * UserInterface/Images/gtk/NavigationItemAngleBrackets.svg:
        * UserInterface/Images/gtk/NavigationItemBrushAndRuler.svg:
        * UserInterface/Images/gtk/NavigationItemBug.svg:
        * UserInterface/Images/gtk/NavigationItemFile.svg:
        * UserInterface/Images/gtk/NavigationItemLayers.svg:
        * UserInterface/Images/gtk/NavigationItemMagnifyingGlass.svg: Removed.
        * UserInterface/Images/gtk/NavigationItemProbes.pdf: Added.
        * UserInterface/Images/gtk/NavigationItemStopwatch.svg:
        * UserInterface/Images/gtk/NavigationItemTypes.svg: Added.
        * UserInterface/Images/gtk/PaintFlashing.svg: Added.
        * UserInterface/Images/gtk/PseudoElement.svg:
        * UserInterface/Images/gtk/Record.svg: Added.
        * UserInterface/Images/gtk/Recording.png: Removed.
        * UserInterface/Images/gtk/Recording@2x.png: Removed.
        * UserInterface/Images/gtk/RecordingHovered.png: Removed.
        * UserInterface/Images/gtk/RecordingHovered@2x.png: Removed.
        * UserInterface/Images/gtk/RecordingStopped.png: Removed.
        * UserInterface/Images/gtk/RecordingStopped@2x.png: Removed.
        * UserInterface/Images/gtk/Reflection.svg:
        * UserInterface/Images/gtk/ReplayPauseButton.svg: Added.
        * UserInterface/Images/gtk/ReplayPlayButton.svg: Added.
        * UserInterface/Images/gtk/ReplayRecordingButton.svg: Added.
        * UserInterface/Images/gtk/Request.svg:
        * UserInterface/Images/gtk/Resources.svg:
        * UserInterface/Images/gtk/Response.svg:
        * UserInterface/Images/gtk/ResultLine.svg:
        * UserInterface/Images/gtk/SourceCode.svg:
        * UserInterface/Images/gtk/Stop.svg: Added.
        * UserInterface/Images/gtk/StyleRuleAuthor.svg:
        * UserInterface/Images/gtk/StyleRuleInherited.svg:
        * UserInterface/Images/gtk/StyleRuleInheritedElement.svg:
        * UserInterface/Images/gtk/StyleRuleInspector.svg:
        * UserInterface/Images/gtk/StyleRuleUser.svg:
        * UserInterface/Images/gtk/StyleRuleUserAgent.svg:
        * UserInterface/Images/gtk/Time.svg:
        * UserInterface/Images/gtk/TimelineRecordAnimation.svg:
        * UserInterface/Images/gtk/TimelineRecordConsoleProfile.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordEvent.svg:
        * UserInterface/Images/gtk/TimelineRecordLayout.svg:
        * UserInterface/Images/gtk/TimelineRecordPaint.svg:
        * UserInterface/Images/gtk/TimelineRecordProbeSampled.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordScriptEvaluated.svg:
        * UserInterface/Images/gtk/TimelineRecordStyle.svg:
        * UserInterface/Images/gtk/TimelineRecordTimer.svg:
        * UserInterface/Images/gtk/Weight.svg:

2014-09-27  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: Playback position updates should be sent before the next event loop input is dispatched
        https://bugs.webkit.org/show_bug.cgi?id=137162

        Reviewed by Timothy Hatcher.

        Pausing playback from the UI was broken because of a typo. Fix this, and rename
        stopPlayback to cancelPlayback.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.prototype.switchSession.if):

2014-09-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Automatic Inspection should continue once all breakpoints are loaded
        https://bugs.webkit.org/show_bug.cgi?id=137038

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        Send the initialized message after we have sent all other setup messages,
        such as enabling features and setting breakpoints.

2014-09-26  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: Type Token View shows type information on hover when it shouldn't
        https://bugs.webkit.org/show_bug.cgi?id=137152

        Reviewed by Brian J. Burg.

        TypeTokenView should only show type information when there is 
        more than one primitive type or more than zero objects types. 
        This fixes a bug in checking the length of object types.

        * UserInterface/Views/TypeTokenView.js:
        (WebInspector.TypeTokenView.prototype._shouldShowPopover):

2014-09-25  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Show type info icon is blurry
        https://bugs.webkit.org/show_bug.cgi?id=137125

        Reviewed by Darin Adler.

        * UserInterface/Images/NavigationItemTypes.svg:
        * UserInterface/Views/ScriptContentView.js:
        (WebInspector.ScriptContentView):
        * UserInterface/Views/TextContentView.js:
        (WebInspector.TextContentView):
        * UserInterface/Views/TextResourceContentView.js:
        (WebInspector.TextResourceContentView):

2014-09-25  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: console.assert(bitString) TypeSet:50 
        https://bugs.webkit.org/show_bug.cgi?id=137051

        Reviewed by Joseph Pecoraro.

        This fixes TypeSet's isContainedIn method by ensuring that 
        the type bit string isn't zero because the test would trivially 
        pass if the bit string is zero.

        * UserInterface/Models/TypeSet.js:
        (WebInspector.TypeSet.prototype.isContainedIn):

2014-09-25  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: FunctionCall timeline records omit profile data if the debugger has paused
        https://bugs.webkit.org/show_bug.cgi?id=136805

        Reviewed by Timothy Hatcher.

        * UserInterface/Test.html: Add missing include for ScopeChainNode.js.

2014-09-25  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: sort probe details sidebar sections by source code location string
        https://bugs.webkit.org/show_bug.cgi?id=137080

        Reviewed by Timothy Hatcher.

        Probe sections should display in the same order as associated breakpoint tree elements.

        * UserInterface/Views/ProbeDetailsSidebarPanel.js:
        (WebInspector.ProbeDetailsSidebarPanel.prototype.inspect.inspectedProbeSets):
        (WebInspector.ProbeDetailsSidebarPanel.prototype.inspect):

2014-09-25  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add more free icons for the Web Inspector in GTK+.

        * UserInterface/Images/gtk/AUTHORS:
        * UserInterface/Images/gtk/ApplicationCacheManifest.png: Added.
        * UserInterface/Images/gtk/ApplicationCacheManifest@2x.png: Added.
        * UserInterface/Images/gtk/COPYING:
        * UserInterface/Images/gtk/COPYING_LGPL2: Added.
        * UserInterface/Images/gtk/Cookie.png: Added.
        * UserInterface/Images/gtk/Cookie@2x.png: Added.
        * UserInterface/Images/gtk/HoverMenuButton.png: Added.
        * UserInterface/Images/gtk/HoverMenuButton@2x.png: Added.
        * UserInterface/Images/gtk/InstructionPointer.png: Added.
        * UserInterface/Images/gtk/InstructionPointer@2x.png: Added.
        * UserInterface/Images/gtk/Log.png: Added.
        * UserInterface/Images/gtk/Log@2x.png: Added.
        * UserInterface/Images/gtk/Profile.png: Added.
        * UserInterface/Images/gtk/Profile@2x.png: Added.
        * UserInterface/Images/gtk/Recording.png: Added.
        * UserInterface/Images/gtk/Recording@2x.png: Added.
        * UserInterface/Images/gtk/RecordingHovered.png: Added.
        * UserInterface/Images/gtk/RecordingHovered@2x.png: Added.
        * UserInterface/Images/gtk/RecordingStopped.png: Added.
        * UserInterface/Images/gtk/RecordingStopped@2x.png: Added.
        * UserInterface/Images/gtk/Script.png: Added.
        * UserInterface/Images/gtk/Script@2x.png: Added.
        * UserInterface/Images/gtk/ScriptLarge.png: Added.
        * UserInterface/Images/gtk/ScriptLarge@2x.png: Added.
        * UserInterface/Images/gtk/SliderThumb.png: Added.
        * UserInterface/Images/gtk/SliderThumb@2x.png: Added.
        * UserInterface/Images/gtk/SliderThumbPressed.png: Added.
        * UserInterface/Images/gtk/SliderThumbPressed@2x.png: Added.
        * UserInterface/Images/gtk/Stopwatch.png: Added.
        * UserInterface/Images/gtk/Stopwatch@2x.png: Added.

2014-09-21  Timothy Hatcher  <timothy@apple.com>

        Make the Web Inspector use a separate web process.

        https://bugs.webkit.org/show_bug.cgi?id=135120

        Reviewed by Anders Carlsson.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        (WebInspector.contentLoaded):
        Move InspectorFrontendHost.loaded to later in the load.
        Calling it early just shows the window before we have
        a user interface to show.

        * UserInterface/Base/Test.js:
        (WebInspector.loaded):
        (WebInspector.contentLoaded):
        Match the changes in Main.js.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.savedURL): Change comment.
        (InspectorFrontendAPI.appendedToURL): Change comment.
        (InspectorFrontendAPI.dispatch): Add an assert and early
        return to be safe from unknown commands.
        (InspectorFrontendAPI.loadCompleted): Delete _pendingCommands,
        no need to keep an empty array around a one time use.

2014-09-24  Andres Gomez  <agomez@igalia.com>

        Unreviewed. Add more free icons for the Web Inspector in GTK+

        * UserInterface/Images/gtk/AUTHORS:
        * UserInterface/Images/gtk/ApplicationCache.png: Added.
        * UserInterface/Images/gtk/ApplicationCache@2x.png: Added.
        * UserInterface/Images/gtk/BottomUpTree.svg: Added.
        * UserInterface/Images/gtk/Breakpoint.png: Added.
        * UserInterface/Images/gtk/Breakpoint@2x.png: Added.
        * UserInterface/Images/gtk/BreakpointButton.svg:
        * UserInterface/Images/gtk/BreakpointInactive.png: Added.
        * UserInterface/Images/gtk/BreakpointInactive@2x.png: Added.
        * UserInterface/Images/gtk/BreakpointInactiveButton.svg:
        * UserInterface/Images/gtk/COPYING:
        * UserInterface/Images/gtk/COPYING_CCBYSA3: Copied from Source/WebInspectorUI/UserInterface/Images/gtk/COPYING.
        * UserInterface/Images/gtk/ClippingCSS.png: Added.
        * UserInterface/Images/gtk/ClippingCSS@2x.png: Added.
        * UserInterface/Images/gtk/ClippingGeneric.png: Added.
        * UserInterface/Images/gtk/ClippingGeneric@2x.png: Added.
        * UserInterface/Images/gtk/ClippingJS.png: Added.
        * UserInterface/Images/gtk/ClippingJS@2x.png: Added.
        * UserInterface/Images/gtk/CloseTimeline.png: Added.
        * UserInterface/Images/gtk/CloseTimeline@2x.png: Added.
        * UserInterface/Images/gtk/ColorIcon.png: Added.
        * UserInterface/Images/gtk/ColorIcon@2x.png: Added.
        * UserInterface/Images/gtk/Colors.png: Added.
        * UserInterface/Images/gtk/Colors@2x.png: Added.
        * UserInterface/Images/gtk/ColorsLarge.png: Added.
        * UserInterface/Images/gtk/ColorsLarge@2x.png: Added.
        * UserInterface/Images/gtk/Database.png: Added.
        * UserInterface/Images/gtk/Database@2x.png: Added.
        * UserInterface/Images/gtk/DatabaseTable.png: Added.
        * UserInterface/Images/gtk/DatabaseTable@2x.png: Added.
        * UserInterface/Images/gtk/HierarchicalNavigationItemChevron.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner1.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner10.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner11.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner12.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner2.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner3.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner4.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner5.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner6.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner7.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner8.svg: Added.
        * UserInterface/Images/gtk/IndeterminateProgressSpinner9.svg: Added.
        * UserInterface/Images/gtk/Issues.svg: Added.
        * UserInterface/Images/gtk/IssuesEnabled.svg: Added.
        * UserInterface/Images/gtk/LayerBorders.svg: Added.
        * UserInterface/Images/gtk/LessColumns.svg: Added.
        * UserInterface/Images/gtk/LocalStorage.png: Added.
        * UserInterface/Images/gtk/LocalStorage@2x.png: Added.
        * UserInterface/Images/gtk/Locked.svg: Added.
        * UserInterface/Images/gtk/Logs.svg: Added.
        * UserInterface/Images/gtk/Memory.svg: Added.
        * UserInterface/Images/gtk/MoreColumns.svg: Added.
        * UserInterface/Images/gtk/Native.svg: Added.
        * UserInterface/Images/gtk/NavigationItemAngleBrackets.svg: Added.
        * UserInterface/Images/gtk/NavigationItemBrushAndRuler.svg: Added.
        * UserInterface/Images/gtk/NavigationItemBug.svg: Added.
        * UserInterface/Images/gtk/NavigationItemCurleyBraces.svg: Added.
        * UserInterface/Images/gtk/NavigationItemFile.svg: Added.
        * UserInterface/Images/gtk/NavigationItemLayers.svg: Added.
        * UserInterface/Images/gtk/NavigationItemLog.svg: Added.
        * UserInterface/Images/gtk/NavigationItemMagnifyingGlass.svg: Added.
        * UserInterface/Images/gtk/NavigationItemStopwatch.svg: Added.
        * UserInterface/Images/gtk/NavigationItemStorage.svg: Added.
        * UserInterface/Images/gtk/NavigationItemTrash.svg: Added.
        * UserInterface/Images/gtk/NavigationItemVariable.svg: Added.
        * UserInterface/Images/gtk/Network.png: Added.
        * UserInterface/Images/gtk/Network@2x.png: Added.
        * UserInterface/Images/gtk/NetworkLarge.png: Added.
        * UserInterface/Images/gtk/NetworkLarge@2x.png: Added.
        * UserInterface/Images/gtk/Pause.svg: Added.
        * UserInterface/Images/gtk/Percent.svg: Added.
        * UserInterface/Images/gtk/Plus.svg: Added.
        * UserInterface/Images/gtk/PseudoElement.svg: Added.
        * UserInterface/Images/gtk/Reflection.svg: Added.
        * UserInterface/Images/gtk/Reload.svg: Added.
        * UserInterface/Images/gtk/Request.svg: Added.
        * UserInterface/Images/gtk/Response.svg: Added.
        * UserInterface/Images/gtk/ResultLine.svg: Added.
        * UserInterface/Images/gtk/Resume.svg: Added.
        * UserInterface/Images/gtk/SessionStorage.png: Added.
        * UserInterface/Images/gtk/SessionStorage@2x.png: Added.
        * UserInterface/Images/gtk/ShadowDOM.svg: Added.
        * UserInterface/Images/gtk/SourceCode.svg: Added.
        * UserInterface/Images/gtk/SplitToggleDown.svg: Added.
        * UserInterface/Images/gtk/SplitToggleUp.svg: Added.
        * UserInterface/Images/gtk/StepInto.svg: Added.
        * UserInterface/Images/gtk/StepOut.svg: Added.
        * UserInterface/Images/gtk/StepOver.svg: Added.
        * UserInterface/Images/gtk/StyleRuleAuthor.svg: Added.
        * UserInterface/Images/gtk/StyleRuleInherited.svg: Added.
        * UserInterface/Images/gtk/StyleRuleInheritedElement.svg: Added.
        * UserInterface/Images/gtk/StyleRuleInspector.svg: Added.
        * UserInterface/Images/gtk/StyleRuleUser.svg: Added.
        * UserInterface/Images/gtk/StyleRuleUserAgent.svg: Added.
        * UserInterface/Images/gtk/Time.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordAnimation.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordEvent.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordLayout.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordPaint.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordScriptEvaluated.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordStyle.svg: Added.
        * UserInterface/Images/gtk/TimelineRecordTimer.svg: Added.
        * UserInterface/Images/gtk/Undock.svg: Added.
        * UserInterface/Images/gtk/UserInputPrompt.svg: Added.
        * UserInterface/Images/gtk/UserInputPromptPrevious.svg: Added.
        * UserInterface/Images/gtk/UserInputResult.svg: Added.
        * UserInterface/Images/gtk/Warning.svg: Added.
        * UserInterface/Images/gtk/Weight.svg: Added.

2014-09-23  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Remove UserInterface/Images/gtk from Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=136955

        Reviewed by Joseph Pecoraro.

        * Scripts/copy-user-interface-resources.pl:
        Remove Images/Legacy and Images/gtk on Mac and Windows builds by looking
        at the MAC_OS_X_VERSION_MAJOR and OFFICIAL_BUILD environment vars.

2014-09-21  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: fix TypeSet hierarchy in TypeTokenView
        https://bugs.webkit.org/show_bug.cgi?id=136982

        Reviewed by Joseph Pecoraro.

        The protocol object representation of TypeSet was being computed 
        incorrectly in JSC::TypeSet. This patch fixes that problem
        and also asserts that the type information that the Web Inspector
        receives is not empty.

        * UserInterface/Models/TypeSet.js:
        (WebInspector.TypeSet):
        * UserInterface/Views/TypeTokenView.js:
        (WebInspector.TypeTokenView.prototype._displayTypeName):

2014-09-21  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: unlocalized 'many' string in type profiler inline bubble
        https://bugs.webkit.org/show_bug.cgi?id=136980

        Reviewed by Timothy Hatcher.

        Generate the localizable string for the type profiler's "many" inline bubble.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/TypeTokenView.js:

2014-09-20  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Option+Click on CSS url(...) should jump to resource view
        https://bugs.webkit.org/show_bug.cgi?id=136965

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/CodeMirrorAdditions.js:
        When parsing CSS url(...) tokens, the contents of url(...)
        are a "string" type, not "atom".

2014-09-19  Daniel Bates  <dabates@apple.com>

        Always assume internal SDK when building configuration Production
        https://bugs.webkit.org/show_bug.cgi?id=136925
        <rdar://problem/18362399>

        Reviewed by Dan Bernstein.

        * Configurations/DebugRelease.xcconfig: Also move #include of HaveInternalSDK.xcconfig from DebugRelease.xcconfig
        to Base.xcconfig so as to be consistent with the format of other Base.xcconfig/DebugRelease.xcconfig files
        (e.g. Source/WebCore/Configurations/Base.xcconfig and Source/WebCore/Configurations/DebugRelease.xcconfig).

2014-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Webkitgtk 2.5.3: tarball contains APPLE LICENSE file - stating not distributable
        https://bugs.webkit.org/show_bug.cgi?id=136632

        Reviewed by Gustavo Noronha Silva.

        Add free icons for the GTK port. These icons are from the GNOME
        project, some of them adapted by Andres Gomez for the inspector.
        This is only a subset of the icons, since we still don't have a
        free replacement for all of them, but at least it makes the
        inspector kind of usable.

        * UserInterface/Images/gtk/AUTHORS: Added.
        * UserInterface/Images/gtk/BackArrow.svg: Added.
        * UserInterface/Images/gtk/BreakpointActionAdd.svg: Added.
        * UserInterface/Images/gtk/BreakpointActionRemove.svg: Added.
        * UserInterface/Images/gtk/BreakpointButton.svg: Added.
        * UserInterface/Images/gtk/BreakpointInactiveButton.svg: Added.
        * UserInterface/Images/gtk/Breakpoints.svg: Added.
        * UserInterface/Images/gtk/COPYING: Added.
        * UserInterface/Images/gtk/Close.svg: Added.
        * UserInterface/Images/gtk/CloseWhite.svg: Added.
        * UserInterface/Images/gtk/ContentFlow.svg: Added.
        * UserInterface/Images/gtk/Crosshair.svg: Added.
        * UserInterface/Images/gtk/DOMCharacterData.svg: Added.
        * UserInterface/Images/gtk/DOMComment.svg: Added.
        * UserInterface/Images/gtk/DOMDocument.svg: Added.
        * UserInterface/Images/gtk/DOMDocumentType.svg: Added.
        * UserInterface/Images/gtk/DOMElement.svg: Added.
        * UserInterface/Images/gtk/DOMNode.svg: Added.
        * UserInterface/Images/gtk/DOMTextNode.svg: Added.
        * UserInterface/Images/gtk/DOMTree.svg: Added.
        * UserInterface/Images/gtk/DisclosureTriangleSmallClosed.svg: Added.
        * UserInterface/Images/gtk/DisclosureTriangleSmallOpen.svg: Added.
        * UserInterface/Images/gtk/DisclosureTriangleTinyClosed.svg: Added.
        * UserInterface/Images/gtk/DisclosureTriangleTinyOpen.svg: Added.
        * UserInterface/Images/gtk/DockBottom.svg: Added.
        * UserInterface/Images/gtk/DockRight.svg: Added.
        * UserInterface/Images/gtk/DocumentCSS.png: Added.
        * UserInterface/Images/gtk/DocumentCSS@2x.png: Added.
        * UserInterface/Images/gtk/DocumentFont.png: Added.
        * UserInterface/Images/gtk/DocumentFont@2x.png: Added.
        * UserInterface/Images/gtk/DocumentGeneric.png: Added.
        * UserInterface/Images/gtk/DocumentGeneric@2x.png: Added.
        * UserInterface/Images/gtk/DocumentImage.png: Added.
        * UserInterface/Images/gtk/DocumentImage@2x.png: Added.
        * UserInterface/Images/gtk/DocumentJS.png: Added.
        * UserInterface/Images/gtk/DocumentJS@2x.png: Added.
        * UserInterface/Images/gtk/DocumentMarkup.png: Added.
        * UserInterface/Images/gtk/DocumentMarkup@2x.png: Added.
        * UserInterface/Images/gtk/DownloadArrow.svg: Added.
        * UserInterface/Images/gtk/Error.svg: Added.
        * UserInterface/Images/gtk/Errors.svg: Added.
        * UserInterface/Images/gtk/ErrorsEnabled.svg: Added.
        * UserInterface/Images/gtk/EventListener.svg: Added.
        * UserInterface/Images/gtk/Exception.svg: Added.
        * UserInterface/Images/gtk/FilterFieldGlyph.svg: Added.
        * UserInterface/Images/gtk/FolderGeneric.png: Added.
        * UserInterface/Images/gtk/FolderGeneric@2x.png: Added.
        * UserInterface/Images/gtk/ForwardArrow.svg: Added.
        * UserInterface/Images/gtk/Function.svg: Added.
        * UserInterface/Images/gtk/GoToArrow.svg: Added.
        * UserInterface/Images/gtk/Resources.svg: Added.
        * UserInterface/Images/gtk/SortIndicatorDownArrow.svg: Added.
        * UserInterface/Images/gtk/SortIndicatorUpArrow.svg: Added.
        * UserInterface/Images/gtk/UpDownArrows.svg: Added.

2014-09-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unnecessary prefixes in WebInspectorUI CSS
        https://bugs.webkit.org/show_bug.cgi?id=136905

        Reviewed by Timothy Hatcher.

        Removed vendor prefixes from justify-content and a few lingering
        occurances with transition, box-shadow, and display.

        * UserInterface/Views/BreakpointActionView.css:
        * UserInterface/Views/BreakpointTreeElement.css:
        * UserInterface/Views/ButtonNavigationItem.css:
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        * UserInterface/Views/ControlToolbarItem.css:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DefaultDashboardView.css:
        * UserInterface/Views/FontResourceContentView.css:
        * UserInterface/Views/ImageResourceContentView.css:
        * UserInterface/Views/LayerTreeSidebarPanel.css:
        * UserInterface/Views/Main.css:
        * UserInterface/Views/NavigationBar.css:
        * UserInterface/Views/NavigationSidebarPanel.css:
        * UserInterface/Views/Popover.css:
        * UserInterface/Views/ReplayDashboardView.css:
        * UserInterface/Views/Toolbar.css:

2014-09-17  Dean Jackson  <dino@apple.com>

        WebInpector can use unprefixed flexbox
        https://bugs.webkit.org/show_bug.cgi?id=136899

        Reviewed by Joseph Pecoraro.

        Now the inspector UI itself can use a non-prefixed flexbox. This was
        a basic search and replace for the following properties:
        - align-content
        - align-items
        - align-self
        - flex-basis
        - flex-direction
        - flex-wrap
        - flex-grow
        - flex-shrink
        - flex
        - flex-flow
        - justify

        * UserInterface/Views/ButtonToolbarItem.css:
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        * UserInterface/Views/ContentBrowser.css:
        * UserInterface/Views/ControlToolbarItem.css:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DefaultDashboardView.css:
        * UserInterface/Views/FilterBar.css:
        * UserInterface/Views/FlexibleSpaceNavigationItem.css:
        * UserInterface/Views/FontResourceContentView.css:
        * UserInterface/Views/HierarchicalPathComponent.css:
        * UserInterface/Views/ImageResourceContentView.css:
        * UserInterface/Views/LayerTreeSidebarPanel.css:
        * UserInterface/Views/LogContentView.css:
        * UserInterface/Views/Main.css:
        * UserInterface/Views/NavigationBar.css:
        * UserInterface/Views/NavigationSidebarPanel.css:
        * UserInterface/Views/Popover.css:
        * UserInterface/Views/QuickConsole.css:
        * UserInterface/Views/ReplayDashboardView.css:
        * UserInterface/Views/ResourceSidebarPanel.css:
        * UserInterface/Views/Toolbar.css:

2014-09-16  Dean Jackson  <dino@apple.com>

        Add unprefixed flexbox display values and property names/values
        https://bugs.webkit.org/show_bug.cgi?id=136880
        <rdar://problem/18361137>

        Reviewed by Benjamin Poulain with some extra comments by Joseph Pecoraro.

        * UserInterface/Models/CSSKeywordCompletions.js: Switch to all the unprefixed
        flex properties.

2014-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Versioned Inspector protocol JSON files for iOS 8.0
        https://bugs.webkit.org/show_bug.cgi?id=136873

        Reviewed by Timothy Hatcher.

        * Scripts/update-LegacyInspectorBackendCommands.rb:
        * UserInterface/Protocol/Legacy/8.0/InspectorJSBackendCommands.js: Added.
        * UserInterface/Protocol/Legacy/8.0/InspectorWebBackendCommands.js: Added.
        * Versions/InspectorJS-iOS-8.0.json: Added.
        * Versions/InspectorWeb-iOS-8.0.json: Added.

2014-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint no-extra-bind warnings
        https://bugs.webkit.org/show_bug.cgi?id=136659

        Reviewed by Timothy Hatcher.

        * .eslintrc:
        * UserInterface/Controllers/LayerTreeManager.js:
        (WebInspector.LayerTreeManager.prototype.layersForNode):

2014-09-15  Matt Baker  <mattbaker@apple.com>

        Web Inspector: mouse drifts away from resizer when resizing docked inspector
        https://bugs.webkit.org/show_bug.cgi?id=22263

        Reviewed by Joseph Pecoraro.

        Modified the docked resizer dragging logic to record the initial mouse down position relative to the
        resizer client rectangle. Added check while dragging the resizer to ensure that the cursor is positioned
        correctly with respect to the resize direction before updating the attached window dimension.

        * UserInterface/Base/Main.js:
        (WebInspector._dockedResizerMouseDown.dockedResizerDrag):

2014-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix assert in QuickConsole - main frame execution context path component
        https://bugs.webkit.org/show_bug.cgi?id=136748

        Reviewed by Timothy Hatcher.

        This can get called for the MainFrame on page navigations.
        In such cases we can return a better result from this method.

        * UserInterface/Views/QuickConsole.js:
        (WebInspector.QuickConsole.prototype._insertExecutionContextPathComponentForFrame):

2014-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Hide DOM search result highlights when find banner is not showing
        https://bugs.webkit.org/show_bug.cgi?id=136749

        Reviewed by Timothy Hatcher.

        Match search highlights in TextEditor by only showing the highlight
        when the find banner is showing.

        * UserInterface/Views/DOMTreeOutline.css:
        (.showing-find-banner .dom-tree-outline .search-result):
        (.dom-tree-outline .search-highlight): Deleted.

2014-09-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: DOM Tree search highlights are not appearing
        https://bugs.webkit.org/show_bug.cgi?id=136662

        Reviewed by Timothy Hatcher.

        When performing a search within the DOMTreeContentView all
        search results should immediately highlight. When moving
        between search results, emphasize the current with a bouncy.
        Remember to remove the highlights when the search is changed
        or cleared.

        * UserInterface/Views/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView.prototype.performSearch.searchResultsReady):
        (WebInspector.DOMTreeContentView.prototype.searchCleared):
        Shor or hide highlights when searches change.

        (WebInspector.DOMTreeContentView.prototype.revealResult):
        (WebInspector.DOMTreeContentView.prototype._revealSearchResult):
        Emphasize the highlight when moving to a new current result.

        (WebInspector.DOMTreeContentView.prototype._showSearchHighlights):
        (WebInspector.DOMTreeContentView.prototype._hideSearchHighlights):
        On each affected DOMTreeElement show or hide search highlights.

        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.emphasizeSearchHighlight.animationEnded):
        (WebInspector.DOMTreeElement.prototype.emphasizeSearchHighlight):
        Give a brief bouncy-highlight when told to emphasize the search highlight.

        (WebInspector.DOMTreeElement.prototype.updateTitle):
        Remove unused and unnecessary style class on each row.

        (WebInspector.DOMTreeElement.prototype._highlightSearchResults):
        Update the stale code to use new function names and accessors.

        * UserInterface/Views/DOMTreeOutline.css:
        (.dom-tree-outline .search-highlight):
        Styles for the search highlight match search highlights in the sidebar.

        * UserInterface/Views/Main.css:
        (.bouncy-highlight):
        * UserInterface/Views/TextEditor.css:
        Move bouncy-highlight to Main.css.

2014-09-10  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: Modify the type profiler runtime protocol to transfer some computation into the WebInspector
        https://bugs.webkit.org/show_bug.cgi?id=136500

        Reviewed by Joseph Pecoraro.

        This patch maintains the same UI in the Web Inspector for displaying
        type information, but now accounts for the new protocol for type profiling.
        
        The Inspector now has a TypeSet class that wraps the TypeDescription 
        protocol object and creates a simple interface for asking protocol objects 
        about their type.

        * UserInterface/Controllers/TypeTokenAnnotator.js:
        (WebInspector.TypeTokenAnnotator.prototype._insertTypeTokensForEachNode):
        * UserInterface/Main.html:
        * UserInterface/Models/TypeSet.js: Added.
        (WebInspector.TypeSet):
        (WebInspector.TypeSet.fromPayload):
        (WebInspector.TypeSet.prototype.isContainedIn):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation.handler):
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation):
        * UserInterface/Views/TypePropertiesSection.js:
        (WebInspector.TypePropertiesSection.prototype.onpopulate):
        (WebInspector.TypePropertyTreeElement.prototype.onpopulate):
        * UserInterface/Views/TypeTokenView.js:
        (WebInspector.TypeTokenView.prototype.update):
        (WebInspector.TypeTokenView.prototype._shouldShowPopover):
        (WebInspector.TypeTokenView.prototype._displayTypeName):

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Eliminate typeof "undefined" checks
        https://bugs.webkit.org/show_bug.cgi?id=136691

        Reviewed by Alexey Proskuryakov.

        * UserInterface/Base/Main.js:
        (WebInspector.linkifyURLAsNode):
        (WebInspector.linkifyStringAsFragment):
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackend.Command.prototype._invokeWithArguments):
        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.get resizeMethod):
        * UserInterface/Views/NavigationBar.js:
        (WebInspector.NavigationBar.prototype.get minimumWidth):

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix obscure ESLint warnings and skip directories
        https://bugs.webkit.org/show_bug.cgi?id=136686

        Reviewed by Timothy Hatcher.

        * .eslintignore: Added.
        Skip directories we do not want ESLint to process.

        * .eslintrc:
        Add rules we've seen and sort sections.

        * UserInterface/Controllers/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype._appendIndent):
        * UserInterface/Models/Color.js:
        * UserInterface/Models/DOMNodeStyles.js:
        (WebInspector.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:
        * UserInterface/Views/DOMTreeDataGridNode.js:
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.ondelete):
        (WebInspector.DOMTreeElement.prototype._insertInLastAttributePosition):
        (WebInspector.DOMTreeElement.prototype._distinctClosingTagElement):
        * UserInterface/Views/EditingSupport.js:
        (WebInspector.EditingConfig):
        * UserInterface/Views/LayerTreeDataGridNode.js:
        (WebInspector.LayerTreeDataGridNode.prototype._makeOutlet):
        * UserInterface/Views/TreeOutline.js:
        (TreeOutline.prototype.appendChild):
        (TreeOutline.prototype.insertChild):
        (TreeOutline.prototype.removeChildAtIndex):
        (TreeOutline.prototype.removeChild):
        (TreeElement.prototype.expandRecursively):
        Fix linter issues.

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint consistent-return warnings
        https://bugs.webkit.org/show_bug.cgi?id=136682

        Reviewed by Timothy Hatcher.

        * .eslintrc:
        * UserInterface/Controllers/BranchManager.js:
        (WebInspector.BranchManager.prototype.createBranch):
        * UserInterface/Controllers/FrameResourceManager.js:
        (WebInspector.FrameResourceManager.prototype._addNewResourceToFrame):
        * UserInterface/Models/DOMNodeStyles.js:
        (WebInspector.DOMNodeStyles.prototype._parseStyleDeclarationPayload):
        * UserInterface/Views/BoxModelDetailsSectionRow.js:
        (WebInspector.BoxModelDetailsSectionRow.prototype._applyUserInput):
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.showChild):
        (WebInspector.DOMTreeElement.prototype._startEditingTarget):
        (WebInspector.DOMTreeElement.prototype._startEditing):
        * UserInterface/Views/EditingSupport.js:
        * UserInterface/Views/EventListenerSectionGroup.js:
        (WebInspector.EventListenerSectionGroup.prototype._nodeTextOrLink):
        * UserInterface/Views/FrameContentView.js:
        (WebInspector.FrameContentView.prototype._showContentViewForIdentifier):
        * UserInterface/Views/NavigationBar.js:
        (WebInspector.NavigationBar.prototype.insertNavigationItem):
        (WebInspector.NavigationBar.prototype.removeNavigationItem):
        * UserInterface/Views/QuickConsole.js:
        (WebInspector.QuickConsole.prototype._insertExecutionContextPathComponentForFrame):
        * UserInterface/Views/Sidebar.js:
        (WebInspector.Sidebar.prototype.addSidebarPanel):
        (WebInspector.Sidebar.prototype.removeSidebarPanel):
        * UserInterface/Views/TextEditor.js:
        (WebInspector.TextEditor.prototype.addStyleClassToLine):
        (WebInspector.TextEditor.prototype.removeStyleClassFromLine):
        (WebInspector.TextEditor.prototype.toggleStyleClassForLine):

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint no-undef warnings
        https://bugs.webkit.org/show_bug.cgi?id=136660

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DOMSearchMatchObject.js:
        (WebInspector.DOMSearchMatchObject.prototype._generateClassName):
        (WebInspector.DOMSearchMatchObject.titleForDOMNode):
        * UserInterface/Models/Gradient.js:
        (WebInspector.Gradient.fromString):
        * UserInterface/Views/CodeMirrorAdditions.js:
        * UserInterface/Views/ReplayDashboardView.js:
        (WebInspector.ReplayDashboardView):

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused Console search highlight methods
        https://bugs.webkit.org/show_bug.cgi?id=136661

        Reviewed by Timothy Hatcher.

        ESLint's no-undef warning complained about some undefined references
        in these functions that would have thrown exceptions. Turns out this
        code is unused, and we do highlighting in the console separately.

        * UserInterface/Views/ConsoleCommand.js:
        (WebInspector.ConsoleCommand.prototype.clearHighlight): Deleted.
        (WebInspector.ConsoleCommand.prototype.highlightSearchResults): Deleted.
        (WebInspector.ConsoleCommand.prototype.matchesRegex): Deleted.
        * UserInterface/Views/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype.clearHighlight): Deleted.
        (WebInspector.ConsoleMessageImpl.prototype.highlightSearchResults): Deleted.
        (WebInspector.ConsoleMessageImpl.prototype.matchesRegex): Deleted.

2014-09-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint* no-avoidable-bind warnings
        https://bugs.webkit.org/show_bug.cgi?id=136690

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/RemoteObject.js:
        (WebInspector.LocalJSONObject.prototype._children):
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.js:
        (WebInspector.CSSStyleDetailsSidebarPanel):
        * UserInterface/Views/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._updateDataGrid):
        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView.prototype._filterMessages):
        * UserInterface/Views/TextResourceContentView.js:
        (WebInspector.TextResourceContentView.prototype.get supplementalRepresentedObjects):

2014-09-09  Benjamin Poulain  <bpoulain@apple.com>

        Disable the "unreachable-code" warning
        https://bugs.webkit.org/show_bug.cgi?id=136677

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:

2014-09-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint no-trailing-spaces warnings
        https://bugs.webkit.org/show_bug.cgi?id=136657

        Reviewed by Andy Estes.

        * .eslintrc:
        * UserInterface/Base/DOMUtilities.js:
        * UserInterface/Base/URLUtilities.js:
        (relativePath):
        * UserInterface/Base/Utilities.js:
        * UserInterface/Controllers/CodeMirrorColorEditingController.js:
        (WebInspector.CodeMirrorColorEditingController.prototype._colorPickerColorChanged):
        * UserInterface/Controllers/CodeMirrorDragToAdjustNumberController.js:
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.set enabled):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerCanAdjustObjectAtPoint):
        * UserInterface/Controllers/CodeMirrorEditingController.js:
        (WebInspector.CodeMirrorEditingController.prototype.handleKeydownEvent):
        * UserInterface/Controllers/CodeMirrorGradientEditingController.js:
        (WebInspector.CodeMirrorGradientEditingController.prototype.gradientSliderStopWasSelected):
        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController.prototype._processJavaScriptExpression):
        * UserInterface/Controllers/DragToAdjustController.js:
        (WebInspector.DragToAdjustController.prototype.set active):
        (WebInspector.DragToAdjustController.prototype._setDragging):
        (WebInspector.DragToAdjustController.prototype._setTracksMouseClickAndDrag):
        * UserInterface/External/Esprima/esprima.js:
        * UserInterface/Models/ApplicationCacheFrame.js:
        (WebInspector.ApplicationCacheFrame):
        * UserInterface/Models/ApplicationCacheManifest.js:
        (WebInspector.ApplicationCacheManifest):
        (WebInspector.ApplicationCacheManifest.prototype.get manifestURL):
        * UserInterface/Models/CookieStorageObject.js:
        * UserInterface/Models/DOMSearchMatchObject.js:
        (WebInspector.DOMSearchMatchObject.prototype.get title):
        (WebInspector.DOMSearchMatchObject.titleForDOMNode):
        * UserInterface/Models/DatabaseObject.js:
        (WebInspector.DatabaseObject.prototype.getTableNames):
        * UserInterface/Models/DatabaseTableObject.js:
        (WebInspector.DatabaseTableObject):
        * UserInterface/Models/Gradient.js:
        (WebInspector.Gradient.fromString):
        (WebInspector.RadialGradient.prototype.toString):
        * UserInterface/Models/IssueMessage.js:
        (WebInspector.IssueMessage.prototype._formatTextIfNecessary):
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource.prototype.getImageSize.imageDidLoad):
        (WebInspector.Resource.prototype.getImageSize):
        * UserInterface/Models/Script.js:
        (WebInspector.Script.prototype._makeSyntaxTree):
        * UserInterface/Models/SourceCodeLocation.js:
        (WebInspector.SourceCodeLocation.prototype.hasDifferentDisplayLocation):
        * UserInterface/Models/TextMarker.js:
        * UserInterface/Protocol/PageObserver.js:
        * UserInterface/Views/ApplicationCacheDetailsSidebarPanel.js:
        (WebInspector.ApplicationCacheDetailsSidebarPanel.prototype.set applicationCacheFrame):
        (WebInspector.ApplicationCacheDetailsSidebarPanel.prototype.refresh):
        (WebInspector.ApplicationCacheDetailsSidebarPanel.prototype._networkStateUpdated):
        * UserInterface/Views/ApplicationCacheFrameTreeElement.js:
        (WebInspector.ApplicationCacheFrameTreeElement):
        * UserInterface/Views/ApplicationCacheManifestTreeElement.js:
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.get name):
        (WebInspector.ApplicationCacheManifestTreeElement.prototype.get secondaryName):
        * UserInterface/Views/ButtonNavigationItem.js:
        (WebInspector.ButtonNavigationItem):
        * UserInterface/Views/ColorPicker.js:
        * UserInterface/Views/ColorWheel.js:
        (WebInspector.ColorWheel.prototype._draw):
        * UserInterface/Views/CompletionSuggestionsView.js:
        (WebInspector.CompletionSuggestionsView.prototype.show):
        * UserInterface/Views/ConsoleCommand.js:
        * UserInterface/Views/ConsolePrompt.js:
        * UserInterface/Views/ContentFlowTreeElement.js:
        * UserInterface/Views/CookieStorageTreeElement.js:
        (WebInspector.CookieStorageTreeElement):
        * UserInterface/Views/EventListenerSectionGroup.js:
        (WebInspector.EventListenerSectionGroup.prototype._functionTextOrLink):
        * UserInterface/Views/GeneralTreeElementPathComponent.js:
        * UserInterface/Views/GoToLineDialog.js:
        (WebInspector.GoToLineDialog.prototype._handleKeydownEvent):
        * UserInterface/Views/LayerTreeDataGridNode.js:
        (WebInspector.LayerTreeDataGridNode.prototype._makeNameCell):
        * UserInterface/Views/LayerTreeSidebarPanel.js:
        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView.prototype._highlightRanges):
        * UserInterface/Views/NavigationBar.js:
        (WebInspector.NavigationBar):
        * UserInterface/Views/NavigationItem.js:
        (WebInspector.NavigationItem):
        * UserInterface/Views/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshImageSizeSection):
        * UserInterface/Views/ScopeBar.js:
        * UserInterface/Views/ScopeBarItem.js:
        (WebInspector.ScopeBarItem):
        * UserInterface/Views/ScopeChainDetailsSidebarPanel.js:
        (WebInspector.ScopeChainDetailsSidebarPanel):
        * UserInterface/Views/ScriptTimelineDataGridNode.js:
        (WebInspector.ScriptTimelineDataGridNode.prototype.updateRangeTimes):
        * UserInterface/Views/ScriptTreeElement.js:
        (WebInspector.ScriptTreeElement):
        * UserInterface/Views/SearchBar.js:
        * UserInterface/Views/SearchResultTreeElement.js:
        (WebInspector.SearchResultTreeElement.truncateAndHighlightTitle):
        * UserInterface/Views/Slider.js:

2014-09-09  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix ESLint eqeqeq warnings
        https://bugs.webkit.org/show_bug.cgi?id=136658

        Reviewed by Andy Estes.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype.mycallback):
        (WebInspector.DOMTreeManager.prototype.searchResult):
        * UserInterface/Models/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.clearActions):
        * UserInterface/Models/DOMTree.js:
        (WebInspector.DOMTree.prototype._requestRootDOMNode.rootObjectAvailable):
        (WebInspector.DOMTree.prototype._requestRootDOMNode.rootDOMNodeAvailable):
        (WebInspector.DOMTree.prototype._requestRootDOMNode.dispatchCallbacks):
        (WebInspector.DOMTree.prototype._requestRootDOMNode):
        * UserInterface/Models/ProbeSet.js:
        (WebInspector.ProbeSet.prototype.removeProbe):
        * UserInterface/Models/ProbeSetDataTable.js:
        (WebInspector.ProbeSetDataTable.prototype.addSampleForProbe):
        * UserInterface/Views/CodeMirrorAdditions.js:
        * UserInterface/Views/CookieStorageContentView.js:
        (WebInspector.CookieStorageContentView.prototype._filterCookies):
        (WebInspector.cookieMatchesResourceURL):
        * UserInterface/Views/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView.prototype._editingCallback):
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement):
        (WebInspector.DOMTreeElement.prototype._updateChildren):
        (WebInspector.DOMTreeElement.prototype._startEditingTarget):
        (WebInspector.DOMTreeElement.prototype._textNodeEditingCommitted):
        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype._resizerDragging):
        * UserInterface/Views/DatabaseContentView.js:
        (WebInspector.DatabaseContentView.prototype._queryError):
        * UserInterface/Views/DetailsSectionSimpleRow.js:
        (.valueElementClicked):
        (WebInspector.DetailsSectionSimpleRow):
        * UserInterface/Views/Slider.js:
        (WebInspector.Slider.prototype.get _maxX):
        * UserInterface/Views/TreeOutline.js:
        (TreeElement.prototype.expand):

2014-09-09  Jono Wells  <jonowells@apple.com>

        Web Inspector: Fix ESLint no-extra-semi
        https://bugs.webkit.org/show_bug.cgi?id=136666

        Reviewed by Andy Estes.

        Add explicit no-extra-semi rule to .eslintrc. Remove all unnecessary
        semicolons as identified by ESLint.

        * .eslintrc:
        * Tools/PrettyPrinting/Formatter.js:
        (Formatter):
        * UserInterface/Controllers/Formatter.js:
        (Formatter):
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource.prototype.getImageSize.imageDidLoad):
        (WebInspector.Resource.prototype.getImageSize):
        * UserInterface/Views/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._sortDataGrid.comparator):
        (WebInspector.LayerTreeSidebarPanel.prototype._sortDataGrid):
        * UserInterface/Views/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.callback):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):

2014-09-09  Jono Wells  <jonowells@apple.com>

        Web Inspector: Fix ESLint semi (missing semicolon)
        https://bugs.webkit.org/show_bug.cgi?id=136665

        Reviewed by Andy Estes.

        Add missing semicolons as identified by ESLint. Add explicit semi rule to .eslintrc.

        * .eslintrc:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        * Tools/PrettyPrinting/FormatterDebug.js:
        (Formatter.prototype.debug):
        * UserInterface/Base/DOMUtilities.js:
        * UserInterface/Base/EventListener.js:
        (WebInspector.EventListener):
        (WebInspector.EventListener.prototype.this._callback):
        (WebInspector.EventListener.prototype.connect):
        * UserInterface/Base/Object.js:
        (WebInspector.Object):
        (WebInspector.Object.addConstructorFunctions):
        (WebInspector.Event):
        * UserInterface/Base/URLUtilities.js:
        (WebInspector.displayNameForURL):
        (WebInspector.displayNameForHost):
        * UserInterface/Base/Utilities.js:
        (.):
        * UserInterface/Controllers/BranchManager.js:
        (WebInspector.BranchManager):
        * UserInterface/Controllers/CSSStyleManager.js:
        (WebInspector.CSSStyleManager):
        * UserInterface/Controllers/CodeMirrorColorEditingController.js:
        (WebInspector.CodeMirrorColorEditingController):
        * UserInterface/Controllers/CodeMirrorEditingController.js:
        (WebInspector.CodeMirrorEditingController):
        * UserInterface/Controllers/CodeMirrorGradientEditingController.js:
        (WebInspector.CodeMirrorGradientEditingController):
        (WebInspector.CodeMirrorGradientEditingController.prototype.popoverDidPresent):
        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        * UserInterface/Controllers/FormatterContentBuilder.js:
        * UserInterface/Controllers/FormatterSourceMap.js:
        (WebInspector.FormatterSourceMap.fromBuilder):
        * UserInterface/Controllers/IssueManager.js:
        (WebInspector.IssueManager):
        * UserInterface/Controllers/LogManager.js:
        (WebInspector.LogManager):
        * UserInterface/Models/BreakpointAction.js:
        * UserInterface/Models/CSSCompletions.js:
        (WebInspector.CSSCompletions):
        (WebInspector.CSSCompletions.requestCSSNameCompletions):
        * UserInterface/Models/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.forProperty):
        (WebInspector.CSSKeywordCompletions.isColorAwareProperty):
        * UserInterface/Models/CSSStyleSheet.js:
        (WebInspector.CSSStyleSheet.resetUniqueDisplayNameNumbers):
        * UserInterface/Models/Color.js:
        (WebInspector.Color):
        (WebInspector.Color.fromString):
        * UserInterface/Models/DOMNode.js:
        (WebInspector.DOMNode):
        * UserInterface/Models/DOMSearchMatchObject.js:
        (WebInspector.DOMSearchMatchObject.titleForDOMNode):
        * UserInterface/Models/ExecutionContext.js:
        (WebInspector.ExecutionContext.supported):
        * UserInterface/Models/Gradient.js:
        (WebInspector.LinearGradient):
        (WebInspector.LinearGradient.linearGradientWithComponents):
        (WebInspector.RadialGradient):
        (WebInspector.RadialGradient.radialGradientWithComponents):
        * UserInterface/Models/IssueMessage.js:
        (WebInspector.IssueMessage):
        * UserInterface/Models/ReplaySessionSegment.js:
        (WebInspector.IncompleteSessionSegment):
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource.prototype.associateWithScript):
        * UserInterface/Models/Script.js:
        (WebInspector.Script.resetUniqueDisplayNameNumbers):
        * UserInterface/Models/Setting.js:
        (WebInspector.Setting):
        * UserInterface/Models/SourceCodePosition.js:
        (WebInspector.SourceCodePosition):
        * UserInterface/Models/SourceMap.js:
        (WebInspector.SourceMap):
        (WebInspector.SourceMap.StringCharIterator):
        * UserInterface/Models/TextMarker.js:
        (WebInspector.TextMarker):
        * UserInterface/Models/TextRange.js:
        (WebInspector.TextRange):
        * UserInterface/Protocol/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        * UserInterface/Protocol/MessageDispatcher.js:
        (WebInspector.dispatchNextQueuedMessageFromBackend):
        (WebInspector.dispatchMessageFromBackend):
        * UserInterface/Protocol/RemoteObject.js:
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromPrimitiveValue):
        (WebInspector.RemoteObject.fromLocalObject):
        (WebInspector.RemoteObject.resolveNode):
        (WebInspector.RemoteObject.fromPayload):
        (WebInspector.RemoteObject.type):
        (WebInspector.RemoteObjectProperty):
        (WebInspector.RemoteObjectProperty.fromPrimitiveValue):
        (WebInspector.LocalJSONObject):
        * UserInterface/Protocol/ReplayObserver.js:
        (WebInspector.ReplayPosition.fromProtocol):
        * UserInterface/Views/BreakpointActionView.js:
        (WebInspector.BreakpointActionView.displayStringForType):
        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.if):
        * UserInterface/Views/ClusterContentView.js:
        (WebInspector.ClusterContentView.prototype.goBack):
        (WebInspector.ClusterContentView.prototype.goForward):
        * UserInterface/Views/CodeMirrorAdditions.js:
        * UserInterface/Views/ColorWheel.js:
        (WebInspector.ColorWheel):
        * UserInterface/Views/ConsoleMessage.js:
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.create):
        * UserInterface/Views/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl):
        * UserInterface/Views/ContextMenu.js:
        (WebInspector.ContextMenuItem):
        (WebInspector.ContextSubMenuItem):
        (WebInspector.ContextMenu):
        (WebInspector.ContextMenu.Provider):
        (WebInspector.ContextMenu.registerProvider):
        (WebInspector.contextMenuItemSelected):
        (WebInspector.contextMenuCleared):
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement):
        * UserInterface/Views/DOMTreeOutline.js:
        (WebInspector.DOMTreeOutline):
        * UserInterface/Views/DOMTreeUpdater.js:
        (WebInspector.DOMTreeUpdater):
        * UserInterface/Views/DatabaseContentView.js:
        (WebInspector.DatabaseContentView):
        * UserInterface/Views/EditingSupport.js:
        (WebInspector.isBeingEdited):
        (WebInspector.markBeingEdited):
        (WebInspector.isEditingAnyField):
        (WebInspector.isEventTargetAnEditableField):
        (WebInspector.EditingConfig):
        (WebInspector.startEditing):
        * UserInterface/Views/EventListenerSection.js:
        (WebInspector.EventListenerSection):
        * UserInterface/Views/EventListenerSectionGroup.js:
        (WebInspector.EventListenerSectionGroup):
        * UserInterface/Views/FindBanner.js:
        * UserInterface/Views/GeneralTreeElement.js:
        (WebInspector.GeneralTreeElement):
        * UserInterface/Views/GoToLineDialog.js:
        (WebInspector.GoToLineDialog):
        * UserInterface/Views/IndeterminateProgressSpinner.js:
        (WebInspector.IndeterminateProgressSpinner):
        * UserInterface/Views/LayoutTimelineDataGrid.js:
        (WebInspector.LayoutTimelineDataGrid):
        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView):
        * UserInterface/Views/NavigationItem.js:
        * UserInterface/Views/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection):
        (WebInspector.ObjectPropertiesSection.CompareProperties):
        (WebInspector.ObjectPropertyTreeElement):
        * UserInterface/Views/ProbeSetDetailsSection.js:
        * UserInterface/Views/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * UserInterface/Views/ResourceTreeElement.js:
        (WebInspector.ResourceTreeElement.compareResourceTreeElements):
        (WebInspector.ResourceTreeElement.compareFolderAndResourceTreeElements):
        * UserInterface/Views/ScriptTimelineDataGrid.js:
        (WebInspector.ScriptTimelineDataGrid):
        * UserInterface/Views/SearchResultTreeElement.js:
        (WebInspector.SearchResultTreeElement.truncateAndHighlightTitle):
        * UserInterface/Views/TimelineRuler.js:
        (WebInspector.TimelineRuler):
        (WebInspector.TimelineRuler.prototype.get allowsClippedLabels):
        (WebInspector.TimelineRuler.prototype._handleMouseUp):
        * UserInterface/Views/Toolbar.js:
        * UserInterface/Views/TreeOutline.js:
        (TreeOutline.prototype.appendChild):
        (TreeOutline.prototype.insertChild):
        (TreeOutline.prototype.removeChildAtIndex):
        (TreeOutline.prototype.removeChild):
        (TreeOutline.prototype.removeChildren):
        (TreeOutline.prototype.removeChildrenRecursive):
        (TreeOutline.prototype._rememberTreeElement):
        (TreeOutline.prototype._forgetTreeElement):
        (TreeOutline.prototype._forgetChildrenRecursive):
        (TreeOutline.prototype.getCachedTreeElement):
        (TreeOutline.prototype.findTreeElement):
        (TreeOutline.prototype._treeElementDidChange):
        (TreeOutline.prototype.treeElementFromPoint):
        (TreeOutline.prototype._treeKeyDown):
        (TreeOutline.prototype.expand):
        (TreeOutline.prototype.collapse):
        (TreeOutline.prototype.revealed):
        (TreeOutline.prototype.reveal):
        (TreeOutline.prototype.select):
        (TreeOutline.prototype.revealAndSelect):
        (TreeElement.prototype._attach):
        (TreeElement.prototype._detach):
        (TreeElement.treeElementMouseDown):
        (TreeElement.treeElementToggled):
        (TreeElement.treeElementDoubleClicked):
        (TreeElement.prototype.collapse):
        (TreeElement.prototype.collapseRecursively):
        (TreeElement.prototype.expand):
        (TreeElement.prototype.expandRecursively):
        (TreeElement.prototype.hasAncestor):
        (TreeElement.prototype.reveal):
        (TreeElement.prototype.revealed):
        (TreeElement.prototype.selectOnMouseDown):
        (TreeElement.prototype.select):
        (TreeElement.prototype.revealAndSelect):
        (TreeElement.prototype.deselect):
        (TreeElement.prototype.onpopulate):
        (TreeElement.prototype.traverseNextTreeElement):
        (TreeElement.prototype.traversePreviousTreeElement):
        (TreeElement.prototype.isEventWithinDisclosureTriangle):
        * UserInterface/Views/TreeOutlineDataGridSynchronizer.js:
        (WebInspector.TreeOutlineDataGridSynchronizer):

2014-09-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inspector frequently restores wrong view when opened (often Timelines instead of Resource)
        https://bugs.webkit.org/show_bug.cgi?id=135965

        Reviewed by Timothy Hatcher.

        There were numerous subtle race conditions in state restoration.
        This patch intends to fix a number of them to get what feels
        like sane behavior for selected sidebar state restoration.

        1. Starting a Timeline recording no longer automatically switches to the TimelineContentView.
        This was making every reload switch to Timelines. If you had
        a resource selected (e.g. the DOM Tree) we should go back
        to showing the DOM tree.

        2. Background sidebars should not reveal and select tree elements.
        This was making resources get selected in Timelines when reloading the page
        because the background Resources sidebar was restoring selection of the resource.
        That is an unexpected selection and breaks the experience of Timelines.

        3. ContentView changes during page navigation / reload should not be saved, and improve Resource restoration.
        If a TimelineContentView was in the ContentBrowser back/forward history,
        a reload with a resource selected in the Resources sidebar would end up
        showing the Timelines sidebar. This was because when ContentViews are
        closed during the navigation, the ContentBrowser would fall back to the
        remaining TimelineContentView and switch to its only allowed sidebar
        (Timelines). ResourceSidebarPanel, knowing a resource was selected,
        would select the MainFrame intending to stay in the Resource sidebar,
        but the resource is okay with showing in any sidebar, so we stay on Timelines.

        4. Resource sidebar state restoration should propertly restore selection.
        On reload, state restoration would know the resource to re-select in the
        Resources sidebar. As ResourceTreeElements are added to the sidebar
        they are checked against the state restoration cookie. If they match,
        they would select the element and delete the cookie. Unfortunately,
        if this was the first TreeElement child being added to a FrameTreeElement,
        the FrameTreeElement onpopulate would remove all children and re-add
        them in a unique way. Unfortunately this means the TreeElement we
        selected based on the cookie, immediately got thrown away and recreated,
        and we no longer reveal and select it. This is a special case for
        FrameTreeElements which use the onpopulate SPI. So, instead of starting
        processing the new element queue, if this is the first time just trigger
        the onpopulate and elements are made just once.

        5. Show Error Console triggering early, could have unexpected sidebar behavior.
        Opening Web Inspector directly to the console can run before
        WebInspector.contentLoaded (DOMContentLoaded). So in that case
        WebInspector.showFullHeightConsole was not handling if the contentBrowser
        had no content view yet, and the sidebar might be-reopened later on
        in contentLoaded based on the setting value.

        6. Improve automatic resource selection for sidebars with multiple tree outlines.
        Selecting a call frame tree element was unexpectedly changing the
        selection to a Resource where the breakpoint was set. This was
        because we were only looking at one of potentially many content
        tree outlines in the sidebar to see if there was a user action.
        
        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded):
        (WebInspector.showFullHeightConsole):
        (WebInspector.toggleConsoleView):
        (WebInspector._mainResourceDidChange):
        (WebInspector._provisionalLoadStarted):
        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar):
        (WebInspector._updateCookieForInspectorViewState):
        (WebInspector._contentBrowserCurrentContentViewDidChange):
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype._mainFrameMainResourceDidChange.delayedWork):
        (WebInspector.ResourceSidebarPanel.prototype._mainFrameMainResourceDidChange):
        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype._recordingLoaded):

2014-09-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Add layout test for lowercase CSSProperty names
        https://bugs.webkit.org/show_bug.cgi?id=135961

        Reviewed by Joseph Pecoraro.

        Modified test components to support testing CSSStyleManager and related classes:
        - Added required models to Test.html
        - Added CSSCompletions initialization to Test.js
        - CSSCompletions doesn't assume presence of CodeMirror.

        * UserInterface/Base/Test.js:
        (WebInspector.loaded):
        * UserInterface/Models/CSSCompletions.js:
        * UserInterface/Test.html:

2014-09-08  Matt Baker  <mattbaker@apple.com>

        Web Inspector: Fixes to layout test infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=136360

        Reviewed by Joseph Pecoraro.

        Added missing includes to Test.html, which was breaking tests that
        depended on SourceCodeLocation and LazySourceCodeLocation. Also fixed
        bug which prevented test results from being resent after reloading the
        page under test.

        * UserInterface/Base/Test.js:
        (InspectorTest.reloadPage):
        * UserInterface/Test.html:

2014-09-07  Timothy Hatcher  <timothy@apple.com>

        Use a <circle> instead of a <path> in DownloadArrow.svg.
        https://bugs.webkit.org/show_bug.cgi?id=136608

        Reviewed by Antoine Quint.

        * UserInterface/Images/DownloadArrow.svg:
        * UserInterface/Views/TreeElementStatusButton.css:
        (.item > .status > .status-button > svg .filled):
        (body.mac-platform.legacy .item > .status > .status-button > svg .filled):
        (:focus .item.selected > .status > .status-button > svg .filled):
        (.item > .status > .status-button > svg .stroked):
        (body.mac-platform.legacy .item > .status > .status-button > svg .stroked):
        (:focus .item.selected > .status > .status-button > svg .stroked):
        Tweak CSS selectors to apply to other shapes, not just path.

2014-09-06  Darin Adler  <darin@apple.com>

        Make updates suggested by new version of Xcode
        https://bugs.webkit.org/show_bug.cgi?id=136603

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Added CLANG_WARN_BOOL_CONVERSION, CLANG_WARN_CONSTANT_CONVERSION,
        CLANG_WARN_EMPTY_BODY, CLANG_WARN_ENUM_CONVERSION, CLANG_WARN_INT_CONVERSION,
        CLANG_WARN_UNREACHABLE_CODE, CLANG_WARN__DUPLICATE_METHOD_MATCH, ENABLE_STRICT_OBJC_MSGSEND,
        GCC_WARN_UNDECLARED_SELECTOR, and GCC_WARN_UNUSED_FUNCTION as suggested by Xcode update check.
        Also removed duplicate GCC_WARN_UNUSED_VARIABLE line.

        * WebInspectorUI.xcodeproj/project.pbxproj: Updated LastUpgradeCheck.

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        LegacyProfiler: remove redundant ProfileNode members and other cleanup
        https://bugs.webkit.org/show_bug.cgi?id=136380

        Reviewed by Timothy Hatcher.

        Remove unused Profile.idleTime member.

        * UserInterface/Models/Profile.js:
        (WebInspector.Profile.prototype.get idleTime): Deleted.
        * UserInterface/Models/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord.prototype._initializeProfileFromPayload):

2014-09-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove ProfilerAgent and legacy profiler files in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=136462

        Reviewed by Timothy Hatcher.

        The legacy profiler manager didn't do anything, and its views and models
        have been superseded by new views and models based on the Timeline classes.

        * .eslintrc:
        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        (WebInspector.openURL): Remove profile URL handling code.
        * UserInterface/Controllers/LegacyProfileManager.js: Removed.
        * UserInterface/Main.html:
        * UserInterface/Protocol/ConsoleObserver.js:
        (WebInspector.ConsoleObserver.prototype.messageAdded):
        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.isProfilingJavaScript): Deleted.
        (InspectorFrontendAPI.startProfilingJavaScript): Deleted.
        (InspectorFrontendAPI.stopProfilingJavaScript): Deleted.
        * UserInterface/Protocol/LegacyProfilerObserver.js: Removed.
        * UserInterface/Views/LegacyBottomUpProfileDataGridTree.js: Removed.
        * UserInterface/Views/LegacyJavaScriptProfileObject.js: Removed.
        * UserInterface/Views/LegacyJavaScriptProfileType.js: Removed.
        * UserInterface/Views/LegacyJavaScriptProfileView.css: Removed.
        * UserInterface/Views/LegacyJavaScriptProfileView.js: Removed.
        * UserInterface/Views/LegacyProfileDataGridTree.js: Removed.
        * UserInterface/Views/LegacyProfileObject.js: Removed.
        * UserInterface/Views/LegacyProfileType.js: Removed.
        * UserInterface/Views/LegacyProfileView.css: Removed.
        * UserInterface/Views/LegacyProfileView.js: Removed.
        * UserInterface/Views/LegacyTopDownProfileDataGridTree.js: Removed.

2014-08-29  Saam Barati  <saambarati1@gmail.com>

        Web Inspector: Create a UI for displaying JavaScript type information
        https://bugs.webkit.org/show_bug.cgi?id=135142

        Reviewed by Joseph Pecoraro.

        JavaScriptCore now has a type profiler. This patch provides a frontend
        user interface for displaying this type information in the Web Inspector.
        The user interface works by placing inline "type tokens" next to important
        JavaScript expressions: function arguments, function return types, and 
        variable declarations. Type information can also be seen for almost every
        JavaScipt expression just by hovering over it while viewing a JavaScript file.

        Currently, turning on the type profiler is expensive, so the inspector
        ensures to never turn on type profiling until the user specifically asks 
        for type information to be turned on.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController.prototype._startTracking):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._processNewHoveredToken):
        Added a new type profiling mode.

        * UserInterface/Controllers/FormatterSourceMap.js:
        (WebInspector.FormatterSourceMap.prototype.originalToFormatted):
        (WebInspector.FormatterSourceMap.prototype.originalPositionToFormatted):
        (WebInspector.FormatterSourceMap.prototype.formattedToOriginal):
        (WebInspector.FormatterSourceMap.prototype.formattedToOriginalOffset):
        * UserInterface/Controllers/TypeTokenAnnotator.js: Added.
        (WebInspector.TypeTokenAnnotator):
        (WebInspector.TypeTokenAnnotator.prototype.get isActive):
        (WebInspector.TypeTokenAnnotator.prototype.get sourceCodeTextEditor):
        (WebInspector.TypeTokenAnnotator.prototype.pause):
        (WebInspector.TypeTokenAnnotator.prototype.resume):
        (WebInspector.TypeTokenAnnotator.prototype.refresh):
        (WebInspector.TypeTokenAnnotator.prototype.reset):
        (WebInspector.TypeTokenAnnotator.prototype.toggleTypeAnnotations):
        (WebInspector.TypeTokenAnnotator.prototype._insertAnnotations.):
        (WebInspector.TypeTokenAnnotator.prototype._insertTypeTokensForEachNode):
        (WebInspector.TypeTokenAnnotator.prototype._insertToken):
        (WebInspector.TypeTokenAnnotator.prototype.isLineTerminator):
        (WebInspector.TypeTokenAnnotator.prototype._translateToOffsetAfterFunctionParameterList):
        (WebInspector.TypeTokenAnnotator.prototype._clearTimeoutIfNeeded):
        This class is responsible for producing the inline "type token" annotations.

        * UserInterface/Images/NavigationItemTypes.svg: Added.
        * UserInterface/Main.html:
        * UserInterface/Models/Script.js:
        (WebInspector.Script.prototype.get scriptSyntaxTree):
        * UserInterface/Models/ScriptSyntaxTree.js:
        (WebInspector.ScriptSyntaxTree.prototype.containsNonEmptyReturnStatement):
        (WebInspector.ScriptSyntaxTree.prototype.):
        (WebInspector.ScriptSyntaxTree.prototype.updateTypes):
        (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
        * UserInterface/Views/ScriptContentView.js:
        (WebInspector.ScriptContentView):
        (WebInspector.ScriptContentView.prototype.get navigationItems):
        (WebInspector.ScriptContentView.prototype._contentDidPopulate):
        (WebInspector.ScriptContentView.prototype._toggleTypeAnnotations):
        (WebInspector.ScriptContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor):
        (WebInspector.SourceCodeTextEditor.prototype.shown):
        (WebInspector.SourceCodeTextEditor.prototype.hidden):
        (WebInspector.SourceCodeTextEditor.prototype.canShowTypeAnnotations):
        (WebInspector.SourceCodeTextEditor.prototype.toggleTypeAnnotations):
        (WebInspector.SourceCodeTextEditor.prototype.showPopoverForTypes):
        (WebInspector.SourceCodeTextEditor.prototype.prettyPrint):
        (WebInspector.SourceCodeTextEditor.prototype._populateWithContent):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidPause):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidResume):
        (WebInspector.SourceCodeTextEditor.prototype._updateTokenTrackingControllerState):
        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerNewHighlightCandidate):
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation.handler):
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation):
        (WebInspector.SourceCodeTextEditor.prototype._showPopover):
        (WebInspector.SourceCodeTextEditor.prototype.editingControllerDidFinishEditing):
        (WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenAnnotator):
        (WebInspector.SourceCodeTextEditor.prototype._enableScrollEventsForTypeTokenAnnotator):
        (WebInspector.SourceCodeTextEditor.prototype._disableScrollEventsForTypeTokenAnnotator):
        (WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenScrollEventHandler.scrollHandler):
        (WebInspector.SourceCodeTextEditor.prototype._makeTypeTokenScrollEventHandler):
        * UserInterface/Views/TextContentView.js:
        (WebInspector.TextContentView.prototype.get navigationItems):
        * UserInterface/Views/TextEditor.js:
        (WebInspector.TextEditor.prototype.set formatted):
        (WebInspector.TextEditor.prototype.canShowTypeAnnotations):
        (WebInspector.TextEditor.prototype.visibleRangeOffsets):
        (WebInspector.TextEditor.prototype.originalOffsetToCurrentPosition):
        (WebInspector.TextEditor.prototype.currentOffsetToCurrentPosition):
        (WebInspector.TextEditor.prototype.currentPositionToOriginalOffset):
        (WebInspector.TextEditor.prototype.currentPositionToCurrentOffset):
        (WebInspector.TextEditor.prototype.setInlineWidget):
        (WebInspector.TextEditor.prototype.addScrollHandler):
        (WebInspector.TextEditor.prototype.removeScrollHandler):
        (WebInspector.TextEditor.prototype._scrollIntoViewCentered):
        * UserInterface/Views/TextResourceContentView.js:
        (WebInspector.TextResourceContentView):
        (WebInspector.TextResourceContentView.prototype.get navigationItems):
        (WebInspector.TextResourceContentView.prototype._contentDidPopulate):
        (WebInspector.TextResourceContentView.prototype._toggleTypeAnnotations):
        (WebInspector.TextResourceContentView.prototype._showJavaScriptTypeInformationSettingChanged):
        * UserInterface/Views/TypePropertiesSection.js: Added.
        (WebInspector.TypePropertiesSection):
        (WebInspector.TypePropertiesSection.prototype.onpopulate):
        (WebInspector.TypePropertiesSection.PropertyComparator):
        (WebInspector.TypePropertyTreeElement):
        (WebInspector.TypePropertyTreeElement.prototype.onpopulate):
        * UserInterface/Views/TypeTokenView.css: Added.
        (.type-token):
        (.type-token-left-spacing):
        (.type-token-right-spacing):
        (.type-token-function, .type-token-boolean):
        (.type-token-number):
        (.type-token-string):
        (.type-token-default):
        (.type-token-empty):
        (.type-token-many):
        * UserInterface/Views/TypeTokenView.js: Added.
        (WebInspector.TypeTokenView):
        (WebInspector.TypeTokenView.titleForPopover):
        (WebInspector.TypeTokenView.prototype.update):
        (WebInspector.TypeTokenView.prototype._setUpMouseoverHandlers):
        (WebInspector.TypeTokenView.prototype._shouldShowPopover):
        The inline "type token" view.

2014-08-29  Saam Barati  <sbarati@apple.com>

        Web Inspector: Fix how Popover animates
        https://bugs.webkit.org/show_bug.cgi?id=136353

        Reviewed by Timothy Hatcher.

        Popovers currently don't animate properly because they use 
        window.requestAnimationFrame which won't fire its callback 
        while the inspector is paused in the debugger. This patches
        switches the callback mechanism to setTimeout and also changes
        how a Popover's anchor animates to prevent visual glitches.

        Popover also has a new function that allows a new target
        frame and new content to be set simultaneously and to
        animate to show the new content while changing the 
        location of the popover frame.

        SourceCodeTextEditor uses Popover's new API for animating
        between popovers when paused in the debugger. SourceCodeTextEditor 
        also now ensures proper balancing of popover tracking event 
        listeners.

        * UserInterface/Views/Popover.js:
        (WebInspector.Popover.prototype.present):
        (WebInspector.Popover.prototype.presentNewContentWithFrame):
        (WebInspector.Popover.prototype.dismiss):
        (WebInspector.Popover.prototype._update):
        (WebInspector.Popover.prototype.drawBackground):
        (WebInspector.Popover.prototype._animateFrame):
        (WebInspector.Popover.prototype._drawFrame):
        (WebInspector.Popover.prototype._addListenersIfNeeded):
        (WebInspector.Popover.prototype._animateFrame.drawBackground): Deleted.
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._showPopover):
        (WebInspector.SourceCodeTextEditor.prototype._dismissPopover):
        (WebInspector.SourceCodeTextEditor.prototype._trackPopoverEvents):

2014-08-28  Saam Barati  <sbarati@apple.com>

        Web Inspector: Write tests for ScriptSyntaxTree and fix bugs in the data structure
        https://bugs.webkit.org/show_bug.cgi?id=136272

        Reviewed by Joseph Pecoraro.

        Include the necessary files in Test.html to test ScriptSyntaxTree.
        Also, ScriptSyntaxTree had a couple of errors for two of its nodes
        where they simply ignored one of the properties on the node.
        These errors were found while writing the tests and are fixed
        in this patch.

        * UserInterface/Models/ScriptSyntaxTree.js:
        (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree):
        * UserInterface/Test.html:

2014-08-27  Saam Barati  <sbarati@apple.com>

        Web Inspector: Layout issues for popover on not legacy OS
        https://bugs.webkit.org/show_bug.cgi?id=136268

        Reviewed by Joseph Pecoraro.

        On the latest OS, popovers invade the title bar's space which will
        cause layout issues because the title bar will render above
        the popover. Fix this by providing some padding for popovers on 
        not legacy OSs.

        * UserInterface/Views/Popover.js:

2014-08-27  Timothy Hatcher  <timothy@apple.com>

        REGRESSION: Web Inspector: Legacy toolbar has two different colors in unfocused windowed mode
        https://bugs.webkit.org/show_bug.cgi?id=136289

        Reviewed by Darin Adler.

        * UserInterface/Views/Toolbar.css:
        (body.mac-platform.legacy .toolbar): Override the background-color as transparent. Non-legacy
        uses a solid color instead of a gradient for window-inactive.

2014-08-26  Saam Barati  <sbarati@apple.com>

        Web Inspector: Fix CodeMirrorTokenTrackingController::_startTracking assertion
        https://bugs.webkit.org/show_bug.cgi?id=136160

        Reviewed by Joseph Pecoraro.

        Check if '_tracking' is already true before calling '_startTracking'
        to prevent the assertion from always firing.

        * UserInterface/Controllers/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController.prototype._mouseEntered):

2014-08-25  Brent Fulgham  <bfulgham@apple.com>

        [Win] Pass OFFICIAL_BUILD flag to WebInspectorUI build process
        https://bugs.webkit.org/show_bug.cgi?id=136229

        Reviewed by Dean Jackson.

        * WebInspectorUI.vcxproj/WebInspectorUI.make: Pass OFFICIAL_BUILD
        flag to build-webinspectorui.pl.
        * WebInspectorUI.vcxproj/build-webinspectorui.pl: Accept and use
        the OFFICIAL_BUILD flag.

2014-08-24  Benjamin Poulain  <benjamin@webkit.org>

        The inspector should not use the "after" pseudo element with the compatibility syntax
        https://bugs.webkit.org/show_bug.cgi?id=136204

        Reviewed by Darin Adler.

        We should only use hte proper pseudo element syntax inside WebKit.

        * Tools/PrettyPrinting/codemirror-additions.css:
        * Tools/PrettyPrinting/populate/apple.css:

2014-08-24  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Rename DOM.RGBA and remove workarounds in the bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=136025

        Reviewed by Joseph Pecoraro.

        Also rename DOM.RGBA in legacy protocol specifications.

        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-08-21  Simon Fraser  <simon.fraser@apple.com>

        Add a button to enable paint flashing in the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=136133

        Reviewed by Tim Hatcher.
        
        Add a button to the right of the layer borders button to turn on paint flashing.
        Future patches will actually enable this feature.

        * Localizations/en.lproj/localizedStrings.js: Tooltip strings.
        * UserInterface/Images/PaintFlashing.svg: Added. "Paintbrush" icon.
        * UserInterface/Views/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        (WebInspector.DOMTreeContentView.prototype.get navigationItems):
        (WebInspector.DOMTreeContentView.prototype._togglePaintFlashing):

2014-08-20  Saam Barati  <sbarati@apple.com>

        Rename HighFidelityTypeProfiling variables for more clarity
        https://bugs.webkit.org/show_bug.cgi?id=135899

        Reviewed by Geoffrey Garen.

        Change a reference in a comment to a JavaScriptCore file to its 
        newly renamed variant.

        * UserInterface/Models/ScriptSyntaxTree.js:

2014-08-18  Saam Barati  <sbarati@apple.com>

        Web Inspector: Introduce an inspector Abstract Syntax Tree.
        https://bugs.webkit.org/show_bug.cgi?id=135763

        Reviewed by Joseph Pecoraro.

        This patch adds an Abstract Syntax Tree to the Web inspector. 
        This syntax tree is modeled off the Esprima.js syntax tree
        which complies with the Mozilla Parser API:
        https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey/Parser_API
        Script is the owner of the Web Inspector syntax tree, and has an API
        for accessing its syntax tree property.

        * UserInterface/External/Esprima/esprima.js:
        * UserInterface/Main.html:
        * UserInterface/Models/Script.js:
        (WebInspector.Script):
        (WebInspector.Script.prototype.requestScriptSyntaxTree.makeSyntaxTreeAndCallCallback):
        (WebInspector.Script.prototype._resolveResource):
        (WebInspector.Script.prototype._makeSyntaxTree):
        * UserInterface/Models/ScriptSyntaxTree.js: Added.
        (WebInspector.ScriptSyntaxTree):
        (WebInspector.ScriptSyntaxTree.prototype.get parsedSuccessfully):
        (WebInspector.ScriptSyntaxTree.prototype.forEachNode):
        (WebInspector.ScriptSyntaxTree.prototype.):
        (WebInspector.ScriptSyntaxTree.prototype.filter):
        (WebInspector.ScriptSyntaxTree.prototype.filterForNodesInRange):
        (WebInspector.ScriptSyntaxTree.prototype.filterByRange):
        (WebInspector.ScriptSyntaxTree.prototype.containsNonEmptyReturnStatement.removeFunctionsFilter):
        (WebInspector.ScriptSyntaxTree.prototype.containsNonEmptyReturnStatement):
        (WebInspector.ScriptSyntaxTree.prototype.updateTypes):
        (WebInspector.ScriptSyntaxTree.prototype._defaultParserState):
        (WebInspector.ScriptSyntaxTree.prototype._recurse):
        (WebInspector.ScriptSyntaxTree.prototype._recurseArray):
        (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree):

2014-08-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Improve performance of selection range changes viewing Scripts timeline
        https://bugs.webkit.org/show_bug.cgi?id=136015

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Utilities.js:
        (clamp):
        Helper function to clamp a value between a min and max.

        * UserInterface/Models/ProfileNode.js:
        (WebInspector.ProfileNode.prototype.get startTime):
        (WebInspector.ProfileNode.prototype.get endTime):
        These can be quickly calculated, so avoid full calculation to grab the values.

        * UserInterface/Views/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype.updateLayout):
        Update ranges with a smart helper, instead of blindly doing it and needing refresh.

        * UserInterface/Views/ProfileNodeDataGridNode.js:
        (WebInspector.ProfileNodeDataGridNode.prototype.get rangeEndTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.get data):
        (WebInspector.ProfileNodeDataGridNode.prototype.updateRangeTimes):
        (WebInspector.ProfileNodeDataGridNode.prototype.set rangeStartTime): Deleted.
        (WebInspector.ProfileNodeDataGridNode.prototype.set rangeEndTime): Deleted.
        * UserInterface/Views/ScriptTimelineDataGridNode.js:
        (WebInspector.ScriptTimelineDataGridNode.prototype.updateRangeTimes):
        (WebInspector.ScriptTimelineDataGridNode.prototype.set rangeStartTime): Deleted.
        (WebInspector.ScriptTimelineDataGridNode.prototype.set rangeEndTime): Deleted.
        When updating the range selection, compare to the last range selection
        on this DataGridNode. If the visible portion of this node's time range
        changes, we need a refresh. Otherwise, we don't need a refresh.

2014-08-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update Scripts/update-LegacyInspectorBackendCommands.rb for the new generator
        https://bugs.webkit.org/show_bug.cgi?id=136006

        Reviewed by Timothy Hatcher.

        * Scripts/update-LegacyInspectorBackendCommands.rb:
        Use the new generator and pass the appropriate flags.

        * UserInterface/Protocol/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        Newly generated files using the new generator.

        * Versions/Inspector-iOS-6.0.json:
        Remove unsupported features.

2014-08-15  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove forced layouts during recording caused by striped background element resizing
        https://bugs.webkit.org/show_bug.cgi?id=136009

        Reviewed by Timothy Hatcher.

        We used to manually resize and a custom striped background behind
        the timeline tree outline content area. This can happen frequently
        during timeline recordings causing forced layouts. We can eliminate
        the hack and instead put the stripe background on the tree outline.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.updateCustomContentOverflow): Deleted.
        * UserInterface/Views/TimelineSidebarPanel.css:
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .content .item > .status > .status-button):
        (.sidebar > .panel.navigation.timeline > .content > .stripe-background): Deleted.
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing > .content > .stripe-background): Deleted.
        Eliminate the striped background element.

        * UserInterface/Views/TimelineView.css:
        (.panel.navigation.timeline > .content > .navigation-sidebar-panel-content-tree-outline):
        (.panel.navigation.timeline.timeline-content-view-showing > .content > .navigation-sidebar-panel-content-tree-outline):
        Give the timeline content tree outlines the striped background.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WebInspector.NavigationSidebarPanel.prototype.updateCustomContentOverflow): Deleted.
        Remove the now unused updateCustomContentOverflow method.

2014-08-15  Jono Wells  <jonowells@apple.com>

        Web Inspector: Inspect Element doesn't always highlight the correct element when inspector is closed before inspecting
        https://bugs.webkit.org/show_bug.cgi?id=135995

        Reviewed by Joseph Pecoraro.

        Change so if an element is inspected via the Inspect Element context menu, selected
        node restoration is disallowed until the main resource in the main frame changes.
        This way an attempt by a sub-frame will not change the highlighted element in the
        Main Frame's DOM tree unexpectedly.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WebInspector.DOMTreeManager):
        (WebInspector.DOMTreeManager.prototype._mainResourceDidChange):
        (WebInspector.DOMTreeManager.prototype.inspectElement):

2014-08-15  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: rewrite CodeGeneratorInspector to be modular and testable
        https://bugs.webkit.org/show_bug.cgi?id=131596

        Reviewed by Joseph Pecoraro.

        Also apply type extraction refactorings to old protocol versions for consistency.

        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-08-15  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Probe details sidebar data grids do not show data
        https://bugs.webkit.org/show_bug.cgi?id=135992

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ProbeSetDataGrid.js:
        (WebInspector.ProbeSetDataGrid): Make the DataGrid be inline to show the data correctly.

2014-08-15  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Legacy Mac toolbar appearance looks wrong
        https://bugs.webkit.org/show_bug.cgi?id=135962

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/Toolbar.css:
        (body.mac-platform.legacy .toolbar): Don't draw a gradient background when not docked.
        Move border-bottom-color from body.mac-platform.legacy.docked .toolbar to here so it
        applies all the time as it should have.

2014-08-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dragging Undocked inspector by window title has broken behavior
        https://bugs.webkit.org/show_bug.cgi?id=135950

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        On Mac ports where we the inspector content goes everywhere, window dragging behavior
        still exists for the top 22px of the window. So don't do our JavaScript based window
        dragging for this special region.

        * UserInterface/Models/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.Modifier.get CommandOrControl):
        (WebInspector.KeyboardShortcut.prototype.get displayName):
        Instead of calling a host function, use the value already in the frontend.

2014-08-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Split console toggle button wrong - Images/Images/SplitToggleUp.svg does not exist
        https://bugs.webkit.org/show_bug.cgi?id=135957

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView):
        Wrong image path passed to platformImagePath.

2014-08-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Avoid re-binding the same function over and over
        https://bugs.webkit.org/show_bug.cgi?id=135949

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype._startAutoCapturing):
        (WebInspector.TimelineManager.prototype._stopAutoRecordingSoon):
        (WebInspector.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        Stash a bound copy of the function once, and reuse it.

2014-08-14  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timelines can get caught in requestAnimationFrame loop when not recording
        https://bugs.webkit.org/show_bug.cgi?id=135946

        Reviewed by Timothy Hatcher.

        Each TimelineContentView was listening for the TimelineManager's start/stop
        capturing events. However, only the active recording could possibly update.
        Likewise, if a pre-existing recording started and stopped we did not properly
        stop in the case where we were waiting for an event to update the current time,
        which would result in an infinite rAF loop of no updates.

        * UserInterface/Models/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.unloaded):
        When a timeline recording is unloaded trigger an event.

        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._startUpdatingCurrentTime):
        Assert we were not already waiting.

        (WebInspector.TimelineContentView.prototype._stopUpdatingCurrentTime):
        Properly handle the case of starting/stoping an already existing recording
        without a new event coming in.

        (WebInspector.TimelineContentView.prototype._recordingTimesUpdated):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        Convert to a boolean instead of deleting state.

        (WebInspector.TimelineContentView.prototype._recordingUnloaded):
        Stop listening to timeline manager events that no longer affect unloaded recordings.

2014-08-13  Jono Wells  <jonowells@apple.com>

        Web Inspector: eslint configuration should be stored as .eslintrc
        https://bugs.webkit.org/show_bug.cgi?id=135916

        .eslintrc file added to allow for ESLint solutions, within editors and otherwise,
        to be automatically configured based on the WebKit JavaScript coding style. The
        initial file is incomplete.

        Reviewed by Joseph Pecoraro.

        * .eslintrc: Added.
        * External/.eslintrc: Added.

2014-08-13  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Missing semicolon after console.assert in TimelineSidebarPanel.js
        https://bugs.webkit.org/show_bug.cgi?id=135917

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineSidebarPanel.js:

2014-08-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Inline DataGrid inside details sidebar has double thick top border with legacy styles
        https://bugs.webkit.org/show_bug.cgi?id=135894

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DetailsSection.css:
        (body.mac-platform.legacy .details-section:not(.collapsed) .data-grid.inline):
        In legacy styles the details-section header always has a 1px bottom border.
        In all styles, an inline data grid had a 1px border everywhere. So, handle
        this specific case by removing the top border of an inline data grid
        that is inside an expanded details section.

2014-08-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "No Filter Results" view only shows once, does not show again
        https://bugs.webkit.org/show_bug.cgi?id=135892

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        We were checking at the wrong level for a parent. Check if the root
        placeholder element has a parent or not.

2014-08-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Incorrect border colors in event listeners sections in details sidebar
        https://bugs.webkit.org/show_bug.cgi?id=135891

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DetailsSection.css:
        (.details-section .details-section > .header):
        (.details-section .details-section:not(.collapsed) > .header):
        Remove box-shadow and replace with a bottom border.

        (body.mac-platform.legacy .details-section .details-section.collapsed > .header):
        (.details-section .details-section.collaspsed > .header): Deleted.
        Collapsed was spelled incorrectly so this was not applying properly before.
        But correct this for legacy because legacy still uses a box-shadow.

2014-08-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline Close buttons can use polish for new and legacy styles
        https://bugs.webkit.org/show_bug.cgi?id=135870

        Reviewed by Timothy Hatcher.

        * UserInterface/Images/Legacy/Close.svg:
        Ensure this has fill colors in tree selections.

        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .timelines-content .close-button):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .timelines-content .close-button):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .content .item > .status > .status-button):
        Size the close-button for the top overviews differently in new styles (14x14) and legacy (12x12).

2014-08-13  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Workaround a NSWindow change to the title bar.
        https://bugs.webkit.org/show_bug.cgi?id=135880

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WebInspector._updateToolbarHeight): Don't call in legacy mode.

        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar .dashboard-container):
        (.toolbar .dashboard):
        Drive-by fix some errant drop-shadows. The transparent border was pushing the inset top
        drop shadow down when it shouldn't. Remove duplicate background and shadow.

        * UserInterface/Views/Main.css:
        (body): Set the background white, never needs to be transparent now.
        (body.mac-platform.legacy:not(.docked)): Set background to transparent when not docked in legacy.
        (body.docked.bottom): Update border color.
        (body.docked.right): Ditto.
        (body.docked.bottom.mac-platform.legacy): Keep old border color.
        (body.docked.right.mac-platform.legacy): Ditto.

        * UserInterface/Views/Toolbar.css:
        (.toolbar): Set a default border and background gradient.
        (body.window-inactive .toolbar): No gradient but use a solid color when inactive.
        (body.mac-platform:not(.legacy):not(.docked) .toolbar): Padding on the top for the title bar.
        (body.mac-platform:not(.legacy):not(.docked) .toolbar.icon-and-label-vertical): Account for title bar height.
        (body.mac-platform:not(.legacy):not(.docked) .toolbar.icon-and-label-vertical.small-size): Ditto.
        (body.mac-platform:not(.legacy):not(.docked) .toolbar.icon-only): Ditto.
        (body.mac-platform:not(.legacy):not(.docked) .toolbar.label-only): Ditto.
        (body.mac-platform.legacy .toolbar): No inset shadow in legacy when not docked.
        (body.mac-platform.legacy.docked .toolbar): Restore legacy border color.
        (body.mac-platform.legacy:not(.docked) .toolbar .item.button > .label): Only disable sub-pixel antialiasing on legacy!
        (body.mac-platform.legacy.window-inactive .toolbar): Restore legacy border color.

2014-08-13  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Restore Helvetica as the dashboard font in legacy mode
        https://bugs.webkit.org/show_bug.cgi?id=135886

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DefaultDashboardView.css:
        (body.mac-platform.legacy .toolbar .dashboard.default > .item):

2014-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline record content view close button does not work after scrolling, invisible scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=135863

        Reviewed by Timothy Hatcher.

        A workaround is to not have position:relative content inside of
        scrollable region. Turns out this was only done in two places,
        and I do not see any absolutely positioned content in navigation
        sidebar content tree outlines. This also fixes clicking on the
        reload button if you've scrolled the Resources sidebar. 

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.navigation-sidebar-panel-content-tree-outline .children): Deleted.
        (.navigation-sidebar-panel-content-tree-outline .item): Deleted.

2014-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused variable in Platform.js
        https://bugs.webkit.org/show_bug.cgi?id=135869

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Platform.js:

2014-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline selection range creation does not work when clicking event bubble or near bottom of overview
        https://bugs.webkit.org/show_bug.cgi?id=135849

        Reviewed by Timothy Hatcher.

        Click events on elements in the graph container (event bubbles) or
        in the scroll container (bottom 16px) were becoming the event targets.
        As siblings of the ruler, the dispatch would not go through the ruler.
        The ruler was supposed to be overlaying everything in the overview,
        so give the ruler a z-index so it really is overlaying elements.

        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler):

2014-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: GoToLine dialog clear text button looks poor
        https://bugs.webkit.org/show_bug.cgi?id=135828

        Reviewed by Timothy Hatcher.

        Legacy/CloseWhite.svg was not used, but in the case where the white
        close button is needed the thicker bars looks better. Re-use the
        Legacy image as the default CloseWhite.svg.

        * UserInterface/Images/CloseWhite.svg:
        * UserInterface/Images/Legacy/CloseWhite.svg: Removed.

2014-08-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Easier Way to go back to the Timeline Overviews
        https://bugs.webkit.org/show_bug.cgi?id=135827

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        Added new tooltip UIString.

        * UserInterface/Images/Close.svg:
        * UserInterface/Images/CloseLarge.svg:
        * UserInterface/Images/Legacy/Close.svg:
        Add "stroked" class so the buttons can fill with white on selected rows.
        Also re-center the non-legacy images horizontally.

        * UserInterface/Views/GeneralTreeElement.js:
        (WebInspector.GeneralTreeElement.prototype.set status):
        Do not recreate elements if the status did not change.

        * UserInterface/Views/LayoutTimelineView.js:
        (WebInspector.LayoutTimelineView):
        (WebInspector.LayoutTimelineView.prototype._treeElementDeselected):
        (WebInspector.LayoutTimelineView.prototype._treeElementSelected):
        (WebInspector.LayoutTimelineView.prototype._updateTreeElementWithCloseButton):
        (WebInspector.LayoutTimelineView.prototype._closeStatusButtonClicked):
        * UserInterface/Views/NetworkTimelineView.js:
        (WebInspector.NetworkTimelineView):
        (WebInspector.NetworkTimelineView.prototype._treeElementDeselected):
        (WebInspector.NetworkTimelineView.prototype._treeElementSelected):
        (WebInspector.NetworkTimelineView.prototype._updateTreeElementWithCloseButton):
        (WebInspector.NetworkTimelineView.prototype._closeStatusButtonClicked):
        * UserInterface/Views/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype._treeElementDeselected):
        (WebInspector.OverviewTimelineView.prototype._treeElementSelected):
        (WebInspector.OverviewTimelineView.prototype._updateTreeElementWithCloseButton):
        (WebInspector.OverviewTimelineView.prototype._closeStatusButtonClicked):
        * UserInterface/Views/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView):
        (WebInspector.ScriptTimelineView.prototype._treeElementDeselected):
        (WebInspector.ScriptTimelineView.prototype._treeElementSelected):
        (WebInspector.ScriptTimelineView.prototype._updateTreeElementWithCloseButton):
        (WebInspector.ScriptTimelineView.prototype._closeStatusButtonClicked):
        Provide select/deselect handlers to show/hide the close status bar button
        when selecting a row that shows a non-Timeline content view. Currently the
        only content views the tree elements can show are Resource views, so the
        tooltip is the same everywhere.

2014-08-12  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Expect to see top level JavaScript function profiler details for event handlers in timeline
        https://bugs.webkit.org/show_bug.cgi?id=132109

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype._processPendingRecords): Don't promote root node children if
        there is only one child.

2014-08-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: show a replay dashboard when capturing or replaying
        https://bugs.webkit.org/show_bug.cgi?id=135170

        Reviewed by Timothy Hatcher.

        This patch adds a replay dashboard with record/play/pause buttons. It
        is shown automatically when the user starts capturing an execution from
        the replay menu in the Timelines sidebar panel.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        (WebInspector._captureDidStart):
        * UserInterface/Controllers/DashboardManager.js:
        (WebInspector.DashboardManager):
        * UserInterface/Images/ReplayPauseButton.svg: Added.
        * UserInterface/Images/ReplayPlayButton.svg: Added.
        * UserInterface/Images/ReplayRecordingButton.svg: Added.
        * UserInterface/Main.html:
        * UserInterface/Models/ReplayDashboard.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DashboardManager.js.
        (WebInspector.ReplayDashboard):
        * UserInterface/Views/DashboardView.js:
        (WebInspector.DashboardView):
        * UserInterface/Views/ReplayDashboardView.css: Copied from Source/WebInspectorUI/UserInterface/Controllers/DashboardManager.js.
        (.toolbar .dashboard.replay):
        (.toolbar .dashboard.replay div.navigation-bar):
        (.toolbar .dashboard.replay .item.button > .glyph):
        (.toolbar.label-only .dashboard.replay .item.button > .glyph):
        * UserInterface/Views/ReplayDashboardView.js: Added.
        (WebInspector.ReplayDashboardView):
        (WebInspector.ReplayDashboardView.prototype._captureButtonItemClicked):
        (WebInspector.ReplayDashboardView.prototype._replayButtonItemClicked):
        (WebInspector.ReplayDashboardView.prototype._captureStarted):
        (WebInspector.ReplayDashboardView.prototype._captureStopped):
        (WebInspector.ReplayDashboardView.prototype._playbackStarted):
        (WebInspector.ReplayDashboardView.prototype._playbackPaused):
        (WebInspector.ReplayDashboardView.prototype._playbackFinished):

2014-08-08  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: DebuggerManager commands should return promises
        https://bugs.webkit.org/show_bug.cgi?id=135690

        Reviewed by Timothy Hatcher.

        Convert the existing debugger commands to return promises. This
        requires separately waiting for protocol command's promise to be
        fulfilled, as well as waiting for the appropriate DebuggerManager
        event. If the protocol command promise is rejected, tear down the
        single-fire event listener.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.pause):
        (WebInspector.DebuggerManager.prototype.resume):
        (WebInspector.DebuggerManager.prototype.stepOver):
        (WebInspector.DebuggerManager.prototype.stepInto):
        (WebInspector.DebuggerManager.prototype.stepOut):
        * UserInterface/Controllers/ReplayManager.js: Use the promise-based API.
        (WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):

2014-08-11  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Update folder icons
        https://bugs.webkit.org/show_bug.cgi?id=135808

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/FolderGeneric.png: Updated.
        * UserInterface/Images/FolderGeneric@2x.png: Updated.

2014-08-11  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: DataGrid and its clients are a cluster-cuss of styles
        https://bugs.webkit.org/show_bug.cgi?id=135788

        Clean up DataGrid and its subclasses and client styles.

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/ApplicationCacheFrameContentView.css:
        (.content-view.application-cache-frame > .data-grid):
        * UserInterface/Views/CookieStorageContentView.css:
        (.content-view.cookie-storage > .data-grid):
        * UserInterface/Views/DOMStorageContentView.css:
        (.content-view.dom-storage > .data-grid):
        * UserInterface/Views/DOMTreeDataGrid.css:
        (.dom-tree-data-grid .data-grid):
        (.dom-tree-data-grid .name-column .icon):
        * UserInterface/Views/DOMTreeDataGrid.js:
        (WebInspector.DOMTreeDataGrid):
        * UserInterface/Views/DataGrid.css:
        (.data-grid):
        (.data-grid table):
        (.data-grid .data-container):
        (.data-grid.inline):
        (.data-grid th):
        (.data-grid :-webkit-any(th, td):not(:last-child)):
        (.data-grid th.sortable:active):
        (.data-grid th:-webkit-any(.sort-ascending, .sort-descending)):
        (.data-grid table.data):
        (.data-grid td):
        (.data-grid:focus tr.selected td:not(:last-child)):
        (body.mac-platform.legacy .data-grid:focus tr.selected td:not(:last-child)):
        (.data-grid :-webkit-any(th, td) > div):
        (.data-grid th:-webkit-any(.sort-ascending, .sort-descending) > div:first-child):
        (.data-grid th.sort-ascending > div:first-child::after):
        (.data-grid th.sort-descending > div:first-child::after):
        (.data-grid td .subtitle):
        (.data-grid td .subtitle::before):
        (.data-grid:focus tr.selected td .subtitle):
        (.data-grid td.error):
        (.data-grid tr.selected td.error):
        (.data-grid td .icon):
        (.data-grid td .go-to-arrow):
        (.data-grid tr:-webkit-any(.selected, :hover) .go-to-arrow):
        * UserInterface/Views/DatabaseContentView.css:
        (.storage-view):
        * UserInterface/Views/DatabaseTableContentView.css:
        (.content-view.database-table > .data-grid):
        * UserInterface/Views/DetailsSection.css:
        (.details-section > .content .data-grid):
        * UserInterface/Views/IndexedDatabaseObjectStoreContentView.css:
        (.content-view.indexed-database-object-store > .data-grid):
        * UserInterface/Views/LayerTreeDataGridNode.js:
        (WebInspector.LayerTreeDataGridNode.prototype._makeNameCell):
        (WebInspector.LayerTreeDataGridNode.prototype._updateNameCellData):
        * UserInterface/Views/LayerTreeSidebarPanel.css:
        (.layer-tree.panel .data-grid):
        (.layer-tree.panel .name-column .icon):
        (.layer-tree.panel tr.reflection .name-column .icon):
        (.layer-tree.panel tr.pseudo-element .name-column .icon):
        (.layer-tree.panel .name-column .reflection):
        (.layer-tree.panel tr.selected .name-column .reflection):
        (.layer-tree.panel .bottom-bar):
        (body.mac-platform.legacy .layer-tree.panel .bottom-bar):
        (.layer-tree.panel .bottom-bar > div):
        (body.mac-platform.legacy .layer-tree.panel .bottom-bar > div):
        (body.mac-platform.legacy .layer-tree-popover):
        * UserInterface/Views/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel):
        (WebInspector.LayerTreeSidebarPanel.prototype._buildLayerInfoSection):
        (WebInspector.LayerTreeSidebarPanel.prototype._buildDataGridSection):
        (WebInspector.LayerTreeSidebarPanel.prototype._buildBottomBar):
        (WebInspector.LayerTreeSidebarPanel.prototype._updateMetrics):
        * UserInterface/Views/LegacyJavaScriptProfileView.css:
        (.content-view.profile-view > .data-grid):
        * UserInterface/Views/LegacyProfileView.css:
        * UserInterface/Views/LogContentView.css:
        (.console-message .bubble):
        * UserInterface/Views/NetworkTimelineView.css:
        (.timeline-view.network > .data-grid):
        * UserInterface/Views/OverviewTimelineView.css:
        (.timeline-view.overview > .timeline-ruler > .header):
        (.timeline-view.overview > .data-grid):
        * UserInterface/Views/OverviewTimelineView.js:
        * UserInterface/Views/ProbeDetailsSidebarPanel.css:
        (.details-section.probe-set .options > .probe-add):
        (.popover .probe-popover):
        * UserInterface/Views/ProbeSetDataGrid.css:
        (.details-section.probe-set .data-grid tr.past-value td):
        (.details-section.probe-set .data-grid > td.unknown-value):
        (.details-section.probe-set .data-grid tr.revealed.highlighted):
        (.details-section.probe-set .data-grid tr.separator):
        (.details-section.probe-set .data-grid > tr.data-updated):
        (.details-section.probe-set .data-grid .selected .section *):
        (.details-section.probe-set .data-grid .selected td.unknown-value):
        (.details-section.probe-set .data-grid .section):
        * UserInterface/Views/QuickConsole.css:
        (.quick-console):
        * UserInterface/Views/TimelineDataGrid.css:
        (.data-grid.timeline th):
        (.data-grid.timeline > .navigation-bar-container > .navigation-bar):
        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .header):
        (.timeline-ruler > .header > .divider):

2014-08-11  Brent Fulgham  <bfulgham@apple.com>

        [Win] Adjust build script for Windows production build.
        https://bugs.webkit.org/show_bug.cgi?id=135806
        <rdar://problem/17978299>

        Reviewed by Timothy Hatcher.

        * WebInspectorUI.vcxproj/WebInspectorUI.make: Make sure target for
        xcopy operation exists.
        * WebInspectorUI.vcxproj/WebInspectorUI.proj: Don't create directories
        we don't need, make sure the target location exists before we build.
        * WebInspectorUI.vcxproj/build-webinspectorui.pl: Make sure that
        production builds get the intermediary command files from the
        right place.

2014-08-11  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: Add a helper to avoid leaking single-fire event listeners in Promise chains
        https://bugs.webkit.org/show_bug.cgi?id=135772

        Reviewed by Timothy Hatcher.

        A common pattern when working with promise chains is to convert an event
        handler into a promise by using a single-fire event listener with the
        resolve continuation as the callback. This is fine if the event fires;
        if it doesn't fire, then the event emitter permanently keeps a reference to the
        this-object and the callback.

        This patch adds EventListener, a proxy object for events that can be manipulated
        from multiple promise callback functions. If a promise is rejected, the catch
        block can disconnect any event listeners set up earlier in the promise chain.

        This patch also reimplements EventListenerSet to use multiple EventListeners,
        since they share the same logic to uniformly handle Inspector and DOM events.

        Test: inspector/event-listener.html
        Test: inspector/event-listener-set.html

        * UserInterface/Base/EventListener.js: Added.
        (WebInspector.EventListener):
        (WebInspector.EventListener.prototype.this._callback):
        (WebInspector.EventListener.prototype.connect):
        (WebInspector.EventListener.prototype.disconnect):
        * UserInterface/Base/EventListenerSet.js: Update license block.
        (WebInspector.EventListenerSet.prototype.register):
        (WebInspector.EventListenerSet.prototype.install):
        (WebInspector.EventListenerSet.prototype.uninstall):
        * UserInterface/Main.html: Include EventListener.
        * UserInterface/Test.html: Include EventListener and EventListenerSet.

2014-08-10  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: new glyphs are visible on OS X 10.9 builds
        https://bugs.webkit.org/show_bug.cgi?id=135743

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/Legacy/UserInputPrompt.svg: Removed.
        * UserInterface/Images/Legacy/UserInputPromptPrevious.svg: Removed.
        * UserInterface/Images/Legacy/UserInputResult.svg: Removed.
        Removed images that were not used.

        * UserInterface/Views/DashboardContainerView.css:
        (body.mac-platform.legacy .dashboard-container .advance-arrow):
        * UserInterface/Views/DebuggerDashboardView.js:
        (WebInspector.DebuggerDashboardView):
        * UserInterface/Views/FolderIcon.css:
        (body.mac-platform.legacy .folder-icon .icon):
        * UserInterface/Views/HierarchicalPathComponent.css:
        (body.mac-platform.legacy .hierarchical-path-component > .selector-arrows):
        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView):
        Use legacy images.

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected .subtitle):
        Fix color for selected subtitle.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel):
        Use legacy images.

2014-08-09  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: TimelineManager should reuse empty recordings
        https://bugs.webkit.org/show_bug.cgi?id=135749

        Reviewed by Timothy Hatcher.

        Check whether the recording is empty before creating a new one.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype._loadNewRecording):
        * UserInterface/Models/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.isEmpty):
        (WebInspector.TimelineRecording.prototype.unloaded):

2014-08-08  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: add debugging flag to InspectorTest for unbuffered logging to stderr
        https://bugs.webkit.org/show_bug.cgi?id=135726

        Reviewed by Timothy Hatcher.

        Added a flag for debugging inspector tests which will synchronously log messages.
        This avoids failure modes that prevent logging from being added to the test page.

        * UserInterface/Base/Test.js:
        (InspectorTest.debugLog):
        (InspectorTest.addResult):

2014-08-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: When Switching Recordings, the UI datagrids do not update to match selection
        https://bugs.webkit.org/show_bug.cgi?id=135764

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TimelineSidebarPanel.js:
        When changing the activeContentView trigger an update of the datagrids by
        re-applying the filter, which will be different now that the view is different.

2014-08-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception opening Web Inspector - TypeError: undefined is not a function - candidateObjectCookie.every
        https://bugs.webkit.org/show_bug.cgi?id=135762

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.treeElementMatchesCookie):
        Fix a typo, the wrong object was being used.

2014-08-07  Brian J. Burg  <burg@cs.washington.edu>

        REGRESSION(r172094): timeline views are blank after reloading in some situations
        https://bugs.webkit.org/show_bug.cgi?id=135742

        Reviewed by Timothy Hatcher.

        Address various bugs that cause the wrong timeline content views to appear when
        starting a recording by reloading the inspected page. Fix other small oversights
        that were encountered in the sidebar-based view state restoration code.

        * UserInterface/Models/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.saveIdentityToCookie): Add a dummy implementation.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.treeElementMatchesCookie):
        This code erroneously matches any tree element whose represented object's
        saveIdentityToCookie function produces an empty cookie.

        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._showTimelineView): Add an assertion
        that will find mismatches between represented objects of the TimelineContentView
        and TimelineViews.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.restoreStateFromCookie): Don't call
        the superclass's implementation, since we do not want to perform a relaxed match
        against any of our tree elements. The only thing that can be restored across reopen
        is a selected timeline tree element, which is already handled by this override.

2014-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix accidental always true comparison
        https://bugs.webkit.org/show_bug.cgi?id=135741

        Reviewed by Timothy Hatcher.

        Remove accidental "!" that would always cause this comparison to succeed.

        * UserInterface/Views/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.updateLayout):

2014-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline Filter Bars are not appearing at all
        https://bugs.webkit.org/show_bug.cgi?id=135740

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/TimelineDataGrid.css:
        (.data-grid.timeline.has-non-default-filter > .navigation-bar-container):
        (.data-grid.timeline > .navigation-bar-container > .navigation-bar):
        (body.mac-platform.legacy .data-grid.timeline > .navigation-bar-container > .navigation-bar):
        Update the positioning and height for non-legacy because the console is now taller.

        * UserInterface/Views/ScopeBar.js:
        (WebInspector.ScopeBar.prototype.hasNonDefaultItemSelected):
        Helper to know if there is a non-default filter.

        * UserInterface/Views/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters):
        (WebInspector.TimelineDataGrid.prototype._scopeBarSelectedItemsDidChange):
        Update scope bar visibility. If non-default we want to always show it.
        
        (WebInspector.TimelineDataGrid.prototype._updateScopeBarForcedVisibility):
        If there is a non-default filter, force showing the bar.

2014-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: breakpoints enabled state is not persisted across re-opening the inspector
        https://bugs.webkit.org/show_bug.cgi?id=135745

        Reviewed by Timothy Hatcher.

        When restoring breakpoints when the inspector is initializing, do not
        let setting these breakpoints automatically enable breakpoints. We should
        respect the setting in this case.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.restoreBreakpointsSoon):
        (WebInspector.DebuggerManager):

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Combine and minify Esprima
        https://bugs.webkit.org/show_bug.cgi?id=135728

        Reviewed by Joseph Pecoraro.

        * Scripts/combine-resources.pl:
        * Scripts/copy-user-interface-resources.pl:
        * UserInterface/External/Esprima/LICENSE: Added.

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Fix regression where tree outline keyboard navigation is broken.

        https://bugs.webkit.org/show_bug.cgi?id=135718

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (TreeElement.prototype.revealed): Fix the check for currentAncestor.hidden.

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Filter bar text and icon are positioned too low and tight
        https://bugs.webkit.org/show_bug.cgi?id=135723

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/FilterBar.css:
        (.filter-bar > input[type="search"]):
        (.filter-bar > input[type="search"]::-webkit-search-decoration):
        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]):

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Dashboard error and warning icons should be filled when enabled
        https://bugs.webkit.org/show_bug.cgi?id=135725

        Reviewed by Joseph Pecoraro.

        * UserInterface/Images/ErrorsEnabled.svg:
        * UserInterface/Images/IssuesEnabled.svg:

2014-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dashboard contents shift when window changes active state
        https://bugs.webkit.org/show_bug.cgi?id=135724

        Reviewed by Timothy Hatcher.

        The container was getting a 1px border when inactive and none when active.
        Give it a transparent border when active so contents don't change size.

        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar .dashboard-container):

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Fix reference to missing CloseTimeline.svg image.

        Rubber-stamped by Joseph Pecoraro.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.createTimelineTreeElement): Use CloseLarge.svg instead.

2014-08-07  Brent Fulgham  <bfulgham@apple.com>

        [Win] Unreviewed build fix.

        Add a WebInspectorUI.proj file for use with MSBuild utility.

        * WebInspectorUI.vcxproj/WebInspectorUI.proj: Added.

2014-08-07  Benjamin Poulain  <bpoulain@apple.com>

        Get rid of INPUT_SPEECH
        https://bugs.webkit.org/show_bug.cgi?id=135672

        Reviewed by Andreas Kling.

        * UserInterface/Models/CSSKeywordCompletions.js:

2014-08-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Dragging selection window when mouse goes out of window bounds does not behave as expected
        https://bugs.webkit.org/show_bug.cgi?id=135372

        Reviewed by Timothy Hatcher.

        Constrain move selection window dragging to the ruler bounds
        based on the mouse down position on the drag window.

        * UserInterface/Views/TimelineRuler.js:
        (WebInspector.TimelineRuler.prototype._handleMouseDown):
        (WebInspector.TimelineRuler.prototype._handleMouseMove):
        (WebInspector.TimelineRuler.prototype._handleMouseUp):

2014-08-07  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Update glyphs to be more like Xcode 6
        https://bugs.webkit.org/show_bug.cgi?id=135705

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/Base/ImageUtilities.js:
        (platformImagePath): Added.
        (generateEmbossedImages.generateImage):
        Bump the base image version. Helper function. Use isLegacyMacOS.

        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded):
        (WebInspector._updateDockNavigationItems):
        (WebInspector._generateDisclosureTriangleImages):
        Use new images and add legacy path. Remove the shadow.

        * UserInterface/Images: Updated images.
        * UserInterface/Images/Legacy: Added. Moved legacy images here.

        * UserInterface/Views/CSSStyleDeclarationSection.css:
        (.style-declaration-section):
        (body.mac-platform.legacy .style-declaration-section + .style-declaration-section):
        (.style-declaration-section.last-in-group):
        (.style-declaration-section.last-in-group + .style-declaration-section):
        Use a consistent gray for borders.

        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes):
        Use a consistent gray for borders.

        * UserInterface/Views/ContentBrowser.js:
        (WebInspector.ContentBrowser):
        Use new images and add legacy path.

        * UserInterface/Views/ControlToolbarItem.css:
        (.toolbar .item.control):
        (body.mac-platform.legacy .toolbar .item.control):
        (.toolbar .item.control:hover):
        (body.mac-platform.legacy .toolbar .item.control:hover):
        Adjust the opacity for controls.

        * UserInterface/Views/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        Use new images and add legacy path.

        * UserInterface/Views/DataGrid.css:
        (.data-grid tr.selected):
        Use a consistent gray for borders.

        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.get _generateSortIndicatorImagesIfNeeded):
        Use new images and add legacy path. Remove the shadow.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        Use new images and add legacy path.

        * UserInterface/Views/DefaultDashboardView.css:
        (.toolbar .dashboard.default > .item):
        (body.mac-platform.legacy .toolbar .dashboard.default > .item):
        (body.mac-platform.legacy .toolbar .dashboard.default > .resourcesCount > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .time > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .logs > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .resourcesSize > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .errors > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .errors.enabled > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .issues > img):
        (body.mac-platform.legacy .toolbar .dashboard.default > .issues.enabled > img):
        Use new images and add legacy path.

        * UserInterface/Views/DetailsSection.css:
        (.details-section):
        (.details-section .details-section:first-child):
        (body.mac-platform.legacy .details-section > .header):
        (.details-section > .content > .group):
        (.details-section > .content > .group:nth-child(even) > .row.simple:first-child > *):
        (body.mac-platform.legacy .details-section > .content > .group:last-child > .row.simple:last-child > *):
        Use a consistent gray for borders.

        * UserInterface/Views/FilterBar.css:
        (body.mac-platform.legacy .filter-bar > input[type="search"]::-webkit-search-decoration):
        Use new images and add legacy path.

        * UserInterface/Views/FindBanner.css:
        (.find-banner):
        Use a consistent gray for borders.

        * UserInterface/Views/FindBanner.js:
        (WebInspector.FindBanner.prototype._generateButtonsGlyphsIfNeeded):
        Add legacy path.

        * UserInterface/Views/FrameTreeElement.js:
        (WebInspector.FrameTreeElement.prototype.updateStatusForMainFrame):
        Use new images and add legacy path.

        * UserInterface/Views/LogContentView.js:
        (WebInspector.LogContentView):
        Use new images and add legacy path.

        * UserInterface/Views/Main.css:
        (#split-content-browser):
        Use a consistent gray for borders.

        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .overflow-shadow):
        (body.mac-platform.legacy .sidebar > .panel.navigation > .overflow-shadow):
        (.sidebar > .panel.navigation > .overflow-shadow.top):
        (body.mac-platform.legacy .sidebar > .panel.navigation > .overflow-shadow.top):
        (.sidebar > .panel.navigation > .empty-content-placeholder):
        (body.mac-platform.legacy .sidebar > .panel.navigation > .empty-content-placeholder):
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected .disclosure-button):
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected.expanded .disclosure-button):
        (.navigation-sidebar-panel-content-tree-outline .item.selected):
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected):
        Adjust the styles to make the selected item use white text and icons only when focused.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WebInspector.NavigationSidebarPanel.prototype._generateDisclosureTrianglesIfNeeded):
        Remove the shadow from the disclosure triangles. Make the overflow shadow not fade.

        * UserInterface/Views/ProbeDetailsSidebarPanel.css:
        (.details-section.probe-set .options > .probe-clear-samples):
        (.details-section.probe-set .options > .probe-remove):
        (.details-section.probe-set .options > .probe-add):
        (body.mac-platform.legacy .details-section.probe-set .options > .probe-clear-samples):
        (body.mac-platform.legacy .details-section.probe-set .options > .probe-remove):
        (body.mac-platform.legacy .details-section.probe-set .options > .probe-add):
        Tweak size and position of icons and use legacy paths.

        * UserInterface/Views/QuickConsole.css:
        (.quick-console):
        Adjust padding to match filter bar height.

        * UserInterface/Views/ResourceSidebarPanel.css:
        (.sidebar > .panel.navigation.resource > .search-bar):
        Adjust height.

        * UserInterface/Views/RulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules .label + .style-declaration-section):
        (.sidebar > .panel.details.css-style .rules .new-rule + .style-declaration-section):
        (body.mac-platform.legacy .sidebar > .panel.details.css-style .rules .new-rule img):
        Use a consistent gray for borders. Don't bold the New Rule label.

        * UserInterface/Views/ScriptContentView.js:
        (WebInspector.ScriptContentView):
        Use new images and add legacy path.

        * UserInterface/Views/Sidebar.css:
        (.sidebar.left):
        (.sidebar.right):
        Use a consistent gray for borders.

        * UserInterface/Views/TextContentView.js:
        (WebInspector.TextContentView):
        Use new images and add legacy path.

        * UserInterface/Views/TextResourceContentView.js:
        (WebInspector.TextResourceContentView):
        Use new images and add legacy path.

        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView):
        Use new images and add legacy path.

        * UserInterface/Views/TimelineDataGrid.css:
        (.data-grid.timeline th):
        (.data-grid.timeline th.sortable:active):
        (.data-grid.timeline th.sort-descending):
        Fix a regression with the gradient background showing in legacy mode.

        * UserInterface/Views/TimelineIcons.css:
        (body.mac-platform.legacy .network-icon .icon):
        (body.mac-platform.legacy .network-icon.large .icon):
        (body.mac-platform.legacy .colors-icon .icon):
        (body.mac-platform.legacy .colors-icon.large .icon):
        Added legacy versions of these icons.

        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph:hover):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph:active):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph:hover):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording:hover):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.forced):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording.forced):
        (.sidebar > .panel.navigation.timeline > .timelines-content .close-button):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item.selected + li.item):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .timelines-content :focus li.item.selected + li.item):
        Update the styles for the recording button and close button.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.createTimelineTreeElement):
        Use TreeElementStatusButton instead of a styled image.

        * UserInterface/Views/TreeElementStatusButton.css:
        (.item > .status > .status-button > svg path.filled):
        (body.mac-platform.legacy .item > .status > .status-button > svg path.filled):
        (:focus .item.selected > .status > .status-button > svg path.filled):
        (.item > .status > .status-button > svg path.stroked):
        (body.mac-platform.legacy .item > .status > .status-button > svg path.stroked):
        (:focus .item.selected > .status > .status-button > svg path.stroked):
        (.item.selected > .status > .status-button:active):
        (.item > .status > .status-button.disabled):
        Updated selectors and styles to work with stroke or fill.

2014-08-07  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: DebuggerManager sends spurious setBreakpointsActive commands when setting a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=135674

        Reviewed by David Kilzer.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.set breakpointsEnabled): Fix a typo.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: breakpoint resolved state should not depend on all breakpoints being enabled
        https://bugs.webkit.org/show_bug.cgi?id=135517

        Reviewed by Joseph Pecoraro.

        Previously, Breakpoint.resolved returned false if all breakpoints were disabled, even if
        the breakpoint had an associated SourceCode. This was a weird hack to make it easier to
        style breakpoint widgets. This made it hard for other code to deal with resolved
        breakpoints that were also disabled, or SourceCodeLocations that resolve and unresolve.
        This patch removes that consideration and fixes style update code to manually check if all
        breakpoints are being suppressed.

        The code now enforces that a Breakpoint must have a SourceCode before it can be resolved.
        (As a performance optimization when loading the initial frame tree, we sometimes we give
        Breakpoints a SourceCode before the debugger officially says that the breakpoint has been
        resolved. Thus, it's possible to be unresolved with a SourceCode, but not vice-versa.)

        This patch also adds a few guards where we assumed a SourceCodeLocation had a SourceCode.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.set breakpointsEnabled): Remove spurious
        ResolvedStateDidChange events.

        (WebInspector.DebuggerManager.prototype.breakpointResolved): Set the breakpoint's SourceCode
        if it has not been set already by DebuggerManager.associateBreakpointsWithSourceCode.

        * UserInterface/Models/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.get resolved):
        (WebInspector.Breakpoint.prototype.set resolved.isSpecialBreakpoint):
        (WebInspector.Breakpoint.prototype.set resolved): Add an assertion.
        * UserInterface/Models/SourceCodeLocation.js: Add guards for !SourceCode.
        (WebInspector.SourceCodeLocation.prototype.populateLiveDisplayLocationTooltip):
        * UserInterface/Views/BreakpointTreeElement.js: Account for DebuggerManager.breakpointsEnabled.
        (WebInspector.BreakpointTreeElement):
        (WebInspector.BreakpointTreeElement.prototype._updateStatus):
        * UserInterface/Views/ProbeSetDetailsSection.js:
        (WebInspector.ProbeSetDetailsSection.prototype._updateLinkElement): Loosen the assertion.
        * UserInterface/Views/SourceCodeTextEditor.js: Account for DebuggerManager.breakpointsEnabled.
        (WebInspector.SourceCodeTextEditor):
        (WebInspector.SourceCodeTextEditor.prototype.close):
        (WebInspector.SourceCodeTextEditor.prototype._breakpointStatusDidChange):
        (WebInspector.SourceCodeTextEditor.prototype._breakpointsEnabledDidChange):
        (WebInspector.SourceCodeTextEditor.prototype._updateBreakpointStatus):
        * UserInterface/Views/TextEditor.js: Account for DebuggerManager.breakpointsEnabled.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ReplayManager should unpause and suppress breakpoints before capturing/replaying
        https://bugs.webkit.org/show_bug.cgi?id=135608

        Reviewed by Timothy Hatcher.

        It is jarring when the debugger pauses during capturing or replaying. For now, we should suppress
        all breakpoints during capturing or replaying, and restore breakpoint enabled state when
        capturing finishes, when replaying finishes, or during temporary replay pauses.

        In the future, the debugger will be selectively enabled during playback to seek to specific
        breakpoint hits. This is tracked in https://bugs.webkit.org/show_bug.cgi?id=135663.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.prototype.startCapturing.result):
        (WebInspector.ReplayManager.prototype.replayToPosition.result):
        (WebInspector.ReplayManager.prototype.replayToCompletion.result):
        (WebInspector.ReplayManager.prototype.captureStopped):
        (WebInspector.ReplayManager.prototype.playbackPaused):
        (WebInspector.ReplayManager.prototype.playbackFinished):
        (WebInspector.ReplayManager.prototype._changeSegmentState):
        (WebInspector.ReplayManager.prototype._suppressBreakpointsAndResumeIfNeeded):

2014-08-06  Brent Fulgham  <bfulgham@apple.com>

        [Win] Build fix.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: DebugSuffix target was missing
        proper path settings for final output.

2014-08-06  Wenson Hsieh  <wenson_hsieh@apple.com>

        Implement parsing for CSS scroll snap points
        https://bugs.webkit.org/show_bug.cgi?id=134301

        Reviewed by Dean Jackson.

        * UserInterface/Models/CSSKeywordCompletions.js: Added snap point property keywords, such as mandatory, proximity, elements, and repeat.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        REGRESSION(r172094): tests fail because Inspector test harness does not include UIString
        https://bugs.webkit.org/show_bug.cgi?id=135658

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Test.js:
        (WebInspector.contentLoaded): Fix brace placement.
        (WebInspector.UIString): Added. This is the identity function during testing.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: convert ReplayManager to a promise-based API
        https://bugs.webkit.org/show_bug.cgi?id=135249

        Reviewed by Timothy Hatcher.

        Convert replay commands to an asynchronous, promise-based API. This addresses
        two problems with a synchronous replay API: clients can only use the synchronous
        API if session and segment state are exactly correct, and trying to change state
        to match this requirement requires chaining multiple commands and events.

        The asynchronous API allows clients to issue replay commands with impunity,
        as long as they can be unambiguously handled. For example, issuing
        pausePlayback() while capturing is not allowed, but issuing startCapturing()
        while replaying is allowed. The API also hides implementation details that
        are not important, such as steps to unpause or temporarily disable the debugger.

        This patch also cleans up uses of promises, such as adding error re-throwing.
        It adds return type annotations to public ReplayManager asynchronous methods.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.catch):
        (WebInspector.ReplayManager):
        (WebInspector.ReplayManager.prototype.createSession):
        (WebInspector.ReplayManager.prototype.switchSession):
        (WebInspector.ReplayManager.prototype.startCapturing):
        (WebInspector.ReplayManager.prototype.stopCapturing):
        (WebInspector.ReplayManager.prototype.replayToPosition):
        (WebInspector.ReplayManager.prototype.replayToCompletion):
        (WebInspector.ReplayManager.prototype.sessionCreated.catch): re-throw.
        (WebInspector.ReplayManager.prototype.segmentCompleted.catch): re-throw.
        (WebInspector.ReplayManager.prototype.segmentCompleted.catch): re-throw.
        (WebInspector.ReplayManager.prototype.segmentUnloaded.catch): re-throw.
        (WebInspector.ReplayManager.prototype.sessionCreated.catech): re-throw.

2014-08-06  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: protocol command invocations should return a promise if no callback is supplied
        https://bugs.webkit.org/show_bug.cgi?id=130702

        Reviewed by Timothy Hatcher.

        This allows the trailing Agent.command.promise(args) to be dropped in favor of just
        Agent.command(args). It should make it a bit easier to convert code to use promises.

        Test: LayoutTests/inspector/protocol-promise-result.html

        * UserInterface/Controllers/ReplayManager.js: Drop use of .promise().
        * UserInterface/Controllers/TimelineManager.js: Drop use of .promise().
        (WebInspector.TimelineManager.prototype.startCapturing):
        * UserInterface/Protocol/InspectorBackend.js:
        (.callable): Redirect to the promise entry point if the last argument isn't a function.
        (InspectorBackend.Command.create):

2014-08-05  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Add label string once AccessibilityObject::computedLabel() is available
        https://bugs.webkit.org/show_bug.cgi?id=129940

        Reviewed by Chris Fleizach.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: UI update for label field in Node Inspector.
        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility):

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: support storing multiple timeline recordings in the manager
        https://bugs.webkit.org/show_bug.cgi?id=132875

        Reviewed by Timothy Hatcher.

        This patch adds support for capturing multiple timeline recordings and switching
        between them in the user interface using hierarchical path components.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded): Remove hard-coded priming of the timeline sidebar panel.
        Instead, load the first recording in the timeline manager after the initial load.

        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar): Don't suppress
        onselect events when selecting the tree element for a newly shown content view. This
        allows the sidebar to sync the current content view and timeline tree element selection
        with what is displayed in the content browser.

        * UserInterface/Controllers/TimelineManager.js: Add two new events, RecordingCreated and
        RecordingLoaded. A recording is considered active when any new records recieved will be
        appended to that recording. The user interface is not necessarily viewing the active
        recording.

        (WebInspector.TimelineManager.delayedWork):
        (WebInspector.TimelineManager): Keep a list of recordings, and load the first recording
        asynchronously so that everyone can add an event listener for it.

        (WebInspector.TimelineManager.prototype.get activeRecording):
        (WebInspector.TimelineManager.prototype.get recordings):
        (WebInspector.TimelineManager.prototype.startCapturing):
        (WebInspector.TimelineManager.prototype.stopCapturing): Use promises to make the iOS 7
        fallback path better match the async semantics of the non-fallback path.

        (WebInspector.TimelineManager.prototype.unloadRecording):
        (WebInspector.TimelineManager.prototype._loadNewRecording): Stop capturing and unload
        any existing recording before creating and loading a new recording.

        (WebInspector.TimelineManager.prototype._startAutoCapturing): Create a new recording
        rather than resetting the current recording.

        * UserInterface/Models/NetworkTimeline.js:
        (WebInspector.NetworkTimeline):
        * UserInterface/Models/Timeline.js:
        (WebInspector.Timeline):
        (WebInspector.Timeline.prototype.get type): Each timeline stores its TimelineRecord.Type
        so that other code can create type-specific views using the Timeline as a representedObject.

        * UserInterface/Models/TimelineRecording.js: For each recording, add new state for a unique identifier,
        display string, and an isWritable flag. Once a recording is unloaded, it becomes read-only.
        (WebInspector.TimelineRecording.prototype.get displayName):
        (WebInspector.TimelineRecording.prototype.get identifier):
        (WebInspector.TimelineRecording.prototype.isWritable):
        (WebInspector.TimelineRecording.prototype.unloaded):
        (WebInspector.TimelineRecording.prototype.reset): A recording can only be reset if it is writable.

        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setTimelineProfilingEnabled): Don't make redundant start/stop capturing calls.

        * UserInterface/Views/LayoutTimelineOverviewGraph.js: Use a timeline as the representedObject for all
        timeline-specific graphs and views. Otherwise, use the recording.
        (WebInspector.LayoutTimelineOverviewGraph):
        * UserInterface/Views/LayoutTimelineView.js:
        (WebInspector.LayoutTimelineView):
        (WebInspector.LayoutTimelineView.prototype._treeElementSelected):
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        (WebInspector.NetworkTimelineOverviewGraph):
        * UserInterface/Views/NetworkTimelineView.js:
        (WebInspector.NetworkTimelineView):
        * UserInterface/Views/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype._networkTimelineRecordAdded):
        * UserInterface/Views/ScriptTimelineOverviewGraph.js:
        (WebInspector.ScriptTimelineOverviewGraph):
        * UserInterface/Views/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView):
        (WebInspector.ScriptTimelineView.prototype._treeElementSelected):

        * UserInterface/Views/TimelineContentView.js: Iterate over timeline objects when setting up maps. Use timelines
        as keys rather than their type identifiers.
        (WebInspector.TimelineContentView.prototype.showTimelineViewForTimeline): Renamed from showTimelineView. This
        function takes a Timeline instance rather than an identifier, since the conten view is specific to one recording.
        (WebInspector.TimelineContentView.prototype.get selectionPathComponents): Match types against the currently
        visible timeline's representedObject.
        (WebInspector.TimelineContentView.prototype.get currentTimelineView): Used by the sidebar panel to sync timeline
        tree element selections to TimelineView shown by the TimelineContentView.
        (WebInspector.TimelineContentView.prototype.shown): Sync enablement of the "Clear Timelines" button to recording
        read-only state.

        (WebInspector.TimelineContentView.prototype.saveToCookie):
        (WebInspector.TimelineContentView.prototype.restoreFromCookie): Added. Only handle saving/restoring the subview.

        (WebInspector.TimelineContentView.prototype._pathComponentSelected):
        (WebInspector.TimelineContentView.prototype._showTimelineView): Relax the early return so that timeline views
        and content tree outlines are reattached when re-navigating to the same timeline view via back-forward entries.
        (WebInspector.TimelineContentView.prototype.showTimelineView): Deleted.

        * UserInterface/Views/TimelineOverviewGraph.js:
        (WebInspector.TimelineOverviewGraph):

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel): Keep a tree outline and tree element map for storing available recordings.
        (WebInspector.TimelineSidebarPanel.createTimelineTreeElement):
        (WebInspector.TimelineSidebarPanel.prototype.shown): Added.
        (WebInspector.TimelineSidebarPanel.prototype.showDefaultContentView): Add a guard.
        (WebInspector.TimelineSidebarPanel.prototype.get hasSelectedElement): Added. Selected recording tree elements
        should be considered when deciding whether a represented object has been selected in the sidebar panel.

        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject.looselyCompareRepresentedObjects):
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject.get if):
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject):
        (WebInspector.TimelineSidebarPanel.prototype.showTimelineOverview):
        (WebInspector.TimelineSidebarPanel.prototype.showTimelineViewForType): Renamed to explicit take a type identifier.
        Delegate the actual showing of the timeline view to the onselect handler for the timelines tree outline.

        (WebInspector.TimelineSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.TimelineSidebarPanel.prototype.saveStateToCookie): Fix a typo.
        (WebInspector.TimelineSidebarPanel.prototype.restoreStateFromCookie): Fix a typo.
        (WebInspector.TimelineSidebarPanel.prototype._recordingsTreeElementSelected): Sync the currently displayed
        recording object and content view, and sync the selected tree element to the displayed timeline subview.

        (WebInspector.TimelineSidebarPanel.prototype._timelinesTreeElementSelected): If this is a user action, show the timeline.
        (WebInspector.TimelineSidebarPanel.prototype._contentBrowserCurrentContentViewDidChange): Use classList.toggle().
        (WebInspector.TimelineSidebarPanel.prototype._recordingCreated): Dynamically add new recordings to the interface.
        (WebInspector.TimelineSidebarPanel.prototype._recordingLoaded): Automatically show recordings when they are loaded.
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphClicked): Shift+click will force-create a new recording.
        (WebInspector.TimelineSidebarPanel.prototype.initialize): Deleted.
        * UserInterface/Views/TimelineView.js:
        (WebInspector.TimelineView):
        (WebInspector.TimelineView.prototype.get representedObject):

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ReplayManager shouldn't assume replay status when the inspector is opened
        https://bugs.webkit.org/show_bug.cgi?id=135212

        Reviewed by Timothy Hatcher.

        The inspector could be closed and reopened at any point during capturing or replaying.
        ReplayManager should query the current state on initialization rather than assuming
        that the replay controller is still in its initial state.

        ReplayManager's initialization code requires querying the backend for the current replay
        state. This could race with replay protocol events that mutate the manager's state before
        it is fully initialized, leading to undefined behavior.

        To mitigate this, all protocol event handlers (called by ReplayObserver) are wrapped
        with a guard that enqueues the callback if initialization is not yet complete. This
        queue is implemented via multiple then-chaining of a shared 'initialization' promise
        which resolves when initialization completes.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.then):
        (WebInspector.ReplayManager.catch):
        (WebInspector.ReplayManager): Rewrite the initialization code to first query the replay
        state, set the initialization flag to true, and then request and update session records.
        The sessions must be loaded after querying initial state because ReplayManager.sessionCreated
        requires replay state to be initialized.

        (WebInspector.ReplayManager.prototype.get sessionState):
        (WebInspector.ReplayManager.prototype.get segmentState):
        (WebInspector.ReplayManager.prototype.get activeSessionIdentifier):
        (WebInspector.ReplayManager.prototype.get activeSegmentIdentifier):
        (WebInspector.ReplayManager.prototype.get playbackSpeed):
        (WebInspector.ReplayManager.prototype.set playbackSpeed):
        (WebInspector.ReplayManager.prototype.get currentPosition): Add assertions to catch uses of
        manager state before the manager is fully initialized.

        (WebInspector.ReplayManager.prototype.waitUntilInitialized): Added. It returns a shared promise
        that is fulfilled when initialization is complete.

        (WebInspector.ReplayManager.prototype.captureStarted):
        (WebInspector.ReplayManager.prototype.captureStopped):
        (WebInspector.ReplayManager.prototype.playbackStarted):
        (WebInspector.ReplayManager.prototype.playbackHitPosition):
        (WebInspector.ReplayManager.prototype.playbackPaused):
        (WebInspector.ReplayManager.prototype.playbackFinished):
        (WebInspector.ReplayManager.prototype.sessionModified):
        (WebInspector.ReplayManager.prototype.sessionLoaded):
        (WebInspector.ReplayManager.prototype.segmentCompleted.set catch):
        (WebInspector.ReplayManager.prototype.segmentCompleted):
        (WebInspector.ReplayManager.prototype.segmentRemoved.then):
        (WebInspector.ReplayManager.prototype.segmentRemoved):
        (WebInspector.ReplayManager.prototype.segmentLoaded): Add initialization guards.

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Replay: rename protocol methods for getting replay session/segment data
        https://bugs.webkit.org/show_bug.cgi?id=135618

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.prototype.getSession.get var):
        (WebInspector.ReplayManager.prototype.getSegment.get var):
        * UserInterface/Models/ReplaySession.js:
        (WebInspector.ReplaySession.prototype.segmentsChanged):

2014-08-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: cannot navigate between multiple applicable dashboards
        https://bugs.webkit.org/show_bug.cgi?id=135130

        Reviewed by Timothy Hatcher.

        Add navigation arrows between dashboards when multiple dashboards are applicable.
        For example, the user should be able to go back to the default dashboard while paused
        at a breakpoint. Dashboards form a stack based on when they are first introduced.

        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar .dashboard): Increase padding-right a bit to make room for arrows.
        (.toolbar .dashboard:not(.visible)): Fix a bug where higher dashboards in the dashboard stack
        can shine through when animating between two lower dashboards that have transparent background.
        This ensures that at most two dashboards (namely, the ones being animated) are displayed.

        (.dashboard-container .advance-arrow): Main style class for navigation arrows.
        (.dashboard-container .advance-arrow:hover):
        (.dashboard-container .advance-arrow:active):
        (.dashboard-container .advance-arrow.inactive):
        (.toolbar.label-only .dashboard-container .advance-arrow): Make arrows slightly smaller when
        the dashboards get shorter.

        (.dashboard-container .advance-arrow.advance-forward):
        (.dashboard-container .advance-arrow.advance-backward):
        * UserInterface/Views/DashboardContainerView.js:
        (WebInspector.DashboardContainerView): Arrow styles are updated when a dashboard is shown,
        hidden, or closed. When moving away, we dismiss (i.e., set zero opacity) arrows at animation
        start. When the animation finishes, redisplay arrows that are applicable for the new dashboard.

        (WebInspector.DashboardContainerView.prototype._advanceForwardArrowClicked):
        (WebInspector.DashboardContainerView.prototype._advanceBackwardArrowClicked):
        (WebInspector.DashboardContainerView.prototype._dismissAdvanceArrows):
        (WebInspector.DashboardContainerView.prototype._updateAdvanceArrowVisibility):
        (WebInspector.DashboardContainerView.prototype._showDashboardAtIndex): There was a bug here
        where it would unconditionally use the same animation direction when showing a dashboard, but
        it was hard to spot without arrows that must correlate with the animation direction.

        (WebInspector.DashboardContainerView.prototype.animationEnded):
        (WebInspector.DashboardContainerView.prototype._showDashboardView):
        (WebInspector.DashboardContainerView.prototype._hideDashboardView):
        (WebInspector.DashboardContainerView.prototype._closeDashboardView):

2014-08-05  Saam Barati  <sbarati@apple.com>

        Web Inspector: shown() called on a content view when stepping over an instruction in the debugger
        https://bugs.webkit.org/show_bug.cgi?id=135311

        Reviewed by Timothy Hatcher.

        ContentViewContainer should not repeatedly call ContentView.prototype.shown 
        on ContentViews that are already visible. ContentViewContainer now passes
        a flag to BackForwardEntry.prototype.prepareToShow indicating whether it should
        call the shown function on the ContentView it is about to display.
        ContentViewContainer.prototype.showBackForwardEntryForIndex passes in this
        flag based on its ContentView being visible.

        * UserInterface/Models/BackForwardEntry.js:
        (WebInspector.BackForwardEntry.prototype.prepareToShow):
        * UserInterface/Views/ContentViewContainer.js:
        (WebInspector.ContentViewContainer.prototype.showBackForwardEntryForIndex):
        (WebInspector.ContentViewContainer.prototype.replaceContentView):
        (WebInspector.ContentViewContainer.prototype.closeAllContentViewsOfPrototype):
        (WebInspector.ContentViewContainer.prototype.shown):
        (WebInspector.ContentViewContainer.prototype._showEntry):

2014-08-01  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Timeline header height doesn't match style updates.
        https://bugs.webkit.org/show_bug.cgi?id=135516

        Reviewed by Timothy Hatcher.

        Update the timeline header height to match the updates
        to the navigation bars in other panels made in
        https://bugs.webkit.org/show_bug.cgi?id=135445. Also
        update the shadows on some of the search bars.

        * UserInterface/Views/FilterBar.css:
        (.filter-bar > input[type="search"]):
        (body.mac-platform.legacy .filter-bar > input[type="search"]):
        * UserInterface/Views/FindBanner.css:
        (.find-banner > input[type="search"]):
        (body.mac-platform.legacy .find-banner > input[type="search"]):
        * UserInterface/Views/LogContentView.css:
        (.search-bar.log-search-bar > input[type="search"]):
        (body.mac-platform.legacy .search-bar.log-search-bar > input[type="search"]):
        Remove inset shadows on search bars.

        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .status-bar):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-glyph):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-status):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .status-bar > .record-status):
        (.sidebar > .panel.navigation.timeline > .title-bar.timelines):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .title-bar.timelines):
        (.sidebar > .panel.navigation.timeline > .title-bar.timeline-events):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .title-bar.timeline-events):
        (.sidebar > .panel.navigation.timeline > .timelines-content):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .timelines-content):
        (.sidebar > .panel.navigation.timeline > .empty-content-placeholder):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .empty-content-placeholder):
        Update the height of the timeline status bar.

2014-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: "Stop Recording" button feels unresponsive, recording takes a long time to stop
        https://bugs.webkit.org/show_bug.cgi?id=135490

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.stopCapturing):
        Immediately stop the recording without waiting for an event from the backend.
        This makes the Web Inspector UI feel responsive to the user stopping the recording.
        This also matches behavior before r171195.

2014-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timeline recording is not working inspecting iOS 7 and earlier
        https://bugs.webkit.org/show_bug.cgi?id=135466

        Reviewed by Timothy Hatcher.

        Start / stop capturing for older backends that won't emit start / stop events.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackend.Agent.prototype.hasEvent):
        Provide a way to check if an event is supported.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.startCapturing):
        (WebInspector.TimelineManager.prototype.stopCapturing):
        Fallback to starting and stopping capturing manually if the backend
        does not provide the events.

2014-07-31  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Sync button look and feel with Xcode updates.
        https://bugs.webkit.org/show_bug.cgi?id=135445

        Reviewed by Timothy Hatcher.

        Update styles to match recent changes to Xcode text-only
        buttons, the navigation bar, and search fields. Include
        older style rules for older Mac platforms.

        * UserInterface/Views/ButtonNavigationItem.css:
        (.navigation-bar .item.button.text-only):
        (body.mac-platform.legacy .navigation-bar .item.button.text-only):
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .navigation-bar):
        (.sidebar > .panel.details.css-style > .content):
        (body.mac-platform.legacy .sidebar > .panel.details.css-style > .content):
        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger > .content):
        (body.mac-platform.legacy .sidebar > .panel.navigation.debugger > .content):
        * UserInterface/Views/DividerNavigationItem.css:
        (.navigation-bar .item.divider):
        (body.mac-platform.legacy .navigation-bar .item.divider):
        * UserInterface/Views/FilterBar.css:
        (.filter-bar):
        (body.mac-platform.legacy .filter-bar):
        (.filter-bar > input[type="search"]):
        (body.mac-platform.legacy .filter-bar > input[type="search"]):
        * UserInterface/Views/LogContentView.css:
        (.search-bar.log-search-bar > input[type="search"]):
        (@media reader):
        (.log-search-bar > input): Deleted.
        * UserInterface/Views/Main.css:
        (#split-content-browser > .navigation-bar):
        (body.mac-platform.legacy #split-content-browser > .navigation-bar):
        * UserInterface/Views/NavigationBar.css:
        (.navigation-bar):
        (body.mac-platform.legacy .navigation-bar):
        (.navigation-bar .item):
        (body.mac-platform.legacy .navigation-bar .item):
        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .content):
        (body.mac-platform.legacy .sidebar > .panel.navigation > .content):
        * UserInterface/Views/QuickConsole.css:
        (.quick-console):
        (body.mac-platform.legacy .quick-console):
        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only:hover):
        (body.mac-platform.legacy .navigation-bar .item.radio.button.text-only:hover):
        (.navigation-bar .item.radio.button.text-only.selected):
        (body.mac-platform.legacy .navigation-bar .item.radio.button.text-only.selected):
        (.navigation-bar .item.radio.button.text-only:active):
        (.navigation-bar .item.radio.button.text-only.selected:active):
        (body.mac-platform.legacy .navigation-bar .item.radio.button.text-only.selected:active):
        * UserInterface/Views/ResourceSidebarPanel.css:
        (.sidebar > .panel.navigation.resource > .empty-content-placeholder):
        (body.mac-platform.legacy .sidebar > .panel.navigation.resource > .empty-content-placeholder):
        (.sidebar > .panel.navigation.resource > .search-bar):
        (body.mac-platform.legacy .sidebar > .panel.navigation.resource > .search-bar):
        (.sidebar > .panel.navigation.resource > .search-bar > input[type="search"]):
        (body.mac-platform.legacy .sidebar > .panel.navigation.resource > .search-bar > input[type="search"]):
        * UserInterface/Views/ScopeBar.css:
        (.scope-bar > li):
        (body.mac-platform.legacy .scope-bar > li):
        (.scope-bar > li:hover):
        (body.mac-platform.legacy .scope-bar > li:hover):
        (.scope-bar > li.selected):
        (.scope-bar > li:active):
        (body.mac-platform.legacy .scope-bar > li:active):
        (.scope-bar > li.selected:active):
        (body.mac-platform.legacy .scope-bar > li.selected:active):
        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]):
        (body.mac-platform.legacy .search-bar > input[type="search"]):
        Update styles and apply older styles to legacy Mac platforms.

2014-07-31  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: MessageDispatcher should not synchronously dispatch all backend messages
        https://bugs.webkit.org/show_bug.cgi?id=135427

        Reviewed by Timothy Hatcher.

        The frontend dispatches all queued messages from the backend synchronously, even if there are
        hundreds of messages, or even if some of the messages take a long time (>10ms) to process.

        This patch adds a time limit to the frontend's message dispatcher. If the time limit is exceeded
        when processing the message queue, unhandled messages remain in the queue and the dispatcher goes
        to sleep until the next run loop (obtained by a new setTimeout).

        This has the effect of removing stutters when the message queue has hundreds of small messages.
        The outliers are still the same since some single messages can take over 200ms to be handled.

        This patch also improves performance logging in InspectorBackend so that it is easier to see
        message handling times and their distribution among run loop turns.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass): Add a new diagnostic flag that warns about slow message handling.
        (InspectorBackendClass.prototype._dispatchCallback.get if): Improve logging.
        (InspectorBackendClass.prototype._dispatchCallback): Improve logging.
        (InspectorBackendClass.prototype._dispatchEvent): Improve logging.
        * UserInterface/Protocol/MessageDispatcher.js:
        (WebInspector.dispatchNextQueuedMessageFromBackend): Keep track of a time limit for message
        dispatching, and set a new timeout if we exceed the time limit.

2014-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Right edge of Timeline Record button does not work
        https://bugs.webkit.org/show_bug.cgi?id=135444

        Reviewed by Timothy Hatcher.

        When hovering the record button we would show the status text, however
        because the left edge of the status text box would overlap the right
        edge of the record button causing completely unexpected behavior.

        Position the status text correctly so that it never overlaps the record
        button. 5px to match the left margin of the record button, and another
        2px for some padding between the button and text.

        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-status):

2014-07-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: console.profile missing profile information
        https://bugs.webkit.org/show_bug.cgi?id=135432

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/ScriptTimelineRecord.js:
        Delete the payload information as soon as it has been processed.
        It is no longer needed anymore and can be garbage collected.

2014-07-30  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ProbeSetDetailsSection should not create live location links for unresolved breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=135367

        Reviewed by Timothy Hatcher.

        Regenerate the source code link whenever the breakpoint resolved status changes. If it is
        resolved, then we can create a live location link that respects source maps.

        * UserInterface/Views/ProbeSetDetailsSection.js:
        (WebInspector.ProbeSetDetailsSection):
        (WebInspector.ProbeSetDetailsSection.prototype._updateLinkElement): Added.
        (WebInspector.ProbeSetDetailsSection.prototype._probeSetPositionTextOrLink): Deleted.

2014-07-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: 80% of time during recording is spent creating source code locations for profile nodes
        https://bugs.webkit.org/show_bug.cgi?id=135399

        Reviewed by Timothy Hatcher.

        Profiling the inspector while recording a timeline, a significant amount of
        time was spent creating SourceCodeLocation objects for profiling information
        and call frames. A lot of this data was eagerly being processed, even though
        it would not immediately be presentable to the user.

        This makes two significant changes. We create a LazySourceCodeLocation class
        which does as little as possible until display information is requested. We
        also lazily convert the profiler payload data to a Profile object, so the
        processing is only done if you drill into the Script specific timeline.

        This results in a significant performance improvement in the overview view.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        (WebInspector.TimelineManager.prototype._callFramesFromPayload.createCallFrame):
        (WebInspector.TimelineManager.prototype._callFramesFromPayload):
        (WebInspector.TimelineManager.prototype._profileFromPayload.profileNodeFromPayload): Deleted.
        (WebInspector.TimelineManager.prototype._profileFromPayload.profileNodeCallFromPayload): Deleted.
        (WebInspector.TimelineManager.prototype._profileFromPayload): Deleted.
        Do not eagerly process profile payloads. Instead pass the payload to ScriptTimelineRecords.
        Likewise create callframes with lazy source code locations to do the minimum amount of work.

        * UserInterface/Models/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord):
        (WebInspector.ScriptTimelineRecord.prototype.get profile):
        (WebInspector.ScriptTimelineRecord.prototype._initializeProfileFromPayload.profileNodeFromPayload):
        (WebInspector.ScriptTimelineRecord.prototype._initializeProfileFromPayload.profileNodeCallFromPayload):
        (WebInspector.ScriptTimelineRecord.prototype._initializeProfileFromPayload):
        Only when the profile is asked do we process the profiler payload information.
        This defer the processing until at least the user drills into the Script timeline.

        * UserInterface/Main.html:
        Add the new class and ensure SourceCodeLocation is available beforehand.

        * UserInterface/Models/LazySourceCodeLocation.js: Added.
        (WebInspector.LazySourceCodeLocation):
        (WebInspector.LazySourceCodeLocation.prototype.isEqual):
        (WebInspector.LazySourceCodeLocation.prototype.get sourceCode):
        (WebInspector.LazySourceCodeLocation.prototype.set sourceCode):
        (WebInspector.LazySourceCodeLocation.prototype.get formattedLineNumber):
        (WebInspector.LazySourceCodeLocation.prototype.get formattedColumnNumber):
        (WebInspector.LazySourceCodeLocation.prototype.formattedPosition):
        (WebInspector.LazySourceCodeLocation.prototype.hasFormattedLocation):
        (WebInspector.LazySourceCodeLocation.prototype.hasDifferentDisplayLocation):
        (WebInspector.LazySourceCodeLocation.prototype.resolveMappedLocation):
        (WebInspector.LazySourceCodeLocation.prototype._lazyInitialization):
        Only when display information is requested will we perform extra processing.
        For basic information we do not need to check for formatted (pretty-printed) info.

        * UserInterface/Models/SourceCode.js:
        (WebInspector.SourceCode.prototype.createLazySourceCodeLocation):
        Provide an explict create function for lazy source codes.

        * UserInterface/Models/SourceCodeLocation.js:
        (WebInspector.SourceCodeLocation.prototype.set sourceCode):
        (WebInspector.SourceCodeLocation.prototype.get displaySourceCode):
        (WebInspector.SourceCodeLocation.prototype.get displayLineNumber):
        (WebInspector.SourceCodeLocation.prototype.get displayColumnNumber):
        (WebInspector.SourceCodeLocation.prototype.hasMappedLocation):
        (WebInspector.SourceCodeLocation.prototype.setSourceCode):
        (WebInspector.SourceCodeLocation.prototype.resolveMappedLocation):
        (WebInspector.SourceCodeLocation.prototype._makeChangeAndDispatchChangeEventIfNeeded):
        (WebInspector.SourceCodeLocation.prototype._resolveMappedLocation): Deleted.
        Include two protected functions which LazySourceCodeLocation overrides.

2014-07-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Only compute full ProfileNode times if needed - Legacy Profiler
        https://bugs.webkit.org/show_bug.cgi?id=135406

        Reviewed by Timothy Hatcher.

        Full ProfileNode times are only used by the Legacy Profiler. The new profile
        information in the Scripts Timelines currently never uses the pass. We should
        avoid calculating it if we never use it.

        * UserInterface/Models/ProfileNode.js:
        (WebInspector.ProfileNode.prototype.get startTime):
        (WebInspector.ProfileNode.prototype.get endTime):
        (WebInspector.ProfileNode.prototype.get selfTime):
        (WebInspector.ProfileNode.prototype.get totalTime):
        (WebInspector.ProfileNode.prototype.establishRelationships):
        (WebInspector.ProfileNode.prototype._computeTotalTimes):

2014-07-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Reduce forced layouts in TimelineOverview
        https://bugs.webkit.org/show_bug.cgi?id=135405

        Reviewed by Timothy Hatcher.

        Remove another forced layout. The scroll container won't
        change size unless the ContentView itself resized. Make the
        distinction between a layout update due to a resize and
        normal events (scale changes, etc) and only calculate
        element sizes then.

        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype.updateLayout):
        * UserInterface/Views/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.get visibleDuration):
        (WebInspector.TimelineOverview.prototype.updateLayoutForResize):

2014-07-29  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: breakpoints are always speculatively resolved when restored from local storage
        https://bugs.webkit.org/show_bug.cgi?id=135396

        Reviewed by Timothy Hatcher.

        A longstanding quirk/optimization in the frontend is that we immediately set a breakpoint
        as resolved if the breakpoint was successfully set in the backend. This ensures that clicking in
        the gutter immediately produces a resolved breakpoint with only one round-trip.

        However, not all breakpoints should be speculatively resolved, because the corresponding resource
        may not be loaded yet. This situation causes problems for code that assumes a resolved breakpoint
        also has a valid sourceCodeLocation.sourceCode.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.restoreBreakpointsSoon): Don't leak the variable to global scope.
        (WebInspector.DebuggerManager):
        (WebInspector.DebuggerManager.prototype.speculativelyResolveBreakpoint):
        (WebInspector.DebuggerManager.prototype.addBreakpoint): Speculatively resolve here if requested
        using the success callback passed to _setBreakpoint.

        (WebInspector.DebuggerManager.prototype.didSetBreakpoint): Emit simulated
        Debugger.breakpointResolved events since they are only sent by the backend when a script is parsed.

        (WebInspector.DebuggerManager.prototype._setBreakpoint):
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointAdded): Request speculative resolve.

2014-07-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Eliminate more forced layouts during timeline recordings
        https://bugs.webkit.org/show_bug.cgi?id=135397

        Reviewed by Timothy Hatcher.

        Instead of computing the secondsPerPixel in each overview graph,
        we can ask the overview view itself which has a cached value.
        The computation used to force a layout, now it doesn't need to.

        * UserInterface/Views/LayoutTimelineOverviewGraph.js:
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        * UserInterface/Views/ScriptTimelineOverviewGraph.js:
        * UserInterface/Views/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        * UserInterface/Views/TimelineOverviewGraph.js:
        (WebInspector.TimelineOverviewGraph):
        (WebInspector.TimelineOverviewGraph.prototype.get timelineOverview):
        (WebInspector.TimelineOverviewGraph.prototype.set timelineOverview):

2014-07-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Incorrectly sized TimelineDataGrid event bubble
        https://bugs.webkit.org/show_bug.cgi?id=135371

        Reviewed by Timothy Hatcher.

        Previously the secondsPerPixel calculation was relying on an element
        that may not be sized yet. This was resulting in a visibleWidth of 0
        and resulted in secondsPerPixel being Infinity. Fortunately, the
        graph data source already knows the secondsPerPixel so we can just
        ask it. Getting the correct value and eliminating forced layouts.

        * UserInterface/Views/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.get secondsPerPixel):
        * UserInterface/Views/TimelineDataGridNode.js:

2014-07-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Reduce work creating the initial WebInspector.TimelineRecordBar
        https://bugs.webkit.org/show_bug.cgi?id=135373

        Reviewed by Timothy Hatcher.

        Eliminate a bit of extra work creating TimelineRecordBars. Previously
        the constructor would setup an empty list of records, and then we would
        immediately after replace them. Now just set them in the constructor.

        * UserInterface/Views/LayoutTimelineOverviewGraph.js:
        (WebInspector.LayoutTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.LayoutTimelineOverviewGraph.prototype.updateLayout):
        * UserInterface/Views/NetworkTimelineOverviewGraph.js:
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout):
        * UserInterface/Views/ScriptTimelineOverviewGraph.js:
        (WebInspector.ScriptTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.ScriptTimelineOverviewGraph.prototype.updateLayout):
        * UserInterface/Views/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph.createBar):

2014-07-28  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Unexpected dark border on selected but window inactive timeline
        https://bugs.webkit.org/show_bug.cgi?id=135360

        Update the border-top colors for the item adjacent to the selected item.

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item.selected + li.item):
        (.sidebar > .panel.navigation.timeline > .timelines-content :focus li.item.selected + li.item):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .timelines-content li.item.selected + li.item):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .timelines-content :focus li.item.selected + li.item):

2014-07-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Disable Copy Row in Timelines DataGrids, it does not currently provide value
        https://bugs.webkit.org/show_bug.cgi?id=135364

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGridNode):
        (WebInspector.DataGridNode.prototype.get copyable):
        (WebInspector.DataGridNode.prototype.set copyable):
        * UserInterface/Views/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode):

2014-07-26  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: ReplayManager uses undefined events and inconsistent event data
        https://bugs.webkit.org/show_bug.cgi?id=135222

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/ReplayManager.js:
        (WebInspector.ReplayManager.prototype.sessionCreated.this):
        (WebInspector.ReplayManager.prototype.sessionCreated):
        (WebInspector.ReplayManager.prototype.segmentLoaded):
        (WebInspector.ReplayManager.prototype.segmentUnloaded):
        (WebInspector.ReplayManager.prototype.stopCapturing):
        (WebInspector.ReplayManager.prototype.replayToMarkIndex):
        (WebInspector.ReplayManager.prototype.segmentCompleted.set catch):
        (WebInspector.ReplayManager.prototype.segmentCompleted):
        (WebInspector.ReplayManager.prototype.startCapturing):
        (WebInspector.ReplayManager.prototype._changeSessionState):

2014-07-26  Joseph Pecoraro  <pecoraro@apple.com>

        Remove accidental debugging console.log
        https://bugs.webkit.org/show_bug.cgi?id=135315

        Reviewed by Alexey Proskuryakov.

        * UserInterface/Views/ApplicationCacheFrameContentView.js:
        (WebInspector.ApplicationCacheFrameContentView.prototype._sortDataGrid):

2014-07-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Timelines performance is very slow, has many forced layouts
        https://bugs.webkit.org/show_bug.cgi?id=135313

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/NavigationItem.js:
        (WebInspector.NavigationItem):
        (WebInspector.NavigationItem.prototype.get hidden):
        (WebInspector.NavigationItem.prototype.set hidden):
        Don't have the parent navigation bar update layout if the hidden state did not change.
        This greatly reduces the number of forced layouts as timeline nodes are added.

        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.showEmptyContentPlaceholder):
        (WebInspector.NavigationSidebarPanel.prototype.hideEmptyContentPlaceholder):
        Don't do any work if this is not changing the view.

        (WebInspector.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibilitySoon):
        (WebInspector.NavigationSidebarPanel.prototype._updateContentOverflowShadowVisibility):
        (WebInspector.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        When first selecting a specific timeline (Layout / Scripts) we would have a very long hang
        updating the content. Most of this was time spent updating the overflow shadow visibility
        because every single tree element addition was causing a layout invalidation and forced layout.
        Coalesce all of the tree element adds into a single update at the end.

        * UserInterface/Views/TimelineOverview.js:
        (WebInspector.TimelineOverview.prototype.updateLayout):
        Calculating the visible duration checks offsetLeft. Calculate this once, outside
        of a loop down below, to prevent or reduce possible forced layouts.

        * UserInterface/Views/TreeOutline.js:
        (TreeElement.prototype.revealed):
        Prevent doing any work for timeline tree elements outside of the selected time range.
        Previously they were considered revealed if a parent was expanded, even though that
        parent was hidden. This greatly reduces the amount of work during a recording, since
        previously we were potentially doing a forced layout for hidden nodes.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject.looselyCompareRepresentedObjects):
        Ignore ProfileNode, which may happen here in the Script timeline.

2014-07-23  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: InspectorBackend's promise-based agent API does not support multiple return values
        https://bugs.webkit.org/show_bug.cgi?id=135207

        Reviewed by Joseph Pecoraro.

        The promise wrapper implementation assumed that the protocol callback supplies a single 'payload'
        return value, but InspectorBackend will actually unpack multiple return values as multiple
        callback arguments. Set a special flag so it will not try to apply multiple return values.

        It would read better if multiple return values could be spread to the resolve callback, but
        multiple argument support are not required by the Promises specification, so we won't use them.

        * UserInterface/Controllers/ReplayManager.js: Fix uses of promise return values.
        (WebInspector.ReplayManager):
        * UserInterface/Models/ReplaySession.js:
        * UserInterface/Models/ReplaySessionSegment.js:
        (WebInspector.ReplaySessionSegment):
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackend.Command.prototype.promise):

2014-07-21  Saam Barati  <sbarati@apple.com>

        Web Inspector: Add esprima to the WebInspector.
        https://bugs.webkit.org/show_bug.cgi?id=135098

        Reviewed by Joseph Pecoraro.

        This patch includes Esprima into the WebInspector and attaches its
        exported function onto the WebInspector namespace object. 

        * UserInterface/External/Esprima: Added.
        * UserInterface/External/Esprima/esprima.js: Added.
        (.):
        * UserInterface/Main.html:

2014-07-21  Jonathan Wells  <jonowells@apple.com>

        Back/Forward arrows (modern) are too large.
        https://bugs.webkit.org/show_bug.cgi?id=135073

        Reviewed by Joseph Pecoraro.

        Changes to adjust new forward and back arrow sizes to be more consistent with the 
        universal design language. Moved WebInspector.Platform definition to its own file.
        Refactored handling of image versions inside ImageUtilities.js.

        * UserInterface/Base/ImageUtilities.js:
        (.restoreImage):
        (.generateImage):
        (generateColoredImagesForCSS):
        Make the default image versioning smarter.

        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded):
        (WebInspector.contentLoaded.WebInspector.Platform.version.toString): Deleted.
        (WebInspector.contentLoaded.WebInspector.Platform.toString): Deleted.
        * UserInterface/Base/Platform.js: Added.
        Move platform information definition into Platform.js.

        * UserInterface/Main.html: Include Platform.js.

        * UserInterface/Views/ContentBrowser.js:
        (WebInspector.ContentBrowser):
        * UserInterface/Views/FindBanner.css:
        (.find-banner > button > .glyph):
        (body.mac-platform.legacy .find-banner > button > .glyph):
        (.find-banner > button.segmented.left > .glyph):
        (body.mac-platform.legacy .find-banner > button.segmented.left > .glyph):
        (.find-banner > button.segmented.right > .glyph):
        (body.mac-platform.legacy .find-banner > button.segmented.right > .glyph):
        (.find-banner > button.segmented):
        (body.mac-platform.legacy .find-banner > button.segmented):
        * UserInterface/Views/FindBanner.js:
        (WebInspector.FindBanner.prototype._generateButtonsGlyphsIfNeeded):
        Size of forward and back arrows adjusted.

2014-07-19  Saam Barati  <sbarati@apple.com>

        Web Inspector: TextContentView calls wrong prototype function in the hidden() function
        https://bugs.webkit.org/show_bug.cgi?id=135097

        Reviewed by Timothy Hatcher.

        Corollary bug to: https://bugs.webkit.org/show_bug.cgi?id=135001

        * UserInterface/Views/TextContentView.js:
        (WebInspector.TextContentView.prototype.hidden):

2014-07-18  Timothy Hatcher  <timothy@apple.com>

        Revert r169735 since it broke Timeline, and fix bug 129696 in a more targeted way.

        REGRESSION (r169735): Web Inspector: Timeline tree outline missing data until collapse-expand.
        https://bugs.webkit.org/show_bug.cgi?id=134845

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.adjustCollapsedRange): Use button isteand of assuming
        item.listItemElement will be ready to use. The listItemElement node is lazily created.
        * UserInterface/Views/TreeOutline.js:
        (TreeOutline.prototype.appendChild): Don't attach unless _childrenListNode exists.
        (TreeOutline.prototype.insertChild): Ditto.

2014-07-17  Timothy Hatcher  <timothy@apple.com>

        Make console.profile record to the Timeline.

        https://bugs.webkit.org/show_bug.cgi?id=134643

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.startCapturing):
        (WebInspector.TimelineManager.prototype.stopCapturing):
        (WebInspector.TimelineManager.prototype.capturingStarted):
        (WebInspector.TimelineManager.prototype.capturingStopped):
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * UserInterface/Images/TimelineRecordConsoleProfile.svg: Added.
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Protocol/TimelineObserver.js:
        (WebInspector.TimelineObserver.prototype.eventRecorded):
        (WebInspector.TimelineObserver.prototype.recordingStarted):
        (WebInspector.TimelineObserver.prototype.recordingStopped):
        * UserInterface/Views/TimelineIcons.css:
        (.console-profile-record .icon):
        * UserInterface/Views/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement):

2014-07-16  Saam Barati  <sbarati@apple.com>

        Web Inspector: TextContentView calls the wrong super function in shown()
        https://bugs.webkit.org/show_bug.cgi?id=135001

        Reviewed by Timothy Hatcher.
        TextContentView calls ResourceContentView.shown instead of ContentView.shown.
        It should call ContentView.shown because ContentView is its prototype.


        * UserInterface/Views/TextContentView.js:
        (WebInspector.TextContentView.prototype.shown):

2014-07-15  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Modernize UI styles and better sync with platform styles
        https://bugs.webkit.org/show_bug.cgi?id=134846

        Reviewed by Timothy Hatcher.

        Updated styles to better match the OS UI design. Updated the forward/back button. 
        Moved several rules to selectors that support older OS designs. Added global platform
        data to support this patch.

        * UserInterface/Images/BackArrow.svg: Added.
        * UserInterface/Images/BackArrowLegacy.svg: Copied from Source/WebInspectorUI/UserInterface/Images/BackArrow.svg.
        * UserInterface/Images/ForwardArrow.svg: Added.
        * UserInterface/Images/ForwardArrowLegacy.svg: Copied from Source/WebInspectorUI/UserInterface/Images/ForwardArrow.svg.

        * UserInterface/Base/ImageUtilities.js: Updated image version
        (.generateImage.generateModernImage):
        (.generateImage.generateLegacyImage):
        (.generateImage):
        Updated image generation to support modern look. Updated versioning scheme and version.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        (WebInspector.contentLoaded.WebInspector.Platform.version.toString):
        (WebInspector.contentLoaded.WebInspector.Platform.toString):
        (WebInspector.contentLoaded):
        Added global platform information.

        * UserInterface/Views/ContentBrowser.js:
        (WebInspector.ContentBrowser):
        Updated back and forward buttons.

        * UserInterface/Views/FindBanner.js:
        (WebInspector.FindBanner.prototype._generateButtonsGlyphsIfNeeded):
        Updated images for the find banner.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        Added new images.

        * UserInterface/Views/ButtonToolbarItem.css:
        (.toolbar .item.button > .label):
        (body.mac-platform.legacy .toolbar .item.button > .label):
        * UserInterface/Views/CSSStyleDeclarationSection.css:
        (.style-declaration-section):
        (body.mac-platform.legacy .style-declaration-section):
        (body.mac-platform.legacy .style-declaration-section + .style-declaration-section):
        (.style-declaration-section.last-in-group):
        (body.mac-platform.legacy .style-declaration-section.last-in-group):
        (.style-declaration-section.last-in-group + .style-declaration-section):
        (body.mac-platform.legacy .style-declaration-section.last-in-group + .style-declaration-section):
        (body.mac-platform.legacy .style-declaration-section.last-in-group + .style-declaration-section:last-child):
        (.style-declaration-section + .style-declaration-section): Deleted.
        (.style-declaration-section.last-in-group + .style-declaration-section:last-child): Deleted.
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        (.sidebar > .panel.details.css-style > .content > .pseudo-classes):
        * UserInterface/Views/DOMTreeOutline.css:
        (.dom-tree-outline li.hovered:not(.selected) .selection):
        (body.mac-platform.legacy .dom-tree-outline li.hovered:not(.selected) .selection):
        (.dom-tree-outline li.elements-drag-over .selection):
        (body.mac-platform.legacy .dom-tree-outline li.elements-drag-over .selection):
        (.dom-tree-outline:focus li.selected .selection):
        (body.mac-platform.legacy .dom-tree-outline:focus li.selected .selection):
        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar .dashboard-container):
        (body.mac-platform.legacy .toolbar .dashboard-container):
        (body.window-inactive .toolbar .dashboard-container):
        (body.mac-platform.legacy.window-inactive .toolbar .dashboard-container):
        (.toolbar .dashboard):
        (body.window-inactive .toolbar .dashboard):
        (body.mac-platform.legacy.window-inactive .toolbar .dashboard):
        * UserInterface/Views/DataGrid.css:
        (.data-grid th):
        (body.mac-platform.legacy .data-grid th):
        (.data-grid tr.selected):
        (body.mac-platform.legacy .data-grid tr.selected):
        (.data-grid:focus tr.selected):
        (body.mac-platform.legacy .data-grid:focus tr.selected):
        * UserInterface/Views/DetailsSection.css:
        (.details-section):
        (body.mac-platform.legacy .details-section):
        (.details-section .details-section):
        (body.mac-platform.legacy .details-section .details-section):
        (.details-section .details-section:last-child):
        (.details-section .details-section:first-child):
        (.details-section > .header):
        (body.mac-platform.legacy .details-section > .header):
        (.details-section .details-section > .header):
        (body.mac-platform.mountain-lion .details-section .details-section > .header):
        (.details-section .details-section.collaspsed > .header):
        (.details-section.computed-style-properties:not(.collapsed) > .header):
        (body.mac-platform.legacy .details-section.computed-style-properties:not(.collapsed) > .header):
        (.details-section > .content > .group):
        (body.mac-platform.legacy .details-section > .content > .group):
        (.details-section > .content > .group:last-child):
        (.details-section > .content > .group:nth-child(even)):
        (body.mac-platform.legacy .details-section > .content > .group:nth-child(even)):
        (body.mac-platform.legacy .details-section > .content > .group:last-child > .row.simple:last-child > *):
        (.details-section > .content > .group:last-child > .row.simple:last-child > *): Deleted.
        * UserInterface/Views/FilterBar.css:
        (.filter-bar > input[type="search"]):
        (body.mac-platform.legacy .filter-bar > input[type="search"]):
        * UserInterface/Views/NavigationSidebarPanel.css:
        (.navigation-sidebar-panel-content-tree-outline .item.selected):
        (body.mac-platform.legacy .navigation-sidebar-panel-content-tree-outline .item.selected):
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected):
        (body.mac-platform.legacy .navigation-sidebar-panel-content-tree-outline:focus .item.selected):
        (body.window-inactive .navigation-sidebar-panel-content-tree-outline .item.selected):
        (body.mac-platform.legacy.window-inactive .navigation-sidebar-panel-content-tree-outline .item.selected):
        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only.selected):
        (body.mac-platform.legacy .navigation-bar .item.radio.button.text-only.selected):
        * UserInterface/Views/RulesStyleDetailsPanel.css:
        (.sidebar > .panel.details.css-style .rules .label + .style-declaration-section):
        (body.mac-platform.legacy .sidebar > .panel.details.css-style .rules .label + .style-declaration-section):
        (.sidebar > .panel.details.css-style .rules .new-rule):
        (body.mac-platform.legacy .sidebar > .panel.details.css-style .rules .new-rule):
        (.sidebar > .panel.details.css-style .rules .new-rule + .style-declaration-section):
        (body.mac-platform.legacy .sidebar > .panel.details.css-style .rules .new-rule + .style-declaration-section):
        * UserInterface/Views/ScopeBar.css:
        (.scope-bar > li):
        (body.mac-platform.legacy .scope-bar > li):
        (.scope-bar > li.selected):
        (body.mac-platform.legacy .scope-bar > li.selected):
        * UserInterface/Views/SearchBar.css:
        (.search-bar > input[type="search"]):
        (body.mac-platform.legacy .search-bar > input[type="search"]):
        * UserInterface/Views/Sidebar.css:
        (.sidebar):
        (body.mac-platform.legacy .sidebar):
        (body.mac-platform.legacy.window-inactive .sidebar):
        (body.mac-platform.legacy .sidebar.right):
        (body.window-inactive .sidebar): Deleted.
        (.sidebar.right): Deleted.
        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .title-bar):
        (body.mac-platform.legacy .sidebar > .panel.navigation.timeline > .title-bar):
        Style updates for new look and feel.

2014-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Pause button does not work
        https://bugs.webkit.org/show_bug.cgi?id=134785

        Reviewed by Timothy Hatcher.

        Previously we were automatically resuming if we had no recognized
        call frames in the call stack we get when paused. However, we
        were accidentally skipping over anonymous scripts instead of
        just Web Inspector originated call frames.

        Now that we allow anonymous scripts we can step into anonymous
        scripts (e.g. evals, new Function(...)) as expected.

        Also, remove the condition of automatically resuming if the
        call stack was empty. The UI handles this with "No Call Frames".

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.debuggerDidPause):

2014-07-11  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: CSS Autocompletion: "background" only has colors, should support others
        https://bugs.webkit.org/show_bug.cgi?id=134839

        Reviewed by Timothy Hatcher.

        Update and consolidate the background related CSS properties
        and include sub-property completions in the shorthand property.

        Also take the opportunity to add or update other properties
        (-webkit-alt, -webkit-text-decoration-skip, -webkit-aspect-ratio)
        and remove unnecessary newlines / commas in the list.

        * UserInterface/Models/CSSKeywordCompletions.js:

2014-07-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger Continue button is incorrectly sized
        https://bugs.webkit.org/show_bug.cgi?id=134786

        Reviewed by Timothy Hatcher.

        Before this patch everything in the DebuggerDashboardView was flexing.
        Normally, if the contents were not too wide, this would just behave
        as expected and be centered. If the content was too wide, then each
        element would flex uniformly and overlap uniformly. That was not expected.

        This patch changes makes everything but the link have a non-flexible
        size. If the link (at the end) flexs it will have a nice ellipsis
        text truncation, and the rest of the content will be left justified.

        This also fixes a few other minor issues seen in the view.

        * UserInterface/Views/DebuggerDashboardView.css:
        (.dashboard.debugger .navigation-bar):
        Reduce the complexity, give the nav bar (the resume button) some simple padding.

        (.dashboard.debugger > div):
        Make everything non-flex by default.

        (.dashboard.debugger > .location):
        The location will have an inner element flex, so make it flex.

        (.dashboard.debugger > .location > *):
        Make everything in .location non-flex by default.

        (.dashboard.debugger > .location .go-to-link):
        Make the link flex and truncate cleanly.

        (.dashboard.debugger > .location .function-name):
        Fix vertical alignment when the toolbar has small icons.

        * UserInterface/Views/DebuggerDashboardView.js:
        (WebInspector.DebuggerDashboardView.prototype._rebuildLocation):
        Fix class name spelling.

2014-07-09  Brent Fulgham  <bfulgham@apple.com>

        [Win] Remove uses of 'bash' in build system
        https://bugs.webkit.org/show_bug.cgi?id=134782
        <rdar://problem/17615533>

        Reviewed by Dean Jackson.

        Remove uses of 'bash' by replacing Windows-specific bash scripts
        with Perl equivalents.

        * WebInspectorUI.vcxproj/WebInspectorUI.make:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        * WebInspectorUI.vcxproj/build-webinspectorui.pl: Copied from Source/WebInspectorUI/WebInspectorUI.vcxproj/build-webinspectorui.sh.
        * WebInspectorUI.vcxproj/build-webinspectorui.sh: Removed.

2014-07-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger popovers should not dismiss when mousing over them
        https://bugs.webkit.org/show_bug.cgi?id=134687

        Reviewed by David Kilzer.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._trackPopoverEvents):
        Actually install the listeners in the set. Regression from code refactoring in r165052.

2014-07-07  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: CSS style declaration editor should ignore empty lines when determining prefix whitespace
        https://bugs.webkit.org/show_bug.cgi?id=134704

        Reviewed by Joseph Pecoraro.

        When checking for zero-length prefix whitespace, completely empty lines are now ignored
        as these lines are most often used for organizing rules into groups and often have their
        whitespace removed due to trailing whitespace removal conventions.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:

2014-07-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception debugging iOS 7 NetworkAgent.loadResource is unavailable
        https://bugs.webkit.org/show_bug.cgi?id=134689

        Reviewed by Darin Adler.

        Gracefully handle if NetworkAgent.loadResource is unavailable.

        * UserInterface/Controllers/SourceMapManager.js:
        (WebInspector.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/SourceMapResource.js:

2014-07-01  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Hexadecimal color values in all CSS editors are purple when they should be blue
        https://bugs.webkit.org/show_bug.cgi?id=133997

        Reviewed by Joseph Pecoraro.

        CodeMirror 4 removed the style for hex colors from the CSS tokenizer.
        Feature has been added to CodeMirrorAdditions.js.

        * UserInterface/Views/CodeMirrorAdditions.js: Added hex-color to style for a valid hexadecimal color.
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css: Added selector for hexadecimal color.

2014-06-26  Jono Wells  <jonowells@apple.com>

        Web Inspector: Command-/ (slash) now auto-comments code via CodeMirror 4. Should remove as command to pause
        https://bugs.webkit.org/show_bug.cgi?id=134313

        Reviewed by Timothy Hatcher.

        Changed alternate command to pause/resume from command-slash to command-backslash.
        Command-slash sets/unsets comments in all code editors.

        * UserInterface/Models/KeyboardShortcut.js: Added Backslash.
        * UserInterface/Views/DebuggerSidebarPanel.js: Changed pauseOrResumeAlternateKeyboardShortcut to use Backslash instead of Slash.

2014-06-25  Jono Wells  <jonowells@apple.com>

        Web Inspector: Rules panel's strikethrough gets confused at -webkit-align-items: flex-start;
        https://bugs.webkit.org/show_bug.cgi?id=133515

        Reviewed by Timothy Hatcher.

        The CSS style declaration text editor uses the author's shortest instance of prefix whitespace
        to create an indentation baseline for the style editor. This needs to consider the possibility
        that there is no whitespace prefixing one of the rules. Also clarified a FIXME line.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.js: Account for zero-length whitespace.

2014-06-25  Dana Burkart  <dburkart@apple.com>

        Add support for 5-tuple versioning.

        Reviewed by David Farler.

        * Configurations/Version.xcconfig:

2014-06-24  Jono Wells  <jonowells@apple.com>

        Web Inspector: clicking "Show All Nodes" button throws TypeError
        https://bugs.webkit.org/show_bug.cgi?id=133701

        Reviewed by Timothy Hatcher.

        The method used for isEventWithinDisclosureTriangle needs to consider the possibility that the 
        targeted TreeElement isn't contained within the visible DOM, for instance in the case of the
        "Show All Nodes" button immediately after it is pressed.

        * UserInterface/Views/TreeOutline.js:
        (TreeElement.prototype.isEventWithinDisclosureTriangle): Check to make sure TreeElement node is in the visible DOM.

2014-06-24  Jono Wells  <jonowells@apple.com>

        Web Inspector: TypeError when hovering over "Show All Nodes" button in the Dom Tree inspector
        https://bugs.webkit.org/show_bug.cgi?id=133699

        Reviewed by Geoffrey Garen.

        The call to element._createTooltipForNode() was failing because element was sometimes not a 
        DOMTreeOutline but rather only a TreeElement (in the case of the "Show All Nodes" button specifically).
        A check for type fixes this issue.

        * UserInterface/Views/DOMTreeOutline.js:
        (WebInspector.DOMTreeOutline.prototype._onmousemove): Check for presence of _createTooltipForNode.

2014-06-21  Jono Wells  <jonowells@apple.com>

        Web Inspector: UI fonts should pull from system fonts automatically to whatever degree possible
        https://bugs.webkit.org/show_bug.cgi?id=133966

        Reviewed by Timothy Hatcher.

        Updated font families to use -webkit-system-font, and set this on the body to be
        inherited. Also made sure that popovers use Menlo as the default. Updated 
        autocompletions with system font names.

        * UserInterface/Models/CSSKeywordCompletions.js: Updated completions with available system fonts.

        * UserInterface/Controllers/CodeMirrorGradientEditingController.css:
        * UserInterface/Views/Breakpoint.css:
        * UserInterface/Views/ButtonNavigationItem.css:
        * UserInterface/Views/ButtonToolbarItem.css:
        * UserInterface/Views/CSSStyleDeclarationSection.css:
        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        * UserInterface/Views/CSSStyleDetailsSidebarPanel.css:
        * UserInterface/Views/CodeMirrorOverrides.css:
        * UserInterface/Views/DataGrid.css:
        * UserInterface/Views/DebuggerDashboardView.css:
        * UserInterface/Views/DetailsSection.css:
        * UserInterface/Views/FindBanner.css:
        * UserInterface/Views/GoToLineDialog.css:
        * UserInterface/Views/HierarchicalPathComponent.css:
        * UserInterface/Views/Main.css:
        * UserInterface/Views/NavigationSidebarPanel.css:
        * UserInterface/Views/ProbeSetDataGrid.css:
        * UserInterface/Views/RulesStyleDetailsPanel.css:
        * UserInterface/Views/ScopeBar.css:
        * UserInterface/Views/SourceCodeTextEditor.css:
        * UserInterface/Views/TimelineDataGrid.css:
        * UserInterface/Views/TimelineRuler.css:
        * UserInterface/Views/TimelineSidebarPanel.css:
        Changes to fonts. Set default font stack to -webkit-system-font, sans-serif. Default size is
        11px. Only changes to this default size or changes to the font (to Menlo, monospace usually) remain.

2014-06-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Esc in quick console no longer toggles console drawer
        https://bugs.webkit.org/show_bug.cgi?id=134068

        Reviewed by Timothy Hatcher.

        For Escape to toggle console behavior we were relying on the Escape
        keyboard event to propagate up to the window and be handled by
        QuickConsole's global keyboard shortcut. With CodeMirror 4, all
        editors have a default "Esc" key handler to reduce multiple selections
        to a single selection. Unfortunately this always prevents default,
        which our keyboard shortcut respects and doesn't toggle the console.

        Workaround this by putting a specific handler for when a Console
        Prompt is empty and the Escape key is triggered. This does not go
        through the normal ConsolePrompt delegate because the delegate
        is never the QuickConsole, it is actually the JavaScript log.

        * UserInterface/Views/ConsolePrompt.js:
        (WebInspector.ConsolePrompt):
        (WebInspector.ConsolePrompt.prototype.set escapeKeyHandlerWhenEmpty):
        (WebInspector.ConsolePrompt.prototype._handleEscapeKey):
        * UserInterface/Views/QuickConsole.js:
        (WebInspector.QuickConsole.this.prompt.escapeKeyHandlerWhenEmpty):
        (WebInspector.QuickConsole):

2014-06-18  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose aria-relevant
        https://bugs.webkit.org/show_bug.cgi?id=130913

        Reviewed by Joseph Pecoraro.

        Expose ARIA live region relevance in Web Inspector.
        E.g. "Live: Assertive (Additions, Text)"

        * Localizations/en.lproj/localizedStrings.js: New strings.
        * UserInterface/Models/DOMNode.js: One additional property passed.
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: UI updates to support new property.

2014-06-18  Simon Fraser  <simon.fraser@apple.com>

        Add rebeccapurple to CSS named color list
        https://bugs.webkit.org/show_bug.cgi?id=133804

        Reviewed by Jer Noble.
        
        Add the named color "rebeccapurple" (#639).

        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/Models/CSSKeywordCompletions.js:
        * UserInterface/Models/Color.js:

2014-06-18  Jono Wells  <jonowells@apple.com>

        Web Inspector: REGRESSION: Style declaration editor: placeholder misaligned
        https://bugs.webkit.org/show_bug.cgi?id=134012

        Reviewed by Timothy Hatcher.

        Removed a rule needed to align the placeholder for selectors in 
        the style declation text editors with no rules declared in
        http://trac.webkit.org/changeset/170077. The necessary
        rule has been added back to fix the issue.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        (.css-style-text-editor > .CodeMirror .CodeMirror-placeholder):

2014-06-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: PrettyPrinting regression on "var a=1"
        https://bugs.webkit.org/show_bug.cgi?id=134001

        Reviewed by Timothy Hatcher.

        Previously operators did not get a token type. After a CodeMirror
        update they now have a token type of "operator".

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * UserInterface/Views/CodeMirrorFormatters.js:

2014-06-17  Jono Wells  <jonowells@apple.com>

        Web Inspector: Two lines in CSS rule are hidden until resize or click
        https://bugs.webkit.org/show_bug.cgi?id=133951

        Reviewed by Joseph Pecoraro.

        Update to CodeMirror 4.2 fixed the issue.

        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/clojure.js:
        * UserInterface/External/CodeMirror/closebrackets.js:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/comment.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/htmlmixed.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/livescript.js:
        * UserInterface/External/CodeMirror/matchbrackets.js:
        * UserInterface/External/CodeMirror/overlay.js:
        * UserInterface/External/CodeMirror/placeholder.js:
        * UserInterface/External/CodeMirror/runmode.js:
        * UserInterface/External/CodeMirror/sass.js:
        * UserInterface/External/CodeMirror/searchcursor.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:
        Update CodeMirror 4.1 to CodeMirror 4.2.0.

2014-06-17  Jono Wells  <jonowells@apple.com>

        Web Inspector: style declaration editor: visual highlight doesn't match actual selected text
        https://bugs.webkit.org/show_bug.cgi?id=133965

        Reviewed by Joseph Pecoraro.

        Update styles for css style editor to fix highlighting visual mismatch glitch.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        (.css-style-text-editor > .CodeMirror .CodeMirror-placeholder):
        (.css-style-text-editor > .CodeMirror pre):
        (.css-style-text-editor.read-only > .CodeMirror pre):
        Updated styles to eliminate highlight mismatch by adjusting the padding and
        text-indent values.

2014-06-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: recording is overused as both noun and verb in TimelineManager
        https://bugs.webkit.org/show_bug.cgi?id=132878

        Reviewed by Joseph Pecoraro.

        Rename most uses of the verb 'recording' to the verb 'capturing' for timelines.
        Rename getter for the recording to activeRecording, and recordingEnabled to isCapturing().

        When the timeline manager can handle multiple timeline data sets (i.e., 'recordings'),
        it will be very confusing to have 'recording' as a plural noun and verb in the model.

        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager):
        (WebInspector.TimelineManager.prototype.get activeRecording):
        (WebInspector.TimelineManager.prototype.isCapturing):
        (WebInspector.TimelineManager.prototype.startCapturing):
        (WebInspector.TimelineManager.prototype.stopCapturing):
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        (WebInspector.TimelineManager.prototype._addRecord):
        (WebInspector.TimelineManager.prototype._startAutoCapturing):
        (WebInspector.TimelineManager.prototype._stopAutoRecordingSoon):
        (WebInspector.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout):
        (WebInspector.TimelineManager.prototype._mainResourceDidChange):
        (WebInspector.TimelineManager.prototype._resourceWasAdded):
        (WebInspector.TimelineManager.prototype.get recording): Deleted.
        (WebInspector.TimelineManager.prototype.get recordingEnabled): Deleted.
        (WebInspector.TimelineManager.prototype.startRecording): Deleted.
        (WebInspector.TimelineManager.prototype.stopRecording): Deleted.
        (WebInspector.TimelineManager.prototype._startAutoRecording): Deleted.
        * UserInterface/Models/DefaultDashboard.js:
        (WebInspector.DefaultDashboard):
        (WebInspector.DefaultDashboard.prototype._mainResourceDidChange):
        (WebInspector.DefaultDashboard.prototype._capturingStopped):
        (WebInspector.DefaultDashboard.prototype._recordingStopped): Deleted.
        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.isTimelineProfilingEnabled):
        (InspectorFrontendAPI.setTimelineProfilingEnabled):
        * UserInterface/Views/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._capturingStarted):
        (WebInspector.TimelineContentView.prototype._capturingStopped):
        (WebInspector.TimelineContentView.prototype._recordingStarted): Deleted.
        (WebInspector.TimelineContentView.prototype._recordingStopped): Deleted.
        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.initialize):
        (WebInspector.TimelineSidebarPanel.prototype._capturingStarted):
        (WebInspector.TimelineSidebarPanel.prototype._capturingStopped):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphMousedOver):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphMousedOut):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphClicked):
        (WebInspector.TimelineSidebarPanel.prototype._replayCaptureButtonClicked):
        (WebInspector.TimelineSidebarPanel.prototype._recordingStarted): Deleted.
        (WebInspector.TimelineSidebarPanel.prototype._recordingStopped): Deleted.

2014-06-09  Jono Wells  <jonowells@apple.com>

        REGRESSION: Web Inspector: Exception showing the DOM tree for a node with too many children
        https://bugs.webkit.org/show_bug.cgi?id=129696

        Fix issue where sometimes inspecting an element will try to attach the "show all nodes" button
        before the expand function is called in TreeElement before _childrenListNode has been set.

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TreeOutline.js:
        (TreeOutline.prototype.appendChild):
        (TreeOutline.prototype.insertChild):
        Added check for existance of this._childrenListNode.

2014-05-29  Timothy Hatcher  <timothy@apple.com>

        Fix an exception in InspectorBackend.Command.prototype.supports.

        https://bugs.webkit.org/show_bug.cgi?id=133384

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackend.Command.prototype.supports): Use some not any.

2014-05-19  Jono Wells  <jonowells@apple.com>

        Web Inspector: Inspect Element sometimes does not select the right DOM Node
        https://bugs.webkit.org/show_bug.cgi?id=127938

        Reviewed by Joseph Pecoraro.

        Inspecting an element when the inspector is in a closed state was selecting the node but then 
        overriding the selection when DOMTreeContentView#_restoreSelectedNodeAfterUpdate was called.
        Now when an element is inspected a flag prevents the restore from taking place.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WebInspector.DOMTreeManager):
        (WebInspector.DOMTreeManager.prototype.inspectElement):
        (WebInspector.DOMTreeManager.prototype.inspectNodeObject):
        Add WebInspector.DOMTreeManager#_restoreSelectedNodeIsAllowed.

        (WebInspector.DOMTreeManager.prototype.get restoreSelectedNodeIsAllowed):
        Added.

        * UserInterface/Views/FrameDOMTreeContentView.js:
        (WebInspector.FrameDOMTreeContentView.prototype._rootDOMNodeAvailable):
        Add check for WebInspector.domTreeManager.restoreSelectedNodeIsAllowed.

2014-05-15  Jono Wells  <jonowells@apple.com>

        Web Inspector: Should remove JSDoc comment blocks.
        https://bugs.webkit.org/show_bug.cgi?id=132984

        Reviewed by Timothy Hatcher.

        Remove JSDoc comment blocks. These are no longer necessary.

        * UserInterface/Base/Main.js:
        * UserInterface/Base/Object.js:
        * UserInterface/Controllers/DOMTreeManager.js:
        * UserInterface/Models/CSSCompletions.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Models/SourceMap.js:
        * UserInterface/Protocol/InspectorBackend.js:
        * UserInterface/Protocol/RemoteObject.js:
        * UserInterface/Views/ApplicationCacheFrameContentView.js:
        * UserInterface/Views/ConsoleMessage.js:
        * UserInterface/Views/ConsoleMessageImpl.js:
        * UserInterface/Views/ContextMenu.js:
        * UserInterface/Views/DOMTreeElement.js:
        * UserInterface/Views/DOMTreeOutline.js:
        * UserInterface/Views/DOMTreeUpdater.js:
        * UserInterface/Views/DataGrid.js:
        * UserInterface/Views/DatabaseContentView.js:
        * UserInterface/Views/EditingSupport.js:
        * UserInterface/Views/ObjectPropertiesSection.js:
        * UserInterface/Views/Popover.js:
        * UserInterface/Views/TreeOutline.js:
        JSDoc style comment blocks removed.

2014-05-13  Radu Stavila  <stavila@adobe.com>

        Web Inspector: Restore regionLayoutUpdated event in iOS7 inspector and remove regionOversetChanged
        https://bugs.webkit.org/show_bug.cgi?id=132731

        Reviewed by Joseph Pecoraro.

        Added the regionLayoutUpdated event back into the inspector for compatibility with iOS 7
        and removed regionOversetChanged from the iOS7 inspector as iOS 7 does not implement that event.

        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Protocol/CSSObserver.js:
        (WebInspector.CSSObserver.prototype.regionLayoutUpdated):
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-7.0.json:

2014-05-12  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct Cygwin Path Confusion in WebInspectorUI Build
        https://bugs.webkit.org/show_bug.cgi?id=132826

        Reviewed by Joseph Pecoraro.

        * Scripts/copy-user-interface-resources.pl: If the build is running
        under Cygwin, be sure to use '/usr/bin/python', instead of just
        'python' to avoid build errors.

2014-05-09  Alberto Garcia  <berto@igalia.com>

        jsmin.py license header confusing, mentions non-free license
        https://bugs.webkit.org/show_bug.cgi?id=123665

        Reviewed by Darin Adler.

        Pull the most recent version from upstream, which has a clear
        license.

        * Scripts/jsmin.py:

2014-05-08  Jono Wells  <jonowells@apple.com>

        Web Inspector: Console error when launching Web Inspector "Mode htmlmixed failed to advance stream"
        https://bugs.webkit.org/show_bug.cgi?id=132703

        Reviewed by Timothy Hatcher.

        The CodeMirror 4 update brought with it a change in the XML mode that 
        causes our XML mode extension to fail to consume empty paired quotes
        correctly.

        * UserInterface/Views/CodeMirrorAdditions.js:
        Updated extendedXMLToken() to properly handle empty paired quotes.

2014-05-08  Jono Wells  <jonowells@apple.com>

        Web Inspector: Selecting frame in debugger sidebar doesn't reveal code
        https://bugs.webkit.org/show_bug.cgi?id=132112

        Reviewed by Joseph Pecoraro.

        WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar was checking
        only one of the two content trees in the DebuggerSidebarPanel instance. Added
        base getter elementIsSelected to NavigationSidebarPanel and extended it in 
        DebuggerSidebarPanel.

        * UserInterface/Base/Main.js:
        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar): modified logic to check `selectedSidebarPanel.elementIsSelected`.
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.get elementIsSelected): Checks breakpoint and call stack trees.
        * UserInterface/Views/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.get elementIsSelected): Base implementation.

2014-05-06  Radu Stavila  <stavila@adobe.com>

        Web Inspector: [CSS Regions] Add the regionOversetChange event to the iOS 7.0 WebInspector UI
        https://bugs.webkit.org/show_bug.cgi?id=132566

        Reviewed by Antti Koivisto.

        The regionOversetChange event was missing from the iOS7 WebInspector.

        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-7.0.json:

2014-05-05  Radu Stavila  <stavila@adobe.com>

        [CSS Regions] Remove regionLayoutUpdate event
        https://bugs.webkit.org/show_bug.cgi?id=132564

        Reviewed by Simon Fraser.

        The regionLayoutUpdate event was removed from the regions spec and was replaced by two other events: 
        regionOversetChange and regionFragmentChange.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype.get regionLayoutUpdated): Deleted.
        * UserInterface/Models/ScriptTimelineRecord.js:
        * UserInterface/Protocol/CSSObserver.js:
        (WebInspector.CSSObserver.prototype.regionLayoutUpdated): Deleted.
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-7.0.json:

2014-05-02  Jono Wells  <jonowells@apple.com>

        Web Inspector: CodeMirror 4 CSS mode new state data structure breaks helpers.
        https://bugs.webkit.org/show_bug.cgi?id=132149

        Reviewed by Joseph Pecoraro.

        The update to CodeMirror 4 included dramatic changes to the CSS mode,
        particularly the way it handles tokens. `state.stack` is gone, replaced
        by `state.context`.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/codemirror.js:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/livescript.js:
        * UserInterface/External/CodeMirror/runmode.js:
        Updates from ToT CodeMirror.

        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        (WebInspector.CodeMirrorCompletionController.prototype._generateCSSCompletions):
        * UserInterface/Views/CodeMirrorAdditions.js:
        * UserInterface/Views/CodeMirrorFormatters.js: `lastToken` is null now for ":" characters.
        Changes to match structural changes to the state object and changes to expected values of `lastToken`.

2014-04-30  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: clean up and decompose InspectorBackend functionality
        https://bugs.webkit.org/show_bug.cgi?id=132387

        Reviewed by Joseph Pecoraro.

        Aside from renaming variables and other minor cleanup, this patch
        changes the following:

        When calling a command, only store callback data when a callback is passed.
        Use explicit model objects for the agent, event, enum, and commands.
        Separate the agent models from encoding and decoding of JSON messages.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype.registerEnum):
        (InspectorBackendClass.prototype.registerEvent):
        (InspectorBackendClass.prototype.registerDomainDispatcher):
        (InspectorBackendClass.prototype.dispatch):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        (InspectorBackendClass.prototype._agentForDomain):
        (InspectorBackendClass.prototype._registerSentCommand):
        (InspectorBackendClass.prototype._dispatchCallback):
        (InspectorBackendClass.prototype._dispatchEvent):
        (InspectorBackendClass.prototype._invokeCommand):
        (InspectorBackendClass.prototype._reportProtocolError):
        (InspectorBackend.Agent):
        (InspectorBackend.Agent.prototype.get domainName):
        (InspectorBackend.Agent.prototype.set dispatcher):
        (InspectorBackend.Agent.prototype.addEnum):
        (InspectorBackend.Agent.prototype.addCommand):
        (InspectorBackend.Agent.prototype.addEvent):
        (InspectorBackend.Agent.prototype.getEvent):
        (InspectorBackend.Agent.prototype.dispatchEvent):
        (InspectorBackend.Command):
        (InspectorBackend.Command.create):
        (InspectorBackend.Command.prototype.get qualifiedName):
        (InspectorBackend.Command.prototype.get commandName):
        (InspectorBackend.Command.prototype.get callSignature):
        (InspectorBackend.Command.prototype.get replySignature):
        (InspectorBackend.Command.prototype.invoke):
        (InspectorBackend.Command.prototype.supports):
        (InspectorBackend.Command.prototype._invokeWithArguments):
        (InspectorBackend.Event):
        (InspectorBackend.Enum):
        (InspectorBackendClass.prototype.callback): Deleted.
        (InspectorBackendClass.prototype._registerPendingResponse): Deleted.
        (InspectorBackendClass.prototype._invokeMethod): Deleted.
        (InspectorBackendClass.prototype._getAgent): Deleted.
        (InspectorBackendClass.prototype.reportProtocolError): Deleted.
        (InspectorBackendCommand): Deleted.
        (InspectorBackendCommand.create): Deleted.
        (InspectorBackendCommand.prototype.invoke): Deleted.
        (InspectorBackendCommand.prototype.supports): Deleted.
        (InspectorBackendCommand.prototype._invokeWithArguments): Deleted.

2014-04-29  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: reduce per-protocol method function creation in InspectorBackend
        https://bugs.webkit.org/show_bug.cgi?id=130701

        Reviewed by Timothy Hatcher.

        Instead of creating 4 bound functions for every backend method on startup, we
        can share common functionality on the InspectorBackendCommand prototype. This
        also splits the various client-facing protocol introspection mechanisms from
        the message encoding/decoding code.

        We use a workaround to make the command instances themselves callable as well
        as having .invoke, .promise, and .supports. InspectorAgent.methodName returns a
        trampoline function that performs the default method invocation. The trampoline's
        __proto__ is patched to point to InspectorBackendClass.prototype, and the command
        instance is saved in the closure and on the trampoline function itself.

        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype._registerPendingResponse):
        (InspectorBackendClass.prototype._invokeMethod):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype.registerEvent):
        (InspectorBackendCommand):
        (.callable):
        (InspectorBackendCommand.create):
        (InspectorBackendCommand.prototype.invoke):
        (InspectorBackendCommand.prototype.promise):
        (InspectorBackendCommand.prototype.supports):
        (InspectorBackendCommand.prototype._invokeWithArguments):
        (InspectorBackendClass.prototype._wrap): Deleted.
        (InspectorBackendClass.prototype._invoke): Deleted.
        (InspectorBackendClass.prototype._promise): Deleted.
        (InspectorBackendClass.prototype._supports): Deleted.
        (InspectorBackendClass.prototype._sendMessageToBackend): Deleted.
        (InspectorBackendClass.prototype._wrapCallbackAndSendMessageObject): Deleted.
        (InspectorBackendClass.prototype.sendMessageObjectToBackend): Deleted.

2014-04-29  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: DataGrid columns should be objects not Maps
        https://bugs.webkit.org/show_bug.cgi?id=129383

        Reviewed by Timothy Hatcher.

        This reverts an earlier conversion to maps, so that column properties
        (which rarely change) can be optimized.

        String literals for column properties have been preserved so columns
        can be easily converted into objects with methods.

        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.autoSizeColumns):
        (WebInspector.DataGrid.prototype.set var):
        (WebInspector.DataGrid.prototype.set if):
        (WebInspector.DataGrid.prototype.insertColumn):
        (WebInspector.DataGrid.prototype.removeColumn.get this):
        (WebInspector.DataGrid.prototype.removeColumn):
        (WebInspector.DataGrid.prototype.columnWidthsMap):
        (WebInspector.DataGrid.prototype.applyColumnWidthsMap):
        (WebInspector.DataGrid.prototype._collapseColumnGroupWithCell):
        (WebInspector.DataGridNode.prototype.createCell.get if):
        (WebInspector.DataGridNode.prototype.createCell):
        (WebInspector.DataGrid.prototype.get length): Deleted.
        * UserInterface/Views/ProbeSetDataGrid.js:
        (WebInspector.ProbeSetDataGrid.prototype._probeExpressionChanged.get this):
        (WebInspector.ProbeSetDataGrid.prototype._probeExpressionChanged):
        * UserInterface/Views/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters.scopeBar.this.columns.get string_appeared_here):
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters):

2014-04-25  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: DOM Tree debugger popover obscures dashboard
        https://bugs.webkit.org/show_bug.cgi?id=132205

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar .dashboard.visible): Change z-index to 1. Force stacking context.
        * UserInterface/Views/Popover.css:
        (.popover): Add z-index: 100.

2014-04-24  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: Dashboard when paused in debugger shows some missing glyph boxes
        https://bugs.webkit.org/show_bug.cgi?id=132113

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DebuggerDashboardView.css:
        (.dashboard.debugger > .location .function-name::after): Fix the codepoint for nbsp.

2014-04-24  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Should update to CodeMirror 4.1
        https://bugs.webkit.org/show_bug.cgi?id=132140

        Reviewed by Timothy Hatcher.

        Updated to CodeMirror 4.1, which contains several bugfixes.
        Release notes: http://codemirror.net/doc/releases.html#v4

        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/livescript.js:
        * UserInterface/External/CodeMirror/runmode.js:
        * UserInterface/External/CodeMirror/xml.js:
        Updated to CodeMirror 4.1.

2014-04-24  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: CSS autofill suggests properties instead of values when values are needed
        https://bugs.webkit.org/show_bug.cgi?id=132090

        Reviewed by Joseph Pecoraro.

        Updates are required to the CodeMirror helpers to be compatible with
        CodeMirror 4. Some of those changes have been made to fix an issue
        with CSS autofill, CSS code coloring, and also
        https://bugs.webkit.org/show_bug.cgi?id=131859. The main issue is that
        CodeMirror 4's CSS mode (css.js) stores its parsing modes in a different
        data structure. All references to state.stack are obsolete. Many
        are fixed here and more will be in an upcoming patch.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js: Removed exception for checking state.stack properties.
        * UserInterface/Controllers/CodeMirrorCompletionController.js:
        (WebInspector.CodeMirrorCompletionController.prototype._generateCSSCompletions): Corrected "block" state detection.
        * UserInterface/External/CodeMirror/less.js: Removed.
        * UserInterface/Views/CodeMirrorAdditions.js: Sets default state of "block" correctly.
        * UserInterface/Views/CodeMirrorFormatters.js: Removed exception for checking state.stack properties.
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css: Fix styles to match CSS mode changes.

2014-04-24  Antoine Quint  <graouts@webkit.org>

        Web Inspector: gradient editor does not appear for linear-gradient with no specified angle
        https://bugs.webkit.org/show_bug.cgi?id=132083

        Reviewed by Timothy Hatcher.

        Only assume we're parsing a legacy-formatted gradient if the first parameter is not a color.

        * UserInterface/Models/Gradient.js:
        (WebInspector.LinearGradient.linearGradientWithComponents):

2014-04-22  Brent Fulgham  <bfulgham@apple.com>

        [Win] Support Python 2.7 in Cygwin
        https://bugs.webkit.org/show_bug.cgi?id=132023

        Reviewed by Michael Saboff.

        * WebInspectorUI.vcxproj/build-webinspectorui.sh: use
        proper path to Python under Cygwin.

2014-04-18  Katie Madonna  <madonnk@gmail.com>

        Web Inspector: add entries for probe samples in the JS/Events timeline UI
        https://bugs.webkit.org/show_bug.cgi?id=131173

        Reviewed by Timothy Hatcher.

        Create probe sample fired entries for the JS/Events timeline UI.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/ProbeManager.js:
        (WebInspector.ProbeManager.prototype.probeForIdentifier): Added.
        * UserInterface/Controllers/TimelineManager.js: Added cases for probe sample recorded.
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * UserInterface/Images/TimelineRecordProbeSampled.svg: Added.
        * UserInterface/Models/ScriptTimelineRecord.js: Create ProbeSampleRecorded record for ProbeSample case.
        * UserInterface/Views/TimelineIcons.css:
        (.probe-record .icon): Added.
        * UserInterface/Views/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement): Added case for probe sample recorded.

2014-04-15  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: CodeMirror LICENSE is not properly added to combined files
        https://bugs.webkit.org/show_bug.cgi?id=131674

        Reviewed by Darin Adler.

        * Scripts/copy-user-interface-resources.pl: Use $CODE_MIRROR_LICENSE instead
        for CodeMirror.css and CodeMirror.js.

2014-04-14  Jono Wells  <jonowells@apple.com>

        Update to CodeMirror 4.0.
        https://bugs.webkit.org/show_bug.cgi?id=130019

        The CodeMirror 4.0 library adds multiple selections and the ability to
        undo/redo selections. Selections are made by holding the Command (Cmd) key
        and clicking into an editor, or by holding Option (Alt) and making a block
        selection followed by entering a character or moving the cursor.

        Reviewed by Timothy Hatcher.

        * Scripts/update-codemirror-resources.rb:
        * Scripts/update-pretty-printer.rb:
        Update scripts to reflect updated locations for CodeMirror files.
        No longer copies LESS mode file as this has been integrated into CSS mode
        in CodeMirror 4.0.

        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/clojure.js:
        * UserInterface/External/CodeMirror/closebrackets.js:
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/comment.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/htmlmixed.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/livescript.js:
        * UserInterface/External/CodeMirror/matchbrackets.js:
        * UserInterface/External/CodeMirror/overlay.js:
        * UserInterface/External/CodeMirror/placeholder.js:
        * UserInterface/External/CodeMirror/runmode.js:
        * UserInterface/External/CodeMirror/sass.js:
        * UserInterface/External/CodeMirror/searchcursor.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:
        Update to CodeMirror 4.0.

        * UserInterface/Main.html: Remove less.js which is now part of css.js.

        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        * UserInterface/Views/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._updateJumpToSymbolTrackingMode):
        * UserInterface/Views/SyntaxHighlightingDefaultTheme.css:
        Update styles to match CodeMirror changes. Update CSSStyleDeclarationTextEditor.js
        to match CodeMirror API updates (doc.removeLine() has been removed, so
        replaceRange() is used instead). Also the tokenTrackingController is now enabled in the
        CSSStyleDeclarationTextEditor and SourceCodeTextEditor when the Option (Alt) key
        is pressed instead of the Command (Cmd) key so as not to conflict with multiple
        cursor placement in the CodeMirror update.

2014-04-08  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Generate Optimized WebInspectorUI in Release Build
        https://bugs.webkit.org/show_bug.cgi?id=120120

        Reviewed by Timothy Hatcher.

        * Scripts/copy-user-interface-resources.pl: Copied from Scripts/copy-user-interface-resources.sh.
        * Scripts/copy-user-interface-resources.sh: Removed.
        * Scripts/remove-console-asserts.pl:
        * WebInspectorUI.vcxproj/WebInspectorUI.make: Added.
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Switch to Makefile style.
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters: Ditto.
        * WebInspectorUI.vcxproj/WebInspectorUIPostBuild.cmd: More work should
        be done in the new build-webinspectorui.sh file.
        * WebInspectorUI.vcxproj/build-webinspectorui.sh: Added.
        * WebInspectorUI.xcodeproj/project.pbxproj:

2014-04-08  Timothy Hatcher  <timothy@apple.com>

        Fix corrupt APPLE_IMAGES_LICENSE.rtf after r165676.
        https://bugs.webkit.org/show_bug.cgi?id=131384

        Reviewed by Joseph Pecoraro.

        * APPLE_IMAGES_LICENSE.rtf:

2014-04-08  Timothy Hatcher  <timothy@apple.com>

        Clean up old protocol JSON files to better match the latest
        https://bugs.webkit.org/show_bug.cgi?id=131308

        Reviewed by Joseph Pecoraro.

        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-04-05  Brian J. Burg  <burg@cs.washington.edu>

        Enable WEB_REPLAY for PLATFORM(MAC)
        https://bugs.webkit.org/show_bug.cgi?id=130700

        Reviewed by Timothy Hatcher.

        If the ReplayAgent is available, then add an option to toggle between the
        replay interface and normal Timeline interface from the timeline
        sidebar panel. The option is available through a context menu item on the
        sidebar panel's top navigation bar.

        If web replay not available, just show the non-replay interface.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js: Add WebInspector.showReplayInterfaceSetting.
        (WebInspector.loaded):

        * UserInterface/Views/TimelineSidebarPanel.js: Unconditionally create the replay
        interface elements, but only show them if showReplayInterfaceSetting is enabled.
        (WebInspector.TimelineSidebarPanel.prototype._updateReplayInterfaceVisibility): Added
        (WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar.toggleReplayInterface): Added.
        (WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar): Added.

2014-04-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: remove unused metrics and commands from the Timeline agent
        https://bugs.webkit.org/show_bug.cgi?id=131184

        Reviewed by Timothy Hatcher.

        Remove the Memory domain from old protocol versions. Remove enum values
        BeginFrame and CompositeLayers. Remove arguments to Timeline.start.
        Remove miscellaneous Timeline commands that no longer exist and were never used.

        * UserInterface/Protocol/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-04-03  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: hook up probe samples to TimelineAgent's records
        https://bugs.webkit.org/show_bug.cgi?id=131127

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/TimelineManager.js: Stub out a case for the ProbeSample record type.
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection Resource search throws exception
        https://bugs.webkit.org/show_bug.cgi?id=131253

        Reviewed by Timothy Hatcher.

        Fail gracefully when none of the supported search backends are available.
        In JSContext inspection the DOM and Page agents are unavailable.

        * UserInterface/Views/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.performSearch):

2014-04-04  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection - TypeError: null is not an object (evaluating 'contentView.showSourceCode')
        https://bugs.webkit.org/show_bug.cgi?id=129857

        Reviewed by Timothy Hatcher.

        When inspecting a JSContext, there is no main frame resource, so
        attempting to show it was resulting in a runtime error.
        Instead, check to see if there is a main frame resource, fallback
        to selecting the first tree element.

        * UserInterface/Base/Main.js:
        (WebInspector.toggleConsoleView):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.showDefaultContentView):
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showDefaultContentView):

2014-04-04  Ion Rosca  <rosca@adobe.com>

        [CSS Blending] Add compositing reason for isolation.
        https://bugs.webkit.org/show_bug.cgi?id=131153

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Views/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._populateListOfCompositingReasons):

2014-04-02  Timothy Hatcher  <timothy@apple.com>

        Remove Input domain from the Web Inspector protocol.

        https://bugs.webkit.org/show_bug.cgi?id=131073

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js: Updated.
        * Versions/Inspector-iOS-7.0.json: Removed Input domain.

2014-04-01  Timothy Hatcher  <timothy@apple.com>

        Remove HeapProfiler from the Web Inspector protocol.

        https://bugs.webkit.org/show_bug.cgi?id=131070

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/Legacy/6.0/InspectorWebBackendCommands.js: Updated.
        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js: Ditto.
        * Versions/Inspector-iOS-6.0.json: Removed heap related stuff.
        * Versions/Inspector-iOS-7.0.json: Ditto.

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

        Web Inspector: Remove stale localStorage deletion transition code
        https://bugs.webkit.org/show_bug.cgi?id=131061

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/ImageUtilities.js:
        This code has been in for a while. We have transitioned to Web SQL.

2014-04-01  Zoltan Horvath  <zoltan@webkit.org>

        [CSS Exclusions] Remove exclusions parsing support
        https://bugs.webkit.org/show_bug.cgi?id=131046

        Reviewed by David Hyatt.

        * UserInterface/Models/CSSKeywordCompletions.js:

2014-04-01  Timothy Hatcher  <timothy@apple.com>

        Remove the rest of the old Canvas inspection support.

        https://bugs.webkit.org/show_bug.cgi?id=131066

        Reviewed by Joseph Pecoraro.

        * UserInterface/Protocol/Legacy/7.0/InspectorWebBackendCommands.js: Updated.
        * Versions/Inspector-iOS-7.0.json: Removed Canvas domain.

2014-03-28  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: support for live regions
        https://bugs.webkit.org/show_bug.cgi?id=130725

        Reviewed by Timothy Hatcher.

        Initial support for @aria-live, @aria-atomic, and @aria-busy.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        * UserInterface/Views/Main.css:

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

        Web Inspector: console.warn is showing as error instead of warning
        https://bugs.webkit.org/show_bug.cgi?id=130921

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/DefaultDashboard.js:
        (WebInspector.DefaultDashboard.prototype._incrementConsoleMessageType):
        Use our enums instead of hardcoded strings.

2014-03-28  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose what elements get generic "clickable" status
        https://bugs.webkit.org/show_bug.cgi?id=130721

        Reviewed by Timothy Hatcher.

        Expose ancestor element link to "Click Listener" or generic "Clickable: Yes" if current node has mouse handler.

        * Localizations/en.lproj/localizedStrings.js: New "Mouse Event" string.
        * UserInterface/Models/DOMNode.js: Added nodeId and mouseEventNodeId.
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: UI for new detail row.

2014-03-27  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: expose selectedChildNodeIds of list boxes, tree controls, etc., and reconcile UI with childNodeIds
        https://bugs.webkit.org/show_bug.cgi?id=130827

        Reviewed by Timothy Hatcher.

        UI updates for "Selected Item(s)" and "Child(ren)" rows in accessibility node inspector.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:

2014-03-27  Antoine Quint  <graouts@webkit.org>

        Web Inspector: clearing the console log doesn't update the activity viewer
        https://bugs.webkit.org/show_bug.cgi?id=130774

        Reviewed by Joseph Pecoraro.

        Ensure we take the changes made to the ivars into account on the view.

        * UserInterface/Models/DefaultDashboard.js:
        (WebInspector.DefaultDashboard.prototype._consoleWasCleared):

2014-03-27  Brent Fulgham  <bfulgham@apple.com>

        [Win] Correct handling of autogenerated WebInspectorUI files
        https://bugs.webkit.org/show_bug.cgi?id=130846

        Reviewed by Joseph Pecoraro.

        * WebInspectorUI.vcxproj/WebInspectorUIPostBuild.cmd: Files need to be placed in the
        'Protocol' subdirectory of the WebInspectorUI directory.

2014-03-25  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: add support for aria-activedescendant and reconcile UI/testing with parentNode
        https://bugs.webkit.org/show_bug.cgi?id=130712

        Reviewed by Timothy Hatcher.

        Support for @aria-activedescendant; code reuse changes w/ parentNode and activeDescendantNode.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:

2014-03-25  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Remove the autotools build
        https://bugs.webkit.org/show_bug.cgi?id=130717

        Reviewed by Anders Carlsson.

        * GNUmakefile.am: Removed.

2014-03-24  Timothy Hatcher  <timothy@apple.com>

        Lazy load source code referred to from the source map, instead of when
        the source code is revealed in the Resources sidebar.

        https://bugs.webkit.org/show_bug.cgi?id=130625

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/SourceMapResource.js:
        (WebInspector.SourceMapResource): Set up the type info here so it can be used to
        dispaly the right icon in the sidebar.
        (WebInspector.SourceMapResource.prototype.canRequestContentFromBackend): Use _contentRequested.
        (WebInspector.SourceMapResource.prototype.requestContentFromBackend.sourceMapResourceLoaded):
        Reset finished and remove the type change dance we had before.
        * UserInterface/Views/SourceMapResourceTreeElement.js:
        (WebInspector.SourceMapResourceTreeElement.prototype.onattach): Removed. Don't request content here.

2014-03-23  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: add other ARIA one-to-many relationships: owns, flowto, controls.
        https://bugs.webkit.org/show_bug.cgi?id=130635

        Reviewed by Timothy Hatcher.

        Support for @aria-owns, @aria-controls, and @aria-flowto.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:

2014-03-21  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose Accessibility Tree children of the selected node
        https://bugs.webkit.org/show_bug.cgi?id=130264

        Reviewed by Timothy Hatcher.

        Expose the accessibility tree children (different from DOM children) of the
        current node in the accessibility node inspector.

        * Localizations/en.lproj/localizedStrings.js: New "Children" string.
        * UserInterface/Base/DOMUtilities.js: Added linkifyAccessibilityNodeReference.
        * UserInterface/Models/DOMNode.js: Support for accessibility children.
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: Support for accessibility children.
        * UserInterface/Views/Main.css: New styles for .node-link-list.

2014-03-20  Brian Burg  <bburg@apple.com>

        Web Inspector: add temporary buttons to capture/play/pause replay recordings
        https://bugs.webkit.org/show_bug.cgi?id=129692

        Reviewed by Timothy Hatcher.

        If the Replay agent is available, replace the existing ad-hoc navigation bar
        in the Timelines sidebar panel with a record and pause/play button. This UI
        is temporary.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Controllers/ReplayManager.js: Turn two segment state assertions into
        FIXMEs because the assertions are too strong until the public API uses async chains.
        (WebInspector.ReplayManager.prototype.replayToMarkIndex):
        (WebInspector.ReplayManager.prototype.replayToCompletion):
        * UserInterface/Images/Circle.svg: Added.
        * UserInterface/Views/ActivateButtonNavigationItem.js:
        (WebInspector.ActivateButtonNavigationItem.prototype.generateStyleText):
        * UserInterface/Views/ButtonNavigationItem.css: Adjust styles so the default style
        has opacity:1 and the glyph color is darker.
        (.navigation-bar .item.button.suppress-emboss > .glyph):
        (.navigation-bar .item.button.suppress-emboss.disabled > .glyph):
        * UserInterface/Views/ButtonNavigationItem.js:
        (WebInspector.ButtonNavigationItem.prototype.generateStyleText): Explicitly
        generate the width and height properties so that separate button instances do
        not influence the size of each other.

        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphClicked):
        (WebInspector.TimelineSidebarPanel.prototype._replayCaptureButtonClicked):
        (WebInspector.TimelineSidebarPanel.prototype._replayPauseResumeButtonClicked):
        (WebInspector.TimelineSidebarPanel.prototype._captureStarted):
        (WebInspector.TimelineSidebarPanel.prototype._captureStopped):
        (WebInspector.TimelineSidebarPanel.prototype._playbackStarted):
        (WebInspector.TimelineSidebarPanel.prototype._playbackPaused):

2014-03-20  Brian Burg  <bburg@apple.com>

        Web Inspector: add frontend controller and models for replay sessions
        https://bugs.webkit.org/show_bug.cgi?id=130145

        Reviewed by Joseph Pecoraro.

        Upstream the frontend models and controller for web replay. The replay manager
        syncs with the backend controller's replay state and replay sessions by using
        the same state machines and transitions.

        Session and segment models update their data asynchronously using promises.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded): Add the replay manager.
        * UserInterface/Base/Test.js:
        (WebInspector.loaded): Add the replay manager.
        (InspectorTest.debugLog): Fix a bug in the unescape/escape trick.
        (InspectorTest.addResult): Don't try to add results until the test page has loaded.
        (InspectorTest.testPageDidLoad): Clear the isReloading flag.
        (InspectorTest.reloadPage): Reimplement using promises. Return a promise.
        * UserInterface/Base/Utilities.js: Implement Map.take in the obvious way.
        * UserInterface/Controllers/ReplayManager.js: Added.
        (WebInspector.ReplayManager):
        (WebInspector):
        (WebInspector.ReplayManager.prototype.get sessionState):
        (WebInspector.ReplayManager.prototype.get segmentState):
        (WebInspector.ReplayManager.prototype.get activeSessionIdentifier):
        (WebInspector.ReplayManager.prototype.get activeSegmentIdentifier):
        (WebInspector.ReplayManager.prototype.get playbackSpeed):
        (WebInspector.ReplayManager.prototype.set playbackSpeed):
        (WebInspector.ReplayManager.prototype.get currentPosition):
        (WebInspector.ReplayManager.prototype.getSession.get var):
        (WebInspector.ReplayManager.prototype.getSegment.get var):
        (WebInspector.ReplayManager.prototype.captureStarted):
        (WebInspector.ReplayManager.prototype.captureStopped):
        (WebInspector.ReplayManager.prototype.playbackStarted):
        (WebInspector.ReplayManager.prototype.playbackHitPosition):
        (WebInspector.ReplayManager.prototype.playbackPaused):
        (WebInspector.ReplayManager.prototype.playbackFinished):
        (WebInspector.ReplayManager.prototype.sessionCreated.set catch):
        (WebInspector.ReplayManager.prototype.sessionCreated.this):
        (WebInspector.ReplayManager.prototype.sessionCreated):
        (WebInspector.ReplayManager.prototype.sessionModified):
        (WebInspector.ReplayManager.prototype.sessionRemoved.then):
        (WebInspector.ReplayManager.prototype.sessionRemoved):
        (WebInspector.ReplayManager.prototype.segmentCreated.set this):
        (WebInspector.ReplayManager.prototype.segmentCompleted.set catch):
        (WebInspector.ReplayManager.prototype.segmentCompleted):
        (WebInspector.ReplayManager.prototype.segmentRemoved.then):
        (WebInspector.ReplayManager.prototype.segmentRemoved):
        (WebInspector.ReplayManager.prototype.segmentLoaded):
        (WebInspector.ReplayManager.prototype.segmentUnloaded):
        (WebInspector.ReplayManager.prototype.startCapturing):
        (WebInspector.ReplayManager.prototype.stopCapturing):
        (WebInspector.ReplayManager.prototype.replayToMarkIndex):
        (WebInspector.ReplayManager.prototype.replayToCompletion):
        (WebInspector.ReplayManager.prototype.pausePlayback):
        (WebInspector.ReplayManager.prototype.stopPlayback):
        (WebInspector.ReplayManager.prototype._changeSessionState):
        (WebInspector.ReplayManager.prototype._changeSegmentState):
        * UserInterface/Main.html:
        * UserInterface/Models/ReplaySession.js: Added.
        (WebInspector.ReplaySession):
        (WebInspector.ReplaySession.fromPayload):
        (WebInspector.ReplaySession.prototype.get segments):
        (WebInspector.ReplaySession.prototype.segmentsChanged):
        (WebInspector.ReplaySession.prototype._updateFromPayload):
        * UserInterface/Models/ReplaySessionSegment.js: Added.
        (WebInspector.IncompleteSessionSegment):
        (WebInspector.IncompleteSessionSegment.prototype.get isComplete):
        (WebInspector.ReplaySessionSegment):
        (WebInspector.ReplaySessionSegment.prototype.get isComplete):
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype._promise): Add a promise-returning method for
        invoking backend commands that return a result asynchronously.
        * UserInterface/Protocol/ReplayObserver.js: Added.
        (WebInspector.ReplayPosition):
        (WebInspector.ReplayPosition.fromProtocol):
        (WebInspector.ReplayObserver):
        (WebInspector.ReplayObserver.prototype.captureStarted):
        (WebInspector.ReplayObserver.prototype.captureStopped):
        (WebInspector.ReplayObserver.prototype.playbackStarted):
        (WebInspector.ReplayObserver.prototype.playbackHitPosition):
        (WebInspector.ReplayObserver.prototype.playbackPaused):
        (WebInspector.ReplayObserver.prototype.playbackFinished):
        (WebInspector.ReplayObserver.prototype.inputSuppressionChanged):
        (WebInspector.ReplayObserver.prototype.sessionCreated):
        (WebInspector.ReplayObserver.prototype.sessionModified):
        (WebInspector.ReplayObserver.prototype.sessionRemoved):
        (WebInspector.ReplayObserver.prototype.sessionLoaded):
        (WebInspector.ReplayObserver.prototype.segmentCreated):
        (WebInspector.ReplayObserver.prototype.segmentRemoved):
        (WebInspector.ReplayObserver.prototype.segmentCompleted):
        (WebInspector.ReplayObserver.prototype.segmentLoaded):
        (WebInspector.ReplayObserver.prototype.segmentUnloaded):
        * UserInterface/Test.html:

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

        Web Inspector: DebuggerDashboardView looks scrunched debugging JSContext
        https://bugs.webkit.org/show_bug.cgi?id=130527

        Reviewed by Timothy Hatcher.

        Instead of using body.javascript to force a collapsed style,
        actually use the toolbar's collapsed class.

        * UserInterface/Views/DashboardContainerView.css:
        (.toolbar.collapsed .dashboard-container):
        * UserInterface/Views/Toolbar.js:

2014-03-20  Katie Madonna  <madonnk@gmail.com>

        Web Inspector: probe sidebar should use overflow:scroll and split space evenly
        https://bugs.webkit.org/show_bug.cgi?id=129627

        Reviewed by Timothy Hatcher.

        Use flexbox to split space evenly in the probe sidebar, which required changes to collapse
        format, remove scrollbar styles from old timelapse branch.

        * UserInterface/Views/ProbeDetailsSidebarPanel.css: Space elements evenly with flexbox
        and make collapse correctly, remove scrollbar style.
        * UserInterface/Views/ProbeSetDetailsSection.js: Removed inline style.

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

        Web Inspector: Make update-InspectorBackendCommands.rb only update legacy protocol versions
        https://bugs.webkit.org/show_bug.cgi?id=130412

        Reviewed by Timothy Hatcher.

        Rename the script and simplify to only update Legacy protocol versions.

        * Scripts/update-LegacyInspectorBackendCommands.rb: Renamed from Source/WebInspectorUI/Scripts/update-InspectorBackendCommands.rb.

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

        Web Inspector: sourceMapResourceLoaded expects statusCode parameter
        https://bugs.webkit.org/show_bug.cgi?id=130377

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/SourceMapResource.js:

2014-03-17  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception in JSContext Inspector
        https://bugs.webkit.org/show_bug.cgi?id=130368

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._accessibilitySupported):
        Feature check DOMAgent as well as the function.

2014-03-16  Brian Burg  <bburg@apple.com>

        Web Inspector: vended backend commands file should be generated as part of the build
        https://bugs.webkit.org/show_bug.cgi?id=130110

        Reviewed by Timothy Hatcher.

        Copy the backend commands generated in other frameworks into our built products directory.

        * Configurations/WebInspectorUIFramework.xcconfig: Set up variables so we can pull backend
        commands files from the private headers directory of other frameworks.
        * Scripts/copy-user-interface-resources.sh: Always ditto inspector backend commands.
        * UserInterface/Protocol/InspectorJSBackendCommands.js: Removed.
        * UserInterface/Protocol/InspectorWebBackendCommands.js: Removed.
        * WebInspectorUI.vcxproj/WebInspectorUIPostBuild.cmd: Copy over the generated
        backend commands files from the other frameworks.
        * WebInspectorUI.xcodeproj/project.pbxproj: Add JavaScriptCore and WebCore as
        framework dependencies so Xcode builds them first.

2014-03-15  David Kilzer  <ddkilzer@apple.com>

        [iOS] Define SYSTEM_VERSION_PREFIX consistently
        <http://webkit.org/b/130293>
        <rdar://problem/15926359>

        Reviewed by Dan Bernstein.

        * Configurations/Version.xcconfig:
        (SYSTEM_VERSION_PREFIX): Sync with
        Source/WebKit/mac/Version.xcconfig.

2014-03-14  Maciej Stachowiak  <mjs@apple.com>

        Replace "Apple Computer, Inc." with "Apple Inc." in copyright headers
        https://bugs.webkit.org/show_bug.cgi?id=130276
        <rdar://problem/16266927>

        Reviewed by Simon Fraser.

        * APPLE_IMAGES_LICENSE.rtf:
        * UserInterface/Base/DOMUtilities.js:
        * UserInterface/Models/Color.js:
        * UserInterface/Views/ConsoleCommand.js:
        * UserInterface/Views/ConsoleCommandResult.js:
        * UserInterface/Views/ConsoleGroup.js:
        * UserInterface/Views/ConsoleMessage.js:
        * UserInterface/Views/ConsoleMessageImpl.js:
        * UserInterface/Views/DOMTreeElement.js:
        * UserInterface/Views/DOMTreeOutline.js:
        * UserInterface/Views/DOMTreeUpdater.js:
        * UserInterface/Views/GradientSlider.css:
        * UserInterface/Views/GradientSlider.js:
        * UserInterface/Views/TreeOutline.js:

2014-03-14  Bem Jones-Bey  <bjonesbe@adobe.com>

        [CSS Shapes] Add autocomplete for -webkit-shape-outside
        https://bugs.webkit.org/show_bug.cgi?id=130268

        Reviewed by Joseph Pecoraro.

        Add completions for -webkit-shape-outside. Also add the box shapes to
        the possible completions for clip-path.

        * UserInterface/Models/CSSKeywordCompletions.js:

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

        Web Inspector: Update shapes autocompletion suggestions
        https://bugs.webkit.org/show_bug.cgi?id=130255

        Reviewed by Bem Jones-Bey.

        * UserInterface/Models/CSSKeywordCompletions.js:

2014-03-14  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose Accessibility Tree parent of the selected node
        https://bugs.webkit.org/show_bug.cgi?id=129943

        Reviewed by Timothy Hatcher.

        Tests: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        Web Accessibility Node Inspector now displays a link to the AX parent node,
        because it's not a 1:1 match with the DOMNode parent.

        * Localizations/en.lproj/localizedStrings.js: new "Parent" string.
        * UserInterface/Base/DOMUtilities.js: Updating linkifyNodeReference to include role; adding new roleSelectorForNode method.
        * UserInterface/Models/DOMNode.js: AX Parent support and adding role to DOMNode (will be exposed as AX Parent link and in overlays).
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: Accessibility parent node.

2014-03-14  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: Resource and Frame saveIdentityToCookie should store URL hashes not URLs
        https://bugs.webkit.org/show_bug.cgi?id=126833

        Reviewed by Timothy Hatcher.

        * UserInterface/Models/Frame.js:
        (WebInspector.Frame.prototype.saveIdentityToCookie):
        * UserInterface/Models/Resource.js:
        (WebInspector.Resource.prototype.saveIdentityToCookie):

2014-03-13  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Use loc strings for known aria-invalid types
        https://bugs.webkit.org/show_bug.cgi?id=129952

        Reviewed by Joseph Pecoraro.

        Updating inspector-protocol and UI display values for @aria-invalid.

        Test: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        * Localizations/en.lproj/localizedStrings.js: "Grammar" and "Spelling" value strings.
        * UserInterface/Protocol/InspectorWebBackendCommands.js: New enum for DOM.AccessibilityPropertiesInvalid
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: Use enum instead of passing value through directly.

2014-03-13  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: AXI: Expose focused/focusable state in the Accessibility Node Inspector
        https://bugs.webkit.org/show_bug.cgi?id=129779

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js: Add label "Focused".
        * UserInterface/Models/DOMNode.js: Set property "focused" in
        accessibilityProperties.
        (WebInspector.DOMNode.prototype.accessibilityProperties): Add row for
        property "focused".
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WebInspector.DOMNodeDetailsSidebarPanel):
        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility):
        Refresh value of property "focused" in UI.

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

        Web Inspector: Remove InspectorFrontendHost.loadResourceSynchronously
        https://bugs.webkit.org/show_bug.cgi?id=130217

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/InspectorFrontendHostStub.js:

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

        Web Inspector: Network.loadResource should include the response status code
        https://bugs.webkit.org/show_bug.cgi?id=130216

        Reviewed by Timothy Hatcher.

        * UserInterface/Controllers/SourceMapManager.js:
        (WebInspector.SourceMapManager.prototype.sourceMapLoaded):
        (WebInspector.SourceMapManager.prototype._loadAndParseSourceMap):
        * UserInterface/Models/SourceMapResource.js:
        (WebInspector.SourceMapResource.prototype.requestContentFromBackend.sourceMapResourceLoaded):
        If the response is 400 or larger, treat it as an error / failed load.

        * UserInterface/Protocol/InspectorWebBackendCommands.js:
        Update protocol to provide status code parameter.

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: Remove unused callId parameter from evaluateInWebInspector
        https://bugs.webkit.org/show_bug.cgi?id=129744

        Reviewed by Timothy Hatcher.

        * UserInterface/Protocol/InspectorJSBackendCommands.js:
        * UserInterface/Protocol/InspectorObserver.js:
        (WebInspector.InspectorObserver.prototype.evaluateForTestInFrontend):

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

        Web Inspector: [iOS 6] uncaught exception attempting to use CSSAgent.getNamedFlowCollection
        https://bugs.webkit.org/show_bug.cgi?id=130167

        Reviewed by Timothy Hatcher.

        Feature check the protocol method before using it. It is
        fine to do nothing if the feature is not supported.

        * UserInterface/Controllers/DOMTreeManager.js:

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

        Web Inspector: Feature check for accessibility support before using it (DOMAgent.getAccessibilityPropertiesForNode)
        https://bugs.webkit.org/show_bug.cgi?id=130037

        Reviewed by Timothy Hatcher.

        Feature detect if accessibility information is supported before
        creating or attempting to update the accessibility section.

        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:
        (WebInspector.DOMNodeDetailsSidebarPanel):
        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._accessibilitySupported):
        (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility):

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

        Web Inspector: Fix multiple console.assert stripping issues
        https://bugs.webkit.org/show_bug.cgi?id=130166

        Reviewed by Timothy Hatcher.

        There were a couple console.assert stripping issues in production.
        One line required a semicolon so was avoiding getting stripped.
        One resulted in a logic change, when stripping the only statement
        of a control flow block. Add a warning for such cases.

        * Scripts/remove-console-asserts.pl:
        Add warning for a console.assert being the only statement in a control flow block
        without braces. When it is stripped it may change the flow of the function.

        * Scripts/remove-console-asserts-dryrun.rb: Added.
        Add a script to quickly test running remove console asserts on our files, to
        help catch errors not in a production build and in the original non-combined
        files, so you can more easily fix issues.

        * UserInterface/Controllers/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype._updateContentFlowFromPayload):
        Convert the for loop into a single console.assert statement.

        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.removeChild):
        Add missing semicolon.

2014-03-12  Brian Burg  <bburg@apple.com>

        Web Inspector: convert model tests and inspector-test.js to use Test.html
        https://bugs.webkit.org/show_bug.cgi?id=129217

        Reviewed by Timothy Hatcher.

        Miscellaneous changes to make the inspector model test harness work well in
        scenarios where the test page must navigate or reload. Also improve reporting
        test failures so that messages will be dumped correctly even when an exception
        is thrown in the Inspector or the test times out.

        * UserInterface/Base/Test.js:
        (WebInspector.loaded): register new managers and observers.
        (InspectorTest.log): Stringify the argument if it's an object.
        (InspectorTest.assert): Stringify the argument if it's an object. Don't log
        unless the condition is false.

        (InspectorTest.expectThat): Added. Like assert(), but always logs.
        (InspectorTest.debugLog): Escape and unescape the string properly.
        (InspectorTest.completeTest): Fix teardown so messages are not lost.
        (InspectorTest.evaluateInPage): Accept a callback argument.
        (InspectorTest.addResult): Don't rebuild results when adding a new result.
        (InspectorTest._resendResults.decrementPendingResponseCount): Added.

        (InspectorTest._resendResults): Added. Track the number of pending
        responses and invoke a given callback when everything has been resent.

        (InspectorTest.testPageDidLoad): Renamed from `pageLoaded`.
        (InspectorTest.reloadPage): Added.
        (InspectorTest.reportUncaughtException): Prevent the default handler from running.
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass.prototype.dispatch): Report uncaught exceptions when dispatching
        messages on the inspector page without blowing away the entire call stack.

        * UserInterface/Test.html: Add files used by Network and Timeline domains.

2014-03-11  Brian Burg  <bburg@apple.com>

        Web Inspector: DataGrid should have an API to set sort column and direction
        https://bugs.webkit.org/show_bug.cgi?id=128783

        Reviewed by Timothy Hatcher.

        Previously there was no way for DataGrid clients to programmatically change
        the sort order or sort column identifier after the data grid was constructed.
        This patch modernizes DataGrid sorting by exposing getters and setters for
        sortOrder and sortColumnIdentifier, which trigger the SortChanged event if
        the sort settings have changed.

        This patch also modernizes sorting functionality in DataGrid clients, and in
        a few clients it moves column identifiers from numbers to string identifiers.

        * UserInterface/Main.html:
        * UserInterface/Views/ApplicationCacheFrameContentView.js: Use string column identifiers
        instead of numbers. Don't repopulate the entire table when the sort changes, instead
        call DataGrid.sortNodes from the sorting callback. Explicitly set the sort order.

        (WebInspector.ApplicationCacheFrameContentView.prototype._createDataGrid):
        (WebInspector.ApplicationCacheFrameContentView.prototype._sortDataGrid):
        (WebInspector.ApplicationCacheFrameContentView.prototype._sortDataGrid.localeCompare):
        (WebInspector.ApplicationCacheFrameContentView.prototype._populateDataGrid):

        * UserInterface/Views/CookieStorageContentView.js: Use string column identifiers instead
        of numbers. Don't sort the cookies themselves, just the data grid nodes representing
        each cookie. Use DataGrid.sortNodes as the sorting implementation, and provide a
        comparator. Don't rebuild the entire table when the sort changes.

        (WebInspector.CookieStorageContentView.prototype._rebuildTable):
        (WebInspector.CookieStorageContentView.prototype._sortDataGrid):
        (WebInspector.CookieStorageContentView.prototype._sortDataGrid.numberCompare):
        (WebInspector.CookieStorageContentView.prototype._sortDataGrid.expiresCompare):

        * UserInterface/Views/DataGrid.js: Add the DataGrid.SortOrder enum. Put sortOrder
        and sortColumnIdentifier behind getters and setters. Pull some hardcoded style
        class names into constants. Remove the "sort" field on column config objects; instead
        should use the DataGrid.sortColumnIdentifier setter after construction.

        (WebInspector.DataGrid): Keep sort settings in private variables.
        (WebInspector.DataGrid.prototype.get sortOrder): Reimplemented.
        (WebInspector.DataGrid.prototype.get sortColumnIdentifier): Reimplemented.
        (WebInspector.DataGrid.prototype.moveToNextCell):
        (WebInspector.DataGrid.prototype._editingCommitted):
        (WebInspector.DataGrid.prototype.sortNodes): Use requestAnimationFrame to
        coalesce multiple sort requests within the same draw frame.
        (WebInspector.DataGrid.prototype._sortNodesCallback):
        (WebInspector.DataGrid.prototype._headerCellClicked): Use the new sort API.
        * UserInterface/Views/LayerTreeDataGrid.js: Removed. Unnecessary for performance
        now that sort requests are coalesced by requestAnimationFrame.

        * UserInterface/Views/LayerTreeSidebarPanel.js: Use DataGrid instead of LayerTreeDataGrid.
        Hook up the _sortDataGrid method to the built-in DataGrid.sortNodes API.

        (WebInspector.LayerTreeSidebarPanel.prototype._buildDataGridSection):
        (WebInspector.LayerTreeSidebarPanel.prototype._sortDataGrid.comparator):
        (WebInspector.LayerTreeSidebarPanel.prototype._sortDataGrid):
        * UserInterface/Views/LayoutTimelineView.js:
        * UserInterface/Views/LegacyJavaScriptProfileView.js:
        (WebInspector.LegacyJavaScriptProfileView.prototype._sortProfile):
        * UserInterface/Views/NetworkTimelineView.js:
        * UserInterface/Views/ResourceDetailsSidebarPanel.js: Use the DataGrid.sortNodes API.
        (WebInspector.ResourceDetailsSidebarPanel.prototype._createNameValueDataGrid.sortDataGrid.comparator):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._createNameValueDataGrid.sortDataGrid):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._createNameValueDataGrid):
        * UserInterface/Views/ScriptTimelineView.js:
        * UserInterface/Views/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype._sortComparator):

2014-03-10  James Craig  <jcraig@apple.com>

        Web Inspector: AXI: Expose checked/disabled/expanded/pressed/readonly/selected
        https://bugs.webkit.org/show_bug.cgi?id=129781

        Reviewed by Joseph Pecoraro.

        Enabling several more properties to be exposed in the Accessibility Node Inspector.

        Updated Tests: inspector-protocol/dom/getAccessibilityPropertiesForNode.html

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Models/DOMNode.js:
        * UserInterface/Protocol/InspectorWebBackendCommands.js:
        * UserInterface/Views/DOMNodeDetailsSidebarPanel.js:

2014-03-10  Brian Burg  <bburg@apple.com>

        Web Inspector: show a debugging-oriented dashboard when scripts pause
        https://bugs.webkit.org/show_bug.cgi?id=129913

        Reviewed by Timothy Hatcher.

        Using the dashboard swapping functionality just added, show a debugger dashboard
        whenever the debugger pauses, and hide it when it resumes. The debugger manager
        already coalesces pause/resume events across stepping commands.

        The dashboard itself is straightforward, with the exception of how it uses the
        navigation bar buttons. Since buttons from the same URL can't be reused if they
        are bezeled, we don't bezel our button, and set the button image as the glyph mask
        instead of the background image. This lets us easily animate the glyph shape.

        We also have to more forcefully declare a bunch of icon rules that would otherwise
        be messed up by the toolbar's icon rules (whereas we want to mostly emulate navigation
        bar icon styles).

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Base/Main.js:
        (WebInspector.loaded):
        (WebInspector.contentLoaded):
        (WebInspector._debuggerDidPause):
        (WebInspector._debuggerDidResume):
        * UserInterface/Controllers/DashboardManager.js:
        (WebInspector.DashboardManager):
        * UserInterface/Main.html:
        * UserInterface/Models/DebuggerDashboard.js: Added.
        (WebInspector.DebuggerDashboard):
        * UserInterface/Views/ButtonNavigationItem.css:
        (.navigation-bar .item.button.suppress-emboss > .glyph):
        * UserInterface/Views/ButtonNavigationItem.js:
        (WebInspector.ButtonNavigationItem.prototype._updateImage):
        * UserInterface/Views/DashboardView.js:
        (WebInspector.DashboardView):
        * UserInterface/Views/DebuggerDashboardView.css: Added.
        (.toolbar .dashboard.debugger):
        (.dashboard.debugger > .message):
        (.dashboard.debugger .navigation-bar):
        (.toolbar:not(.small-size) .dashboard.debugger .navigation-bar):
        (.dashboard.debugger .navigation-bar .item.button):
        (.dashboard.debugger .navigation-bar .item.button > .glyph):
        (@-webkit-keyframes pulse-pause-button):
        (to):
        (.dashboard.debugger > .divider):
        (.dashboard.debugger > div):
        (.dashboard.debugger > .location > :first-child):
        (.toolbar:not(.small-size) .dashboard.debugger > .location :not(:first-child)):
        (.dashboard.debugger > .location img.icon):
        (.dashboard.debugger > .location .function-name):
        (.dashboard.debugger > .location .function-name::after):
        (.dashboard.debugger > .location .go-to-link):
        (.toolbar.collapsed .dashboard.debugger > :not(.message):not(.navigation-bar )):
        (.toolbar.small-size .dashboard.debugger > .message):
        (.toolbar.small-size .dashboard.debugger > .location > :first-child):
        * UserInterface/Views/DebuggerDashboardView.js: Added.
        (WebInspector.DebuggerDashboardView):
        (WebInspector.DebuggerDashboardView.prototype._rebuildLocation):
        (WebInspector.DebuggerDashboardView.prototype._resumeButtonClicked):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):

2014-03-10  Brian Burg  <bburg@apple.com>

        Web Inspector: convert the dashboard toolbar item to support multiple dashboards
        https://bugs.webkit.org/show_bug.cgi?id=129898

        Reviewed by Timothy Hatcher.

        We want to ability to swap in and out different dashboard contents depending on
        circumstances such as debugger activity and page loading. This patch converts the
        existing hard-coded dashboard implementation to follow the container-based approach
        used by WebInspector.ContentViewContainer.

        As part of the refactoring, we introduce dashboard model objects to store persistent
        dashboard data. Some CSS has also been split between the container and specific dashboard.

        * UserInterface/Controllers/DashboardManager.js:
        (WebInspector.DashboardManager):
        (WebInspector.DashboardManager.prototype.get toolbarItem):
        * UserInterface/Main.html:
        * UserInterface/Models/DefaultDashboard.js: Copied from Source/WebInspectorUI/UserInterface/Controllers/DashboardManager.js.
        (WebInspector.DefaultDashboard):
        (WebInspector.DefaultDashboard.prototype.get resourcesCount):
        (WebInspector.DefaultDashboard.prototype.set resourcesCount):
        (WebInspector.DefaultDashboard.prototype.get resourcesSize):
        (WebInspector.DefaultDashboard.prototype.set resourcesSize):
        (WebInspector.DefaultDashboard.prototype.get time):
        (WebInspector.DefaultDashboard.prototype.set time):
        (WebInspector.DefaultDashboard.prototype.get logs):
        (WebInspector.DefaultDashboard.prototype.set logs):
        (WebInspector.DefaultDashboard.prototype.get errors):
        (WebInspector.DefaultDashboard.prototype.set errors):
        (WebInspector.DefaultDashboard.prototype.get issues):
        (WebInspector.DefaultDashboard.prototype.set issues):
        (WebInspector.DefaultDashboard.prototype._dataDidChange):
        (WebInspector.DefaultDashboard.prototype._mainResourceDidChange):
        (WebInspector.DefaultDashboard.prototype._recordingStopped):
        (WebInspector.DefaultDashboard.prototype._resourceWasAdded):
        (WebInspector.DefaultDashboard.prototype._frameWasAdded):
        (WebInspector.DefaultDashboard.prototype._resourceSizeDidChange):
        (WebInspector.DefaultDashboard.prototype._startUpdatingTime):
        (WebInspector.DefaultDashboard.prototype._stopUpdatingTime):
        (WebInspector.DefaultDashboard.prototype._updateTime):
        (WebInspector.DefaultDashboard.prototype._consoleMessageAdded):
        (WebInspector.DefaultDashboard.prototype._consoleMessageWasRepeated):
        (WebInspector.DefaultDashboard.prototype._incrementConsoleMessageType):
        (WebInspector.DefaultDashboard.prototype._consoleWasCleared):
        * UserInterface/Views/DashboardContainerView.css: Added.
        (.toolbar .dashboard-container):
        (body.window-inactive .toolbar .dashboard-container):
        (body.javascript .toolbar .dashboard-container):
        (.toolbar.normal-size.icon-and-label-vertical .dashboard-container):
        (.toolbar.small-size.icon-and-label-horizontal .dashboard-container):
        (.toolbar.normal-size.icon-and-label-horizontal .dashboard-container):
        (.toolbar .dashboard-container):
        (.toolbar .dashboard):
        (.toolbar .dashboard.visible):
        (.toolbar .dashboard.slide-out-up):
        (.toolbar .dashboard.slide-out-down):
        (.toolbar .dashboard.slide-in-up):
        (.toolbar .dashboard.slide-in-down):
        (@-webkit-keyframes slide-top-edge):
        (to):
        (@-webkit-keyframes slide-bottom-edge):
        * UserInterface/Views/DashboardContainerView.js: Added.
        (WebInspector.DashboardContainerView):
        (WebInspector.DashboardContainerView.prototype.get toolbarItem):
        (WebInspector.DashboardContainerView.prototype.get currentDashboardView):
        (WebInspector.DashboardContainerView.prototype.showDashboardViewForRepresentedObject):
        (WebInspector.DashboardContainerView.prototype._dashboardViewForRepresentedObject):
        (WebInspector.DashboardContainerView.prototype._showDashboardView):
        * UserInterface/Views/DashboardView.css: Removed.
        * UserInterface/Views/DashboardView.js:
        (WebInspector.DashboardView):
        (WebInspector.DashboardView.prototype.get element):
        (WebInspector.DashboardView.prototype.get parentContainer):
        (WebInspector.DashboardView.prototype.get representedObject):
        (WebInspector.DashboardView.prototype.shown):
        (WebInspector.DashboardView.prototype.hidden):
        * UserInterface/Views/DefaultDashboardView.css: Added.
        (body.web .toolbar.collapsed .dashboard.default > .logs):
        (body.javascript .toolbar .dashboard.default > .resourcesCount):
        (.toolbar .dashboard.default):
        (.toolbar .dashboard.default > .item):
        (.toolbar .dashboard.default > .resourcesSize):
        (.toolbar .dashboard.default > .item.enabled:hover):
        (.toolbar .dashboard.default > .item.enabled:active):
        (.toolbar .dashboard.default > .item > *):
        (.toolbar .dashboard.default > .item > img):
        (.toolbar .dashboard.default > .item.enabled > img):
        (.toolbar .dashboard.default > .item.enabled:hover > img):
        (.toolbar .dashboard.default > .item > div):
        (.toolbar .dashboard.default > .item.enabled > div):
        (.toolbar .dashboard.default > .item.enabled:hover > div):
        (.toolbar .dashboard.default > .resourcesCount > img):
        (.toolbar .dashboard.default > .time > img):
        (.toolbar .dashboard.default > .logs > img):
        (.toolbar .dashboard.default > .resourcesSize > img):
        (.toolbar .dashboard.default > .errors > img):
        (.toolbar .dashboard.default > .errors.enabled > img):
        (.toolbar .dashboard.default > .errors.enabled:hover > img):
        (.toolbar .dashboard.default > .errors.enabled > div):
        (.toolbar .dashboard.default > .errors.enabled:hover > div):
        (.toolbar .dashboard.default > .issues > img):
        (.toolbar .dashboard.default > .issues.enabled > img):
        (.toolbar .dashboard.default > .issues.enabled:hover > img):
        (.toolbar .dashboard.default > .issues.enabled > div):
        (.toolbar .dashboard.default > .issues.enabled:hover > div):
        (.toolbar .dashboard.default > .item.pulsing):
        (@-webkit-keyframes console-item-pulse):
        (.toolbar.small-size.icon-and-label-horizontal .dashboard.default > .item):
        (.toolbar.normal-size.icon-and-label-horizontal .dashboard.default > .item):
        * UserInterface/Views/DefaultDashboardView.js: Copied from Source/WebInspectorUI/UserInterface/Views/DashboardView.js.
        (WebInspector.DefaultDashboardView):
        (WebInspector.DefaultDashboardView.prototype._updateDisplay):
        (WebInspector.DefaultDashboardView.prototype._formatPossibleLargeNumber):
        (WebInspector.DefaultDashboardView.prototype._appendElementForNamedItem.):
        (WebInspector.DefaultDashboardView.prototype._appendElementForNamedItem.set item):
        (WebInspector.DefaultDashboardView.prototype._appendElementForNamedItem):
        (WebInspector.DefaultDashboardView.prototype._itemWasClicked):
        (WebInspector.DefaultDashboardView.prototype._resourcesWasClicked):
        (WebInspector.DefaultDashboardView.prototype._networkItemWasClicked):
        (WebInspector.DefaultDashboardView.prototype._consoleItemWasClicked):
        (WebInspector.DefaultDashboardView.prototype.animationEnded):
        (WebInspector.DefaultDashboardView.prototype._setConsoleItemValue):
        (WebInspector.DefaultDashboardView.prototype._setItemEnabled):

2014-03-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: update-InspectorBackendCommands.rb is putting legacy protocol files in the wrong place
        https://bugs.webkit.org/show_bug.cgi?id=129959

        Reviewed by Timothy Hatcher.

        The script was putting legacy generated files into UserInterface
        instead of UserInterface/Protocol.

        * Scripts/update-InspectorBackendCommands.rb:

2014-03-07  Timothy Hatcher  <timothy@apple.com>

        Load source maps and their resources asynchronously.

        https://bugs.webkit.org/show_bug.cgi?id=112071

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/SourceMapManager.js:
        (WebInspector.SourceMapManager.prototype.loadAndParseSourceMap):
        (WebInspector.SourceMapManager.prototype.downloadSourceMap):
        (WebInspector.SourceMapManager.prototype.sourceMapLoaded):
        (WebInspector.SourceMapManager.prototype._loadAndParseSourceMap):
        Use NetworkAgent.loadResource.

        * UserInterface/Models/SourceMapResource.js:
        (WebInspector.SourceMapResource.prototype.requestContentFromBackend.sourceMapResourceLoaded):
        (WebInspector.SourceMapResource.prototype.createSourceCodeTextRange):
        Use NetworkAgent.loadResource.

        * UserInterface/Protocol/InspectorWebBackendCommands.js: Updated.

2014-03-04  Brian Burg  <bburg@apple.com>

        Inspector does not restore breakpoints after a page reload
        https://bugs.webkit.org/show_bug.cgi?id=129655

        Reviewed by Joseph Pecoraro.

        Fix some console asserts that fire when breakpoints resolve.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.breakpointResolved):
        This had a typo, it should be `breakpoint.identifier`.
        (WebInspector.DebuggerManager.prototype.scriptDidParse):
        Sometimes the `url` parameter is empty instead of null.

2014-03-04  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: Remove WebInspector.EventHandler in favor of WebInspector.EventListenerSet
        https://bugs.webkit.org/show_bug.cgi?id=129185

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/EventHandler.js: Removed.
        * UserInterface/Main.html: Don't include EventHandler.js.
        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._dismissPopover):
        (WebInspector.SourceCodeTextEditor.prototype._trackPopoverEvents):
        Use EventListenerSet instead of EventHandler.

2014-03-03  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Match color of regex in source view with a popover
        https://bugs.webkit.org/show_bug.cgi?id=129645

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/LogContentView.css:
        (.console-formatted-string):
        (.console-formatted-regexp):

2014-03-03  Jonathan Wells  <jonowells@apple.com>

        Web Inspector: Better Debugger popovers for RegExp values
        https://bugs.webkit.org/show_bug.cgi?id=129633

        Reviewed by Timothy Hatcher.

        * UserInterface/Views/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression.populate):
        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression):
        (WebInspector.SourceCodeTextEditor.prototype._showPopoverForRegExp):

2014-03-03  Timothy Hatcher  <timothy@apple.com>

        Don't try to parse legacy CSS gradients -- we don't support them.

        https://bugs.webkit.org/show_bug.cgi?id=129623

        Reviewed by Joseph Pecoraro.

        * UserInterface/Models/Gradient.js:
        (WebInspector.Gradient.stopsWithComponents): Fix a possible exception on malformed stops.
        (WebInspector.LinearGradient.linearGradientWithComponents): Return early for legacy gradients.

2014-03-03  Timothy Hatcher  <timothy@apple.com>

        Remove an innocuous error message and support default views for Resource and Debugger sidebars.

        https://bugs.webkit.org/show_bug.cgi?id=129622

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.showDefaultContentView): Added.
        * UserInterface/Views/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showDefaultContentView): Added.
        (WebInspector.ResourceSidebarPanel.prototype.treeElementForRepresentedObject): Don't log an error
        if the tree element isn't a Script. We try to find any represented object, and it can fail.

2014-03-03  Timothy Hatcher  <timothy@apple.com>

        Fix an exception caused by trying to access the DOM before it is loaded.

        https://bugs.webkit.org/show_bug.cgi?id=129617

        Reviewed by Andreas Kling.

        * UserInterface/Base/Main.js:
        (WebInspector.loaded): Move global event listeners from here...
        (WebInspector.contentLoaded): ... to here.

2014-03-01  Timothy Hatcher  <timothy@apple.com>

        Make Start Timeline Recording in the Develop menu show the Timeline view again.

        This also fixes a noticeable delay between showing the sidebar and the default Timeline
        view when initially opening the Web Inspector to the Timeline.

        https://bugs.webkit.org/show_bug.cgi?id=129545

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded): Call TimelineSidebarPanel.initialize to prime the content view.
        This is needed so the view is ready in this run loop cycle, where it was delayed before.
        * UserInterface/Protocol/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setTimelineProfilingEnabled): Call TimelineSidebarPanel.showTimelineOverview.
        * UserInterface/Views/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.initialize): Added.

2014-03-01  Timothy Hatcher  <timothy@apple.com>

        Select the Resource navigation sidebar by default when there is no cookie.

        https://bugs.webkit.org/show_bug.cgi?id=129544

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WebInspector._restoreInspectorViewStateFromCookie):

2014-03-01  Timothy Hatcher  <timothy@apple.com>

        Label JavaScript forced layouts as such in the Timeline.

        https://bugs.webkit.org/show_bug.cgi?id=129546

        Reviewed by David Kilzer.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/Controllers/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * UserInterface/Models/LayoutTimelineRecord.js:
        (WebInspector.LayoutTimelineRecord.EventType.displayName):
        * UserInterface/Views/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement):

2014-02-28  Timothy Hatcher  <timothy@apple.com>

        Enable breakpoints when adding a new breakpoint or enabling an existing breakpoint.

        This eliminates a multi-step process for the user that can be confusing.

        https://bugs.webkit.org/show_bug.cgi?id=129426

        Reviewed by Joseph Pecoraro.

        * UserInterface/Controllers/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.set breakpointsEnabled):
        (WebInspector.DebuggerManager.prototype._breakpointDisabledStateDidChange):
        * UserInterface/Views/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        (WebInspector.DebuggerSidebarPanel.prototype._breakpointsEnabledDidChange):
        (WebInspector.DebuggerSidebarPanel.prototype._breakpointsToggleButtonClicked):

2014-02-27  Timothy Hatcher  <timothy@apple.com>

        Use a RegExp when when using CodeMirror's SearchCursor.

        This avoids doing toLowerCase() on every line of the TextEditor.

        https://bugs.webkit.org/show_bug.cgi?id=129463

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TextEditor.js:
        (TextEditor.prototype.performSearch): Use a RegExp for query. Pass false for the caseFold
        argument, but it is ignored for RegExp searches anyway.

2014-02-27  Brian Burg  <bburg@apple.com>

        Web Inspector: model tests should use a special Test.html inspector page
        https://bugs.webkit.org/show_bug.cgi?id=129190

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Test.js: Added.
        (WebInspector.loaded):
        (WebInspector.contentLoaded):
        (WebInspector.updateDockedState):
        (InspectorTest.log):
        (InspectorTest.assert):
        (InspectorTest.debugLog):
        (InspectorTest.completeTest):
        (InspectorTest.evaluateInPage):
        (InspectorTest.addResult):
        (InspectorTest.clearResults):
        (InspectorTest.pageLoaded):
        (InspectorTest.reportUncaughtException):
        (.console.logType):
        * UserInterface/Protocol/InspectorBackend.js:
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.dispatch):
        (InspectorBackendClass.prototype.runAfterPendingDispatches):
        (InspectorBackendClass.prototype._flushPendingScripts):
        * UserInterface/Protocol/InspectorObserver.js:
        (WebInspector.InspectorObserver.prototype.evaluateForTestInFrontend):
        * UserInterface/Test.html: Added.

2014-02-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        * UserInterface/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype._shouldHideURL):
        (WebInspector.ConsoleMessageImpl.prototype._firstNonNativeCallFrame):
        (WebInspector.ConsoleMessageImpl.prototype._populateStackTraceTreeElement):
        Provide better handling for "[native code]" and legacy "undefined"
        call frame URLs. Never linkify these. Also, when showing a link
        for an exception, always use the first non-native call frame as
        the link location.

2014-02-26  Timothy Hatcher  <timothy@apple.com>

        Fix an issue where the Timeline filter scope bars were not applying.

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/TimelineDataGrid.js:
        (TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters): Use .get() to access the ScopeBar.

2014-02-25  Andreas Kling  <akling@apple.com>

        Prune dead code for Web Inspector memory instrumentation.
        <https://webkit.org/b/129286>

        Reviewed by Sam Weinig.

        * UserInterface/Protocol/InspectorWebBackendCommands.js:

2014-02-24  Timothy Hatcher  <timothy@apple.com>

        Switch from prefixed CSS gradient to unprefixed.

        https://bugs.webkit.org/show_bug.cgi?id=129279

        Reviewed by Andreas Kling.

        * UserInterface/Views/BreakpointActionView.css:
        (.breakpoint-action-append-button):
        (.breakpoint-action-remove-button):
        * UserInterface/Views/CSSStyleDeclarationTextEditor.css:
        (.css-style-text-editor > .CodeMirror .CodeMirror-lines .color-swatch):
        * UserInterface/Views/CompletionSuggestionsView.css:
        (.completion-suggestions-container > .item:active):
        * UserInterface/Views/DashboardView.css:
        (.toolbar .dashboard):
        * UserInterface/Views/DataGrid.css:
        (.data-grid th):
        (.data-grid table.data):
        (.data-grid th.sortable:not(.mouse-over-collapser):active):
        (.data-grid th.sort-ascending, .data-grid th.sort-descending):
        (.data-grid th.sortable.sort-ascending:not(.mouse-over-collapser):active, .data-grid th.sortable.sort-descending:not(.mouse-over-collapser):active):
        (body.window-inactive .data-grid th.sort-descending):
        * UserInterface/Views/DetailsSection.css:
        (.details-section > .header):
        (.details-section .details-section > .header):
        * UserInterface/Views/DividerNavigationItem.css:
        (.navigation-bar .item.divider):
        * UserInterface/Views/FindBanner.css:
        (.find-banner > button:active:not(:disabled)):
        * UserInterface/Views/Main.css:
        (#split-content-browser > .navigation-bar):
        * UserInterface/Views/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .overflow-shadow):
        (.navigation-sidebar-panel-content-tree-outline .item.selected):
        (.navigation-sidebar-panel-content-tree-outline:focus .item.selected):
        (body.window-inactive .navigation-sidebar-panel-content-tree-outline .item.selected):
        * UserInterface/Views/ProbeSetDataGrid.css:
        (.details-section.probe-set .data-grid > .data-container td.unknown-value):
        (.details-section.probe-set .data-grid th):
        * UserInterface/Views/RadioButtonNavigationItem.css:
        (.navigation-bar .item.radio.button.text-only.selected):
        * UserInterface/Views/TextEditor.css:
        (.text-editor .bouncy-highlight):
        * UserInterface/Views/TimelineContentView.css:
        (.content-view.timeline > .view-container > .timeline-view > .data-grid table.data):
        * UserInterface/Views/TimelineDataGrid.css:
        (.timeline-data-grid-tree-outline .item:hover):
        * UserInterface/Views/TimelineRuler.css:
        (.timeline-ruler > .header > .divider):
        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .title-bar):
        (.sidebar > .panel.timeline > .content > .stripe-background):
        * UserInterface/Views/Toolbar.css:
        (body:not(.mac-platform) .toolbar):
        (body.docked.mac-platform.mavericks .toolbar):

2014-02-24  Timothy Hatcher  <timothy@apple.com>

        Fix the missing navigation bar in the Debugger sidebar panel.

        Sorting the CSS resources caused specificity issue.

        https://bugs.webkit.org/show_bug.cgi?id=129251

        Reviewed by Joseph Pecoraro.

        * UserInterface/Views/DebuggerSidebarPanel.css:
        (.sidebar > .panel.navigation.debugger > .content):
        (.sidebar > .panel.navigation.debugger > .navigation-bar):
        * UserInterface/Views/LayoutTimelineView.css:
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing .navigation-sidebar-panel-content-tree-outline.layout .item .subtitle):
        * UserInterface/Views/NetworkTimelineView.css:
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing .navigation-sidebar-panel-content-tree-outline.network .item .subtitle):
        * UserInterface/Views/ResourceSidebarPanel.css:
        (.sidebar > .panel.navigation.resource > .empty-content-placeholder):
        (.sidebar > .panel.navigation.resource > .search-bar):
        (.sidebar > .panel.navigation.resource > .search-bar > input[type="search"]):
        * UserInterface/Views/ScriptTimelineView.css:
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing .navigation-sidebar-panel-content-tree-outline.script .item .subtitle):
        * UserInterface/Views/TimelineSidebarPanel.css:
        (.sidebar > .panel.navigation.timeline > .status-bar):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph:hover):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording:hover):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.forced):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-glyph.recording.forced):
        (.sidebar > .panel.navigation.timeline > .status-bar > .record-status):
        (.sidebar > .panel.navigation.timeline > .title-bar):
        (.sidebar > .panel.navigation.timeline > .title-bar.timelines):
        (.sidebar > .panel.navigation.timeline > .title-bar.timeline-events):
        (.sidebar > .panel.navigation.timeline > .timelines-content):
        (.sidebar > .panel.navigation.timeline > .timelines-content .close-button):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item .icon):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item.selected .close-button):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item:not(.selected):nth-child(even)):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item:not(.selected):not(:first-child)):
        (.sidebar > .panel.navigation.timeline > .timelines-content li.item.selected + li.item):
        (.sidebar > .panel.navigation.timeline > .timelines-content :focus li.item.selected + li.item):
        (.sidebar > .panel.navigation.timeline > .timelines-content .close-button:active):
        (.sidebar > .panel.navigation.timeline > .empty-content-placeholder):
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing > .content):
        (.sidebar > .panel.navigation.timeline > .content > .stripe-background):
        (.sidebar > .panel.navigation.timeline.timeline-content-view-showing > .content > .stripe-background):

2014-02-24  Timothy Hatcher  <timothy@apple.com>

        Give non-Mac platforms a default toolbar background so it isn't just white.

        https://bugs.webkit.org/show_bug.cgi?id=129260

        Reviewed by Joseph Pecoraro.

        * UserInterface/Base/Main.js:
        (WebInspector.contentLoaded): Style the boby with platform classes.
        * UserInterface/Base/Utilities.js:
        (String.prototype.contains): Added.
        * UserInterface/Views/Toolbar.css:
        (body.docked .toolbar, body:not(.mac-platform) .toolbar): Added. Default toolbar background.
        (body.docked.mac-platform.mavericks .toolbar, body.docked.mac-platform.mountain-lion): Added.
        (body.mac-platform:not(.docked) .toolbar .item.button > .label): Only apply to Mac.

2014-02-24  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: Remove single quote characters from Web Inspector JavaScript files
        https://bugs.webkit.org/show_bug.cgi?id=129253

        Reviewed by Timothy Hatcher.

        * UserInterface/Base/Main.js:
        (WebInspector.openURL):
        * UserInterface/Views/CookieStorageContentView.js:
        (WebInspector.cookieDomainMatchesResourceDomain):
        * UserInterface/Views/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype._insertInLastAttributePosition):
        (WebInspector.DOMTreeElement.prototype._startEditingTagName.editingComitted):
        (WebInspector.DOMTreeElement.prototype._startEditingTagName.editingCancelled):
        (WebInspector.DOMTreeElement.prototype._startEditingTagName):
        * UserInterface/Views/DOMTreeOutline.js:
        (WebInspector.DOMTreeOutline.prototype._ondragover):
        * UserInterface/Views/DataGrid.js:
        (WebInspector.DataGrid.prototype.addPlaceholderNode):

2014-02-23  Dan Bernstein  <mitz@apple.com>

        Removed -Wno-format-y2k from WARNING_CFLAGS

        Rubber-stamped by Sam Weinig.

        * Configurations/Base.xcconfig:

2014-02-23  Diego Pino García  <dpino@igalia.com>

        [GTK] Fix build after Web Inspector code reorganization (r164543)
        https://bugs.webkit.org/show_bug.cgi?id=129231

        Reviewed by Dean Jackson.

        * GNUmakefile.am:
        Modify paths to Web Inspector code.

2014-02-23  Antoine Quint  <graouts@webkit.org>

        Web Inspector: color picker sliders aren't laid out correctly
        https://bugs.webkit.org/show_bug.cgi?id=129234

        Reviewed by Joseph Pecoraro.

        While it's unclear to me what happened, the "position" property for the color picker sliders
        wasn't being computed as expected and used relative positioning. I assume this is related to
        r164543 when the order of CSS files changed.

        * UserInterface/Views/Slider.css:
        (.slider):

2014-02-22  Dan Bernstein  <mitz@apple.com>

        REGRESSION (r164507): Crash beneath JSGlobalObjectInspectorController::reportAPIException at facebook.com, twitter.com, youtube.com
        https://bugs.webkit.org/show_bug.cgi?id=129227

        Reviewed by Eric Carlson.

        Reverted r164507.

        * UserInterface/Views/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype._populateStackTraceTreeElement):

2014-02-21  Timothy Hatcher  <timothy@apple.com>

        Organize WebInspectorUI/UserInterface into sub-directories.

        https://bugs.webkit.org/show_bug.cgi?id=129194

        Rubber-stamped by Joseph Pecoraro.

        * Scripts/copy-user-interface-resources.sh: Fix Image URLs and Protocol paths.
        * UserInterface/Base: Added.
        * UserInterface/Controllers: Added.
        * UserInterface/Images: Added.
        * UserInterface/Main.html: Updated.
        * UserInterface/Models Added.
        * UserInterface/Protocol Added.
        * UserInterface/Views: Added.

2014-02-21  Timothy Hatcher  <timothy@apple.com>

        Add inspection user interface for IndexedDB.

        https://bugs.webkit.org/show_bug.cgi?id=129162

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/IndexedDatabase.js: Added.
        (WebInspector.IndexedDatabase):
        (WebInspector.IndexedDatabase.prototype.get name):
        (WebInspector.IndexedDatabase.prototype.get securityOrigin):
        (WebInspector.IndexedDatabase.prototype.get host):
        (WebInspector.IndexedDatabase.prototype.get version):
        (WebInspector.IndexedDatabase.prototype.get objectStores):
        (WebInspector.IndexedDatabase.prototype.saveIdentityToCookie):
        * UserInterface/IndexedDatabaseEntryDataGridNode.js: Added.
        (WebInspector.IndexedDatabaseEntryDataGridNode):
        (WebInspector.IndexedDatabaseEntryDataGridNode.prototype.get entry):
        (WebInspector.IndexedDatabaseEntryDataGridNode.prototype.createCellContent):
        * UserInterface/IndexedDatabaseHostTreeElement.js: Added.
        (WebInspector.IndexedDatabaseHostTreeElement):
        (WebInspector.IndexedDatabaseHostTreeElement.prototype.get name):
        (WebInspector.IndexedDatabaseHostTreeElement.prototype.get categoryName):
        * UserInterface/IndexedDatabaseObjectStore.js: Added.
        (WebInspector.IndexedDatabaseObjectStore):
        (WebInspector.IndexedDatabaseObjectStore.prototype.get name):
        (WebInspector.IndexedDatabaseObjectStore.prototype.get keyPath):
        (WebInspector.IndexedDatabaseObjectStore.prototype.get autoIncrement):
        (WebInspector.IndexedDatabaseObjectStore.prototype.get parentDatabase):
        (WebInspector.IndexedDatabaseObjectStore.prototype.get indexes):
        (WebInspector.IndexedDatabaseObjectStore.prototype.saveIdentityToCookie):
        (WebInspector.IndexedDatabaseObjectStore.prototype.establishRelationship):
        * UserInterface/IndexedDatabaseObjectStoreContentView.css: Added.
        (.content-view.indexed-database-object-store > .data-grid):
        (.content-view.indexed-database-object-store > .data-grid td .section .header):
        (.content-view.indexed-database-object-store > .data-grid td .section .header::before):
        (.content-view.indexed-database-object-store > .data-grid td .section .header .title):
        (.content-view.indexed-database-object-store > .data-grid table.data):
        (.content-view.indexed-database-object-store > .data-grid table.data tr:nth-child(even)):
        (.content-view.indexed-database-object-store > .data-grid table.data tr:nth-child(odd)):
        (.content-view.indexed-database-object-store > .data-grid table.data tr.filler):
        (.content-view.indexed-database-object-store > .data-grid :focus tr.selected td .section .header::before):
        (.content-view.indexed-database-object-store > .data-grid :focus tr.selected td .section.expanded .header::before):
        (.content-view.indexed-database-object-store > .data-grid :focus tr.selected td .properties-tree li.parent::before):
        (.content-view.indexed-database-object-store > .data-grid :focus tr.selected td .properties-tree li.parent.expanded::before):
        (.content-view.indexed-database-object-store > .data-grid :focus tr.selected td .properties-tree li *):
        * UserInterface/IndexedDatabaseObjectStoreContentView.js: Added.
        (WebInspector.IndexedDatabaseObjectStoreContentView.displayKeyPath):
        (WebInspector.IndexedDatabaseObjectStoreContentView):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.closed):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.saveToCookie):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype.updateLayout):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._reset):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._dataGridScrolled):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData.processEntries):
        (WebInspector.IndexedDatabaseObjectStoreContentView.prototype._fetchMoreData):
        * UserInterface/IndexedDatabaseObjectStoreIndex.js: Added.
        (WebInspector.IndexedDatabaseObjectStoreIndex):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get name):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get keyPath):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get unique):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get multiEntry):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.get parentObjectStore):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.saveIdentityToCookie):
        (WebInspector.IndexedDatabaseObjectStoreIndex.prototype.establishRelationship):
        * UserInterface/IndexedDatabaseObjectStoreIndexTreeElement.js: Added.
        (WebInspector.IndexedDatabaseObjectStoreIndexTreeElement):
        (WebInspector.IndexedDatabaseObjectStoreIndexTreeElement.prototype.get objectStoreIndex):
        * UserInterface/IndexedDatabaseObjectStoreTreeElement.js: Added.
        (WebInspector.IndexedDatabaseObjectStoreTreeElement):
        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.get objectStore):
        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.oncollapse):
        (WebInspector.IndexedDatabaseObjectStoreTreeElement.prototype.onpopulate):
        * UserInterface/IndexedDatabaseTreeElement.js: Added.
        (WebInspector.IndexedDatabaseTreeElement):
        (WebInspector.IndexedDatabaseTreeElement.prototype.get indexedDatabase):
        (WebInspector.IndexedDatabaseTreeElement.prototype.oncollapse):
        (WebInspector.IndexedDatabaseTreeElement.prototype.onpopulate):
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.sidebarPanelForRepresentedObject):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):
        (WebInspector.ResourceSidebarPanel.prototype._indexedDatabaseWasAdded):
        (WebInspector.ResourceSidebarPanel.prototype._storageCleared):
        * UserInterface/StorageManager.js:
        (WebInspector.StorageManager):
        (WebInspector.StorageManager.prototype.initialize):
        (WebInspector.StorageManager.prototype.processData):
        (WebInspector.StorageManager.prototype.requestIndexedDatabaseData):
        (WebInspector.StorageManager.prototype._mainResourceDidChange):
        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabaseNames):
        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processDatabase):
        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded):
        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStore):
        (WebInspector.StorageManager.prototype._addIndexedDBDatabasesIfNeeded.processObjectStoreIndex):
        (WebInspector.StorageManager.prototype._securityOriginDidChange):
        * UserInterface/URLUtilities.js:
        (parseSecurityOrigin):

2014-02-22  Antoine Quint  <graouts@webkit.org>

        Web Inspector: allow drag-to-adjust on angle input of gradients editor
        https://bugs.webkit.org/show_bug.cgi?id=129095

        Reviewed by Timothy Hatcher.

        Rename CodeMirrorDragToAlterNumberController to CodeMirrorDragToAdjustNumberController and move
        the core logic of a drag-to-adjust behavior out of it to a new generic class DragToAdjustController.
        We use this new class from CodeMirrorGradientEditingController to provide drag-to-adjust behavior
        in the angle input field of the gradient editor and also as a supporting object for the CodeMirror-
        specific class.

        * UserInterface/CodeMirrorDragToAdjustNumberController.css: Renamed from Source/WebInspectorUI/UserInterface/CodeMirrorDragToAlterNumberController.css.
        (.CodeMirror.drag-to-adjust .CodeMirror-lines):

        * UserInterface/CodeMirrorDragToAdjustNumberController.js: Added.
        Removed the UI logic and use the new DragToAdjustController as a supporting object instead. We implement
        the various DragToAdjustController delegate methods in order to customize its behavior to work within the
        context of a CodeMirror editor, specifically to prevent activation when the editor is read-only and to
        prevent adjustment when the hovered token isn't a number.

        (WebInspector.CodeMirrorDragToAdjustNumberController):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.get enabled):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.set enabled):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerActiveStateChanged):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerCanBeActivated):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerCanBeAdjusted):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerWasAdjustedByAmount):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerDidReset):
        (WebInspector.CodeMirrorDragToAdjustNumberController.prototype.dragToAdjustControllerCanAdjustObjectAtPoint):

        * UserInterface/CodeMirrorGradientEditingController.css:
        (.gradient-editing-controller > label.drag-to-adjust > input):

        * UserInterface/CodeMirrorGradientEditingController.js:
        Adopt the new DragToAdjustController to make the angle input field value adjustable by dragging.

        (WebInspector.CodeMirrorGradientEditingController.prototype.popoverWillPresent):
        (WebInspector.CodeMirrorGradientEditingController.prototype.dragToAdjustControllerWasAdjustedByAmount):
        (WebInspector.CodeMirrorGradientEditingController.prototype._handleInputEvent):
        (WebInspector.CodeMirrorGradientEditingController.prototype._angleInputValueDidChange):

        * UserInterface/DragToAdjustController.js: Renamed from Source/WebInspectorUI/UserInterface/CodeMirrorDragToAlterNumberController.js.
        New DragToAdjustController class exposing only the core UI logic of a drag-to-adjust behavior in the context
        of a DOM element, exposing a few delegation methods to customize the controller's behavior:

        - dragToAdjustControllerActiveStateChanged() notifies that the .active property has changed, allowing bringup
        and cleanup work to be performed.

        - dragToAdjustControllerDidReset() notifies that the various tracking states of the controller have been reset
        allowing other state objects used by clients to be cleared.

        - dragToAdjustControllerCanBeActivated() is used to check whether the controller may enter the active state upon
        first hovering the target element.

        - dragToAdjustControllerCanBeAdjusted() is used to check whether adjustment can be performed at the moment when
        the user actually is about to engage in a drag-to-adjust interaction.

        - dragToAdjustControllerCanAdjustObjectAtPoint() is used to check whether the object at the provided point (mouse
        location) is an adjustable value.

        - dragToAdjustControllerWasAdjustedByAmount() notifies that there is a new amount to add to the current value
        following a drag-to-adjust interaction.

        (WebInspector.DragToAdjustController):
        (WebInspector.DragToAdjustController.prototype.get element):
        (WebInspector.DragToAdjustController.prototype.set element):
        (WebInspector.DragToAdjustController.prototype.set enabled):
        (WebInspector.DragToAdjustController.prototype.get active):
        (WebInspector.DragToAdjustController.prototype.set active):
        (WebInspector.DragToAdjustController.prototype.reset):
        (WebInspector.DragToAdjustController.prototype.handleEvent):
        (WebInspector.DragToAdjustController.prototype._setDragging):
        (WebInspector.DragToAdjustController.prototype._setTracksMouseClickAndDrag):
        (WebInspector.DragToAdjustController.prototype._modifiersDidChange):
        (WebInspector.DragToAdjustController.prototype._mouseMoved):
        (WebInspector.DragToAdjustController.prototype._mouseWasPressed):
        (WebInspector.DragToAdjustController.prototype._mouseWasDragged):
        (WebInspector.DragToAdjustController.prototype._mouseWasReleased):

        * UserInterface/Main.html:
        Link in new source files.

2014-02-21  Chi Wai Lau  <clau@apple.com>

        Web Inspector: Replace binarySearch with lowerBound and upperBound functions
        https://bugs.webkit.org/show_bug.cgi?id=118609

        Reviewed by Timothy Hatcher.

        This makes insertionIndexForObjectInListSortedByFunction work in O(log(n)) time instead of O(n).

        * UserInterface/BinarySearch.js: Removed.
        * UserInterface/Main.html:
        * UserInterface/Utilities.js:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2014-02-21  Brian Burg  <bburg@apple.com>

        Web Inspector: animate breakpoint tree elements when probe samples are received
        https://bugs.webkit.org/show_bug.cgi?id=128334

        Reviewed by Timothy Hatcher.

        * UserInterface/BreakpointIcons.css: Removed, rules migrated to the following file.

        * UserInterface/BreakpointTreeElement.css: When we want to animateon top of the
        static icon, we set the icon image as the icon element's background, and animate
        a span on top of the icon element.

        (.breakpoint-exception-icon .icon): Moved.
        (.breakpoint-generic-line-icon .icon):
        (.breakpoint-generic-line-icon .icon > span): Added.
        (.data-updated.breakpoint-generic-line-icon .icon > span): Added.

        * UserInterface/BreakpointTreeElement.js:
        (WebInspector.BreakpointTreeElement): Rewrite event listener add/remove to use EventListenerSet.
        (WebInspector.BreakpointTreeElement.prototype.ondetach): Override to unregister the instance's listeners.
        (WebInspector.BreakpointTreeElement.prototype._addProbeSet): Added.
        (WebInspector.BreakpointTreeElement.prototype._removeProbeSet): Added.
        (WebInspector.BreakpointTreeElement.prototype._probeSetAdded): Added.
        (WebInspector.BreakpointTreeElement.prototype._probeSetRemoved): Added.
        Add/remove listeners when probe sets change.

        (WebInspector.BreakpointTreeElement.prototype._samplesCleared): Listeners should follow
        the active data table.

        (WebInspector.BreakpointTreeElement.prototype._dataUpdated): Run the animation when probe data changes.
        (WebInspector.BreakpointTreeElement.prototype._breakpointLocationDidChange): Fix a listener leak.
        * UserInterface/Main.html: Remove BreakpointIcons.css.
        * UserInterface/NavigationSidebarPanel.css:
        (.navigation-sidebar-panel-content-tree-outline .item .icon): give icons
        'position: relative' so child spans can be absolutely positioned.
        * UserInterface/ProbeDetailsSidebarPanel.js: Get probeSet out of the event data
        container. The probe set used to be passed as the data container itself.
        (WebInspector.ProbeDetailsSidebarPanel.prototype._probeSetAdded):
        * UserInterface/ProbeManager.js:
        (WebInspector.ProbeManager.prototype._breakpointActionsChanged.set get knownProbeIdentifiers):
        (WebInspector.ProbeManager.prototype._breakpointActionsChanged):
        (WebInspector.ProbeManager.prototype.get _probeSetForBreakpoint.set this):
        * UserInterface/ProbeSet.js:
        (WebInspector.ProbeSet.prototype.clearSamples): include the old data table as the SamplesCleared event data.
        * UserInterface/TextResourceContentView.js:
        (WebInspector.TextResourceContentView.prototype._probeSetsChanged):

2014-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        * UserInterface/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype._shouldHideURL):
        (WebInspector.ConsoleMessageImpl.prototype._firstNonNativeCallFrame):
        (WebInspector.ConsoleMessageImpl.prototype._populateStackTraceTreeElement):
        Provide better handling for "[native code]" and legacy "undefined"
        call frame URLs. Never linkify these. Also, when showing a link
        for an exception, always use the first non-native call frame as
        the link location.

2014-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        Revert r164486, causing a number of test failures.

        Unreviewed rollout.

2014-02-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: JSContext inspection should report exceptions in the console
        https://bugs.webkit.org/show_bug.cgi?id=128776

        Reviewed by Timothy Hatcher.

        * UserInterface/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype._formatMessage):
        (WebInspector.ConsoleMessageImpl.prototype._shouldHideURL):
        (WebInspector.ConsoleMessageImpl.prototype._firstNonNativeCallFrame):
        (WebInspector.ConsoleMessageImpl.prototype._populateStackTraceTreeElement):
        Provide better handling for "[native code]" and legacy "undefined"
        call frame URLs. Never linkify these. Also, when showing a link
        for an exception, always use the first non-native call frame as
        the link location.

2014-02-21  Antoine Quint  <graouts@webkit.org>

        Web Inspector: scrollbar may appear when selecting a stop in gradient editor
        https://bugs.webkit.org/show_bug.cgi?id=129149

        Reviewed by Timothy Hatcher.

        Ensure the angle input is not focused as we update the size of the gradient editor's
        popover content since, if it were, it'd make a scrollbar appear as we animate the
        popover's frame to fit its new content.

        * UserInterface/CodeMirrorGradientEditingController.js:
        (WebInspector.CodeMirrorGradientEditingController.prototype.gradientSliderStopWasSelected):

2014-02-20  Antoine Quint  <graouts@webkit.org>

        Web Inspector: rich editing of CSS gradients
        https://bugs.webkit.org/show_bug.cgi?id=119686

        Reviewed by Timothy Hatcher.

        Look for gradient definitions in CSS resources and implement a gradient-specific CodeMirrorEditingController
        to edit those CSS gradients. The CodeMirrorGradientEditingController consists of a GradientSlider, a new widget
        allowing the editing of gradient stops, a <select> to pick between various gradient types, a text input to edit
        the gradient angle (for linear gradients) and finally a ColorPicker when a gradient stop is picked for editing.

        * Localizations/en.lproj/localizedStrings.js:
        New localized strings for the content of the gradient editing controller popover.

        * UserInterface/CodeMirrorAdditions.js:
        New .createGradientMarkers() method which, similar to .createColorMarkers(), takes in an optional TextRange, and
        looks for all gradients specified in CSS to create TextMarkers with new type WebInspector.TextMarker.Type.Gradient.
        In order to fully identify these CSS gradient strings, we implement a tokenizer to look for the final closing
        parenthesis since there can be nested opening and closing parentheses as colors are specified for stops.

        * UserInterface/CodeMirrorGradientEditingController.css: Added.
        (.gradient-editing-controller):
        (.gradient-editing-controller.edits-color):
        (.gradient-editing-controller.radial-gradient):
        (.gradient-editing-controller.edits-color.radial-gradient):
        (.gradient-editing-controller select):
        (.gradient-editing-controller .gradient-slider):
        (.gradient-editing-controller .color-picker):
        (.gradient-editing-controller > .color-picker > .slider):
        (.gradient-editing-controller > .color-picker > .brightness):
        (.gradient-editing-controller > .color-picker > .opacity):
        (.gradient-editing-controller > label):
        (.gradient-editing-controller.radial-gradient > label):
        (.gradient-editing-controller.edits-color > label):
        (.gradient-editing-controller > label > input):

        * UserInterface/CodeMirrorGradientEditingController.js: Added.
        (WebInspector.CodeMirrorGradientEditingController):
        (WebInspector.CodeMirrorGradientEditingController.prototype.get initialValue):
        (WebInspector.CodeMirrorGradientEditingController.prototype.get cssClassName):
        (WebInspector.CodeMirrorGradientEditingController.prototype.get popoverPreferredEdges):
        (WebInspector.CodeMirrorGradientEditingController.prototype.popoverTargetFrameWithRects):
        (WebInspector.CodeMirrorGradientEditingController.prototype.popoverWillPresent):
        (WebInspector.CodeMirrorGradientEditingController.prototype.popoverDidPresent):
        Implementation of CodeMirrorEditingController methods meant to be overridden. This allows us
        to customize the popover's appearance, mostly to control how it attaches to the gradient
        strings in the editor.

        (WebInspector.CodeMirrorGradientEditingController.prototype.handleEvent):
        Event handler for changes in the <select> governing gradient type and <input> for the angle.

        (WebInspector.CodeMirrorGradientEditingController.prototype.gradientSliderStopsDidChange):
        Implementation of a GradientSlider delegation method, we use this to update the .text property
        in order to propagate the stops change to the editor.

        (WebInspector.CodeMirrorGradientEditingController.prototype.gradientSliderStopWasSelected):
        Implementation of a GradientSlider delegation method, we use this to control the display of the
        ColorPicker used to edit the color of a selected stop.

        (WebInspector.CodeMirrorGradientEditingController.prototype._handleInputEvent):
        Deal with changes in the <input> for the angle, ensuring we have a "º" string added to the value.

        (WebInspector.CodeMirrorGradientEditingController.prototype._handleChangeEvent):
        Deal with changes in the <select> for the type, preserving the stops list from one gradient type
        to the other. Gradient type-specific information (angle for linear gradients, sizing for radial
        gradients) is lost as we toggle between gradient types.

        (WebInspector.CodeMirrorGradientEditingController.prototype._colorPickerColorChanged):
        Propagate a color change in the ColorPicker to the stop being edited in the GradientSlider and
        and update the .text property in order to propagate the stops change to the editor.

        (WebInspector.CodeMirrorGradientEditingController.prototype._updateCSSClassForGradientType):
        As we toggle the gradient type in ._handleChangeEvent(), update the CSS class used to hide or show
        the angle <input> which is only relevant for linear gradients.

        * UserInterface/ColorPicker.js:
        (WebInspector.ColorPicker):
        Adopt the new Checkers.svg file to display the checkers pattern in the background of the opacity slider.

        (WebInspector.ColorPicker.prototype.get colorWheel):
        Expose the ColorWheel such that it can be sized by ColorPicker clients.

        (WebInspector.ColorPicker.prototype._updateColor):
        Drive-by fix for a bug where we'd attempt to use the RGB components of a color to get the alpha-aware version
        of the color even though the base format was HSL.

        * UserInterface/Gradient.js: Added.
        Parser for gradient strings as passed from the CodeMirror .createGradientMarkers() extension method. In the case
        of linear gradients, we parse all values, save for lengths, and in the case of radial gradients, we preserve the
        sizing information as a string and parse only the gradient stops as the sizing information is only useful to show
        in an editor if attached to an element with metrics.

        Since instances of Gradient are used as the .value property of CodeMirrorGradientEditingController, we implement
        the required .copy() and .toString() methods. The .toString() implementations are aware of default values for angles
        and color stop offsets and only print those as necessary and use shorthands when possible.

        (WebInspector.Gradient.fromString):
        (WebInspector.Gradient.stopsWithComponents):
        (WebInspector.Gradient.stringFromStops):
        (WebInspector.LinearGradient):
        (WebInspector.LinearGradient.linearGradientWithComponents):
        (WebInspector.LinearGradient.prototype.copy):
        (WebInspector.LinearGradient.prototype.toString):
        (WebInspector.RadialGradient):
        (WebInspector.RadialGradient.radialGradientWithComponents):
        (WebInspector.RadialGradient.prototype.copy):
        (WebInspector.RadialGradient.prototype.toString):

        * UserInterface/GradientSlider.css: Added.
        (.gradient-slider):
        (.gradient-slider > canvas):
        (.gradient-slider > .add-area):
        (.gradient-slider-knob):
        (.gradient-slider-knob.shadow):
        (.gradient-slider-knob.selected):
        (.gradient-slider-knob.detaching):
        (.gradient-slider-knob.fade-out):
        (.gradient-slider-knob > div):
        (.gradient-slider-knob > img):

        * UserInterface/GradientSlider.js: Added.
        Widget used to edit a list of stops for a gradient, linear or radial. The widget features a <canvas> element
        that draws the gradient as a linear gradient from left to right with checkers in the background to correctly
        display transparent colors. Attached to this background, individual knobs are shown for each stop in the provided
        stops array. These knobs can be dragged from left to right to change the matching stop offset, but also down to
        detach the knob and remove this stop. Additionally, knobs can be clicked to toggle their selected state, where only
        one knob can be selected at a time. The Esc. key is used to remove selection of the currently selected knob.

        (WebInspector.GradientSlider):
        (WebInspector.GradientSlider.prototype.get element):
        (WebInspector.GradientSlider.prototype.get stops):
        (WebInspector.GradientSlider.prototype.set stops):
        (WebInspector.GradientSlider.prototype.get selectedStop):
        (WebInspector.GradientSlider.prototype.handleEvent):
        (WebInspector.GradientSlider.prototype.handleKeydownEvent):
        (WebInspector.GradientSlider.prototype.knobXDidChange):
        (WebInspector.GradientSlider.prototype.knobCanDetach):
        (WebInspector.GradientSlider.prototype.knobWillDetach):
        (WebInspector.GradientSlider.prototype.knobSelectionChanged):
        (WebInspector.GradientSlider.prototype._handleMouseover):
        (WebInspector.GradientSlider.prototype._handleMousemove):
        (WebInspector.GradientSlider.prototype._handleMouseout):
        (WebInspector.GradientSlider.prototype._handleClick):
        (WebInspector.GradientSlider.prototype._updateShadowKnob):
        (WebInspector.GradientSlider.prototype._sortStops):
        (WebInspector.GradientSlider.prototype._updateStops):
        (WebInspector.GradientSlider.prototype._updateCanvas):
        (WebInspector.GradientSlider.prototype._updateKnobs):
        (WebInspector.GradientSliderKnob):
        (WebInspector.GradientSliderKnob.prototype.get element):
        (WebInspector.GradientSliderKnob.prototype.get stop):
        (WebInspector.GradientSliderKnob.prototype.set stop):
        (WebInspector.GradientSliderKnob.prototype.get x):
        (WebInspector.GradientSliderKnob.prototype.set x):
        (WebInspector.GradientSliderKnob.prototype.get y):
        (WebInspector.GradientSliderKnob.prototype.set y):
        (WebInspector.GradientSliderKnob.prototype.get wellColor):
        (WebInspector.GradientSliderKnob.prototype.set wellColor):
        (WebInspector.GradientSliderKnob.prototype.get selected):
        (WebInspector.GradientSliderKnob.prototype.set selected):
        (WebInspector.GradientSliderKnob.prototype.handleEvent):
        (WebInspector.GradientSliderKnob.prototype._handleMousedown):
        (WebInspector.GradientSliderKnob.prototype._handleMousemove):
        (WebInspector.GradientSliderKnob.prototype._handleMouseup):
        (WebInspector.GradientSliderKnob.prototype._handleTransitionEnd):
        (WebInspector.GradientSliderKnob.prototype._updateTransform):

        * UserInterface/Images/Checkers.svg: Added.
        New asset to draw checkers for color wells.

        * UserInterface/Images/GradientStop.png: Added.
        * UserInterface/Images/GradientStop@2x.png: Added.
        * UserInterface/Images/GradientStopSelected.png: Added.
        * UserInterface/Images/GradientStopSelected@2x.png: Added.
        New assets used by the gradient slider.

        * UserInterface/Main.html:
        Link to the new source files.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._updateEditableMarkers):
        Add a call to .createGradientMarkers() such that we support editing of CSS gradients in such editors.

        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedMarkedExpression):
        Also recognize gradient markers as valid editable markers.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.createGradientMarkers):
        Wrapper for the CodeMirror extension method .createGradientMarkers() such that it may be used by subclasses
        that have no knowledge of CodeMirror.

        (WebInspector.TextEditor.prototype.editingControllerForMarker):
        Return a CodeMirrorGradientEditingController for TextMarkers with WebInspector.TextMarker.Type.Gradient type.

        * UserInterface/TextMarker.js:
        Add the WebInspector.TextMarker.Type.Gradient type.

2014-02-20  Antoine Quint  <graouts@webkit.org>

        Web Inspector: create a CodeMirrorEditingController superclass
        https://bugs.webkit.org/show_bug.cgi?id=129094

        Reviewed by Timothy Hatcher.

        Take code that is generic to editing of any text marker out of CodeMirrorColorEditingController to
        create a new CodeMirrorEditingController superclass that'll be fit to use for future editing controllers.
        Additioanlly, we fix existing issues with such editing by supporting text markers spread across several
        lines and more robustly handling the Esc. key being pressed to dismiss a controller's popover.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        Adopt the new .createColorMarkers() method signature to provide a TextRange parameter rather than a single
        line number.

        * UserInterface/CodeMirrorAdditions.js:
        Remove the .boundsForRange() method in favor of a .rectsForRange() method which will allow us to draw better
        menus when hovering over a text range by providing tight bounds rather than a large box. We also handle any
        line wrapping produced by CodeMirror and remove any leading white-space so that the rects are tight to the
        actual characters in the text marker.

        We also change .createColorMarkers() to take in a TextRange parameter rather than a line number in order to
        better deal with text markers spread across multiple lines.

        * UserInterface/CodeMirrorColorEditingController.js:
        Remove any code that is adequate for any editing controller (which is moving to CodeMirrorEditingController).
        We also adopt new interfaces exposed by CodeMirrorEditingController.

        (WebInspector.CodeMirrorColorEditingController):
        (WebInspector.CodeMirrorColorEditingController.prototype.get initialValue):
        (WebInspector.CodeMirrorColorEditingController.prototype.get cssClassName):
        (WebInspector.CodeMirrorColorEditingController.prototype.popoverWillPresent):
        (WebInspector.CodeMirrorColorEditingController.prototype.popoverDidPresent):
        (WebInspector.CodeMirrorColorEditingController.prototype._colorPickerColorChanged):

        * UserInterface/CodeMirrorEditingController.js: Copied from Source/WebInspectorUI/UserInterface/CodeMirrorColorEditingController.js.
        New class meant to be subclassed by any future editing controller, and already subclassed by
        CodeMirrorColorEditingController. This class exposes several hooks for subclasses to customize its behavior:

        .initialValue: a value we can revert to if the editing is canceled
        .cssClassName: a CSS class name that can be added to the editing controller's container
        .popoverPreferredEdges: a list of preferredEdges as passed to Popover.prototype.present() with a sensible default
        .popoverTargetFrameWithRects: a targetFrame passed to Popover.prototype.present(), defaults to a union of provided rects
        .popoverWillPresent: called as the popover is about to be presented, typically overridden to set the popover's content
        .popoverDidPresent: called as the popover just was presented, typically overridden when content needs to tuned only after
        being added to the DOM and setting of the necessary machinery to update the serialized value in the editor based on interaction
        within the popover without changing the serialized value upon showing the popover the very first time.

        Additionally, the .value property must be an object supporting .toString() and .copy() method.

        Finally, the .editingControllerDidStartEditing() and .editingControllerDidFinishEditing() delegate methods are fired
        as editing begins and finishes.

        (WebInspector.CodeMirrorEditingController):
        (WebInspector.CodeMirrorEditingController.prototype.get marker):
        (WebInspector.CodeMirrorEditingController.prototype.get range):
        (WebInspector.CodeMirrorEditingController.prototype.get value):
        (WebInspector.CodeMirrorEditingController.prototype.set value):
        (WebInspector.CodeMirrorEditingController.prototype.get delegate):
        (WebInspector.CodeMirrorEditingController.prototype.set delegate):
        (WebInspector.CodeMirrorEditingController.prototype.get text):
        (WebInspector.CodeMirrorEditingController.prototype.set text):
        (WebInspector.CodeMirrorEditingController.prototype.get initialValue):
        (WebInspector.CodeMirrorEditingController.prototype.get cssClassName):
        (WebInspector.CodeMirrorEditingController.prototype.get popover):
        (WebInspector.CodeMirrorEditingController.prototype.get popoverPreferredEdges):
        (WebInspector.CodeMirrorEditingController.prototype.popoverTargetFrameWithRects):
        (WebInspector.CodeMirrorEditingController.prototype.presentHoverMenu):
        (WebInspector.CodeMirrorEditingController.prototype.dismissHoverMenu):
        (WebInspector.CodeMirrorEditingController.prototype.popoverWillPresent):
        (WebInspector.CodeMirrorEditingController.prototype.popoverDidPresent):

        (WebInspector.CodeMirrorEditingController.prototype.handleKeydownEvent):
        Event handler for keydown events as registered via the new WebInspector.addWindowKeydownListener() method.

        (WebInspector.CodeMirrorEditingController.prototype.hoverMenuButtonWasPressed):
        (WebInspector.CodeMirrorEditingController.prototype.didDismissPopover):

        * UserInterface/Geometry.js:
        (WebInspector.Rect.unionOfRects):
        (WebInspector.Rect.prototype.unionWithRect):
        New utilities to get a Rect that is the union of the provided Rect or array of Rects.

        (WebInspector.Polygon):
        (WebInspector.Polygon.prototype.bounds):
        New class used to store a list of points for a polygon and get its bounds, used by the HoverMenu class.

        * UserInterface/HoverMenu.css:
        (.hover-menu):
        (.hover-menu > svg):
        (.hover-menu > svg > rect):
        (.hover-menu > img):

        * UserInterface/HoverMenu.js:
        We remove the assumption that a HoverMenu is only used to draw a single rounded rect based on a simple
        Rect and instead support presentation based on an array of Rects where we either:

        - draw a single rounded rectangle if there is only a single Rect provided
        - draw two disconnected open-ended rects if we're provided with two non-overlapping Rects
        - draw a polygon surrounding all provided Rects in all other cases

        No matter how the HoverMenu is drawn, the drawing is performed in SVG with either <rect> or a <path> elements.

        (WebInspector.HoverMenu):
        (WebInspector.HoverMenu.prototype.present):
        (WebInspector.HoverMenu.prototype.dismiss):
        (WebInspector.HoverMenu.prototype.handleEvent):
        (WebInspector.HoverMenu.prototype._handleClickEvent):
        (WebInspector.HoverMenu.prototype._drawOutline):
        (WebInspector.HoverMenu.prototype._addRect):
        (WebInspector.HoverMenu.prototype._addPath):
        (WebInspector.HoverMenu.prototype._drawSingleLine):
        (WebInspector.HoverMenu.prototype._drawTwoNonOverlappingLines):
        (WebInspector.HoverMenu.prototype._drawOverlappingLines):

        * UserInterface/Main.html:
        Link to the new CodeMirrorEditingController class.

        * UserInterface/Main.js:
        Expose a new mechanism to deal with window-level handling of keydown events in order to allow
        a list of handlers to accept or reject dealing with the provided keydown event based on the order
        they were registered, in most recent to oldest registered handler. This allows, for instance, for
        a more graceful handling of the Esc. key being pressed in the CodeMirrorEditingController and
        bypasses the DOM structure allowing for objects managing elements in different DOM hierarchies
        to compete with handling of keydown events.

        (WebInspector.loaded):
        (WebInspector.addWindowKeydownListener):
        (WebInspector.removeWindowKeydownListener):
        (WebInspector._updateWindowKeydownListener):
        (WebInspector._sharedWindowKeydownListener):

        * UserInterface/SourceCodeTextEditor.css:
        (.hover-menu.color > img):
        Update the offset applied to a HoverMenu button based on the change of layout for such buttons which
        are now absolutely positioned in code by HoverMenu rather than being laid out using the flex-box model.

        * UserInterface/SourceCodeTextEditor.js:
        Abstrct away the assumption that only a color editing controller may be used to edit text markers in
        a source code text editor.

        (WebInspector.SourceCodeTextEditor.prototype.hidden):
        Ensure we remove any currently-displayed hover menu for an editing controller when the editor is hidden.
        This would happen in the situation where a keyboard shortcut was used to jump to another part of the
        Web Inspector UI without using the mouse.

        (WebInspector.SourceCodeTextEditor.prototype.contentDidChange):
        Since we're now working with text ranges rather than lines, remove the code where we'd work out a set of
        changed lines and call ._updateEditableMarkers() with the changed range directly instead.

        (WebInspector.SourceCodeTextEditor.prototype._contentDidPopulate):
        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerNewHighlightCandidate):
        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerMouseOutOfHoveredMarker):
        Adopt the more generic method names rather than color-specific ones.

        (WebInspector.SourceCodeTextEditor.prototype._showPopover):
        When showing the popover outside of the use of a CodeMirrorEditingController, such as a JavaScript expression
        when debugging, also deal with the possibility of the highlighted range containing multiple lines rather
        than assume a single line.

        (WebInspector.SourceCodeTextEditor.prototype._updateEditableMarkers):
        More generic method name to support future, non-color editing controllers.

        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedMarkedExpression):
        Find the outermost marker in the list of markers provided such that a marker containing other markers
        shows the UI for the containing marker. For instance, a gradient marker would contain several color
        markers and it's preferable to show the editing UI for the whole gradient rather than a specific color.

        Additionally, adopt more generic ivars and method names to support future, non-color editing controllers.

        (WebInspector.SourceCodeTextEditor.prototype._dismissEditingController):
        Support for new parameter instructing that the editing controller dismissal should be instant rather than
        animated, which is the default. This is useful when, for instance, the text editor is cleared.

        (WebInspector.SourceCodeTextEditor.prototype.editingControllerDidStartEditing):
        (WebInspector.SourceCodeTextEditor.prototype.editingControllerDidFinishEditing):
        Adopt the more generic method names rather than color-specific ones.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.rectsForRange):
        Remove .boundsForRange() in favor of this new method where we return a series of rects so that we may
        draw a more pleasing HoverMenu.

        (WebInspector.TextEditor.prototype.createColorMarkers):
        Use a TextRanger rather than a single line number to match the underlying CodeMirror extension method.

        (WebInspector.TextEditor.prototype.editingControllerForMarker):
        Use the provided TextMarker's type to provide the most adequate CodeMirrorEditingController class.

        * UserInterface/TextMarker.js:
        (WebInspector.TextMarker.prototype.get rects):
        Remove the .bounds property in favor of .rects to match the underlying CodeMirror extension method.

2014-02-20  Antoine Quint  <graouts@webkit.org>

        Web Inspector: Popover should animate its frame to display its refreshed content
        https://bugs.webkit.org/show_bug.cgi?id=129088

        Reviewed by Timothy Hatcher.

        When calling .update(), we now check whether we can animate the change of frame provided the
        new computed frame to best fit the current content still matches the edge the popover uses
        to attach to the target frame. If we find that we can do so, we animate the background frame
        of the popover while ensuring the anchor point remains stable during the animation such that
        only the popover's frame seems to animate.

        * UserInterface/Geometry.js:
        (WebInspector.Rect.prototype.round):
        Returns a new Rect with rounded values, using a floor for the position and a ceil for the size.

        * UserInterface/Main.html:
        Link to the new UnitBezier.js source file.

        * UserInterface/Popover.js:
        (WebInspector.Popover):
        Make ._anchorPoint an ivar such that we don't need to pass a reference to the anchorPoint into
        the various calls leading to an update of the popover's background drawing.

        (WebInspector.Popover.prototype.set frame):
        We no longer round the values of the frame here, instead calling the new .round() method on Rect
        in places where we compute a new frame.

        (WebInspector.Popover.prototype.set content):
        (WebInspector.Popover.prototype.update):
        Update the calls to ._update() to set the new shouldAnimate flag to true in situations where the
        popover is already visible.

        (WebInspector.Popover.prototype._update):
        In the situation where there is a preference to animate the frame, as set by the new shouldAnimate
        parameter, check that we can indeed animate by ensuring that the edge the popover uses to attach to
        the target frame remains the same upon computing the new best metrics for the new content size. If
        we can indeed animate, call _animateFrame(), otherwise set the new frame, anchor point and frame
        drawing discretely like we used to.

        (WebInspector.Popover.prototype._setAnchorPoint):
        New method to ensure we floor the position of the anchor point to ensure, when animating, that the
        anchor point remains stationary.

        (WebInspector.Popover.prototype._animateFrame):
        Using the new UnitBezier class, animate the popover frame from its previous value to its newly computed
        value while ensuring the anchor point remains, at all times, the same absolute position such that it
        remains stationary during the animation. The spline used to animate the frame is the same that a CSS
        transition set with an "ease" timing-function (default value) would use.

        (WebInspector.Popover.prototype._drawBackground):
        (WebInspector.Popover.prototype._drawFrame):
        Adopt new ._edge and ._anchorPoint ivars.

        * UserInterface/UnitBezier.js: Added.
        New class used to perform animations using a timing function specified with a cubic Bézier curve. The code
        is directly adapted from the Source/WebCore/platform/graphics/UnitBezier.h file.

        (WebInspector.UnitBezier):
        (WebInspector.UnitBezier.prototype.solve):
        (WebInspector.UnitBezier.prototype._sampleCurveX):
        (WebInspector.UnitBezier.prototype._sampleCurveY):
        (WebInspector.UnitBezier.prototype._sampleCurveDerivativeX):
        (WebInspector.UnitBezier.prototype._solveCurveX):

2014-02-20  Antoine Quint  <graouts@webkit.org>

        Web Inspector: content using a CSS transition within a popover causes the popover to disappear
        https://bugs.webkit.org/show_bug.cgi?id=129089

        Reviewed by Timothy Hatcher.

        Simply check that the element being transitioned is indeed the popover's container before assuming
        that the "transitonend" received was for a fade-out transition.

        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype.handleEvent):

2014-02-20  Antoine Quint  <graouts@webkit.org>

        Web Inspector: clicking on a color swatch in the Computed styles tab shouldn't show the color editing popover
        https://bugs.webkit.org/show_bug.cgi?id=129093

        Reviewed by Timothy Hatcher.

        If the current editor is read-only, only allow cycling between color types since it wouldn't make sense to edit
        such colors.

        * UserInterface/CSSStyleDeclarationTextEditor.js:

2014-02-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unused InspectorBackend member variable
        https://bugs.webkit.org/show_bug.cgi?id=129053

        Reviewed by Timothy Hatcher.

        * UserInterface/InspectorBackend.js:
        (InspectorBackendClass):
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype.registerEnum):
        (InspectorBackendClass.prototype.registerEvent):

2014-02-19  James Craig  <jcraig@apple.com>

        Web Inspector: AX: clarify reason for ignored state where possible (hidden, default for tag, etc)
        https://bugs.webkit.org/show_bug.cgi?id=129037

        Reviewed by Timothy Hatcher.

        Passing back hidden and ignoredByDefault attrs to clarify some reasons for "ignored" status.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/DOMNode.js:
        * UserInterface/DOMNodeDetailsSidebarPanel.js:

2014-02-18  James Craig  <jcraig@apple.com>

        Web Inspector: AX: more properties: exists, required, and invalid (exists was previously combined with ignored)
        https://bugs.webkit.org/show_bug.cgi?id=128504

        Reviewed by Timothy Hatcher.

        Additions to the accessibility node inspector: exists, required, invalid.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/DOMNode.js:
        * UserInterface/DOMNodeDetailsSidebarPanel.js:

2014-02-18  Antoine Quint  <graouts@webkit.org>

        Web Inspector: editing a color in the Styles sidebar using the color picker only works once for a given color
        https://bugs.webkit.org/show_bug.cgi?id=128965

        Reviewed by Timothy Hatcher.

        Use the WebInspector.TextMarker backing the CodeMirror TextMarker object to inspect its type in
        order to identify color markers that were created for a color. This fixes a regression introduced
        in http://webkit.org/b/125695 when we abstracted CodeMirror TextMarker objects.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._colorSwatchClicked.updateCodeMirror.update):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._colorSwatchClicked.updateCodeMirror):

2014-02-18  Antoine Quint  <graouts@webkit.org>

        Web Inspector: Editing transparent color shows incorrect opacity slider
        https://bugs.webkit.org/show_bug.cgi?id=128975

        Reviewed by Joseph Pecoraro.

        The opacity slider should show a range of colors from transparent to the full opacity of the tinted color.

        * UserInterface/ColorPicker.js:
        (WebInspector.ColorPicker.prototype._updateSliders):

2014-02-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: shift-clicking #fff swatch results in bad rgb value
        https://bugs.webkit.org/show_bug.cgi?id=128954

        Reviewed by Daniel Bates.

        parseInt("FF", 16) is already 255. Do not multiply the result by 255.

        * UserInterface/Color.js:
        (WebInspector.Color.fromString):

2014-02-18  Antoine Quint  <graouts@webkit.org>

        Web Inspector: color picker sliders sometime look wrong on Retina display
        https://bugs.webkit.org/show_bug.cgi?id=128963

        Reviewed by Timothy Hatcher.

        Round the values used to position and size popovers in order to ensure that their content don't suffer
        from poor pixel alignment on Retina displays.

        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype.set frame):

2014-02-17  Antoine Quint  <graouts@webkit.org>

        Web Inspector: CSS selectors containing a color name shouldn't be considered for color editing
        https://bugs.webkit.org/show_bug.cgi?id=128909

        Reviewed by Joseph Pecoraro.

        Disregard any text that might be contained within a CSS selector.

        * UserInterface/CodeMirrorAdditions.js:

2014-02-15  Chris J. Shull  <chrisjshull@gmail.com>

        Web Inspector: scope chain details sidebar doesn't update values modified via console
        https://bugs.webkit.org/show_bug.cgi?id=126855

        Reviewed by Timothy Hatcher.

        Add a RuntimeManager event that the scope chain details sidebar can
        listen to to trigger refresh.

        Testing on this is blocked by http://webkit.org/b/128724
        (Web Inspector: Issue testing breakpoints).

        * UserInterface/RuntimeManager.js:
        (WebInspector.RuntimeManager.prototype.evalCallback):
        (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow):
        * UserInterface/ScopeChainDetailsSidebarPanel.js:
        (WebInspector.ScopeChainDetailsSidebarPanel):

2014-02-14  Antoine Quint  <graouts@webkit.org>

        Web Inspector: color wheel should support Retina displays
        https://bugs.webkit.org/show_bug.cgi?id=124355

        Reviewed by Timothy Hatcher.

        Take into account the devicePixelRatio in order to draw the color wheel
        with as many colors as we can draw with the current DPI and to correctly
        convert from page coordinates to canvas coordinates when dealing with
        mouse events.

        * UserInterface/ColorWheel.js:
        (WebInspector.ColorWheel.prototype.set dimension):
        (WebInspector.ColorWheel.prototype.get tintedColor):
        (WebInspector.ColorWheel.prototype.get rawColor):
        (WebInspector.ColorWheel.prototype._drawRawCanvas):
        (WebInspector.ColorWheel.prototype._colorAtPointWithBrightness):
        (WebInspector.ColorWheel.prototype._drawTintedCanvas):
        (WebInspector.ColorWheel.prototype._draw):

2014-02-13  Brian Burg  <bburg@apple.com>

        Web Inspector: DataGrid should support editing tables with arbitrary columns
        https://bugs.webkit.org/show_bug.cgi?id=128619

        Reviewed by Timothy Hatcher.

        The data grid editing code should work with any columns, but was previously
        hardcoded with the column identifiers used by DOMStorageView. This patch
        makes the editing code work with any column identifiers. It also fixes some
        bugs in previous/next navigation during data entry.

        * UserInterface/DOMStorageContentView.css: Highlight missing keys and values.
        (.content-view.dom-storage > .data-grid tr.missing-value td.value-column):
        (.content-view.dom-storage > .data-grid:focus tr.selected.missing-value td.value-column):

        * UserInterface/DOMStorageContentView.js: Don't blow away the entire table
        whenever the backend notifies us of an update to the storage object. This
        caused the editing state to be destroyed when values were entered interactively.

        (WebInspector.DOMStorageContentView.prototype.reset): Inline the callback
        passed to DOMStorageObject.getEntries().
        (WebInspector.DOMStorageContentView.prototype.itemsCleared):
        (WebInspector.DOMStorageContentView.prototype.itemAdded): Request a sort
        of the table rows after backend tells us about item additions or updates.

        (WebInspector.DOMStorageContentView.prototype.itemUpdated): Request a sort
        of the table rows after backend tells us about item additions or updates.

        (WebInspector.DOMStorageContentView.prototype._sortDataGrid): Use DataGrid's
        built-in sorting function.

        (WebInspector.DOMStorageContentView.prototype._deleteCallback):
        (WebInspector.DOMStorageContentView.prototype._editingCallback): Don't force
        recreation of the entire table whenever editing finishes. Perform most
        of the error checking and editing logic here, including when to insert a
        new placeholder row, and when to commit the entered values to DOM storage.

        * UserInterface/DOMStorageObject.js: Keep track of the DOM storage entries
        in the model so we can detect duplicate entries. Remove unused `id` arguments.

        (WebInspector.DOMStorageObject):
        (WebInspector.DOMStorageObject.prototype.get entries):
        (WebInspector.DOMStorageObject.prototype.itemsCleared):
        (WebInspector.DOMStorageObject.prototype.itemRemoved):
        (WebInspector.DOMStorageObject.prototype.set this):
        (WebInspector.DOMStorageObject.prototype.itemAdded):
        (WebInspector.DOMStorageObject.prototype.set var):
        (WebInspector.DOMStorageObject.prototype.itemUpdated):

        * UserInterface/DataGrid.js:
        (.sortDataGrid):
        (WebInspector.DataGrid.createSortableDataGrid): Use the built-in DataGrid
        sortNodes() implementation.
        (WebInspector.DataGrid.prototype._startEditingNodeAtColumnIndex): Renamed
        from _startEditingColumnOfDataGridNode. It's easier to understand the navigation
        code when presented in terms of adjusting column indexes rather than identifiers.

        (WebInspector.DataGrid.prototype._startEditing):
        (WebInspector.DataGrid.prototype.determineNextCell): Added. Decides which
        column and row to edit next and whether the table can be sorted before the
        next cell edit begins.

        (WebInspector.DataGrid.prototype.moveToNextCell): Added. Wrapper method for
        the above which handles sorting and beginning the next cell edit.

        (WebInspector.DataGrid.prototype._editingCommitted): Use better helper methods.
        (WebInspector.DataGrid.prototype._editingCancelled): Add an assert.
        (WebInspector.DataGrid.prototype.get sortColumnIdentifier): Shorten.
        (WebInspector.DataGrid.prototype.addPlaceholderNode):
        (WebInspector.DataGrid.prototype.removeChild):
        (WebInspector.DataGrid.prototype.):
        (WebInspector.DataGrid.prototype.sortNodes): Remove unecessary copying
        of all nodes into a separate array. Defer sorting if the user is in the
        middle of editing a cell. Make placeholder nodes always sort to the bottom
        regardless of the sort column identifier and sort direction.

        (WebInspector.DataGridNode.prototype._attach):
        (WebInspector.PlaceholderDataGridNode): Renamed from CreationDataGridNode.
        (WebInspector.PlaceholderDataGridNode.prototype.makeNormal):

        * UserInterface/StorageManager.js: Don't pass unused id argument.
        (WebInspector.StorageManager.prototype.itemRemoved):
        (WebInspector.StorageManager.prototype.itemAdded):
        (WebInspector.StorageManager.prototype.itemUpdated):

2014-02-13  Brian Burg  <bburg@apple.com>

        Web Inspector: long script names should be have text-overflow:ellipsis in probe details sidebar
        https://bugs.webkit.org/show_bug.cgi?id=128550

        Reviewed by Timothy Hatcher.

        Make the link element 'display: block', place it after the floated icons,
        and set the appropriate CSS overflow properties.

        * UserInterface/ProbeDetailsSidebarPanel.css:
        (.details-section.probe-set .options > a.go-to-link):
        * UserInterface/ProbeSetDetailsSection.js:
        (WebInspector.ProbeSetDetailsSection):

2014-02-13  Javier Fernandez  <jfernandez@igalia.com>

        [CSS Grid Layout] Rename named areas property
        https://bugs.webkit.org/show_bug.cgi?id=127990

        Reviewed by Sergio Villar Senin.

        From Blink r165891 by <rego@igalia.com>

        The property 'grid-template' has been renamed to 'grid-template-areas'
        in the last two versions of the spec.

        * Tools/PrettyPrinting/css.js:
        * UserInterface/External/CodeMirror/css.js:

2014-02-11  Brian Burg  <bburg@apple.com>

        Web Inspector: DOMStorageView should listen for events from DOMStorageObject
        https://bugs.webkit.org/show_bug.cgi?id=128620

        Reviewed by Timothy Hatcher.

        The storage manager used to have a map of DOMStorageViews and delivered events
        directly to them. Instead, the DOMStorageObserver should use the manager to
        find the appropriate DOMStorageObject and deliver events to it. DOMStorageView
        learns about storage updates from DOMStorageObject events.

        * UserInterface/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView): Add event listeners.
        (WebInspector.DOMStorageContentView.prototype.reset): Renamed from update().
        (WebInspector.DOMStorageContentView.prototype.itemsCleared): Take an event argument.
        (WebInspector.DOMStorageContentView.prototype.itemRemoved): Take an event argument.
        Use for..of when iterating over nodes.
        (WebInspector.DOMStorageContentView.prototype.itemAdded): Take an event argument.
        Use for..of when iterating over nodes.
        (WebInspector.DOMStorageContentView.prototype.itemUpdated): Take an event argument.
        Use for..of when iterating over nodes.
        * UserInterface/DOMStorageObject.js:
        (WebInspector.DOMStorageObject.prototype.removeItem): Moved.
        (WebInspector.DOMStorageObject.prototype.setItem): Moved.
        (WebInspector.DOMStorageObject.prototype.itemsCleared): Added.
        (WebInspector.DOMStorageObject.prototype.itemRemoved): Added.
        (WebInspector.DOMStorageObject.prototype.itemAdded): Added.
        (WebInspector.DOMStorageObject.prototype.itemUpdated): Added.
        * UserInterface/DOMStorageObserver.js: Look up and notify the associated model.
        (WebInspector.DOMStorageObserver.prototype.domStorageItemsCleared):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemRemoved):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemAdded):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemUpdated):
        * UserInterface/StorageManager.js: Remove view lookup code. Remove
        direct calls to DOMStorageViews.
        (WebInspector.StorageManager.prototype.itemsCleared):
        (WebInspector.StorageManager.prototype.itemRemoved):
        (WebInspector.StorageManager.prototype.itemAdded):
        (WebInspector.StorageManager.prototype.itemUpdated):
        (WebInspector.StorageManager.prototype.domStorageWasUpdated):
        (WebInspector.StorageManager.prototype.inspectDOMStorage):
        (WebInspector.StorageManager.prototype._domStorageForIdentifier):
        (WebInspector.StorageManager.prototype._addDOMStorageIfNeeded):
        (WebInspector.StorageManager.prototype._databaseForIdentifier):

2014-02-11  James Craig  <jcraig@apple.com>

        Web Inspector: AX: Accessibility Node Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127447

        Reviewed by Timothy Hatcher.

        New Accessibility section in WebInspector Node Inspector.
        Version 1.0 only shows computed role. Computed label should come soon.

        Removed CSS fixed table layout b/c CSS bug: http://webkit.org/b/128294

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/DOMNode.js:
        * UserInterface/DOMNodeDetailsSidebarPanel.js:
        * UserInterface/DetailsSection.css:
        * UserInterface/InspectorWebBackendCommands.js:

2014-02-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update License copyrights in minified JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=128547

        Reviewed by Timothy Hatcher.

        * Scripts/copy-user-interface-resources.sh:

2014-02-07  Brian Burg  <bburg@apple.com>

        Web Inspector: show probe sets for script content views in the details sidebar
        https://bugs.webkit.org/show_bug.cgi?id=128333

        Reviewed by Timothy Hatcher.

        This patch adds a new details sidebar for showing the probes associated with any
        breakpoint in the currently visible source file. Each probe set (corresponding to
        multiple actions of single breakpoint) gets its own ProbeSetDetailsSection. The
        section contains a custom DataGrid subclass to display probe data, and some icons
        for clearing samples, deleting the probe, and adding a new probe expression.

        The table containing probe data keeps its columns in sync with the probe set's
        probe expressions. To support this, DataGrid has been further refactored to support
        removing columns, and inserting columns (rather than only appending). With this
        capability, probe columns are removed and re-inserted when the expression changes.

        The availability of the probe details sidebar is controlled by providing the
        probe sets matching the script content view's resource URL as supplemental
        represented objects.

        Lastly, added the utility EventListenerSet class. This holds a set of event listeners
        that should be added and removed together, and takes care of binding `thisObject`
        according to whether the event emitter is a `Node` or `WebInspector.Object`.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/BreakpointActionView.js:
        (WebInspector.BreakpointActionView):
        (WebInspector.BreakpointActionView.prototype._removeAction): Renamed from removeButtonClicked.
        (WebInspector.BreakpointActionView.prototype._codeMirrorBlurred): Change the behavior
        of CodeMirror-backed editors for probe and evaluate expression actions. If the expression
        consists entirely of trimmable whitespace, then delete the action rather than saving it.

        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid): Copy over the column data into a map inside insertColumn() instead.
        (WebInspector.DataGrid.prototype.insertColumn): Renamed from addColumn. It now takes an
        optional `insertionIndex` argument and splices the column before the element at that index.
        Also, convert code to use EventListenerSet for adding/removing per-column event listeners.

        (WebInspector.DataGrid.prototype.removeColumn): Added. It splices the column out.
        (WebInspector.DataGridNode.prototype.isEventWithinDisclosureTriangle): Whitespace.
        * UserInterface/EventListenerSet.js: Added.
        (WebInspector.EventListenerSet):
        (WebInspector.EventListenerSet.prototype.register):
        (WebInspector.EventListenerSet.prototype.unregister):
        (WebInspector.EventListenerSet.prototype.install):
        (WebInspector.EventListenerSet.prototype.uninstall):
        * UserInterface/Images/NavigationItemProbes.pdf: Added.
        * UserInterface/LayerTreeDataGrid.js:
        (WebInspector.LayerTreeDataGrid.prototype._updateChildren): Fix a missing column.get().
        * UserInterface/Main.html: Add new JavaScript and CSS files.
        * UserInterface/Main.js:
        (WebInspector.contentLoaded): Add the probe details sidebar.
        * UserInterface/ProbeDetailsSidebarPanel.css: Added.
        (.sidebar > .panel.probes > .navigation-bar):
        (.sidebar > .panel.probes > .content):
        (.details-section.probe-set .options > .probe-add):
        (.details-section.probe-set .options > .probe-clear-samples):
        (.details-section.probe-set .options > .probe-remove):
        (.details-section.probe-set .options > input):
        (.panel.probes ::-webkit-scrollbar):
        (.panel.probes ::-webkit-scrollbar-track):
        (.panel.probes ::-webkit-scrollbar-thumb):
        (.panel.probes ::-webkit-scrollbar-corner):
        (.popover .probe-popover):
        (.popover .probe-popover input):
        * UserInterface/ProbeDetailsSidebarPanel.js: Added.
        (WebInspector.ProbeDetailsSidebarPanel):
        (WebInspector.ProbeDetailsSidebarPanel.prototype.get inspectedProbeSets):
        (WebInspector.ProbeDetailsSidebarPanel.prototype._probeSetAdded):
        * UserInterface/ProbeManager.js: Remove unused `probeSetForBreakpoint` function.
        * UserInterface/ProbeSet.js: Fix erroneous uses of `probe.identifier` instead of `probe.id`.
        (WebInspector.ProbeSet.prototype.removeProbe):
        (WebInspector.ProbeSet.prototype._sampleCollected):
        * UserInterface/ProbeSetDataGrid.css: Added.
        (.details-section.probe-set .data-grid .data-container tr.past-value td):
        (.details-section.probe-set .data-grid > .data-container td.unknown-value):
        (.details-section.probe-set .data-grid .data-container tr.revealed.highlighted):
        (@-webkit-keyframes blink-frame-highlight):
        (100%):
        (.details-section.probe-set .data-grid .data-container tr.separator):
        (.details-section.probe-set .data-grid > .data-container tr.data-updated):
        (@-webkit-keyframes blink-probe-frame):
        (.details-section.probe-set .data-grid .data-container .selected .section *):
        (.details-section.probe-set .data-grid .data-container .selected td.unknown-value):
        (.details-section.probe-set .data-grid .data-container .section):
        (.details-section.probe-set .data-grid th):
        (.details-section.probe-set .data-grid th:not(:last-child)):
        (.details-section.probe-set .data-grid td):
        * UserInterface/ProbeSetDataGrid.js: Added.
        (WebInspector.ProbeSetDataGrid):
        (WebInspector.ProbeSetDataGrid.prototype.closed):
        (WebInspector.ProbeSetDataGrid.prototype._setupProbe):
        (WebInspector.ProbeSetDataGrid.prototype._teardownProbe):
        (WebInspector.ProbeSetDataGrid.prototype._setupData):
        (WebInspector.ProbeSetDataGrid.prototype._teardownData):
        (WebInspector.ProbeSetDataGrid.prototype._updateNodeForFrame.else.sortFunction):
        (WebInspector.ProbeSetDataGrid.prototype._updateNodeForFrame.else.set node):
        (WebInspector.ProbeSetDataGrid.prototype._dataFrameInserted):
        (WebInspector.ProbeSetDataGrid.prototype._dataSeparatorInserted):
        (WebInspector.ProbeSetDataGrid.prototype._probeExpressionChanged.get var):
        * UserInterface/ProbeSetDataGridNode.js: Added.
        (WebInspector.ProbeSetDataGridNode):
        (WebInspector.ProbeSetDataGridNode.prototype.get element):
        (WebInspector.ProbeSetDataGridNode.prototype.get data):
        (WebInspector.ProbeSetDataGridNode.prototype.set frame):
        (WebInspector.ProbeSetDataGridNode.prototype.get frame):
        (WebInspector.ProbeSetDataGridNode.prototype.createCellContent):
        (WebInspector.ProbeSetDataGridNode.prototype.updateCellsFromFrame):
        (WebInspector.ProbeSetDataGridNode.prototype.updateCellsForSeparator):
        * UserInterface/ProbeSetDataTable.js:
        (WebInspector.ProbeSetDataTable.prototype.removeProbe): Fix a typo in for..of loop refactor.
        * UserInterface/ProbeSetDetailsSection.js: Added.
        (WebInspector.ProbeSetDetailsSection):
        (WebInspector.ProbeSetDetailsSection.prototype.closed):
        (WebInspector.ProbeSetDetailsSection.prototype._probeSetPositionTextOrLink):
        (WebInspector.ProbeSetDetailsSection.prototype._addProbeButtonClicked):
        (WebInspector.ProbeSetDetailsSection.prototype._removeButtonClicked):
        (WebInspector.ProbeSetDetailsSection.prototype._clearSamplesButtonClicked):
        * UserInterface/TextResourceContentView.js:
        (WebInspector.TextResourceContentView):
        (WebInspector.TextResourceContentView.prototype.get supplementalRepresentedObjects):
        Add probe sets whose breakpoint matches the represented object's URL.
        (WebInspector.TextResourceContentView.prototype._probeSetsChanged): Tell listeners
        to re-fetch `supplementalRepresentedObjects` when probe sets are added or removed.

2014-02-08  Dan Bernstein  <mitz@apple.com>

        Remove client-drawn highlights (-webkit-highlight, WebHTMLHighlighter)
        https://bugs.webkit.org/show_bug.cgi?id=128456

        Reviewed by Anders Carlsson.

        * UserInterface/CSSKeywordCompletions.js: Removed -webkit-highlight.

2014-02-07  Brian Burg  <bburg@apple.com>

        Web Inspector: Clean up DataGrid and add table columns incrementally
        https://bugs.webkit.org/show_bug.cgi?id=128332

        Reviewed by Timothy Hatcher.

        Miscellaneous improvements to DataGrid to make it more maintainable.
        In particular, it now uses a `Map` to store column settings, and the
        construction sequence has been simplified so that it is safe to add
        columns at the end of the constructor (or any later time).

        DataGrid stores a bunch of settings per-column, but before this was done
        by both storing properties on the provided `column` objects as well as
        keeping several `columnIdentifier`-keyed maps for properties like `group`
        and `hidden`.

        Improve code readability by using for..of loops, destructuring assignment,
        `Node.createElement`, and updating variable names. All variables that refer
        to DOM nodes now have a `Element` suffix to distinguish them from model objects.

        * UserInterface/DataGrid.js:
        (.sortDataGrid):
        (WebInpector.DataGrid): Create all DOM elements before populating columns.
        Remove redundant objects for storing per-column values. Copy column settings
        into a map rather than mutating the passed-in JSON-like settings data structure.

        (WebInspector.DataGrid.createSortableDataGrid):
        (WebInspector.DataGrid.prototype.get length):
        (WebInspector.DataGrid.prototype.updateLayout):
        (WebInspector.DataGrid.prototype.get scrollContainer):
        (WebInspector.DataGrid.prototype.isScrolledToLastRow):
        (WebInspector.DataGrid.prototype.scrollToLastRow):
        (WebInspector.DataGrid.prototype._positionResizerElements):
        (WebInspector.DataGrid.prototype.addCreationNode):
        (WebInspector.DataGrid.prototype.):
        (WebInspector.DataGrid.prototype.sortNodes):
        (WebInspector.DataGrid.prototype.dataGridNodeFromPoint):
        (WebInspector.DataGrid.prototype._clickInHeaderCell):
        (WebInspector.DataGrid.prototype.isColumnSortColumn):
        (WebInspector.DataGrid.prototype.headerTableHeader):
        (WebInspector.DataGrid.prototype._copyTextForDataGridNode):
        (WebInspector.DataGrid.prototype._resizerDragging):
        (WebInspector.DataGridNode.prototype.createCells):
        (WebInspector.DataGridNode.prototype.createCell.get var):
        (WebInspector.DataGridNode.prototype.elementWithColumnIdentifier):
        (WebInspector.DataGridNode.prototype._attach):
        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters.scopeBar.this.columns.get scopeBar):
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters):

2014-02-07  Mihai Tica  <mitica@adobe.com>

        [CSS Background Blending] Unprefix the -webkit-background-blend-mode property

        https://bugs.webkit.org/show_bug.cgi?id=128270

        Reviewed by Dean Jackson.

        * UserInterface/CSSKeywordCompletions.js: Refactor -webkit-background-blend-mode to background-blend-mode.

2014-02-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Console support to JSContext Inspection
        https://bugs.webkit.org/show_bug.cgi?id=127941

        Reviewed by Geoffrey Garen.

        * UserInterface/InspectorJSBackendCommands.js:
        * UserInterface/InspectorWebBackendCommands.js:
        ConsoleAgent moved to JavaScript section.

2014-02-06  Andreas Kling  <akling@apple.com>

        Remove display:run-in support.
        <https://webkit.org/b/127874>
        <rdar://problem/15926949>

        Rubber-stamped by Anders Carlsson.

        * UserInterface/CSSKeywordCompletions.js:
        * UserInterface/External/CodeMirror/css.js:

2014-02-05  Brian Burg  <bburg@apple.com>

        Web Inspector: add probe manager and model objects to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=127117

        Reviewed by Timothy Hatcher.

        Add the probe manager, and the following model objects:

        - ProbeObject corresponds to a single probe breakpoint action.
        - ProbeSetObject contains all ProbeObjects for one Breakpoint.
        - ProbeSetDataFrame holds probe samples from multiple
        probes fired from the same breakpoint hit/debugger pause.
        - ProbeSetDataTable keeps track of multiple such data frames
        and manages probe sample lifetimes across page navigations.

        The probe manager updates probe model objects whenever breakpoints
        are added, removed, or modified.

        The inspector frontend now assigns breakpoint action identifiers,
        rather than the backend. This lets ProbeObjects keep stable
        identifiers that match the probe's samples, even when the underlying
        breakpoint is re-added with a different identifier (such as when
        editing probe expressions).

        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.get probeActions): Added.
        (WebInspector.Breakpoint.prototype.createAction):
        (WebInspector.Breakpoint.prototype.removeAction):
        (WebInspector.Breakpoint.prototype.clearActions): Added.
        * UserInterface/BreakpointAction.js:
        (WebInspector.BreakpointAction):
        (WebInspector.BreakpointAction.prototype.get id):
        (WebInspector.BreakpointAction.prototype.get info):
        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.restoreBreakpointsSoon):
        (WebInspector.DebuggerManager): Restore saved breakpoints
        from cookies on the second run loop, so that all managers will
        be able to received breakpoint added events.
        (WebInspector.DebuggerManager.prototype.addBreakpoint):
        (WebInspector.DebuggerManager.prototype.removeBreakpoint):
        (WebInspector.DebuggerManager.prototype.get nextBreakpointActionIdentifier):
        The debugger manager assigns unique breakpoint action identifiers with this getter.

        (WebInspector.DebuggerManager.prototype._debuggerBreakpointActionType):
        (WebInspector.DebuggerManager.prototype.didSetBreakpoint):
        (WebInspector.DebuggerManager.prototype._setBreakpoint):
        (WebInspector.DebuggerManager.prototype.didRemoveBreakpoint):
        (WebInspector.DebuggerManager.prototype._removeBreakpoint):
        * UserInterface/DebuggerObserver.js:
        (WebInspector.DebuggerObserver.prototype.didSampleProbe):
        * UserInterface/InspectorJSBackendCommands.js:
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.loaded):
        * UserInterface/Probe.js: Added.
        (WebInspector.ProbeSample):
        (WebInspector.Probe):
        (WebInspector.Probe.prototype.get id):
        (WebInspector.Probe.prototype.get breakpoint):
        (WebInspector.Probe.prototype.get expression):
        (WebInspector.Probe.prototype.set expression):
        (WebInspector.Probe.prototype.get samples):
        (WebInspector.Probe.prototype.clearSamples):
        (WebInspector.Probe.prototype.addSample):
        * UserInterface/ProbeManager.js: Added.
        (WebInspector.ProbeManager):
        (WebInspector.ProbeManager.prototype.probeSetForBreakpoint):
        (WebInspector.ProbeManager.prototype._breakpointRemoved):
        (WebInspector.ProbeManager.prototype._breakpointActionsChanged.get var):
        (WebInspector.ProbeManager.prototype._breakpointActionsChanged.set get knownProbeIdentifiers):
        (WebInspector.ProbeManager.prototype._breakpointActionsChanged):
        * UserInterface/ProbeSet.js: Added.
        (WebInspector.ProbeSet):
        (WebInspector.ProbeSet.prototype.get breakpoint):
        (WebInspector.ProbeSet.prototype.get probes):
        (WebInspector.ProbeSet.prototype.get dataTable):
        (WebInspector.ProbeSet.prototype.clear):
        (WebInspector.ProbeSet.prototype.clearSamples):
        (WebInspector.ProbeSet.prototype.createProbe):
        (WebInspector.ProbeSet.prototype.removeProbe):
        (WebInspector.ProbeSet.prototype.willRemove):
        (WebInspector.ProbeSet.prototype._mainResourceChanged):
        (WebInspector.ProbeSet.prototype._createDataTable):
        (WebInspector.ProbeSet.prototype._sampleCollected):
        (WebInspector.ProbeSet.prototype._breakpointResolvedStateDidChange):
        * UserInterface/ProbeSetDataFrame.js: Added.
        (WebInspector.ProbeSetDataFrame):
        (WebInspector.ProbeSetDataFrame.compare):
        (WebInspector.ProbeSetDataFrame.prototype.get key):
        (WebInspector.ProbeSetDataFrame.prototype.get count):
        (WebInspector.ProbeSetDataFrame.prototype.get index):
        (WebInspector.ProbeSetDataFrame.prototype.get isSeparator):
        (WebInspector.ProbeSetDataFrame.prototype.set isSeparator):
        (WebInspector.ProbeSetDataFrame.prototype.addSampleForProbe):
        (WebInspector.ProbeSetDataFrame.prototype.missingKeys):
        (WebInspector.ProbeSetDataFrame.prototype.isComplete):
        (WebInspector.ProbeSetDataFrame.prototype.fillMissingValues):
        * UserInterface/ProbeSetDataTable.js: Added.
        (WebInspector.ProbeSetDataTable):
        (WebInspector.ProbeSetDataTable.prototype.get frames):
        (WebInspector.ProbeSetDataTable.prototype.get separators):
        (WebInspector.ProbeSetDataTable.prototype.willRemove):
        (WebInspector.ProbeSetDataTable.prototype.mainResourceChanged):
        (WebInspector.ProbeSetDataTable.prototype.addSampleForProbe):
        (WebInspector.ProbeSetDataTable.prototype.addProbe):
        (WebInspector.ProbeSetDataTable.prototype.removeProbe):
        (WebInspector.ProbeSetDataTable.prototype.createFrame):
        (WebInspector.ProbeSetDataTable.prototype.addFrame):
        (WebInspector.ProbeSetDataTable.prototype.addSeparator):

2014-02-05  Zan Dobersek  <zdobersek@igalia.com>

        [GTK] Avoid no-op regenerations of GResourceBundle.xml, GResourceBundle.c
        https://bugs.webkit.org/show_bug.cgi?id=128192

        Reviewed by Carlos Garcia Campos.

        When doing incremental builds, GResourceBundle.xml and GResourceBundle.c can be
        generated when the dependencies are newer than the products, but the generation
        doesn't necessarily produce a new or different product. This results in constant
        regenerations for these two build targets. Touch the products at the end of
        generation to avoid this looping.

        * GNUmakefile.am:

2014-01-30  Timothy Hatcher  <timothy@apple.com>

        Show profile data in the discrete Scripts timeline view.

        https://bugs.webkit.org/show_bug.cgi?id=127900

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/DataGrid.js:
        (WebInspector.DataGridNode.prototype.refreshIfNeeded):
        (WebInspector.DataGridNode.prototype.needsRefresh):
        (WebInspector.DataGridNode.prototype.set data):
        (WebInspector.DataGridNode.prototype.set revealed):
        (WebInspector.DataGridNode.prototype.refresh):
        * UserInterface/LayoutTimelineDataGrid.js:
        (WebInspector.LayoutTimelineDataGrid):
        * UserInterface/LayoutTimelineDataGridNode.js:
        (WebInspector.LayoutTimelineDataGridNode.prototype.createCellContent):
        * UserInterface/Main.html:
        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype._updateFilter):
        (WebInspector.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        (WebInspector.NavigationSidebarPanel.prototype._generateStyleRulesIfNeeded):
        * UserInterface/ProfileNodeDataGridNode.js: Added.
        (WebInspector.ProfileNodeDataGridNode):
        (WebInspector.ProfileNodeDataGridNode.prototype.get profileNode):
        (WebInspector.ProfileNodeDataGridNode.prototype.get records):
        (WebInspector.ProfileNodeDataGridNode.prototype.get baseStartTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.get rangeStartTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.set rangeStartTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.get rangeEndTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.set rangeEndTime):
        (WebInspector.ProfileNodeDataGridNode.prototype.get data):
        (WebInspector.ProfileNodeDataGridNode.prototype.refresh):
        (WebInspector.ProfileNodeDataGridNode.prototype.createCellContent):
        * UserInterface/ProfileNodeTreeElement.js: Added.
        (WebInspector.ProfileNodeTreeElement):
        (WebInspector.ProfileNodeTreeElement.prototype.get profileNode):
        (WebInspector.ProfileNodeTreeElement.prototype.get filterableData):
        (WebInspector.ProfileNodeTreeElement.prototype.onattach):
        (WebInspector.ProfileNodeTreeElement.prototype.onpopulate):
        * UserInterface/ResourceTimelineDataGridNode.js:
        (WebInspector.ResourceTimelineDataGridNode.prototype.createCellContent):
        * UserInterface/ScriptTimelineDataGrid.js:
        (WebInspector.ScriptTimelineDataGrid):
        * UserInterface/ScriptTimelineDataGridNode.js:
        (WebInspector.ScriptTimelineDataGridNode):
        (WebInspector.ScriptTimelineDataGridNode.prototype.get baseStartTime):
        (WebInspector.ScriptTimelineDataGridNode.prototype.get rangeStartTime):
        (WebInspector.ScriptTimelineDataGridNode.prototype.set rangeStartTime):
        (WebInspector.ScriptTimelineDataGridNode.prototype.get rangeEndTime):
        (WebInspector.ScriptTimelineDataGridNode.prototype.set rangeEndTime):
        (WebInspector.ScriptTimelineDataGridNode.prototype.get data):
        (WebInspector.ScriptTimelineDataGridNode.prototype.createCellContent):
        * UserInterface/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord):
        (WebInspector.ScriptTimelineRecord.prototype.get profile):
        * UserInterface/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype.updateLayout):
        (WebInspector.ScriptTimelineView.prototype.get selectionPathComponents):
        (WebInspector.ScriptTimelineView.prototype.dataGridNodeForTreeElement):
        (WebInspector.ScriptTimelineView.prototype.populateProfileNodeTreeElement):
        (WebInspector.ScriptTimelineView.prototype._processPendingRecords):
        (WebInspector.ScriptTimelineView.prototype._treeElementSelected):
        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype.matchTreeElementAgainstCustomFilters):
        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid):
        (WebInspector.TimelineDataGrid.prototype.addRowInSortOrder):
        (WebInspector.TimelineDataGrid.prototype._sort):
        * UserInterface/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode):
        (WebInspector.TimelineDataGridNode.prototype.collapse):
        (WebInspector.TimelineDataGridNode.prototype.expand):
        * UserInterface/TimelineRecord.js:
        * UserInterface/TreeOutlineDataGridSynchronizer.js:
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.get delegate):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.dataGridNodeForTreeElement):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementAdded):

2014-01-30  Timothy Hatcher  <timothy@apple.com>

        Add the model objects for the new Web Inspector profile data.

        https://bugs.webkit.org/show_bug.cgi?id=127899

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/Profile.js: Added.
        (WebInspector.Profile):
        (WebInspector.Profile.prototype.get idleTime):
        (WebInspector.Profile.prototype.get topDownRootNodes):
        (WebInspector.Profile.prototype.get bottomUpRootNodes):
        * UserInterface/ProfileNode.js: Added.
        (WebInspector.ProfileNode):
        (WebInspector.ProfileNode.prototype.get id):
        (WebInspector.ProfileNode.prototype.get type):
        (WebInspector.ProfileNode.prototype.get functionName):
        (WebInspector.ProfileNode.prototype.get sourceCodeLocation):
        (WebInspector.ProfileNode.prototype.get startTime):
        (WebInspector.ProfileNode.prototype.get endTime):
        (WebInspector.ProfileNode.prototype.get selfTime):
        (WebInspector.ProfileNode.prototype.get totalTime):
        (WebInspector.ProfileNode.prototype.get calls):
        (WebInspector.ProfileNode.prototype.get previousSibling):
        (WebInspector.ProfileNode.prototype.get nextSibling):
        (WebInspector.ProfileNode.prototype.get parentNode):
        (WebInspector.ProfileNode.prototype.get childNodes):
        (WebInspector.ProfileNode.prototype.totalTimeInRange):
        (WebInspector.ProfileNode.prototype.computeCallInfoForTimeRange):
        (WebInspector.ProfileNode.prototype.traverseNextProfileNode):
        (WebInspector.ProfileNode.prototype.saveIdentityToCookie):
        (WebInspector.ProfileNode.prototype.establishRelationships):
        * UserInterface/ProfileNodeCall.js: Added.
        (WebInspector.ProfileNodeCall):
        (WebInspector.ProfileNodeCall.prototype.get startTime):
        (WebInspector.ProfileNodeCall.prototype.get totalTime):
        (WebInspector.ProfileNodeCall.prototype.get endTime):
        (WebInspector.ProfileNodeCall.prototype.establishRelationships):
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        (WebInspector.TimelineManager.prototype._profileFromPayload.profileNodeFromPayload):
        (WebInspector.TimelineManager.prototype._profileFromPayload.profileNodeCallFromPayload):
        (WebInspector.TimelineManager.prototype._profileFromPayload):

2014-01-26  Timothy Hatcher  <timothy@apple.com>

        Prefix existing Web Inspector profiler classes with "Legacy".

        Remove a dependency on ProfileView for showTimeAsPercent and selection as a drive-by.
        Also remove the unfinished Canvas profiler classes, they will need redone for the Timeline view.

        https://bugs.webkit.org/show_bug.cgi?id=127655

        Reviewed by Joseph Pecoraro.

        * UserInterface/CanvasDataGridNode.js: Removed.
        * UserInterface/CanvasObserver.js: Removed.
        * UserInterface/CanvasProfileObject.js: Removed.
        * UserInterface/CanvasProfileType.js: Removed.
        * UserInterface/CanvasProfileView.js: Removed.
        * UserInterface/ConsoleObserver.js:
        (WebInspector.ConsoleObserver.prototype.messageAdded):
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.isProfilingJavaScript):
        (InspectorFrontendAPI.startProfilingJavaScript):
        (InspectorFrontendAPI.stopProfilingJavaScript):
        * UserInterface/LegacyBottomUpProfileDataGridTree.js: Renamed from Source/WebInspectorUI/UserInterface/BottomUpProfileDataGridTree.js.
        * UserInterface/LegacyJavaScriptProfileObject.js: Renamed from Source/WebInspectorUI/UserInterface/JavaScriptProfileObject.js.
        * UserInterface/LegacyJavaScriptProfileType.js: Renamed from Source/WebInspectorUI/UserInterface/JavaScriptProfileType.js.
        * UserInterface/LegacyJavaScriptProfileView.css: Renamed from Source/WebInspectorUI/UserInterface/JavaScriptProfileView.css.
        * UserInterface/LegacyJavaScriptProfileView.js: Renamed from Source/WebInspectorUI/UserInterface/JavaScriptProfileView.js.
        * UserInterface/LegacyProfileDataGridTree.js: Renamed from Source/WebInspectorUI/UserInterface/ProfileDataGridTree.js.
        * UserInterface/LegacyProfileManager.js: Renamed from Source/WebInspectorUI/UserInterface/ProfileManager.js.
        * UserInterface/LegacyProfileObject.js: Renamed from Source/WebInspectorUI/UserInterface/ProfileObject.js.
        * UserInterface/LegacyProfileType.js: Renamed from Source/WebInspectorUI/UserInterface/ProfileType.js.
        * UserInterface/LegacyProfileView.css: Renamed from Source/WebInspectorUI/UserInterface/ProfileView.css.
        * UserInterface/LegacyProfileView.js: Renamed from Source/WebInspectorUI/UserInterface/ProfileView.js.
        * UserInterface/LegacyProfilerObserver.js: Renamed from Source/WebInspectorUI/UserInterface/ProfilerObserver.js.
        * UserInterface/LegacyTopDownProfileDataGridTree.js: Renamed from Source/WebInspectorUI/UserInterface/TopDownProfileDataGridTree.js.
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.loaded):
        (WebInspector.openURL):

2014-01-30  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: [REGRESSION(r163086)] Missing localized string 'Hide console (%s)'
        https://bugs.webkit.org/show_bug.cgi?id=127951

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        Add 'Hide console (%s)'.

2014-01-30  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: Implement open/close Console window shortcut
        https://bugs.webkit.org/show_bug.cgi?id=127896

        Reviewed by Timothy Hatcher.

        * UserInterface/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.prototype.get displayName):
        Bug: Option symbol should be displayed as Alternative symbol (\u2387)
        in non Mac platforms.
        * UserInterface/Main.js:
        (WebInspector.contentLoaded):
        Create keyboard shortcut for toggling console window.

2014-01-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Play Breakpoint Sound in Frontend
        https://bugs.webkit.org/show_bug.cgi?id=127885

        Reviewed by Timothy Hatcher.

        Beep in the frontend when a "sound" breakpoint action is triggered.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.playBreakpointActionSound):
        * UserInterface/DebuggerObserver.js:
        (WebInspector.DebuggerObserver.prototype.resumed):
        (WebInspector.DebuggerObserver.prototype.playBreakpointActionSound):
        * UserInterface/InspectorJSBackendCommands.js:

2014-01-29  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: [REGRESSION(r162931)] Tab navigation broken in DataGrid
        https://bugs.webkit.org/show_bug.cgi?id=127816

        Reviewed by Timothy Hatcher.

        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid.prototype.moveToNextIfNeeded):
        (WebInspector.DataGrid.prototype._editingCommitted):
        Change columnIdentifier values 0 and 1 to strings "0" and "1".

2014-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Unreviewed follow-up to r162965. Better coding style.

        Timothy Hatcher pointed out a clearer style for classes
        on the <body> is to specify body.class. I agree.

        * UserInterface/DashboardView.css:
        (body.javascript .toolbar .dashboard):
        (body.web .toolbar.collapsed .dashboard > .logs):
        (body.javascript .toolbar .dashboard > .resourcesCount):

2014-01-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Tweak UI when debugging a JSContext
        https://bugs.webkit.org/show_bug.cgi?id=127799

        Reviewed by Timothy Hatcher.

        * UserInterface/DashboardView.css:
        (.toolbar.javascript .dashboard):
        (.toolbar.web.collapsed .dashboard > .logs):
        (.toolbar.javascript .dashboard > .resourcesCount):
        Adjust collapsed dashboard in web and javascript debugging modes.
        JavaScript debugging mode is always treated as collapsed.

        * UserInterface/Main.js:
        (WebInspector.contentLoaded):
        Adjust what is created and shown when in javascript debugging mode.

        * UserInterface/NavigationSidebarPanel.css:
        (.navigation-sidebar-panel-content-tree-outline.hide-disclosure-buttons .item.small):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        (WebInspector.ResourceSidebarPanel.prototype._scriptWasAdded):
        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .status-bar):
        (.sidebar > .panel.timeline > .title-bar):
        When javascript debugging expect to put things at the root level, so hide
        disclosure buttons and adjust the style so resources look nice here.

2014-01-28  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: In a DataGrid, store value of columnIdentifier to DOM node representing a cell
        https://bugs.webkit.org/show_bug.cgi?id=127613

        Reviewed by Timothy Hatcher.

        * UserInterface/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView.prototype._editingCallback):
        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype._keyDown):
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):
        (WebInspector.DataGridNode.prototype.createCell):

2014-01-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Feature Check all Protocol Generated Interfaces to get JSContext Inspection working
        https://bugs.webkit.org/show_bug.cgi?id=127712

        Reviewed by Timothy Hatcher.

        Feature check protocol generated interfaces (e.g. FooAgent and registerFooObserver).
        Also drive by handle a possible exception if a SourceCode's URL is null, which is possible.

        * UserInterface/ApplicationCacheManager.js:
        (WebInspector.ApplicationCacheManager):
        (WebInspector.ApplicationCacheManager.prototype.initialize):
        * UserInterface/CSSCompletions.js:
        (WebInspector.CSSCompletions.requestCSSNameCompletions):
        * UserInterface/CSSStyleManager.js:
        (WebInspector.CSSStyleManager):
        (WebInspector.CSSStyleManager.prototype.canForcePseudoClasses):
        * UserInterface/DebuggerManager.js:
        * UserInterface/FrameResourceManager.js:
        (WebInspector.FrameResourceManager):
        (WebInspector.FrameResourceManager.prototype.initialize):
        * UserInterface/Main.js:
        (WebInspector.loaded):
        * UserInterface/ProfileManager.js:
        (WebInspector.ProfileManager):
        * UserInterface/StorageManager.js:
        (WebInspector.StorageManager):
        Type check generated interfaces.

        (WebInspector.DebuggerManager):
        (WebInspector.DebuggerManager.prototype.debuggerDidPause):
        Null check a SourceCode URL, which can be null for a Script with no URL.

2014-01-25  Timothy Hatcher  <timothy@apple.com>

        Remove dead code from the JSC profiler.

        https://bugs.webkit.org/show_bug.cgi?id=127643

        Reviewed by Mark Lam.

        * Versions/Inspector-iOS-7.0.json: Remove visible from CPUProfileNode.

2014-01-25  Joseph Pecoraro  <pecoraro@apple.com>

        Remove FIXME in CSSKeywordCompletions.js about "inherit" keyword
        https://bugs.webkit.org/show_bug.cgi?id=127638

        Reviewed by Timothy Hatcher.

        * UserInterface/CSSKeywordCompletions.js:
        (WebInspector.CSSKeywordCompletions.forProperty):
        Replace FIXME with a descriptive comment about why the code is what it is.

2014-01-25  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: Position the completion suggestions popup below if there is room
        https://bugs.webkit.org/show_bug.cgi?id=127615

        Reviewed by Joseph Pecoraro.

        * UserInterface/CompletionSuggestionsView.js:
        (WebInspector.CompletionSuggestionsView.prototype.show):

2014-01-23  Timothy Hatcher  <timothy@apple.com>

        Refactor TimelineRecordBar combining logic into a helper function.

        https://bugs.webkit.org/show_bug.cgi?id=127530

        Reviewed by Joseph Pecoraro.

        * UserInterface/LayoutTimelineOverviewGraph.js:
        (WebInspector.LayoutTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.LayoutTimelineOverviewGraph.prototype.updateLayout):
        Use TimelineRecordBar.createCombinedBars.

        * UserInterface/NetworkTimelineOverviewGraph.css:
        (.timeline-overview-graph.network):
        (.timeline-overview-graph.network > .graph-row > .timeline-record-bar):
        Cleaned up since we are using TimelineRecordBar.

        * UserInterface/NetworkTimelineOverviewGraph.js:
        (WebInspector.NetworkTimelineOverviewGraph.prototype.reset):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout):
        Use TimelineRecordBar.createCombinedBars.

        * UserInterface/ScriptTimelineOverviewGraph.js:
        (WebInspector.ScriptTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.ScriptTimelineOverviewGraph.prototype.updateLayout):
        Use TimelineRecordBar.createCombinedBars.

        * UserInterface/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph.createBar):
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph):
        Use TimelineRecordBar.createCombinedBars.

        * UserInterface/TimelineRecordBar.css:
        (.timeline-record-bar.unfinished > .segment):
        (.timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        (:focus .selected .timeline-record-bar > .segment.inactive):
        Improved selected appearance and don't assume .segment.inactive exists.

        * UserInterface/TimelineRecordBar.js:
        (WebInspector.TimelineRecordBar):
        (WebInspector.TimelineRecordBar.createCombinedBars.compareByActiveStartTime): Added.
        (WebInspector.TimelineRecordBar.createCombinedBars): Added.
        (WebInspector.TimelineRecordBar.prototype.get renderMode): Added.
        (WebInspector.TimelineRecordBar.prototype.set renderMode): Added.
        (WebInspector.TimelineRecordBar.prototype.set records):
        (WebInspector.TimelineRecordBar.prototype.refresh):
        Lazily create DOM elements. Support rendering one or both segments. Doing this lets
        combined inactive segments sit behind multiple active segments.

2014-01-22  Timothy Hatcher  <timothy@apple.com>

        Improve collapsing of TimelineDataGridNode graphs up to ancestors.

        https://bugs.webkit.org/show_bug.cgi?id=127440

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode.prototype.collapse):
        (WebInspector.TimelineDataGridNode.prototype.createCellContent):
        (WebInspector.TimelineDataGridNode.prototype.refresh):
        (WebInspector.TimelineDataGridNode.prototype.needsGraphRefresh):
        Notify the next visible ancestor it needs to refresh. Use needsGraphRefresh so ancestors
        are notified instead of directly calling refreshGraph in some places.

2014-01-22  Timothy Hatcher  <timothy@apple.com>

        Don't include a hidden Timeline selection in the navigation path components.

        https://bugs.webkit.org/show_bug.cgi?id=127443

        Reviewed by Joseph Pecoraro.

        * UserInterface/GeneralTreeElementPathComponent.js:
        (WebInspector.GeneralTreeElementPathComponent.prototype.get previousSibling):
        (WebInspector.GeneralTreeElementPathComponent.prototype.get nextSibling):
        Skip hidden siblings.

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.updateLayout):
        (WebInspector.OverviewTimelineView.prototype.get selectionPathComponents):
        Don't include hidden selection and dispatch SelectionPathComponentsDidChange event if hidden changes.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._timeRangeSelectionChanged):
        Dispatch SelectionPathComponentsDidChange event if hidden changes on the selected tree element.

        * UserInterface/TimelineView.js:
        (WebInspector.TimelineView.prototype.get selectionPathComponents):
        Don't include hidden selection.

2014-01-22  Timothy Hatcher  <timothy@apple.com>

        Support collapsing call site records into the resource timeline.

        Also fix some filtering and graph issues.

        https://bugs.webkit.org/show_bug.cgi?id=127440

        Reviewed by Joseph Pecoraro.

        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.updateFilter):
        (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement.matchTextFilter):
        (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement.makeVisible):
        (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement):
        (WebInspector.NavigationSidebarPanel.prototype._updateFilter):
        Tweak how filtering happens so custom filters never expand to reveal and auto expanded
        tree elements will auto-collapse again later even with custom filters.

        * UserInterface/OverviewTimelineView.css:
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded) td.graph-column .timeline-record-bar:not(.timeline-record-type-network) > .segment):
        (.timeline-view.overview > .data-grid tr.parent:not(.expanded).selected td.graph-column .timeline-record-bar:not(.timeline-record-type-network) > .segment):
        (.timeline-view.overview > .data-grid:focus tr.parent:not(.expanded).selected td.graph-column .timeline-record-bar:not(.timeline-record-type-network) > .segment):
        Add a shadow to provide some negative space between juxtaposed records. Only needed when not expanded.

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.updateLayout):
        (WebInspector.OverviewTimelineView.prototype._addResourceToTreeIfNeeded):
        Update the filter when current time changes and only auto expand the main resource.

        * UserInterface/ResourceTimelineDataGridNode.js:
        (WebInspector.ResourceTimelineDataGridNode):
        (WebInspector.ResourceTimelineDataGridNode.prototype._timelineRecordUpdated):
        Don't schedule a refresh of the graph if the record isn't visible.

        * UserInterface/SourceCodeTimelineTimelineDataGridNode.js:
        (WebInspector.SourceCodeTimelineTimelineDataGridNode):
        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype._timelineRecordAdded):
        Don't schedule a refresh of the graph if the record isn't visible.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._timeRangeSelectionChanged):
        Remove the boolean for updateFilter.

        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype._refreshDirtyDataGridNodes):
        (WebInspector.TimelineDataGrid.prototype._sort):
        Keep the hidden state in-sync between node and element.

        * UserInterface/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode.prototype.collapse):
        (WebInspector.TimelineDataGridNode.prototype.expand):
        (WebInspector.TimelineDataGridNode.prototype.appendChild):
        (WebInspector.TimelineDataGridNode.prototype.insertChild):
        (WebInspector.TimelineDataGridNode.prototype.removeChild):
        (WebInspector.TimelineDataGridNode.prototype.removeChildren):
        (WebInspector.TimelineDataGridNode.prototype.removeChildrenRecursive):
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph.createBarsForRecords):
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph.else.collectRecordsByType.get if):
        (WebInspector.TimelineDataGridNode.prototype.needsGraphRefresh):
        (WebInspector.TimelineDataGridNode.prototype.isRecordVisible):
        Support drawing the children records on the parent graph.

        * UserInterface/TimelineRecordBar.css:
        (.timeline-record-bar.unfinished > .segment):
        (:focus .selected .timeline-record-bar > .segment):
        (:focus .selected .timeline-record-bar > .segment.inactive):
        (:focus .selected .timeline-record-bar.has-inactive-segment > .segment:not(.inactive)):
        Tweaked styles to look better when selected.

        * UserInterface/TimelineRecordBar.js:
        (WebInspector.TimelineRecordBar.recordsCannotBeCombined):
        (WebInspector.TimelineRecordBar.prototype.set records):
        (WebInspector.TimelineRecordBar.prototype.refresh):
        Drive-by fixes for some bug with bars being reused.

2014-01-21  Timothy Hatcher  <timothy@apple.com>

        Remember the Timeline Overview zoom and selection between sessions.

        https://bugs.webkit.org/show_bug.cgi?id=127369

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.set secondsPerPixel):
        (WebInspector.TimelineOverview.prototype._timeRangeSelectionChanged):

2014-01-21  Timothy Hatcher  <timothy@apple.com>

        Show the Resource and Record selection path in the navigation bar for Timeline views.

        https://bugs.webkit.org/show_bug.cgi?id=127367

        Reviewed by Joseph Pecoraro.

        * UserInterface/LayoutTimelineView.js:
        (WebInspector.LayoutTimelineView.prototype.treeElementPathComponentSelected):
        (WebInspector.LayoutTimelineView.prototype._dataGridNodeSelected):
        * UserInterface/NetworkTimelineView.js:
        (WebInspector.NetworkTimelineView.prototype.treeElementPathComponentSelected):
        (WebInspector.NetworkTimelineView.prototype._dataGridNodeSelected):
        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.get selectionPathComponents):
        (WebInspector.OverviewTimelineView.prototype.treeElementPathComponentSelected):
        (WebInspector.OverviewTimelineView.prototype._dataGridNodeSelected):
        * UserInterface/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype.treeElementPathComponentSelected):
        (WebInspector.ScriptTimelineView.prototype._dataGridNodeSelected):
        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._timelineViewSelectionPathComponentsDidChange):
        (WebInspector.TimelineContentView.prototype._showTimelineView):
        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype.treeElementForDataGridNode):
        (WebInspector.TimelineDataGrid.prototype.dataGridNodeForTreeElement):
        * UserInterface/TimelineView.js:
        (WebInspector.TimelineView.prototype.get selectionPathComponents):
        (WebInspector.TimelineView.prototype.treeElementPathComponentSelected):

2014-01-20  Timothy Hatcher  <timothy@apple.com>

        Add the recording button back to the Timelines sidebar.

        https://bugs.webkit.org/show_bug.cgi?id=127314

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype.get navigationItems):
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._updateTimes):
        (WebInspector.TimelineContentView.prototype._startUpdatingCurrentTime):
        (WebInspector.TimelineContentView.prototype._recordingTimesUpdated):
        (WebInspector.TimelineContentView.prototype._clearTimeline):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        Add a clear button and reset the time ruler and views when the recording resets.

        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .status-bar):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph.recording):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph:hover):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph.recording:hover):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph.forced):
        (.sidebar > .panel.timeline > .status-bar > .record-glyph.recording.forced):
        (.sidebar > .panel.timeline > .status-bar > .record-status):
        Add styles for the recording button and status message.

        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype._contentBrowserCurrentContentViewDidChange):
        (WebInspector.TimelineSidebarPanel.prototype._recordingStarted):
        (WebInspector.TimelineSidebarPanel.prototype._recordingStopped):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphMousedOver):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphMousedOut):
        (WebInspector.TimelineSidebarPanel.prototype._recordGlyphClicked):
        Add support for the recording button and status message.

2014-01-20  Timothy Hatcher  <timothy@apple.com>

        Make the TimelineRecordTreeElement location subtitle live.

        https://bugs.webkit.org/show_bug.cgi?id=127270

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/SourceCodeLocation.js:
        (WebInspector.SourceCodeLocation.prototype.originalLocationString):
        (WebInspector.SourceCodeLocation.prototype.formattedLocationString):
        (WebInspector.SourceCodeLocation.prototype.displayLocationString):
        (WebInspector.SourceCodeLocation.prototype.updateDisplayString):
        (WebInspector.SourceCodeLocation.prototype._locationString):
        Support for a new nameStyle enum and a prefix for the location string.
        Passing the prefix here lets it be italicized with the line number.
        Support column number for SourceCode's without a URL too.

        * UserInterface/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.onattach):
        Create a subtitle span to update the location inside. Update the tooltip on attach.

2014-01-19  Timothy Hatcher  <timothy@apple.com>

        Generate better display names for timer and event Timeline records.

        Also support AnimationFrameRequested and AnimationFrameCanceled.

        https://bugs.webkit.org/show_bug.cgi?id=127258

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/LayoutTimelineRecord.js:
        (WebInspector.LayoutTimelineRecord.EventType.displayName):
        Generate past tense names that better match other names.

        * UserInterface/ScriptTimelineDataGridNode.js:
        (WebInspector.ScriptTimelineDataGridNode.prototype.createCellContent):
        Pass the details to displayName.

        * UserInterface/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord.EventType.displayName):
        Generate better names for timer and event records. Also add missing animation frame types.

        * UserInterface/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype._processPendingRecords):
        Pass true to WebInspector.TimelineRecordTreeElement to include timer identifiers in the title.

        * UserInterface/SourceCodeTimelineTreeElement.js:
        (WebInspector.SourceCodeTimelineTreeElement):
        Pass includeTimerIdentifierInMainTitle through to TimelineRecordTreeElement.

        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        Include AnimationFrameRequested and AnimationFrameCanceled.

        * UserInterface/TimelineRecordTreeElement.js:
        (WebInspector.TimelineRecordTreeElement):
        Use displayName functions instead and support includeTimerIdentifierInMainTitle.

2014-01-19  Timothy Hatcher  <timothy@apple.com>

        Implement basic versions of the TimelineOverview graphs.

        https://bugs.webkit.org/show_bug.cgi?id=127184

        Reviewed by Joseph Pecoraro.

        * UserInterface/LayoutTimelineOverviewGraph.css: Added.
        (.timeline-overview-graph.layout > .timeline-record-bar):
        (.timeline-overview-graph.layout > .timeline-record-bar > .segment):

        * UserInterface/LayoutTimelineOverviewGraph.js: Added.
        (WebInspector.LayoutTimelineOverviewGraph.prototype.reset):
        (WebInspector.LayoutTimelineOverviewGraph.prototype.updateLayout):
        (WebInspector.LayoutTimelineOverviewGraph.prototype._layoutTimelineRecordAdded):

        * UserInterface/Main.html: Added new files.

        * UserInterface/NetworkTimelineOverviewGraph.css: Added.
        (.timeline-overview-graph.network):
        (.timeline-overview-graph.network > .graph-row):
        (.timeline-overview-graph.network > .graph-row > .bar):
        (.timeline-overview-graph.network > .graph-row > .bar.inactive):
        (.timeline-overview-graph.network > .graph-row > .bar.unfinished):
        (.timeline-overview-graph.network > .graph-row > .bar:not(.inactive)):
        (.timeline-overview-graph.network:nth-child(even) > .graph-row > .bar:not(.inactive)):

        * UserInterface/NetworkTimelineOverviewGraph.js: Added.
        (WebInspector.NetworkTimelineOverviewGraph.prototype.reset):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout.updateElementPosition):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout.createBar):
        (WebInspector.NetworkTimelineOverviewGraph.prototype.updateLayout):
        (WebInspector.NetworkTimelineOverviewGraph.prototype._networkTimelineRecordAdded.compareByStartTime):
        (WebInspector.NetworkTimelineOverviewGraph.prototype._networkTimelineRecordAdded.insertObjectIntoSortedArray):
        (WebInspector.NetworkTimelineOverviewGraph.prototype._networkTimelineRecordAdded):

        * UserInterface/ScriptTimelineOverviewGraph.css: Added.
        (.timeline-overview-graph.script > .timeline-record-bar):
        (.timeline-overview-graph.script > .timeline-record-bar > .segment):

        * UserInterface/ScriptTimelineOverviewGraph.js: Added.
        (WebInspector.ScriptTimelineOverviewGraph.prototype.reset):
        (WebInspector.ScriptTimelineOverviewGraph.prototype.updateLayout):
        (WebInspector.ScriptTimelineOverviewGraph.prototype._scriptTimelineRecordAdded):

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._showTimelineView):
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        Create and keep the graphs informed.

        * UserInterface/TimelineDataGridNode.js:
        (WebInspector.TimelineDataGridNode):
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph):
        Combine records that might overlap.

        * UserInterface/TimelineOverview.css:
        (.timeline-overview > .graphs-container):
        (.timeline-overview > .graphs-container > .timeline-overview-graph):
        (.timeline-overview > .graphs-container > .timeline-overview-graph:nth-child(even)):
        (.timeline-overview > .graphs-container > .timeline-overview-graph:not(:first-child)):
        Add the graph rows with alternating stripe.

        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.set startTime):
        (WebInspector.TimelineOverview.prototype.get currentTime):
        (WebInspector.TimelineOverview.prototype.set currentTime):
        (WebInspector.TimelineOverview.prototype.updateLayout):
        (WebInspector.TimelineOverview.prototype.updateLayoutIfNeeded):
        Track currentTime in a member variable and let TimelineOverview manage the current time marker.

        * UserInterface/TimelineOverviewGraph.js: Added.
        (WebInspector.TimelineOverviewGraph):
        (WebInspector.TimelineOverviewGraph.prototype.get zeroTime):
        (WebInspector.TimelineOverviewGraph.prototype.set zeroTime):
        (WebInspector.TimelineOverviewGraph.prototype.get startTime):
        (WebInspector.TimelineOverviewGraph.prototype.set startTime):
        (WebInspector.TimelineOverviewGraph.prototype.get endTime):
        (WebInspector.TimelineOverviewGraph.prototype.set endTime):
        (WebInspector.TimelineOverviewGraph.prototype.get currentTime):
        (WebInspector.TimelineOverviewGraph.prototype.set currentTime):
        (WebInspector.TimelineOverviewGraph.prototype.reset):
        (WebInspector.TimelineOverviewGraph.prototype.updateLayout):
        (WebInspector.TimelineOverviewGraph.prototype.updateLayoutIfNeeded):
        (WebInspector.TimelineOverviewGraph.prototype.needsLayout):

        * UserInterface/TimelineRecordBar.css:
        (.timeline-record-bar > .segment):
        (.timeline-record-bar.unfinished > .segment):
        (.timeline-record-bar > .segment.inactive + .segment):
        (.timeline-record-bar.timeline-record-type-network > .segment.inactive):

        * UserInterface/TimelineRecordBar.js:
        (WebInspector.TimelineRecordBar):
        (WebInspector.TimelineRecordBar.recordsCannotBeCombined):
        (WebInspector.TimelineRecordBar.prototype.get records):
        (WebInspector.TimelineRecordBar.prototype.set records):
        (WebInspector.TimelineRecordBar.prototype.refresh):
        Make TimelineRecordBar support multiple records.

        * UserInterface/TimelineRuler.css:
        (.timeline-ruler > .markers):
        (.timeline-ruler > .selection-handle):
        (.timeline-ruler > .shaded-area):
        Add some z-index values to stay above graph elements.

2014-01-16  Timothy Hatcher  <timothy@apple.com>

        Clean up Timelines code by using ES6 features and less global access of TimelineRecording.
        Also don't recreate Timeline objects when TimelineRecording is reset, reset them instead.

        https://bugs.webkit.org/show_bug.cgi?id=127157

        Reviewed by Joseph Pecoraro.

        * UserInterface/LayoutTimelineView.js:
        (WebInspector.LayoutTimelineView.prototype.reset):
        * UserInterface/NetworkTimeline.js:
        (WebInspector.NetworkTimeline):
        (WebInspector.NetworkTimeline.prototype.reset):
        * UserInterface/NetworkTimelineView.js:
        (WebInspector.NetworkTimelineView.prototype.reset):
        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype._networkTimelineRecordAdded):
        * UserInterface/ScriptTimelineView.js:
        (WebInspector.ScriptTimelineView.prototype.reset):
        * UserInterface/Timeline.js:
        (WebInspector.Timeline):
        (WebInspector.Timeline.prototype.reset):
        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.set createPathComponent):
        (WebInspector.TimelineContentView.set var):
        (WebInspector.TimelineContentView.prototype.showOverviewTimelineView):
        (WebInspector.TimelineContentView.prototype.showTimelineView):
        (WebInspector.TimelineContentView.prototype._showTimelineView):
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        * UserInterface/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.reset):

2014-01-16  Timothy Hatcher  <timothy@apple.com>

        Improve WebInspector.TimelineOverview by not putting WebInspector.TimelineRuler in a scroll area.

        https://bugs.webkit.org/show_bug.cgi?id=127145

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineOverview.css:
        (.timeline-overview > .scroll-container):
        (.timeline-overview > .timeline-ruler):
        (.timeline-overview > .scroll-container > .scroll-width-sizer):
        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.get startTime):
        (WebInspector.TimelineOverview.prototype.set startTime):
        (WebInspector.TimelineOverview.prototype.get secondsPerPixel):
        (WebInspector.TimelineOverview.prototype.set secondsPerPixel):
        (WebInspector.TimelineOverview.prototype.get scrollStartTime):
        (WebInspector.TimelineOverview.prototype.set scrollStartTime):
        (WebInspector.TimelineOverview.prototype.get visibleDuration):
        (WebInspector.TimelineOverview.prototype.revealMarker):
        (WebInspector.TimelineOverview.prototype.updateLayout):
        (WebInspector.TimelineOverview.prototype._handleScrollEvent):
        (WebInspector.TimelineOverview.prototype._handleWheelEvent):
        * UserInterface/TimelineRuler.js:
        (WebInspector.TimelineRuler.MinimumSelectionTimeRange): Reduce to 10ms now that super zoom has no performance impact.

2014-01-15  Timothy Hatcher  <timothy@apple.com>

        Implement the discrete Script and Layout timeline views.

        https://bugs.webkit.org/show_bug.cgi?id=127063

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.

        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid): Support hidden columns by default.
        (WebInspector.DataGrid.prototype.updateLayout): Set the column width to zero for hidden columns.

        * UserInterface/LayoutTimelineDataGrid.js:
        (WebInspector.LayoutTimelineDataGrid): Pass the right parameters to the superclass.

        * UserInterface/LayoutTimelineRecord.js:
        (WebInspector.LayoutTimelineRecord.prototype.saveIdentityToCookie): Added.

        * UserInterface/LayoutTimelineView.css: Copied from Source/WebInspectorUI/UserInterface/ScriptTimelineDataGrid.js.
        (.timeline-view.layout > .data-grid):
        (.timeline-view.layout > .data-grid .eventType-column):
        (.sidebar > .panel.timeline.timeline-content-view-showing .navigation-sidebar-panel-content-tree-outline.layout .item .subtitle):

        * UserInterface/LayoutTimelineView.js: Added.
        (WebInspector.LayoutTimelineView):
        (WebInspector.LayoutTimelineView.prototype.get navigationSidebarTreeOutlineLabel):
        (WebInspector.LayoutTimelineView.prototype.shown):
        (WebInspector.LayoutTimelineView.prototype.hidden):
        (WebInspector.LayoutTimelineView.prototype.updateLayout):
        (WebInspector.LayoutTimelineView.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.LayoutTimelineView.prototype._layoutTimelineRecordAdded):
        (WebInspector.LayoutTimelineView.prototype._dataGridFiltersDidChange):
        (WebInspector.LayoutTimelineView.prototype._treeElementSelected):

        * UserInterface/Main.html: Added new files.

        * UserInterface/ScriptTimelineDataGrid.js:
        (WebInspector.ScriptTimelineDataGrid): Pass the right parameters to the superclass.

        * UserInterface/ScriptTimelineDataGridNode.js:
        (WebInspector.ScriptTimelineDataGridNode.prototype.createCellContent): Fix up how we create the link.

        * UserInterface/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord.prototype.saveIdentityToCookie): Added.

        * UserInterface/ScriptTimelineView.css: Copied from Source/WebInspectorUI/UserInterface/ScriptTimelineDataGrid.js.
        (.timeline-view.script > .data-grid):
        (.timeline-view.script > .data-grid .eventType-column):
        (.sidebar > .panel.timeline.timeline-content-view-showing .navigation-sidebar-panel-content-tree-outline.script .item .subtitle):

        * UserInterface/ScriptTimelineView.js: Added.
        (WebInspector.ScriptTimelineView):
        (WebInspector.ScriptTimelineView.prototype.get navigationSidebarTreeOutlineLabel):
        (WebInspector.ScriptTimelineView.prototype.shown):
        (WebInspector.ScriptTimelineView.prototype.hidden):
        (WebInspector.ScriptTimelineView.prototype.updateLayout):
        (WebInspector.ScriptTimelineView.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.ScriptTimelineView.prototype._scriptTimelineRecordAdded):
        (WebInspector.ScriptTimelineView.prototype._dataGridFiltersDidChange):
        (WebInspector.ScriptTimelineView.prototype._treeElementSelected):

        * UserInterface/SourceCodeTimelineTreeElement.js:
        (WebInspector.SourceCodeTimelineTreeElement):
        Moved code to TimelineRecordTreeElement. Subclass from it.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype.matchTreeElementAgainstCustomFilters): Support TimelineRecordTreeElement.
        (WebInspector.TimelineContentView.prototype._timeRangeSelectionChanged): Update zeroTime for all views.

        * UserInterface/TimelineDataGrid.css:
        (.data-grid.timeline td .icon):
        (.data-grid.timeline td .go-to-arrow):
        (.data-grid.timeline tr:hover .go-to-arrow):
        (.data-grid.timeline td .subtitle):
        (.data-grid.timeline td .subtitle::before):
        (.data-grid.timeline:focus tr.selected td .subtitle):

        * UserInterface/TimelineRecord.js:
        (WebInspector.TimelineRecord.prototype.saveIdentityToCookie): Added.

        * UserInterface/TimelineRecordTreeElement.js: Added.
        (WebInspector.TimelineRecordTreeElement):
        (WebInspector.TimelineRecordTreeElement.prototype.get record):
        (WebInspector.TimelineRecordTreeElement.prototype.get filterableData):
        Factored out from SourceCodeTimelineTreeElement.

        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject.looslyCompareRepresentedObjects):
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject):
        Find TreeElements via a loose lookup based on represented objects that might contain the represented object we are
        really looking for.

2014-01-14  Timothy Hatcher  <timothy@apple.com>

        Implement the discrete Network timeline view.

        https://bugs.webkit.org/show_bug.cgi?id=127022

        Reviewed by Joseph Pecoraro.

        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid): Align the labels of the column headers to match the data.
        (WebInspector.DataGridNode.prototype.get selectable): Prevent selection when hidden.

        * UserInterface/DetailsSection.css:
        (.details-section > .header): Bump the font size to match data grid header sizes.

        * UserInterface/Main.html: Add new files.

        * UserInterface/NetworkTimelineView.css: Added.
        (.timeline-view.network > .data-grid):
        (.sidebar > .panel.timeline.timeline-content-view-showing > .content .item.resource .subtitle):
        Hide the domain subtitle when the content view is showing which also has the domain.

        * UserInterface/NetworkTimelineView.js: Added.
        (WebInspector.NetworkTimelineView):
        (WebInspector.NetworkTimelineView.prototype.get navigationSidebarTreeOutlineLabel):
        (WebInspector.NetworkTimelineView.prototype.shown):
        (WebInspector.NetworkTimelineView.prototype.hidden):
        (WebInspector.NetworkTimelineView.prototype.updateLayout):
        (WebInspector.NetworkTimelineView.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.NetworkTimelineView.prototype._networkTimelineRecordAdded):
        (WebInspector.NetworkTimelineView.prototype._dataGridFiltersDidChange):
        (WebInspector.NetworkTimelineView.prototype._treeElementSelected):

        * UserInterface/ResourceTimelineDataGridNode.js:
        (WebInspector.ResourceTimelineDataGridNode.prototype._needsRefresh):
        Call dataGridNodeNeedsRefresh on the TimelineDataGrid so things can be batched with
        one request animation frame.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView): Create a NetworkTimelineView.
        (WebInspector.TimelineContentView.prototype.matchTreeElementAgainstCustomFilters):

        * UserInterface/TimelineDataGrid.css:
        (.data-grid.timeline table):
        (.data-grid.timeline th):
        (.data-grid.timeline th:not(:last-child)):
        (.data-grid.timeline th.sortable:active):
        (.data-grid.timeline th.sort-descending):
        (.data-grid.timeline .data-container):
        (.data-grid.timeline td):
        (.data-grid.timeline td:last-child):
        (.data-grid.timeline td:not(:last-child)):
        (.data-grid.timeline:focus tr.selected td:not(:last-child)):
        (.data-grid.timeline th.sort-descending > div:first-child):
        (.data-grid.timeline th.sort-descending > div:first-child::after):
        (.data-grid.timeline td.error):
        (.data-grid.timeline tr.selected td.error):
        (.data-grid.timeline > .navigation-bar-container):
        (.data-grid.timeline:hover > .navigation-bar-container):
        (.data-grid.timeline > .navigation-bar-container > .navigation-bar):

        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid):
        (WebInspector.TimelineDataGrid.createColumnScopeBar):
        (WebInspector.TimelineDataGrid.prototype.reset):
        (WebInspector.TimelineDataGrid.prototype.shown):
        (WebInspector.TimelineDataGrid.prototype.hidden):
        (WebInspector.TimelineDataGrid.prototype.callFramePopoverAnchorElement):
        (WebInspector.TimelineDataGrid.prototype.updateLayout):
        (WebInspector.TimelineDataGrid.prototype.treeElementMatchesActiveScopeFilters):
        (WebInspector.TimelineDataGrid.prototype.addRowInSortOrder):
        (WebInspector.TimelineDataGrid.prototype.shouldIgnoreSelectionEvent):
        (WebInspector.TimelineDataGrid.prototype.dataGridNodeNeedsRefresh):
        (WebInspector.TimelineDataGrid.prototype._refreshDirtyDataGridNodes):
        (WebInspector.TimelineDataGrid.prototype._sort):
        (WebInspector.TimelineDataGrid.prototype._sortComparator):
        Add support for sorting, batch refresh and managing of a TreeOutlineDataGridSynchronizer.

        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .title-bar): Bump the font size to match data grid header sizes.

        * UserInterface/TimelineView.js:
        (WebInspector.TimelineView.prototype.matchTreeElementAgainstCustomFilters): Added stub.

        * UserInterface/TreeOutlineDataGridSynchronizer.js:
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.get treeOutline):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.get dataGrid):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.get enabled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.set enabled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.treeElementForDataGridNode):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.dataGridNodeForTreeElement):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeOutlineScrolled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridScrolled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeSelected):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeExpanded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeCollapsed):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementSelected):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementAdded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementRemoved):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementExpanded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementCollapsed):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementHiddenChanged):
        Added support for disabling the synchronizer when the client can do a better job.

2014-01-13  Timothy Hatcher  <timothy@apple.com>

        Filter the Timeline overview graph and sidebar based on the current time selection.

        https://bugs.webkit.org/show_bug.cgi?id=126955

        Reviewed by Joseph Pecoraro.

        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.updateFilter):
        (WebInspector.NavigationSidebarPanel.prototype.hasCustomFilters):
        (WebInspector.NavigationSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement.matchTextFilter):
        (WebInspector.NavigationSidebarPanel.prototype.applyFiltersToTreeElement):
        Add support for custom filters implemented by subclasses.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype.matchTreeElementAgainstCustomFilters.checkTimeBounds):
        (WebInspector.TimelineContentView.prototype.matchTreeElementAgainstCustomFilters):
        (WebInspector.TimelineContentView.prototype._timeRangeSelectionChanged):
        Filter known tree element types by time.

        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .empty-content-placeholder):
        Position the empty placeholder with the content.

        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.hasCustomFilters):
        (WebInspector.TimelineSidebarPanel.prototype.matchTreeElementAgainstCustomFilters):
        Defer filtering to the TimelineContentView.

2014-01-13  Timothy Hatcher  <timothy@apple.com>

        Implement state cookie support for WebInspector.TimelineSidebarPanel.

        https://bugs.webkit.org/show_bug.cgi?id=126921

        Reviewed by Joseph Pecoraro.

        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.restoreStateFromCookie):
        Drive-by fix to pass along relaxedMatchDelay to the superclass.

        * UserInterface/Main.js:
        (WebInspector.loaded):
        (WebInspector._provisionalLoadStarted):
        Listen for ProvisionalLoadStarted instead of ProvisionalLoadCommitted to save the cookie
        before the TimelineRecording is reset and clears the UI.

        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.get restoringState): Added.
        (WebInspector.NavigationSidebarPanel.prototype.restoreStateFromCookie.finalAttemptToRestoreViewStateFromCookie):
        Delete _pendingViewStateCookie since this was the final attempt.
        (WebInspector.NavigationSidebarPanel.prototype.restoreStateFromCookie):
        (WebInspector.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject): Block string represented objects.
        (WebInspector.NavigationSidebarPanel.prototype._checkElementsForPendingViewStateCookie):

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype._treeElementSelected):

        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.treeElementForRepresentedObject):
        Drive-by fix to null check parentFrame since it can be null. Was causing an exception while working on this.

        * UserInterface/SourceCodeTimeline.js:
        (WebInspector.SourceCodeTimeline):
        (WebInspector.SourceCodeTimeline.prototype.saveIdentityToCookie):

        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.prototype.canShowDifferentContentView):
        (WebInspector.TimelineSidebarPanel.prototype.saveStateToCookie):
        (WebInspector.TimelineSidebarPanel.prototype.restoreStateFromCookie):

        * UserInterface/TreeOutline.js:
        (TreeOutline.prototype._forgetTreeElement):
        Drive-by fix to clear selectedTreeElement if it is removed from the tree. Was causing removed TreeElements to be
        saved as a cookie since it was still the selected item.

2014-01-11  Timothy Hatcher  <timothy@apple.com>

        Implement bar graph rendering for WebInspector.OverviewTimelineView.

        https://bugs.webkit.org/show_bug.cgi?id=126831

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html: Added new files.

        * UserInterface/OverviewTimelineView.css:
        (.timeline-view.overview > .data-grid td.graph-column):
        (.timeline-view.overview > .data-grid td.graph-column > div):
        (.timeline-view.overview > .data-grid td.graph-column .timeline-record-bar):
        Position the bars in the DataGrid cells.

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView.prototype.updateLayout):
        (WebInspector.OverviewTimelineView.prototype._addResourceToTreeIfNeeded):
        (WebInspector.OverviewTimelineView.prototype._sourceCodeTimelineAdded):
        Create the proper DataGridNodes for resources and source code timelines.

        * UserInterface/ResourceTimelineDataGridNode.js:
        (WebInspector.ResourceTimelineDataGridNode):
        (WebInspector.ResourceTimelineDataGridNode.prototype.get records):
        (WebInspector.ResourceTimelineDataGridNode.prototype.get resource):
        (WebInspector.ResourceTimelineDataGridNode.prototype.get data):
        (WebInspector.ResourceTimelineDataGridNode.prototype.createCellContent):
        (WebInspector.ResourceTimelineDataGridNode.prototype.refresh):
        (WebInspector.ResourceTimelineDataGridNode.prototype._needsRefresh):
        (WebInspector.ResourceTimelineDataGridNode.prototype._goToResource):
        Simplify by deferring the graph logic to the new TimelineDataGridNode base class.

        * UserInterface/SourceCodeTimelineTimelineDataGridNode.js: Added.
        (WebInspector.SourceCodeTimelineTimelineDataGridNode):
        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.get records):
        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.get sourceCodeTimeline):
        (WebInspector.SourceCodeTimelineTimelineDataGridNode.prototype.get data):

        * UserInterface/TimelineDataGridNode.js: Added.
        (WebInspector.TimelineDataGridNode):
        (WebInspector.TimelineDataGridNode.prototype.get records):
        (WebInspector.TimelineDataGridNode.prototype.get data):
        (WebInspector.TimelineDataGridNode.prototype.createCellContent):
        (WebInspector.TimelineDataGridNode.prototype.refresh):
        (WebInspector.TimelineDataGridNode.prototype.refreshGraph):
        (WebInspector.TimelineDataGridNode.prototype.needsGraphRefresh):
        Handles the graph column and manages the records and their bars.

        * UserInterface/TimelineRecordBar.css: Added.
        (.timeline-record-bar):
        (.timeline-record-bar > .segment):
        (.timeline-record-bar:not(.has-inactive-segment) > .segment):
        (.timeline-record-bar.unfinished > .segment):
        (.timeline-record-bar > .segment.inactive + .segment):
        (:focus .selected .timeline-record-bar > .segment):
        (.timeline-record-bar > .segment.inactive):
        (.timeline-record-bar.timeline-record-type-network > .segment):
        (.timeline-record-bar.timeline-record-type-layout > .segment):
        (.timeline-record-bar.timeline-record-type-script > .segment):

        * UserInterface/TimelineRecordBar.js: Added.
        (WebInspector.TimelineRecordBar):
        (WebInspector.TimelineRecordBar.prototype.get element):
        (WebInspector.TimelineRecordBar.prototype.refresh):
        (WebInspector.TimelineRecordBar.prototype._updateElementPosition):

2014-01-08  Timothy Hatcher  <timothy@apple.com>

        Update the current WebInspector.TimelineView when time range changes.

        https://bugs.webkit.org/show_bug.cgi?id=126667

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._showTimelineView):
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._startUpdatingCurrentTime):
        (WebInspector.TimelineContentView.prototype._stopUpdatingCurrentTime):
        (WebInspector.TimelineContentView.prototype._recordingStarted):
        (WebInspector.TimelineContentView.prototype._recordingStopped):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        (WebInspector.TimelineContentView.prototype._timeRangeSelectionChanged):
        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.updateLayout):
        (WebInspector.TimelineOverview.prototype.updateLayoutIfNeeded):
        (WebInspector.TimelineOverview.prototype._updateElementWidth):
        (WebInspector.TimelineOverview.prototype._handleWheelEvent):
        (WebInspector.TimelineOverview.prototype._timeRangeSelectionChanged):
        * UserInterface/TimelineRuler.js:
        (WebInspector.TimelineRuler.prototype.updateLayoutIfNeeded):
        * UserInterface/TimelineView.js:
        (WebInspector.TimelineView):
        (WebInspector.TimelineView.prototype.get zeroTime):
        (WebInspector.TimelineView.prototype.set zeroTime):
        (WebInspector.TimelineView.prototype.get startTime):
        (WebInspector.TimelineView.prototype.set startTime):
        (WebInspector.TimelineView.prototype.get endTime):
        (WebInspector.TimelineView.prototype.set endTime):
        (WebInspector.TimelineView.prototype.get currentTime):
        (WebInspector.TimelineView.prototype.set currentTime.checkIfLayoutIsNeeded):
        (WebInspector.TimelineView.prototype.set currentTime):
        (WebInspector.TimelineView.prototype.updateLayout):
        (WebInspector.TimelineView.prototype.updateLayoutIfNeeded):
        (WebInspector.TimelineView.prototype.needsLayout):

2013-12-19  Timothy Hatcher  <timothy@apple.com>

        Implement time range selection for TimelineOverview and TimelineRuler.

        https://bugs.webkit.org/show_bug.cgi?id=126035

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        Properly update start time and the selection start time on reset.

        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.get selectionStartTime):
        (WebInspector.TimelineOverview.prototype.set selectionStartTime):
        (WebInspector.TimelineOverview.prototype.get selectionDuration):
        (WebInspector.TimelineOverview.prototype.set selectionDuration):
        Added selection getters and setters.

        * UserInterface/TimelineRuler.css:
        (.timeline-ruler.allows-time-range-selection):
        (.timeline-ruler > *):
        (.timeline-ruler > .header):
        (.timeline-ruler > .selection-drag):
        (.timeline-ruler > .selection-drag:active):
        (.timeline-ruler > .selection-handle):
        (.timeline-ruler > .selection-handle.left):
        (.timeline-ruler > .selection-handle.right):
        (.timeline-ruler > .shaded-area):
        (.timeline-ruler > .shaded-area.left):
        (.timeline-ruler > .shaded-area.right):
        Added styles for the selection elements and tweaked pointer-events to allow
        events on elements we expect.

        * UserInterface/TimelineRuler.js:
        (WebInspector.TimelineRuler):
        (WebInspector.TimelineRuler.prototype.get allowsTimeRangeSelection): Added.
        (WebInspector.TimelineRuler.prototype.set allowsTimeRangeSelection): Added.
        (WebInspector.TimelineRuler.prototype.get selectionStartTime): Added.
        (WebInspector.TimelineRuler.prototype.set selectionStartTime): Added.
        (WebInspector.TimelineRuler.prototype.get selectionEndTime): Added.
        (WebInspector.TimelineRuler.prototype.set selectionEndTime): Added.
        (WebInspector.TimelineRuler.prototype.updateLayout):
        (WebInspector.TimelineRuler.prototype._needsMarkerLayout.update):
        (WebInspector.TimelineRuler.prototype._needsMarkerLayout):
        (WebInspector.TimelineRuler.prototype._needsSelectionLayout.update):
        (WebInspector.TimelineRuler.prototype._needsSelectionLayout):
        (WebInspector.TimelineRuler.prototype._recalculate):
        (WebInspector.TimelineRuler.prototype._updatePositionOfElement):
        (WebInspector.TimelineRuler.prototype._updateMarkers):
        (WebInspector.TimelineRuler.prototype._updateSelection): Added.
        (WebInspector.TimelineRuler.prototype._dispatchTimeRangeSelectionChangedEvent):
        (WebInspector.TimelineRuler.prototype._timelineMarkerTimeChanged):
        (WebInspector.TimelineRuler.prototype._handleMouseDown): Added.
        (WebInspector.TimelineRuler.prototype._handleMouseMove): Added.
        (WebInspector.TimelineRuler.prototype._handleMouseUp): Added.
        (WebInspector.TimelineRuler.prototype._handleSelectionHandleMouseDown): Added.
        (WebInspector.TimelineRuler.prototype._handleSelectionHandleMouseMove): Added.
        (WebInspector.TimelineRuler.prototype._handleSelectionHandleMouseUp): Added.
        Create selection elements and handle mouse events for drag and move.

2013-12-17  Timothy Hatcher  <timothy@apple.com>

        Support scroll to zoom in TimelineOverview.

        https://bugs.webkit.org/show_bug.cgi?id=125909

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineOverview.js:
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype._handleWheelEvent):

2013-12-17  Timothy Hatcher  <timothy@apple.com>

        Add the start of the TimelineOverview class.

        TimelineOverview currently has a time ruler and tracks the current recording time.

        https://bugs.webkit.org/show_bug.cgi?id=125878

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/TimelineContentView.css:
        (.content-view.timeline > .timeline-overview):
        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView):
        (WebInspector.TimelineContentView.prototype.updateLayout):
        (WebInspector.TimelineContentView.prototype._update):
        (WebInspector.TimelineContentView.prototype._recordingStarted):
        (WebInspector.TimelineContentView.prototype._recordingStopped):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * UserInterface/TimelineMarker.js: Renamed from Source/WebInspectorUI/UserInterface/TimelineEventMarker.js.
        (WebInspector.TimelineMarker):
        (WebInspector.TimelineMarker.prototype.get time):
        (WebInspector.TimelineMarker.prototype.set time):
        (WebInspector.TimelineMarker.prototype.get type):
        * UserInterface/TimelineOverview.css: Added.
        (.timeline-overview > .scroll-container):
        (.timeline-overview > .scroll-container > .timeline-ruler):
        * UserInterface/TimelineOverview.js: Added.
        (WebInspector.TimelineOverview):
        (WebInspector.TimelineOverview.prototype.get element):
        (WebInspector.TimelineOverview.prototype.get startTime):
        (WebInspector.TimelineOverview.prototype.set startTime):
        (WebInspector.TimelineOverview.prototype.get secondsPerPixel):
        (WebInspector.TimelineOverview.prototype.set secondsPerPixel):
        (WebInspector.TimelineOverview.prototype.get endTime):
        (WebInspector.TimelineOverview.prototype.set endTime):
        (WebInspector.TimelineOverview.prototype.addMarker):
        (WebInspector.TimelineOverview.prototype.revealMarker):
        (WebInspector.TimelineOverview.prototype.updateLayout):
        (WebInspector.TimelineOverview.prototype._updateElementWidth):
        (WebInspector.TimelineOverview.prototype._needsLayout):
        * UserInterface/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype.get startTime):
        (WebInspector.TimelineRecording.prototype.get endTime):
        (WebInspector.TimelineRecording.prototype.reset):
        * UserInterface/TimelineRuler.css:
        (.timeline-ruler > .markers):
        (.timeline-ruler > .markers > .marker):
        (.timeline-ruler > .markers > .marker.current-time):
        (.timeline-ruler > .markers > .marker.current-time::before):
        (.timeline-ruler > .markers > .marker.load-event):
        (.timeline-ruler > .markers > .marker.dom-content-event):
        (.timeline-ruler > .markers > .marker.timestamp):
        * UserInterface/TimelineRuler.js:
        (WebInspector.TimelineRuler):
        (WebInspector.TimelineRuler.prototype.updateLayout):
        (WebInspector.TimelineRuler.prototype._needsLayout):
        (WebInspector.TimelineRuler.prototype._needsMarkerLayout.update):
        (WebInspector.TimelineRuler.prototype._needsMarkerLayout):
        (WebInspector.TimelineRuler.prototype._recalculate):
        (WebInspector.TimelineRuler.prototype._updateLeftPositionOfElement):
        (WebInspector.TimelineRuler.prototype._updateMarkers):
        (WebInspector.TimelineRuler.prototype._timelineMarkerTimeChanged):

2013-12-13  Timothy Hatcher  <timothy@apple.com>

        Clean up and refactor TimelineDecorations into TimelineRuler.

        https://bugs.webkit.org/show_bug.cgi?id=125709

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/OverviewTimelineView.css:
        (.timeline-view.overview > .timeline-ruler):
        (.timeline-view.overview > .timeline-ruler > .header):
        (.timeline-view.overview > .timeline-ruler > .event-markers):
        Updated class names and border sides.

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView):
        (WebInspector.OverviewTimelineView.prototype.updateLayout):
        Call updateLayout on the TimelineRuler.

        * UserInterface/TimelineRuler.css: Renamed from Source/WebInspectorUI/UserInterface/TimelineDecorations.css.
        (.timeline-ruler):
        (.timeline-ruler > .header):
        (.timeline-ruler > .header > .divider):
        (.timeline-ruler > .header > .divider > .label):
        (.timeline-ruler > .event-markers):
        (.timeline-ruler > .event-markers > .event-marker-tooltip):
        (.timeline-ruler > .event-markers > .event-marker):
        (.timeline-ruler > .event-markers > .event-marker.load-event):
        (.timeline-ruler > .event-markers > .event-marker.dom-content-event):
        (.timeline-ruler > .event-markers > .event-marker.timestamp):
        Updated class names and border sides.

        * UserInterface/TimelineRuler.js: Renamed from Source/WebInspectorUI/UserInterface/TimelineDecorations.js.
        (WebInspector.TimelineRuler):
        (WebInspector.TimelineRuler.prototype.get element):
        (WebInspector.TimelineRuler.prototype.get headerElement):
        (WebInspector.TimelineRuler.prototype.get allowsClippedLabels):
        (WebInspector.TimelineRuler.prototype.set allowsClippedLabels):
        (WebInspector.TimelineRuler.prototype.get zeroTime):
        (WebInspector.TimelineRuler.prototype.set zeroTime):
        (WebInspector.TimelineRuler.prototype.get startTime):
        (WebInspector.TimelineRuler.prototype.set startTime):
        (WebInspector.TimelineRuler.prototype.get duration):
        (WebInspector.TimelineRuler.prototype.set duration):
        (WebInspector.TimelineRuler.prototype.get endTime):
        (WebInspector.TimelineRuler.prototype.set endTime):
        (WebInspector.TimelineRuler.prototype.get secondsPerPixel):
        (WebInspector.TimelineRuler.prototype.set secondsPerPixel):
        (WebInspector.TimelineRuler.prototype.updateLayout.removeDividerAndSelectNext):
        (WebInspector.TimelineRuler.prototype.updateLayout):
        (WebInspector.TimelineRuler.prototype._needsLayout):
        (WebInspector.TimelineRuler.prototype._recalculate):
        Refactor so the times are stored on TimelineRuler and not passed in each time an update is needed.
        Support dividers that don't always start at the zero position, allowing a sliding time ruler.
        Support for a non-pinned ruler where the end time is not fixed and the scale is specified in
        seconds-per-pixel.

2014-01-08  Timothy Hatcher  <timothy@apple.com>

        Improve scroll performance of WebInspector.TreeOutlineDataGridSynchronizer.

        https://bugs.webkit.org/show_bug.cgi?id=126660

        Reviewed by Joseph Pecoraro.

        * UserInterface/TreeOutlineDataGridSynchronizer.js:
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeOutlineScrolled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridScrolled):
        Ignore scroll events triggered by our internal use of setting scrollTop.

2013-11-15  Timothy Hatcher  <timothy@apple.com>

        Add a synchronized DataGrid to the OverviewTimelineView.

        The DataGrid is synchronized with the sidebar TreeOutline to appear as one when the view
        and sidebar are both showing. The two scroll, expand and collapse in sync when the view
        is showing. When the view is not showing the sidebar can scroll independently.

        https://bugs.webkit.org/show_bug.cgi?id=124429

        Reviewed by Joseph Pecoraro.

        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.createSortableDataGrid):
        (WebInspector.DataGrid.prototype._copyTextForDataGridNode):
        (WebInspector.DataGridNode.prototype.createCellContent):
        Handle undefined/null cells better by substituting empty strings.

        (WebInspector.DataGridNode.prototype.collapse):
        (WebInspector.DataGridNode.prototype.expand):
        Fire events on the DataGrid for expand and collapse.

        * UserInterface/Main.html: Include TreeOutlineDataGridSynchronizer.js.

        * UserInterface/NavigationSidebarPanel.css:
        (.sidebar > .panel.navigation > .content): Shorten by 1px to match the content view height.
        Needed to keep scrolling in sync. The clipping looks better too.

        * UserInterface/OverviewTimelineView.css:
        (.timeline-view.overview > .data-grid):
        (.timeline-view.overview > .data-grid table.header):
        (.timeline-view.overview > .data-grid .data-container):
        Style the DataGrid to to not have a header.

        * UserInterface/OverviewTimelineView.js:
        (WebInspector.OverviewTimelineView):
        (WebInspector.OverviewTimelineView.prototype.shown):
        (WebInspector.OverviewTimelineView.prototype._addResourceToTreeIfNeeded):
        (WebInspector.OverviewTimelineView.prototype._sourceCodeTimelineAdded):
        Create the DataGrid and some placeholder nodes. Hook up TreeOutlineDataGridSynchronizer.

        * UserInterface/TimelineContentView.css:
        (.content-view.timeline > .view-container > .timeline-view > .data-grid td):
        (.content-view.timeline > .view-container > .timeline-view > .data-grid table.data):
        Style the DataGrid to match the height of TreeElements in the sidebar.

        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline.timeline-content-view-showing > .content):
        Hide the scrollbar off the right when the view is showing. The view will show the scrollbar.

        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel):
        (WebInspector.TimelineSidebarPanel.prototype._timelinesTreeElementSelected):
        (WebInspector.TimelineSidebarPanel.prototype._contentBrowserCurrentContentViewDidChange):

        * UserInterface/TreeOutline.js:
        (TreeOutline.prototype.removeChildAtIndex):
        (TreeOutline.prototype.removeChildren):
        (TreeOutline.prototype.removeChildrenRecursive):
        (TreeElement.prototype.set hidden):
        Add event callbacks for onhidden and onremove.

        * UserInterface/TreeOutlineDataGridSynchronizer.js: Added.
        (WebInspector.TreeOutlineDataGridSynchronizer):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.associate):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype.synchronize):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeOutlineScrolled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridScrolled):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeSelected):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeExpanded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._dataGridNodeCollapsed):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementSelected):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementAdded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementRemoved):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementExpanded):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementCollapsed):
        (WebInspector.TreeOutlineDataGridSynchronizer.prototype._treeElementHiddenChanged):

2013-11-07  Timothy Hatcher  <timothy@apple.com>

        Start fleshing out the Overview Timeline view.

        This gets the overview populating in the Timeline sidebar. The graph side is still empty.

        https://bugs.webkit.org/show_bug.cgi?id=124005

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/Frame.js:
        (WebInspector.Frame.prototype.addResource):
        * UserInterface/Images/TimelineRecordAnimation.svg: Added.
        * UserInterface/Images/TimelineRecordEvent.svg: Added.
        * UserInterface/Images/TimelineRecordLayout.svg: Added.
        * UserInterface/Images/TimelineRecordPaint.svg: Added.
        * UserInterface/Images/TimelineRecordScriptEvaluated.svg: Added.
        * UserInterface/Images/TimelineRecordStyle.svg: Added.
        * UserInterface/Images/TimelineRecordTimer.svg: Added.
        * UserInterface/Main.html:
        * UserInterface/OverviewTimelineView.js: Added.
        (WebInspector.OverviewTimelineView):
        (WebInspector.OverviewTimelineView.prototype.get navigationSidebarTreeOutlineLabel):
        (WebInspector.OverviewTimelineView.prototype._childFrameWasAdded):
        (WebInspector.OverviewTimelineView.prototype._mainResourceDidChange):
        (WebInspector.OverviewTimelineView.prototype._provisionalResourceWasAdded):
        (WebInspector.OverviewTimelineView.prototype._resourceWasAdded):
        (WebInspector.OverviewTimelineView.prototype._compareTreeElementsByDetails):
        (WebInspector.OverviewTimelineView.prototype._compareTreeElementsByStartTime):
        (WebInspector.OverviewTimelineView.prototype._insertTreeElement):
        (WebInspector.OverviewTimelineView.prototype._addResourceToTreeIfNeeded):
        (WebInspector.OverviewTimelineView.prototype._sourceCodeTimelineAdded):
        (WebInspector.OverviewTimelineView.prototype._treeElementSelected):
        * UserInterface/SourceCodeTimelineTreeElement.js: Added.
        (WebInspector.SourceCodeTimelineTreeElement):
        (WebInspector.SourceCodeTimelineTreeElement.prototype.get sourceCodeTimeline):
        * UserInterface/TimelineContentView.js:
        (WebInspector.TimelineContentView.createPathComponent):
        (WebInspector.TimelineContentView):
        (WebInspector.TimelineContentView.prototype.showOverviewTimelineView):
        (WebInspector.TimelineContentView.prototype.showTimelineView):
        (WebInspector.TimelineContentView.prototype.get supportsSplitContentBrowser):
        (WebInspector.TimelineContentView.prototype.get selectionPathComponents):
        (WebInspector.TimelineContentView.prototype._pathComponentSelected):
        (WebInspector.TimelineContentView.prototype._showTimelineView):
        (WebInspector.TimelineContentView.prototype._recordingReset):
        * UserInterface/TimelineIcons.css:
        (.style-record .icon): Added.
        (.layout-record .icon): Added.
        (.paint-record .icon): Added.
        (.evaluated-record .icon): Added.
        (.event-record .icon): Added.
        (.timer-record .icon): Added.
        (.animation-record .icon): Added.
        * UserInterface/TimelineView.css: Added.
        (.timeline-view):
        * UserInterface/TimelineView.js: Added.
        (WebInspector.TimelineView):
        (WebInspector.TimelineView.prototype.get navigationSidebarTreeOutline):
        (WebInspector.TimelineView.prototype.get navigationSidebarTreeOutlineLabel):
        (WebInspector.TimelineView.prototype.reset):
        (WebInspector.TimelineView.prototype.shown):
        (WebInspector.TimelineView.prototype.hidden):

2013-11-07  Timothy Hatcher  <timothy@apple.com>

        Start fleshing out the new TimelineSidebarPanel and TimelineContentView.

        https://bugs.webkit.org/show_bug.cgi?id=124003

        Reviewed by Joseph Pecoraro.

        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/FrameContentView.js:
        * UserInterface/Images/CloseTimeline.png: Added.
        * UserInterface/Images/CloseTimeline@2x.png: Added.
        * UserInterface/Images/ColorsLarge.png: Added.
        * UserInterface/Images/ColorsLarge@2x.png: Added.
        * UserInterface/Images/NetworkLarge.png: Added.
        * UserInterface/Images/NetworkLarge@2x.png: Added.
        * UserInterface/Images/ScriptLarge.png: Added.
        * UserInterface/Images/ScriptLarge@2x.png: Added.
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.sidebarPanelForRepresentedObject):
        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar):
        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.showDefaultContentView):
        * UserInterface/ResourceClusterContentView.js:
        * UserInterface/TimelineContentView.css: Added.
        (.content-view.timeline > .view-container):
        * UserInterface/TimelineContentView.js: Added.
        (WebInspector.TimelineContentView):
        * UserInterface/TimelineIcons.css: Renamed from Source/WebInspectorUI/UserInterface/InstrumentIcons.css.
        (.network-icon.large .icon): Added.
        (.colors-icon.large .icon): Added.
        (.script-icon.large .icon): Added.
        * UserInterface/TimelineSidebarPanel.css:
        (.sidebar > .panel.timeline > .navigation-bar):
        (.sidebar > .panel.timeline > .title-bar):
        (.sidebar > .panel.timeline > .title-bar.timelines):
        (.sidebar > .panel.timeline > .title-bar.timeline-events):
        (.sidebar > .panel.timeline > .timelines-content):
        (.sidebar > .panel.timeline > .timelines-content .close-button):
        (.sidebar > .panel.timeline > .timelines-content li.item.selected .close-button):
        (.sidebar > .panel.timeline > .timelines-content .close-button:active):
        (.sidebar > .panel.timeline > .content):
        * UserInterface/TimelineSidebarPanel.js:
        (WebInspector.TimelineSidebarPanel.createTimelineTreeElement):
        (WebInspector.TimelineSidebarPanel):
        (WebInspector.TimelineSidebarPanel.prototype.showDefaultContentView):
        (WebInspector.TimelineSidebarPanel.prototype.treeElementForRepresentedObject):
        (WebInspector.TimelineSidebarPanel.prototype.get contentTreeOutlineLabel):
        (WebInspector.TimelineSidebarPanel.prototype.set contentTreeOutlineLabel):
        (WebInspector.TimelineSidebarPanel.prototype.showTimelineOverview):
        (WebInspector.TimelineSidebarPanel.prototype.showTimelineView):
        (WebInspector.TimelineSidebarPanel.prototype._timelinesTreeElementSelected):

2014-01-08  Timothy Hatcher  <timothy@apple.com>

        Correctly track time bounds of WebInspector.Timeline and WebInspector.TimelineRecording.

        The startTime and endTime were not correct when Network timeline needed to be taken into
        account (due to its dynamic loading nature.) This creates a network Timeline for the purposes
        of tracking the ResourceTimelineRecords and getting accurate start and end times.

        Also changes the way TimelineRecord tracks the inactive portion of time, needed for later
        work on the timeline graphs.

        https://bugs.webkit.org/show_bug.cgi?id=126676

        Reviewed by Joseph Pecoraro.

        * UserInterface/ResourceTimelineRecord.js:
        (WebInspector.ResourceTimelineRecord.prototype.get updatesDynamically):
        (WebInspector.ResourceTimelineRecord.prototype.get usesActiveStartTime):
        (WebInspector.ResourceTimelineRecord.prototype.get startTime):
        (WebInspector.ResourceTimelineRecord.prototype.get activeStartTime):
        (WebInspector.ResourceTimelineRecord.prototype.get endTime):
        * UserInterface/Timeline.js:
        (WebInspector.Timeline):
        (WebInspector.Timeline.prototype.get startTime):
        (WebInspector.Timeline.prototype.get endTime):
        (WebInspector.Timeline.prototype.addRecord):
        (WebInspector.Timeline.prototype._updateTimesIfNeeded):
        (WebInspector.Timeline.prototype._recordUpdated):
        * UserInterface/TimelineRecord.js:
        (WebInspector.TimelineRecord.prototype.get startTime):
        (WebInspector.TimelineRecord.prototype.get activeStartTime):
        (WebInspector.TimelineRecord.prototype.get endTime):
        (WebInspector.TimelineRecord.prototype.get inactiveDuration):
        (WebInspector.TimelineRecord.prototype.get activeDuration):
        (WebInspector.TimelineRecord.prototype.get updatesDynamically):
        (WebInspector.TimelineRecord.prototype.get usesActiveStartTime):
        * UserInterface/TimelineRecording.js:
        (WebInspector.TimelineRecording.prototype._timelineTimesUpdated):

2013-10-25  Timothy Hatcher  <timothy@apple.com>

        Implement TimelineRecording and per-call-site timelines.

        Keep track of timeline records per global timeline and per source code location.
        This will be used to display them in the UI in later patches.

        https://bugs.webkit.org/show_bug.cgi?id=123367

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.html:
        * UserInterface/SourceCodeTimeline.js: Added.
        (WebInspector.SourceCodeTimeline):
        (WebInspector.SourceCodeTimeline.prototype.get sourceCode):
        (WebInspector.SourceCodeTimeline.prototype.get sourceCodeLocation):
        (WebInspector.SourceCodeTimeline.prototype.get recordType):
        (WebInspector.SourceCodeTimeline.prototype.get recordEventType):
        * UserInterface/Timeline.js: Added.
        (WebInspector.Timeline):
        (WebInspector.Timeline.prototype.get records):
        (WebInspector.Timeline.prototype.addRecord):
        * UserInterface/TimelineRecording.js:
        (WebInspector.TimelineRecording):
        (WebInspector.TimelineRecording.prototype.get timelines): Added.
        (WebInspector.TimelineRecording.prototype.sourceCodeTimelinesForSourceCode): Added.
        (WebInspector.TimelineRecording.prototype.addEventMarker): Implemented.
        (WebInspector.TimelineRecording.prototype.addRecord): Implemented.
        (WebInspector.TimelineRecording.prototype._keyForRecord): Added.

2013-10-25  Timothy Hatcher  <timothy@apple.com>

        Add support for multiple Timeline recordings.

        We also don't explicitly add ResourceTimelineRecords anymore. These will be tracked automatically in a later patch.

        https://bugs.webkit.org/show_bug.cgi?id=123366

        Reviewed by Joseph Pecoraro.

        * UserInterface/DashboardManager.js:
        (WebInspector.DashboardManager.prototype._mainResourceDidChange): Check for currentRecording.
        * UserInterface/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.isTimelineProfilingEnabled): Check for currentRecording.
        * UserInterface/Main.html:
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager):
        (WebInspector.TimelineManager.prototype.get currentRecording): Added.
        (WebInspector.TimelineManager.prototype.startRecording): Make a new recording and push it onto the recording array.
        Add the current recording to the event.
        (WebInspector.TimelineManager.prototype.stopRecording): Add the current recording to the event.
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord): Check for currentRecording. Add the markers
        to the current recording.
        (WebInspector.TimelineManager.prototype._addRecord): Add the record to the current recording.
        (WebInspector.TimelineManager.prototype._startAutoRecording): Clean up. Don't add ResourceTimelineRecord. Clear recordings.
        (WebInspector.TimelineManager.prototype._stopAutoRecordingSoon): Check for _currentRecording.
        (WebInspector.TimelineManager.prototype._resetAutoRecordingDeadTimeTimeout): Ditto.
        (WebInspector.TimelineManager.prototype._mainResourceDidChange): Don't add ResourceTimelineRecord anymore.
        (WebInspector.TimelineManager.prototype._resourceWasAdded): Removed.
        * UserInterface/TimelineRecording.js: Added.
        (WebInspector.TimelineRecording): Added.
        (WebInspector.TimelineRecording.prototype.addEventMarker): Added.
        (WebInspector.TimelineRecording.prototype.addRecord): Added.

2013-10-25  Timothy Hatcher  <timothy@apple.com>

        Track callFrames and sourceCodeLocation per TimelineRecord.

        https://bugs.webkit.org/show_bug.cgi?id=123359

        Reviewed by Joseph Pecoraro.

        * UserInterface/LayoutTimelineRecord.js:
        (WebInspector.LayoutTimelineRecord): Pass callFrames and sourceCodeLocation to superclass.
        * UserInterface/ScriptTimelineRecord.js:
        (WebInspector.ScriptTimelineRecord): Pass callFrames and sourceCodeLocation to superclass.
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord): Add "Payload" suffix to better track what is a protocol object.
        Pass the callFrames and sourceCodeLocation to all the new TimelineRecords.
        (WebInspector.TimelineManager.prototype.eventRecorded): Add "Payload" suffix.
        * UserInterface/TimelineRecord.js:
        (WebInspector.TimelineRecord):
        (WebInspector.TimelineRecord.prototype.get callFrames): Added.
        (WebInspector.TimelineRecord.prototype.get initiatorCallFrame): Added.
        (WebInspector.TimelineRecord.prototype.get sourceCodeLocation): Added.

2013-10-25  Timothy Hatcher  <timothy@apple.com>

        Change how the load and content ready event timestamps are tracked.

        https://bugs.webkit.org/show_bug.cgi?id=123356

        Reviewed by Joseph Pecoraro.

        * UserInterface/DashboardManager.js:
        (WebInspector.DashboardManager.prototype._updateTime): Use the timestamps on the main frame.
        * UserInterface/Frame.js:
        (WebInspector.Frame):
        (WebInspector.Frame.prototype.get domContentReadyEventTimestamp): Added.
        (WebInspector.Frame.prototype.get loadEventTimestamp): Added.
        (WebInspector.Frame.prototype.markDOMContentReadyEvent): Added.
        (WebInspector.Frame.prototype.markLoadEvent): Added.
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord): Use markLoadEvent and markDOMContentReadyEvent.
        Do it for all frames, not just the main frame.
        (WebInspector.TimelineManager.prototype.pageDidLoad): Call markLoadEvent on the Frame.

2013-10-25  Timothy Hatcher  <timothy@apple.com>

        Remove a lot of the current Timelines code to make room for a new implementation.

        https://bugs.webkit.org/show_bug.cgi?id=123368

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/DashboardView.js:
        (WebInspector.DashboardView.prototype._networkItemWasClicked):
        * UserInterface/InspectorFrontendAPI.js:
        (InspectorFrontendAPI.setTimelineProfilingEnabled):
        (InspectorFrontendAPI.stopProfilingJavaScript):
        * UserInterface/InstrumentSidebarPanel.js: Removed.
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.contentLoaded):
        (WebInspector.sidebarPanelForRepresentedObject):
        (WebInspector.openURL):
        * UserInterface/Object.js:
        (WebInspector.Object.addEventListener):
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager):
        (WebInspector.TimelineManager.prototype.startRecording):
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        (WebInspector.TimelineManager.prototype.objectForCookie):
        (WebInspector.TimelineManager.prototype._addRecord):
        * UserInterface/TimelinesObject.js: Removed.
        * UserInterface/TimelineOverview.css: Removed.
        * UserInterface/TimelineOverview.js: Removed.
        * UserInterface/TimelineSidebarPanel.css: Added.
        * UserInterface/TimelineSidebarPanel.js: Added.
        (WebInspector.TimelineSidebarPanel):
        * UserInterface/TimelinesContentView.css: Removed.
        * UserInterface/TimelinesContentView.js: Removed.

2014-01-20  Timothy Hatcher  <timothy@apple.com>

        Fix jumping to a text position when showing a resource.

        https://bugs.webkit.org/show_bug.cgi?id=127271

        Reviewed by Joseph Pecoraro.

        * UserInterface/FrameContentView.js:
        (WebInspector.FrameContentView.prototype.showSourceCode): Just use showResponse's arguments
        which already does the same logic to call revealPosition.
        * UserInterface/ResourceClusterContentView.js:
        (WebInspector.ResourceClusterContentView.prototype.restoreFromCookie): This was the bug.
        lineNumber and columnNumber need honored here. They were only honored by FrameContentView.
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showSourceCode): Use showContentViewForRepresentedObject
        which also accepts a cookie and handles creating the content view for us.

2014-01-16  Brian Burg  <bburg@apple.com>

        Web Inspector: add more context to Object.addEventListener assertions
        https://bugs.webkit.org/show_bug.cgi?id=127125

        Reviewed by Joseph Pecoraro.

        Log invalid event type and listener parameters, and log the other
        parameters so the callsite is easier to figure out.

        * UserInterface/Object.js:
        (WebInspector.Object.addEventListener):

2014-01-16  Brian Burg  <bburg@apple.com>

        Web Inspector: CallFrame is missing saveIdentityToCookie, or should be excluded
        https://bugs.webkit.org/show_bug.cgi?id=126791

        Reviewed by Timothy Hatcher.

        * UserInterface/CallFrame.js: Add a dummy saveIdentityToCookie() implementation.

2014-01-16  Brian Burg  <bburg@apple.com>

        Web Inspector: add probe breakpoint action to popup breakpoint editor
        https://bugs.webkit.org/show_bug.cgi?id=126931

        Reviewed by Timothy Hatcher.

        Add probes to the breakpoint action dropdown.
        Reuse the "evaluate JavaScript" input UI.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/BreakpointAction.js:
        * UserInterface/BreakpointActionView.js:
        (WebInspector.BreakpointActionView.displayStringForType):
        (WebInspector.BreakpointActionView.prototype._updateBody.switch.break):

2014-01-15  Brian Burg  <bburg@apple.com>

        Web Inspector: capture probe samples on the backend
        https://bugs.webkit.org/show_bug.cgi?id=126668

        Reviewed by Joseph Pecoraro.

        * UserInterface/InspectorJSBackendCommands.js: Add probe enumeration value.

2014-01-15  Andreas Kling  <akling@apple.com>

        Remove the CSS selector profiler.
        <https://webkit.org/b/127039>

        Purge selector profiler code from the new Web Inspector UI.

        Reviewed by Sam Weinig.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/CSSSelectorProfileObject.js: Removed.
        * UserInterface/CSSSelectorProfileType.js: Removed.
        * UserInterface/CSSSelectorProfileView.js: Removed.
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/InspectorWebBackendCommands.js:
        * UserInterface/InstrumentSidebarPanel.js:
        (WebInspector.InstrumentSidebarPanel):
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphMousedOver):
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphMousedDown):
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphClicked):
        (WebInspector.InstrumentSidebarPanel.prototype._profileTypeWasSelected):
        (WebInspector.InstrumentSidebarPanel.prototype._profilesCleared):
        * UserInterface/Main.html:
        * UserInterface/ProfileManager.js:
        (WebInspector.ProfileManager):
        (WebInspector.ProfileManager.prototype.initialize):
        (WebInspector.ProfileManager.prototype._checkForInterruptions):
        (WebInspector.ProfileManager.prototype._attemptToResumeProfiling):
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2014-01-13  Timothy Hatcher  <timothy@apple.com>

        Snap time dividers to nearest numbers instead of just dividing the time span into max density slices.

        https://bugs.webkit.org/show_bug.cgi?id=125081

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineDecorations.js:
        (WebInspector.TimelineDecorations.prototype.updateHeaderTimes): Snap the time slice to a nearest number.
        (WebInspector.TimelineDecorations.prototype.updateEventMarkers): Rename boundarySpan to timeSpan.

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove unimplemented or static ScriptDebugServer features
        https://bugs.webkit.org/show_bug.cgi?id=126784

        Reviewed by Timothy Hatcher.

        * UserInterface/InspectorJSBackendCommands.js:
        * UserInterface/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Web Inspector: support negative numbers in secondsToString and bytesToString.

        https://bugs.webkit.org/show_bug.cgi?id=125708

        Reviewed by Joseph Pecoraro.

        * UserInterface/Utilities.js:
        (Number.secondsToString): Use Math.abs in the size checks.
        (Number.bytesToString): Ditto.

2014-01-10  Brian Burg  <bburg@apple.com>

        Web Inspector: cycle clicked breakpoints between enabled, auto-continue, and disabled
        https://bugs.webkit.org/show_bug.cgi?id=126669

        Reviewed by Joseph Pecoraro.

        It's time-consuming to change a breakpoint's auto-continue setting through the
        breakpoint editor popup. This patch enables the user to toggle between enabled,
        auto-continue, and disabled by clicking on the breakpoint wedge in the sidebar
        tree and in the source text editor gutter. The auto-continue option is only
        cycled when the breakpoint has associated actions.

        Clean up the breakpoint editor dialog so it hides irrelevant options when
        no breakpoint actions have been added.

        Automatically unset auto-continue when the last breakpoint action is removed.

        Rename the delegate textEditorBreakpointToggled to textEditorBreakpointClicked, since
        the behavior of the click depends on breakpoint state not available in the text editor.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.cycleToNextMode): Added.
        (WebInspector.Breakpoint.prototype.toggleAutoContinue): Added.
        (WebInspector.Breakpoint.prototype.appendContextMenuItems): Add auto-continue options.
        (WebInspector.Breakpoint.prototype.removeAction):

        (WebInspector.Breakpoint.prototype._editBreakpointPopoverContentElement):
        (WebInspector.Breakpoint.prototype._popoverActionsAddActionButtonClicked):
        (WebInspector.Breakpoint.prototype.breakpointActionViewAppendActionView):
        (WebInspector.Breakpoint.prototype.breakpointActionViewRemoveActionView):
        (WebInspector.Breakpoint.prototype.willDismissPopover):
        * UserInterface/BreakpointTreeElement.css:
        (.item.breakpoint .status > .status-image.auto-continue):
        (.item.breakpoint .status > .status-image.disabled):
        * UserInterface/BreakpointTreeElement.js:
        (WebInspector.BreakpointTreeElement):
        (WebInspector.BreakpointTreeElement.prototype.onenter):
        (WebInspector.BreakpointTreeElement.prototype.onspace):
        (WebInspector.BreakpointTreeElement.prototype._updateStatus):
        (WebInspector.BreakpointTreeElement.prototype._breakpointLocationDidChange):
        (WebInspector.BreakpointTreeElement.prototype._statusImageElementClicked):
        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor):
        (WebInspector.SourceCodeTextEditor.prototype.close):
        (WebInspector.SourceCodeTextEditor.prototype._breakpointInfoForBreakpoint):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointClicked):
        * UserInterface/TextEditor.css:
        (.text-editor > .CodeMirror .breakpoint-auto-continue:not(.breakpoint-disabled) .CodeMirror-linenumber::before):
        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype._setBreakpointStylesOnLine.updateStyles):
        (WebInspector.TextEditor.prototype._setBreakpointStylesOnLine):
        (WebInspector.TextEditor.prototype.updateStyles):
        (WebInspector.TextEditor.prototype._removeBreakpointFromLineAndColumn):
        (WebInspector.TextEditor.prototype._documentMouseUp):

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Clean up some areas of TreeOutline.

        https://bugs.webkit.org/show_bug.cgi?id=123924

        Reviewed by Joseph Pecoraro.

        * UserInterface/TreeOutline.js:
        (TreeOutline.prototype.appendChild): Don't force create _childrenListNode, it will be created
        when the tree element is expanded. Only attach if _childrenListNode already exists.
        (TreeOutline.prototype.insertChild): Ditto.
        (TreeOutline.prototype.getCachedTreeElement): Check the value of __treeElementIdentifier
        not just the existence of the property. It should never be null/undefined/0, but be safe.
        (TreeOutline.prototype.findTreeElement): Null check isAncestor, it isn't required.

2014-01-10  Timothy Hatcher  <timothy@apple.com>

        Fix an exception in WebInspector.Color.

        https://bugs.webkit.org/show_bug.cgi?id=126765

        Reviewed by Joseph Pecoraro.

        * UserInterface/Color.js:
        (WebInspector.Color.fromString): Check hasOwnPrperty before using the nickname color array.
        (WebInspector.Color.prototype._toNicknameString): Ditto.

2014-01-10  Joseph Pecoraro  <pecoraro@apple.com>

        [CSS Blending] Log blending as a layer creation reason in the WI
        https://bugs.webkit.org/show_bug.cgi?id=126159

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._populateListOfCompositingReasons):

2014-01-10  Peter Molnar  <pmolnar.u-szeged@partner.samsung.com>

        Add missing function stub in InspectorFrontendHostStub.js
        https://bugs.webkit.org/show_bug.cgi?id=126745

        Reviewed by Timothy Hatcher.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.debuggableType):
        The function debuggableType() was added to InspectorFrontendHost.idl and InspectorFrontendHost.cpp
        in r160887, but not to InspectorFrontendHostStub.js.

2014-01-09  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove unused overriding protocols.
        https://bugs.webkit.org/show_bug.cgi?id=126630

        Reviewed by Timothy Hatcher.

        Update InspectorWebBackendCommands.js after removing unused overriding protocols.

        * UserInterface/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-01-07  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Typo "clipboarPrefixString"
        https://bugs.webkit.org/show_bug.cgi?id=126595

        Reviewed by Sam Weinig.

        * UserInterface/ConsoleCommandResult.js:
        (WebInspector.ConsoleCommandResult.prototype.toMessageElement):
        (WebInspector.ConsoleCommandResult.prototype.get clipboardPrefixString):
        * UserInterface/ConsoleMessageImpl.js:
        (WebInspector.ConsoleMessageImpl.prototype.get clipboardPrefixString):
        (WebInspector.ConsoleMessageImpl.prototype.toClipboardString):

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove canOverrideDeviceMetrics and setDeviceMetricsOverride from protocol
        https://bugs.webkit.org/show_bug.cgi?id=126149

        Reviewed by Joseph Pecoraro.

        * UserInterface/InspectorWebBackendCommands.js: Remove unused codes.
        * UserInterface/Legacy/6.0/InspectorWebBackendCommands.js: Ditto.
        * UserInterface/Legacy/7.0/InspectorWebBackendCommands.js: Ditto.
        * Versions/Inspector-iOS-6.0.json: Ditto.
        * Versions/Inspector-iOS-7.0.json: Ditto.

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove support for FileSystem in Frontend.
        https://bugs.webkit.org/show_bug.cgi?id=126369

        Reviewed by Joseph Pecoraro.

        Update InspectorWebBackendCommands after removing 'FileSystem' domain.

        * UserInterface/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/6.0/InspectorWebBackendCommands.js:
        * UserInterface/Legacy/7.0/InspectorWebBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json:
        * Versions/Inspector-iOS-7.0.json:

2014-01-06  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Get rid of DOM.setFileInputFiles from Protocol
        https://bugs.webkit.org/show_bug.cgi?id=126312

        Reviewed by Joseph Pecoraro.

        Update InspectorWebBackendCommands.js after removing DOM.setFileInputFiles.

        * UserInterface/InspectorWebBackendCommands.js:

2013-12-22  Martin Robinson  <mrobinson@igalia.com>

        [GTK][CMake] Integrate GResource for inspector files (and others?)
        https://bugs.webkit.org/show_bug.cgi?id=125569

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Use the new generation script instead of generating with
        shell scripting in the makefile.

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Frontend Error when selecting Database folder in Resources Sidebar
        https://bugs.webkit.org/show_bug.cgi?id=126029

        Reviewed by Timothy Hatcher.

        Treat the DatabaseHostTreeElement tree element like a folder. It pretty much
        is a folder, but inherits from StorageTreeElement to share some code there.

        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught Exception: NavigationSidebarPanel.js: TypeError: undefined is not a function
        https://bugs.webkit.org/show_bug.cgi?id=126018

        Reviewed by Timothy Hatcher.

        ERROR: TypeError: undefined is not a function (evaluating 'representedObject.saveIdentityToCookie(candidateObjectCookie)')

        There are some TreeElements (Folders, and the special Databases Folder)
        which do not have a represented object, and would throw an exception
        when trying to use saveIdentityToCookie.

        We should always provide a saveIdentityToCookie when possible. So just
        blacklist the tree element types we know do not have representedObjects,
        and where we don't want to save identity. This will continue to throw
        exceptions in the future for tree elements that don't have the save
        function implemented, but should.

        Note that even if a TreeElement is constructed with a null represented
        object, it becomes an empty object (representedObject || {}).

        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype.saveStateToCookie):
        (WebInspector.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject):
        (WebInspector.NavigationSidebarPanel.prototype.treeElementMatchesCookie):
        (WebInspector.NavigationSidebarPanel.prototype._checkElementsForPendingViewStateCookie):

2013-12-19  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add InspectorFrontendHost.debuggableType to let the frontend know it's backend is JavaScript or Web
        https://bugs.webkit.org/show_bug.cgi?id=126016

        Reviewed by Timothy Hatcher.

        * UserInterface/LoadInspectorBackendCommands.js:
        If the debuggable target is "web" load both JS and Web backend commands.
        Otherwise, we only load the default, js backend commands.

2013-12-16  Alex Christensen  <achristensen@webkit.org>

        Fixed Win64 build on VS2013.
        https://bugs.webkit.org/show_bug.cgi?id=125753

        Reviewed by Brent Fulgham.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        Added 64-bit configuration.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Move Inspector and Debugger protocol domains into JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=125707

        Reviewed by Timothy Hatcher.

        * UserInterface/InspectorJSBackendCommands.js:
        * UserInterface/InspectorWebBackendCommands.js:
        Regenerate now that domains have moved around.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Exception: TypeError: undefined is not a function (evaluating 'marker.find()')
        https://bugs.webkit.org/show_bug.cgi?id=125724

        Reviewed by Darin Adler.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        The callback changed to returning WebInspector.TextMarkers, however
        this class expected a raw CodeMirror marker. Since this class knows
        about CodeMirror and expects to access these markers later go
        directly to the CodeMirror marker.

2013-12-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Add Inspector Code Generation to JavaScriptCore for Runtime Domain
        https://bugs.webkit.org/show_bug.cgi?id=125595

        Reviewed by Timothy Hatcher.

        * Scripts/copy-user-interface-resources.sh:
        Copy all the different backend commands files.

        * Scripts/update-InspectorBackendCommands.rb:
        Update with respect to new script location and new file names.

        * WebInspectorUI.xcodeproj/project.pbxproj:
        Remove Inputs and Outputs of build phase, which were wrong.
        Now this build phase always runs, and not by accident.

        * UserInterface/InspectorJSBackendCommands.js: Added.
        * UserInterface/InspectorWebBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/InspectorBackendCommands.js.
        * UserInterface/Legacy/6.0/InspectorWebBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/Legacy/6.0/InspectorBackendCommands.js.
        * UserInterface/Legacy/7.0/InspectorWebBackendCommands.js: Renamed from Source/WebInspectorUI/UserInterface/Legacy/7.0/InspectorBackendCommands.js.
        * UserInterface/LoadInspectorBackendCommands.js:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:

2013-12-13  Antoine Quint  <graouts@apple.com>

        Web Inspector: provide an abstraction for CodeMirror's TextMarker
        https://bugs.webkit.org/show_bug.cgi?id=125695

        Reviewed by Timothy Hatcher.

        Introduce a new WebInspector.TextMarker class which is used by code with CodeMirror knowledge
        to return information related to text markers to objects that should have no direct knowledge
        of CodeMirror. Start using this class in TextEditor and SourceCodeTextEditor to remove the
        last remaining pieces of CodeMirror knowledge added to SourceCodeTextEditor to fix
        https://webkit.org/b/124364.

        * UserInterface/CodeMirrorAdditions.js:
        Stop using __markedColor to identify a color marker and instead use the type on the matching
        WebInspector.TextMarker. Additionally, create a WebInspector.TextMarker with type
        WebInspector.TextMarker.Type.Color in createColorMarkers().

        * UserInterface/CodeMirrorColorEditingController.js:
        (WebInspector.CodeMirrorColorEditingController):
        Use a WebInspector.TextRange to track the edited range and obtain it directly from the
        WebInspector.TextMaker used to instantiate the object. We also use the new "text" public
        property to create the color.

        (WebInspector.CodeMirrorColorEditingController.prototype.set color):
        Simply assing the serialized color to the new "text" public property.

        (WebInspector.CodeMirrorColorEditingController.prototype.get text):
        (WebInspector.CodeMirrorColorEditingController.prototype.set text):
        New public property to set get and set the text for the edited range, automatically updating
        the range upon setting to a new text.

        (WebInspector.CodeMirrorColorEditingController.prototype.presentHoverMenu):
        Obtain the bounds directly from the WebInspector.TextMarker object.

        * UserInterface/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController.prototype._updateHoveredTokenInfo):
        Since we're now tracking the hoveredMarker as a WebInspector.TextMarker, get the CodeMirror
        TextMarker from that object to check if it's contained within the text markers at the
        hovered position.

        * UserInterface/Main.html:
        Add the new TextMarker class source.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._hasColorMarkers):
        Use the WebInspector.TextMarker type to identify a given text marker is marking a color.

        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerNewHighlightCandidate):
        Use the renamed markersAtPosition() method from TextEditor.

        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedMarkedExpression):
        Use the WebInspector.TextMarker type to identify a given text marker is marking a color.

        (WebInspector.SourceCodeTextEditor.prototype.colorEditingControllerDidFinishEditing):
        Since the CodeMirrorColorEditingController is now using a WebInspector.TextRange for its range,
        update to use a WebInspector.TextRange API to get the range's start line.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.get markers):
        Return WebInspector.TextMarker objects instead of CodeMirror TextRange objects.

        (WebInspector.TextEditor.prototype.markersAtPosition):
        Rename method to a better name instead of using the CodeMirror-influenced name. Also, return
        WebInspector.TextMarker objects instead of CodeMirror TextRange objects.

        * UserInterface/TextMarker.js: Added.
        (WebInspector.TextMarker):
        Create a WebInspector.TextMarker with a CodeMirror TextMarker and an optional type.

        (WebInspector.TextMarker.textMarkerForCodeMirrorTextMarker):
        Static method to either obtain the existing WebInspector.TextMarker for a given CodeMirror
        TextMarker, or create a new WebInspector.TextMarker.

        (WebInspector.TextMarker.prototype.get codeMirrorTextMarker):
        Public property to access the CodeMirror TextMarker objects for classes that have direct
        knowledge of CodeMirror.

        (WebInspector.TextMarker.prototype.get type):
        Public property to access the type used to create this text marker.

        (WebInspector.TextMarker.prototype.get range):
        (WebInspector.TextMarker.prototype.get bounds):
        Public properties allowing easy access to generally useful information related to marked text.

        (WebInspector.TextMarker.prototype.clear):
        Wrapper for the CodeMirror TextMarker clear() method.

2013-12-13  Brent Fulgham  <bfulgham@apple.com>

        [Win] Switch WebKit solution to Visual Studio 2013
        https://bugs.webkit.org/show_bug.cgi?id=125192

        Reviewed by Anders Carlsson.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Update for VS2013

2013-12-12  Laszlo Vidacs  <lac@inf.u-szeged.hu>

        Web Inspector: ES6: JavaScript syntax highlighting and recognition of for..of
        https://bugs.webkit.org/show_bug.cgi?id=122868

        Reviewed by Timothy Hatcher.

        Update to CodeMirror 3.20 including javascript ES6 updates.

        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js: Minor local change due to error from jsmin.py
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js: Minor local change due to error from jsmin.py
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/htmlmixed.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/less.js:
        * UserInterface/External/CodeMirror/matchbrackets.js:
        * UserInterface/External/CodeMirror/placeholder.js:
        * UserInterface/External/CodeMirror/runmode.js:
        * UserInterface/External/CodeMirror/searchcursor.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:

2013-12-12  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow editing of colors in CSS resources
        https://bugs.webkit.org/show_bug.cgi?id=124364

        Reviewed by Timothy Hatcher.

        Identify colors in CSS and HTML resources so that hovering these colors shows a HoverMenu
        allowing a ColorPicker hosted in a Popover to be shown to edit the hovered color.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        Remove the code that goes through the lines of the CodeMirror editor to look for
        color strings and replace it with a call to the .createColorMarkers() CodeMirror
        extension in which the code was refactored. The callback passed to
        .createColorMarkers() handles the CSSStyleDeclarationTextEditor-specific creation
        of color swatches to show the popover, keeping the existing behavior of the Styles
        sidebar panel.

        * UserInterface/CodeMirrorAdditions.js:
        Refactor existing code into two new CodeMirror extensions: .boundsForRange(), which
        was previously defined on the CodeMirrorTokenTrackingController but was also needed
        in the new CodeMirrorColorEditingController, and .createColorMarkers(), discussed above.

        * UserInterface/CodeMirrorColorEditingController.js: Added.
        (WebInspector.CodeMirrorColorEditingController):
        New class used by SourceCodeTextEditor to coordinate the editing of a color in a CodeMirror
        TextMarker by a ColorPicker hosted in a Popover shown by the activation of a HoverMenu. This
        controller automatically gets the color set by the user using the ColorPicker and updates
        the CodeMirror text editor with the new value. When the user presses the Esc. key while the
        popover is shown, it's automatically dismissed and the original color is reset in the editor.

        (WebInspector.CodeMirrorColorEditingController.prototype.get marker):
        (WebInspector.CodeMirrorColorEditingController.prototype.get range):
        (WebInspector.CodeMirrorColorEditingController.prototype.get delegate):
        (WebInspector.CodeMirrorColorEditingController.prototype.set delegate):
        Getters and setters for public properties.

        (WebInspector.CodeMirrorColorEditingController.prototype.get color):
        (WebInspector.CodeMirrorColorEditingController.prototype.set color):
        Get and set the color for the edited color marker, replacing the text in the marker's range
        upon setting.

        (WebInspector.CodeMirrorColorEditingController.prototype.presentHoverMenu):
        Public API allowing for a HoverMenu to be shown around the bounds of the TextMarker passed
        in the constructor. This method is called from SourceCodeTextEditor when the
        CodeMirrorTokenTrackingController identifies that a token that is part of a TextMarker is
        hovered and that token is a color.

        (WebInspector.CodeMirrorColorEditingController.prototype.dismissHoverMenu):
        Public API allowing for the HoverMenu to be dismissed. This method is called when the
        CodeMirrorTokenTrackingController identifies that its "hoveredMarker" is no longer being
        hovered as well as when we identify that editing of the color has completed.

        (WebInspector.CodeMirrorColorEditingController.prototype.handleEvent):
        Event handler for the "keydown" event that are being listened to when the HoverMenu
        is activated such that the Esc. key can be used to dimiss the popover and reset the
        original color before any edits.

        (WebInspector.CodeMirrorColorEditingController.prototype.hoverMenuButtonWasPressed):
        Implementation of the HoverMenu delegation method used to show a Popover containing a
        ColorPicker upon clicking on the color wheel attached to the HoverMenu. We also remember
        the color set on the marker so that it may be restored when Esc. is pressed and used to
        set the original state of the ColorPicker. The delegation method
        colorEditingControllerDidStartEditing() is also called at this point, which the
        SourceCodeTextEditor implements.

        (WebInspector.CodeMirrorColorEditingController.prototype.didDismissPopover):
        Implementation of the Popover delegation method used to identify that color editing has
        completed. The delegation method colorEditingControllerDidFinishEditing() is called
        at this point, which the SourceCodeTextEditor implements.

        (WebInspector.CodeMirrorColorEditingController.prototype._colorPickerColorChanged):
        Apply the color set in the color picker to the CodeMirror text editor.

        * UserInterface/CodeMirrorTokenTrackingController.js:
        Add two new modes to CodeMirrorTokenTrackingController. The first mode is "None" and is
        the default, incurring no specific token handling behavior. The second mode is "MarkedTokens"
        which identifies hover of a token contained in a CodeMirror TextMarker range. The new
        "MarkedTokens" mode is used by SourceCodeTextEditor to identify when a marked color is being
        hovered to display a HoverMenu.

        (WebInspector.CodeMirrorTokenTrackingController):
        (WebInspector.CodeMirrorTokenTrackingController.prototype.set mode):
        Make "None" the new default mode for CodeMirrorTokenTrackingController.

        (WebInspector.CodeMirrorTokenTrackingController.prototype.get hoveredMarker):
        (WebInspector.CodeMirrorTokenTrackingController.prototype.set hoveredMarker):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._updateHoveredTokenInfo):
        Check, when we have a "hoveredMarker" set on the CodeMirrorTokenTrackingController,
        whether the "hoveredMarker" is still being hovered when there is no token at the current
        mouse position. We can then determine when we're mousing out of the "hoveredMarker" and
        notify the delegate via the new tokenTrackingControllerMouseOutOfHoveredMarker delegate
        method. The SourceCodeTextEditor uses this method to dismiss its CodeMirrorColorEditingController.

        (WebInspector.CodeMirrorTokenTrackingController.prototype._processNewHoveredToken):
        Add support for the new "MarkedTokens" mode.

        (WebInspector.CodeMirrorTokenTrackingController.prototype._processMarkedToken):
        For the moment, use the same behavior as the existing "MarkedTokens" mode.

        * UserInterface/Color.js:
        (WebInspector.Color):
        Add a new "valid" property to identify whether a color has any invalid (NaN) component. This property
        is used by SourceCodeTextEditor to establish whether a hovered color marker is indeed set to a
        valid color still.

        (WebInspector.Color.prototype.copy):
        New method to create an exact copy of a Color instance, used by CodeMirrorColorEditingController
        to duplicate the edited color in case we need to revert it.

        * UserInterface/HoverMenu.js:
        (WebInspector.HoverMenu.prototype._handleClickEvent):
        Rename hoverMenuWasActivated to hoverMenuButtonWasPressed per review feedback.

        * UserInterface/Images/ColorIcon.png: Added.
        * UserInterface/Images/ColorIcon@2x.png: Added.
        New color wheel icon used to customize the HoverMenu shown by a CodeMirrorColorEditingController.

        * UserInterface/Main.html:
        Link to the new CodeMirrorColorEditingController.js file.

        * UserInterface/SourceCodeTextEditor.css:
        (.hover-menu.color):
        (.hover-menu.color > img):
        Customize the HoverMenu shown by a CodeMirrorColorEditingController to use the new ColorIcon asset.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor):
        Add a new "_ignoreContentDidChange" ivar that increments and decrements to track when handling
        of CodeMirror content changes should be disabled.

        (WebInspector.SourceCodeTextEditor.prototype.close):
        Adopt the new ._updateTokenTrackingControllerState() method to update the state of the
        CodeMirrorTokenTrackingController.

        (WebInspector.SourceCodeTextEditor.prototype.contentDidChange):
        Override the new TextEditor public API called when content in the CodeMirror text editor is changed.
        We use this method to process any newly added line to create any newly added color marker.

        (WebInspector.SourceCodeTextEditor.prototype._contentDidPopulate):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidPause):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidResume):
        (WebInspector.SourceCodeTextEditor.prototype._sourceCodeSourceMapAdded):
        Adopt the new ._updateTokenTrackingControllerState() method to update the state of the
        CodeMirrorTokenTrackingController.

        (WebInspector.SourceCodeTextEditor.prototype._updateTokenTrackingControllerState):
        New method acting as the only point where we check the state of the text editor and set the right
        mode and settings on the CodeMirrorTokenTrackingController, including setting the new "MarkedTokens"
        mode when we have color markers, as determined by ._hasColorMarkers().

        (WebInspector.SourceCodeTextEditor.prototype._hasColorMarkers):
        Check whether any of the TextMarkers set on the CodeMirror text editor were created for a color.

        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerHighlightedRangeWasClicked):
        Check the CodeMirrorTokenTrackingController mode rather than the removed "_jumpToSymbolTrackingModeEnabled"
        ivar to identify we're in the "NonSymbolTokens" mode.

        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerNewHighlightCandidate):
        Refactor method to use the CodeMirrorTokenTrackingController mode to branch into mode-specific code
        and add a new branch for the new "MarkedTokens" mode where we check if the newly hovered token
        is part of a color TextMarker range.

        (WebInspector.SourceCodeTextEditor.prototype.tokenTrackingControllerMouseOutOfHoveredMarker):
        Implement this new CodeMirrorTokenTrackingController delegation method to dismiss the
        CodeMirrorColorEditingController as we identify we're no longer hovering over the TextMarker
        for which the CodeMirrorColorEditingController was created.

        (WebInspector.SourceCodeTextEditor.prototype._showPopover):
        Adopt the new TextEditor boundsForRange() method.

        (WebInspector.SourceCodeTextEditor.prototype._updateColorMarkers):
        Harness the new TextEditor createColorMarkers() method to create new TextMarkers for the provided
        line, or the entire text editor content if none provided. We then immediately call _updateTokenTrackingControllerState()
        so that the new "MarkedTokens" mode is entered in case color TextMarkers were created for the first
        time for this text editor.

        (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedMarkedExpression):
        Called when we've identified the CodeMirrorTokenTrackingController highlighted a TextMarker. We check
        if any of the hovered TextMarkers are for a color, and in this case create a CodeMirrorColorEditingController
        to coordinate the display of a ColorPicker in a Popover to edit the hovered color token. We also check
        whether the hovered marker still contains a valid color, clearing the marker in case it was edited to
        no longer contain a color.

        (WebInspector.SourceCodeTextEditor.prototype._dismissCodeMirrorColorEditingController):
        Used to dismiss the CodeMirrorColorEditingController, if previously presented, and reset some internal state.

        (WebInspector.SourceCodeTextEditor.prototype.colorEditingControllerDidStartEditing):
        Implement this CodeMirrorColorEditingController delegation method to temporarily disable the
        CodeMirrorTokenTrackingController while we edit the color with the ColorPicker, remove
        the TextMarker for the edited color and instruct that content changes should be ignored
        such that we act on the complete set of color edits upon completion.

        (WebInspector.SourceCodeTextEditor.prototype.colorEditingControllerDidFinishEditing):
        Update color markers for the edited line such that any color edits are correctly updated for
        the future and so that, as a side-effect, the CodeMirrorColorEditingController is reset to the
        appropriate mode depending on whether color TextMarkers are indeed available, resetting states
        that may have been altered by colorEditingControllerDidStartEditing().

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.contentDidChange):
        New public method meant to be overriden by subclasses, added for the use of SourceCodeTextEditor, exposing
        the list of TextRanges affected by the content change, both in the context of the old content and new content.

        (WebInspector.TextEditor.prototype.boundsForRange):
        (WebInspector.TextEditor.prototype.get markers):
        (WebInspector.TextEditor.prototype.findMarkersAtPosition):
        (WebInspector.TextEditor.prototype.createColorMarkers):
        (WebInspector.TextEditor.prototype.colorEditingControllerForMarker):
        New public methods calling into the CodeMirror private ivar for the benefit of SourceCodeTextEditor.

        (WebInspector.TextEditor.prototype._contentChanged):
        Call the new contentDidChange() method.

2013-12-05  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove 'cookiesString' output from Page.getCookies
        https://bugs.webkit.org/show_bug.cgi?id=125268

        Reviewed by Timothy Hatcher.

        Remove 'cookiesString' output from Page.getCookies protocol.
        It is no longer meaningful because it is an unused parameter.

        * UserInterface/CookieStorageContentView.js:
        (WebInspector.CookieStorageContentView.prototype.update):
        * UserInterface/InspectorBackendCommands.js:

2013-12-05  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: expose node and frame snapshot capabilities.
        https://bugs.webkit.org/show_bug.cgi?id=124326

        Reviewed by Joseph Pecoraro.

        Add method signatures for snapshotNode() and snapshotRect().
        Remove method signature for unimplemented Page.captureScreenshot.

        * UserInterface/InspectorBackendCommands.js:

2013-12-05  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] Show a list of containing regions when clicking a node that is part of a flow
        https://bugs.webkit.org/show_bug.cgi?id=124614

        Reviewed by Timothy Hatcher.

        Added a new function in DOMTreeManager called getNodeContentFlowInfo that can be used
        to retrieve an object with the following structure:
        {
             "regionFlow": <Reference to the ContentFlow object referenced by the -webkit-flow-from property of the node>,
             "contentFlow": <Reference to the ContentFlow object referenced by the -webkit-flow-into property of
                             the node or a parent of the node>,
             "regions": [ list of DOMNodes representing the regions containers of the node. The node is split across all these regions. ]
        }

        Also, used this method to display a two new sections in the Computed Styles panel.
        1. Section "Flows": can have up to two Simple Rows: "Region Flow" and "Content Flow".
        2. Section "Container Regions" contains a DOMTreeDataGrid with the list of regions.

        The sections are only visible when there's content to display.

        Next to the "Region Flow" simple row I've added an arrow that will take the user to the "ContentFlowDOMTreeContentView" of the
        ContentFlow. The same happens for the "Content Flow", but in this case the element will also be highlighted.

        Part of the patch I've added the DOMTreeDataGridNode. LayerTreeDataGrid has a lot of CSS in common with it, so I
        will make another patch to refactor LayerTreeDataGrid to use DOMTreeDataGridNode as a base class.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/ComputedStyleDetailsPanel.css: Added.
        (.details-section > .content > .group > .row.simple.content-flow-link > .label):
        (.details-section > .content > .group > .row.simple.content-flow-link > .value):
        (.details-section > .content > .group > .row.simple.content-flow-link > .value > div):
        (.details-section > .content > .group > .row.simple.content-flow-link > .value > div > .icon):
        (.details-section > .content > .group > .row.simple.content-flow-link > .value > div > span):
        (.details-section > .content > .group > .row.simple.content-flow-link > .value > div > .go-to-arrow):
        (.details-section > .content > .group > .row.simple.content-flow-link:hover > .value > div > .go-to-arrow):
        * UserInterface/ComputedStyleDetailsPanel.js:
        (WebInspector.ComputedStyleDetailsPanel):
        (WebInspector.ComputedStyleDetailsPanel.prototype.get regionFlow):
        (WebInspector.ComputedStyleDetailsPanel.prototype.set regionFlow):
        (WebInspector.ComputedStyleDetailsPanel.prototype.get contentFlow):
        (WebInspector.ComputedStyleDetailsPanel.prototype.set contentFlow):
        (WebInspector.ComputedStyleDetailsPanel.prototype.get containerRegions):
        (WebInspector.ComputedStyleDetailsPanel.prototype.set containerRegions):
        (WebInspector.ComputedStyleDetailsPanel.prototype.refresh):
        (WebInspector.ComputedStyleDetailsPanel.prototype._computedStyleShowAllCheckboxValueChanged):
        (WebInspector.ComputedStyleDetailsPanel.prototype._resetFlowDetails):
        (WebInspector.ComputedStyleDetailsPanel.prototype._refreshFlowDetails.contentFlowInfoReady):
        (WebInspector.ComputedStyleDetailsPanel.prototype._refreshFlowDetails):
        (WebInspector.ComputedStyleDetailsPanel.prototype._goToRegionFlowArrowWasClicked):
        (WebInspector.ComputedStyleDetailsPanel.prototype._goToContentFlowArrowWasClicked):
        * UserInterface/DOMTreeDataGrid.css: Added.
        (.dom-tree-data-grid .data-grid):
        (.dom-tree-data-grid .data-grid table.data):
        (.dom-tree-data-grid .data-container):
        (.dom-tree-data-grid .data-container tr):
        (.dom-tree-data-grid .data-container td > div):
        (.dom-tree-data-grid .data-container .name-column):
        (.dom-tree-data-grid .data-container .name-column .icon):
        (.dom-tree-data-grid .data-container .name-column .label):
        (.dom-tree-data-grid .data-container tr:hover .name-column .label):
        (.dom-tree-data-grid .data-container .go-to-arrow):
        (.dom-tree-data-grid .data-container tr:hover .go-to-arrow):
        (.dom-tree-data-grid .data-container tbody > tr:nth-child(2n)):
        (.dom-tree-data-grid .data-container tbody > tr:nth-child(2n+1)):
        * UserInterface/DOMTreeDataGrid.js: Added.
        (WebInspector.DOMTreeDataGrid):
        (WebInspector.DOMTreeDataGrid.prototype._onmousemove):
        (WebInspector.DOMTreeDataGrid.prototype._onmouseout):
        * UserInterface/DOMTreeDataGridNode.js: Added.
        (WebInspector.DOMTreeDataGridNode):
        (WebInspector.DOMTreeDataGridNode.prototype.get domNode):
        (WebInspector.DOMTreeDataGridNode.prototype.createCellContent):
        (WebInspector.DOMTreeDataGridNode.prototype._updateNodeName):
        (WebInspector.DOMTreeDataGridNode.prototype._makeNameCell):
        (WebInspector.DOMTreeDataGridNode.prototype._updateNameCellData):
        (WebInspector.DOMTreeDataGridNode.prototype._goToArrowWasClicked):
        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype.unregisteredNamedFlowContentElement):
        (WebInspector.DOMTreeManager.prototype.nodeRequested):
        (WebInspector.DOMTreeManager.prototype._coerceRemoteArrayOfDOMNodes):
        (WebInspector.DOMTreeManager.prototype.domNodeResolved):
        (WebInspector.DOMTreeManager.prototype.regionNodesAvailable):
        (WebInspector.DOMTreeManager.prototype.get if):
        (WebInspector.DOMTreeManager.prototype.get var):
        (WebInspector.DOMTreeManager.prototype.backendFunction.getComputedProperty):
        (WebInspector.DOMTreeManager.prototype.backendFunction.getContentFlowName):
        (WebInspector.DOMTreeManager.prototype.):
        * UserInterface/DataGrid.css:
        (.data-grid.no-header > table.header):
        (.data-grid.no-header .data-container):
        * UserInterface/DetailsSection.js:
        (WebInspector.DetailsSection):
        * UserInterface/InspectorBackend.js:
        (InspectorBackendClass.prototype._wrap):
        * UserInterface/Main.html:
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showContentFlowDOMTree):
        * UserInterface/RuntimeManager.js:
        (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow):
        (WebInspector.RuntimeManager.prototype.getPropertiesForRemoteObject):

2013-12-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: ColorWheel uses old Color constructor
        https://bugs.webkit.org/show_bug.cgi?id=125260

        Reviewed by Joseph Pecoraro.

        Update to new WebInspector.Color constructor signature and use a clear color.

        * UserInterface/ColorWheel.js:
        (WebInspector.ColorWheel.prototype.get tintedColor):
        (WebInspector.ColorWheel.prototype.get rawColor):

2013-12-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: color picker doesn't work with "blue"
        https://bugs.webkit.org/show_bug.cgi?id=125262

        Reviewed by Joseph Pecoraro.

        Under certain circumstances rounding issues would have us compare
        two equal numbers that differ by 0.00000001 and sometime trip this
        if statement and yield a null color. We now add a little fudge to
        the test and also return a clear color rather than null to match what
        we do in the getters for "tintedColor" and "rawColor".

        * UserInterface/ColorWheel.js:
        (WebInspector.ColorWheel.prototype._colorAtPointWithBrightness):

2013-12-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: use only two decimals for opacity in rgba/hsla colors
        https://bugs.webkit.org/show_bug.cgi?id=125261

        Reviewed by Joseph Pecoraro.

        * UserInterface/ColorPicker.js:
        (WebInspector.ColorPicker.prototype._updateColor):

2013-12-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: "data detectors" menu on hover for actionable tokens
        https://bugs.webkit.org/show_bug.cgi?id=124363

        Reviewed by Timothy Hatcher.

        Add a new WebInspector.HoverMenu class to display an overlay menu that is presented
        with respect to a target frame that it draws itself around adding a customizable
        action button to its right. The menu uses fade animations as it's presented and
        dismissed and a single delegation method is fired when the button is pressed. Finally,
        just like a popover, it automatically dismisses itself upon scrolling anywhere
        outside of its bounds.

        * UserInterface/HoverMenu.css: Added.
        * UserInterface/HoverMenu.js: Added.
        (WebInspector.HoverMenu):
        (WebInspector.HoverMenu.prototype.get element):
        (WebInspector.HoverMenu.prototype.dismiss):
        (WebInspector.HoverMenu.prototype.handleEvent):
        (WebInspector.HoverMenu.prototype._handleClickEvent):
        * UserInterface/Images/HoverMenuButton.png: Added.
        * UserInterface/Images/HoverMenuButton@2x.png: Added.
        * UserInterface/Main.html:

2013-12-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: edited color should serialize back to original format when possible
        https://bugs.webkit.org/show_bug.cgi?id=125244

        Reviewed by Joseph Pecoraro.

        Profoundly reworked WebInspector.Color to be more efficient and more flexible when
        serializing the color to the various supported formats.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        Use new WebInspector.Color.fromString() factory and check for a null return value
        rather than an exception to identify invalid color tokens.

        * UserInterface/Color.js:
        (WebInspector.Color):
        Rewrote WebInspector.Color such that it would have, at all times, a canonical
        representation in terms of either RGBA or HSLA depending on the format used to
        create the color. The new constructor parameters lets the user pass a format
        and the RGBA or HSLA components, allowing to bypass the string-only creation
        system which was sub-optimal for the new color picker. Additionally, the toString()
        method now can provide the most accurate serialization of the color based on the
        provided format with a fallback mechanism to RGB/RGBA in cases where the desired
        format would incur a loss of fidelity. Finally, simplified the API to only feature
        essential features.

        (WebInspector.Color.fromString):
        New factory method used to create a color from a string.

        * UserInterface/ColorPicker.js:
        (WebInspector.ColorPicker.prototype.set color):
        Keep track of the original color format so that we can use it as the preferred format
        when serializing the updated color in _updateColor().

        (WebInspector.ColorPicker.prototype._updateColor):
        Use the original color format as the prefered formation for color serialization. Also,
        use the new WebInspector.Color constructor in lieu of the removed .fromRGBA factory.

        (WebInspector.ColorPicker.prototype._updateSliders):
        Use the new WebInspector.Color constructor in lieu of the removed .fromRGBA factory.

        * UserInterface/ColorWheel.js:
        (WebInspector.ColorWheel.prototype._colorAtPointWithBrightness):
        Use the new WebInspector.Color constructor in lieu of the removed .fromRGB factory.

2013-12-03  Seokju Kwon  <seokju@webkit.org>

        Web Inspector: Remove '_attachedWindowHeight' property in InspectorFrontendHostStub.js
        https://bugs.webkit.org/show_bug.cgi?id=125204

        Reviewed by Timothy Hatcher.

        '_attachedWindowHeight' property is not used anywhere, so remove it.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):

2013-12-03  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: restore navigation panel state across reloads and reopens
        https://bugs.webkit.org/show_bug.cgi?id=122125

        Reviewed by Timothy Hatcher.

        The previous strategy for restoring content views after inspector
        re-open did not consider the active sidebar and its selection, and
        tried to recreate the appropriate selection from the saved content
        view. However, doesn't work for tree elements in the sidebar panel
        that don't change views when selected, such as script breakpoints,
        special breakpoints, call stack, timeline sections, etc.

        This patch implements a new strategy that saves the navigation
        sidebar panel's view state by serializing the identity of the
        selected element's represented object. Relevant represented
        object classes implement the saveIdentityToCookie() method. Each
        represented object class also adds a TypeIdentifier property to
        its constructor, to aid inexact matching based on represented
        object type, rather than its complete identity.

        When restoring, the navigation sidebar attempts to match added
        tree elements against the pending cookie, and selects the element
        if it matches. A represented object matches if its serialized
        identity matches the previously saved serialized identity.

        The inspector view state is now only saved on the page hide event
        (for saving across reopen) and when the main frame commits its
        provisional load (for saving across same-page reloads). It
        consolidates similar view state settings into a single setting.

        * UserInterface/ApplicationCacheFrame.js:
        (WebInspector.ApplicationCacheFrame): Add cookie keys and type identifier.
        (WebInspector.ApplicationCacheFrame.prototype.saveIdentityToCookie): Added.
        * UserInterface/ApplicationCacheManager.js: remove objectForCookie().
        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint): Add cookie keys and type identifier.
        (WebInspector.Breakpoint.prototype.saveIdentityToCookie):
        * UserInterface/CookieStorageObject.js:
        (WebInspector.CookieStorageObject.prototype.saveIdentityToCookie): Added.
        * UserInterface/DOMStorageObject.js:
        (WebInspector.DOMStorageObject): Add cookie keys and type identifier.
        (WebInspector.DOMStorageObject.prototype.saveIdentityToCookie): Added.
        * UserInterface/DatabaseObject.js:
        (WebInspector.DatabaseObject): Add cookie keys and type identifier.
        (WebInspector.DatabaseObject.prototype.saveIdentityToCookie): Added.
        * UserInterface/DatabaseTableObject.js:
        (WebInspector.DatabaseTableObject): Add cookie keys and type identifier.
        (WebInspector.DatabaseTableObject.prototype.saveIdentityToCookie): Added.
        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.saveStateToCookie): Added.
        (WebInspector.DebuggerSidebarPanel.prototype.restoreStateFromCookie): Added.
        * UserInterface/Frame.js:
        (WebInspector.Frame): Add cookie keys and type identifier.
        (WebInspector.Frame.prototype.saveIdentityToCookie): Added.
        * UserInterface/FrameResourceManager.js: remove objectForCookie().
        * UserInterface/InstrumentSidebarPanel.js:
        (WebInspector.InstrumentSidebarPanel.prototype.showTimelineForRecordType):
        Return the shown timeline, if any.

        (WebInspector.InstrumentSidebarPanel.prototype.saveStateToCookie): Added.
        (WebInspector.InstrumentSidebarPanel.prototype.restoreStateFromCookie): Added.
        (WebInspector.InstrumentSidebarPanel.prototype.showProfile):
        Return the shown profile, if any.

        * UserInterface/Main.js:
        (WebInspector): Added cookie keys for the selected sidebar and
        typeidentifier of the sidebar's selected tree element.

        (WebInspector.contentLoaded): Remove callbacks for
        resolveAndShowPendingContentViewCookie(). Consolidate all saved
        inspector view state into one Setting. Move special-cased
        restoring of the console to the restoration method. Move saving
        of last opened navigation panel to the saving method.

        (WebInspector._mainResourceDidChange): Try to restore saved view
        state when the main resource changes.

        (WebInspector._provisionalLoadCommitted): Update the saved view
        state when the navigation commits. This is the last chance to save
        it before the main resource changes and the navigation panel view
        state is discarded and rebuilt.

        (WebInspector._pageHidden): Update the saved view state when the
        inspector page is hidden, but before state is discarded.

        (WebInspector._navigationSidebarPanelSelected): Don't save last
        navigation sidebar panel.
        (WebInspector._updateCookieForInspectorViewState): Renamed from
        _updateCurrentContentViewCookie. It delegates view state
        serialization to the currently open navigation sidebar, rather
        than the current content view.

        (WebInspector._contentBrowserRepresentedObjectsDidChange): Don't
        spuriously serialize the current view state cookie on every
        ContentView change.

        (WebInspector._restoreInspectorViewStateFromCookie): Renamed from
        _showContentViewForCookie. It now restores a specific navigation
        panel and delegates remaining view state restoration to the panel
        itself. Last-resort selection of any tree element with the same
        type identifier was moved to the navigation panel's restore method.

        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel):
        (WebInspector.NavigationSidebarPanel.prototype.set contentTreeOutline):
        (WebInspector.NavigationSidebarPanel.prototype.createContentTreeOutline):
        Save references to all created TreeOutlines in a Set, so we can
        restore any tree's selection.

        (WebInspector.NavigationSidebarPanel.prototype.saveStateToCookie):
        Added. Find the selected tree element from all tree outlines and
        ask it to serialize its identity.

        (WebInspector.NavigationSidebarPanel.prototype.restoreStateFromCookie):
        Added. Eagerly search existing tree elements for a matching
        representedObject. If none exists, save the pending cookie and
        schedule last-resort matching using the provided timeout interval.

        (WebInspector.NavigationSidebarPanel.prototype._treeElementAddedOrChanged):
        Check if the added tree element matches a pending view state
        cookie, if one exists.

        (WebInspector.NavigationSidebarPanel.prototype.treeElementMatchesCookie):
        Added. Check if the tree element's representedObject matches the
        pending view state cookie.

        (WebInspector.NavigationSidebarPanel.prototype._checkElementsForPendingViewStateCookie):
        Added. For each provided tree element, check if the tree
        element's represented object produces the same serialized identity
        as the pending view state cookie that we are trying to resolve.
        If a match is found (possibly by relaxing to matching anything
        with the same type), select the tree element and clear both the
        pending view state cookie and last-resort selection timer.

        * UserInterface/Resource.js:
        (WebInspector.Resource): Add cookie keys and type identifier.
        (WebInspector.Resource.prototype.saveIdentityToCookie): Added.

        * UserInterface/ResourceClusterContentView.js:
        (WebInspector.ResourceClusterContentView.prototype.saveToCookie):
        (WebInspector.ResourceClusterContentView.prototype.restoreFromCookie):
        Since identity state is serialized by the representedObject, these
        methods only need to save view-specific state, such as the visible
        subview. Remove extraneous state.

        * UserInterface/Script.js:
        (WebInspector.Script): Add cookie keys and type identifier.
        (WebInspector.Script.prototype.saveIdentityToCookie): Added.
        * UserInterface/StorageManager.js: remove objectForCookie().
        * UserInterface/TimelineManager.js: remove objectForCookie().
        * UserInterface/TimelinesContentView.js:
        (WebInspector.TimelinesContentView.prototype.saveToCookie):
        (WebInspector.TimelinesContentView.prototype.restoreFromCookie):
        Since identity state is serialized by the representedObject, these
        methods only need to save view-specific state, such as the visible
        subview. Remove extraneous state.

        * UserInterface/TreeOutline.js: Add TreeOutline.prototype.constructor
        so other code can assume the constructor property exists.

2013-12-02  Antoine Quint  <graouts@apple.com>

        Web Inspector: popover can overlap target frame
        https://bugs.webkit.org/show_bug.cgi?id=125069

        Reviewed by Joseph Pecoraro.

        Fix a regression introduced in http://trac.webkit.org/changeset/159286. We should only
        offset the frame of the popover in the y-axis if the target edge is on the x-axis, and
        vice versa. We also remove the needsToDrawBackground check since it incorrectly disregarded
        the anchor point. We now always draw the background which is a lot safer and guarantees
        we'll always draw an adequate frame and anchor point.

        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype._update):
        (WebInspector.Popover.prototype._bestMetricsForEdge):

2013-12-02  Antoine Quint  <graouts@apple.com>

        Web Inspector: add a method to add padding around a WebInspector.Rect
        https://bugs.webkit.org/show_bug.cgi?id=125072

        Reviewed by Joseph Pecoraro.

        Add a new WebInspector.Rect.prototype.pad() method which does not alter
        the rectangle it's called and returns a new rect much like .inset(). I've
        checked all call sites and there was no reuse of the rectangle that was
        padded so this patch won't have any side effects.

        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint.prototype._showEditBreakpointPopover):
        * UserInterface/CSSStyleDeclarationTextEditor.js:
        * UserInterface/Geometry.js:
        (WebInspector.Rect.prototype.pad):
        * UserInterface/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._updatePopoverForSelectedNode):
        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._showPopover):
        * UserInterface/TimelineDataGrid.js:
        (WebInspector.TimelineDataGrid.prototype._updatePopoverForSelectedNode):

2013-11-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Allow showing a context menu on all mouse events.
        https://bugs.webkit.org/show_bug.cgi?id=124747

        Reviewed by Joseph Pecoraro.

        Automatically dispatch a contextmenu event in case WebInspector.ContextMenu.prototype.show()
        is called outside of a contextmenu event handler and would therefore not show the expected
        context menu (except in the Remote Web Inspector where this already works).

        * UserInterface/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.show):
        Check whether the event is a contextmenu event, and if not, add an event listener for a manually
        dispatched contextmenu event such that we may then call InspectorFrontendHost.showContextMenu()
        in a contextmenu event handler.

        (WebInspector.ContextMenu.prototype.handleEvent):
        Call InspectorFrontendHost.showContextMenu() now that we received the manually dispatched
        contextmenu event.

2013-11-25  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] A page with many flows should collapse the resources tree
        https://bugs.webkit.org/show_bug.cgi?id=122926

        Reviewed by Timothy Hatcher.

        Refactored the code in FrameTreeElement._shouldGroupIntoFolders to make it easy to track
        more types of resources. Added the content flows as another type of resource that would trigger the
        collapsing.

        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype.namedFlowRemoved): Added code to remove the content nodes from
        a flow that has been removed.
        * UserInterface/FrameTreeElement.js:
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders.pushCategory):
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders.pushResourceType):
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders):

2013-11-25  Dan Bernstein  <mitz@apple.com>

        Set the svn:ignore property on the Xcode project to ignore the workspace and user data.

        * WebInspectorUI.xcodeproj: Added property svn:ignore.

2013-11-21  Mark Rowe  <mrowe@apple.com>

        <https://webkit.org/b/124702> Stop overriding VALID_ARCHS.

        All modern versions of Xcode set it appropriately for our needs.

        Reviewed by Alexey Proskuryakov.

        * Configurations/Base.xcconfig:

2013-11-19  Antoine Quint  <graouts@apple.com>

        Web Inspector: layer info sidebar should convert to MB for very large layers
        https://bugs.webkit.org/show_bug.cgi?id=124570

        Reviewed by Timothy Hatcher.

        Setting higherResolution to true (its default value if omitted) when calling
        Number.bytesToString() would always result in a KB-formatted string instead
        since it didn't check for a < 1024 value as well.

        * UserInterface/Utilities.js:
        (Number.bytesToString):

2013-11-19  Antoine Quint  <graouts@apple.com>

        Remove some unused utilities from Utilities.js
        https://bugs.webkit.org/show_bug.cgi?id=124590

        Reviewed by Darin Adler.

        Remove some methods and properties that were no longer used through the codebase.

        * UserInterface/Utilities.js:

2013-11-18  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: Update WebInspectorUI to use the new "nodeIds" parameter for DOM.performSearch
        https://bugs.webkit.org/show_bug.cgi?id=124544

        Reviewed by Joseph Pecoraro.

        Added the new DOM.performSearch "nodeIds" parameter and made the two implementations
        of DOMTreeContentView provide the right context node ids.

        DOMTreeContentView is just using the id of the document node while ContentFlowDOMTreeContentView
        is passing the list of content nodes.

        Note that adding an extra optional parameter to DOM.performSearch does not break iOS 6 and 7 compatibility.

        * UserInterface/ContentFlowDOMTreeContentView.js:
        (WebInspector.ContentFlowDOMTreeContentView.prototype.getSearchContextNodes):
        * UserInterface/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView.prototype.performSearch.contextNodesReady):
        (WebInspector.DOMTreeContentView.prototype.performSearch):
        (WebInspector.DOMTreeContentView.prototype.getSearchContextNodes):
        * UserInterface/FrameDOMTreeContentView.js:
        (WebInspector.FrameDOMTreeContentView.prototype.getSearchContextNodes):
        * UserInterface/InspectorBackendCommands.js:

2013-11-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update localizedStrings, remove stale string
        https://bugs.webkit.org/show_bug.cgi?id=124543

        Reviewed by Jessie Berlin.

        Remove stale localized strings after r124543 remove the old color picker.

        * Localizations/en.lproj/localizedStrings.js:

2013-11-15  Antoine Quint  <graouts@apple.com>

        Web Inspector: New color picker
        https://bugs.webkit.org/show_bug.cgi?id=124354

        Reviewed by Timothy Hatcher.

        Beginning of a new color picker. The focus of this new picker is to let you pick from
        a color wheel as the primary mean of color picking, with additional slider controls for
        the brightness and the opacity, better matching the default OS X color picker. This is the
        basis for a color picker that will evolve to support the following:

        - editable CSS value label (http://webkit.org/b/124356)
        - picking a color anywhere on screen (http://webkit.org/b/124357)
        - swatches based on other colors in page (http://webkit.org/b/124358)

        Note also that the color wheel has not been tested on Retina displays
        (see http://webkit.org/b/124355).

        * UserInterface/CSSColorPicker.css: Removed.
        * UserInterface/CSSColorPicker.js: Removed.
        Previous color picker, now removed in favor of the new ColorPicker class.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        Adopt new class name for the color picker, add a little padding to the popover
        target frame and set the base color after the picker has been presented.

        * UserInterface/Color.js:
        (WebInspector.Color.prototype._hslToRGB):
        Simplified math.

        (WebInspector.Color.rgb2hsv):
        (WebInspector.Color.hsv2rgb):
        New utilities to deal with HSV colors used in the ColorWheel.

        * UserInterface/ColorPicker.css: Added.

        * UserInterface/ColorPicker.js: Added.
        (WebInspector.ColorPicker):
        (WebInspector.ColorPicker.prototype.get element):
        (WebInspector.ColorPicker.prototype.set brightness):
        (WebInspector.ColorPicker.prototype.set opacity):
        (WebInspector.ColorPicker.prototype.get color):

        (WebInspector.ColorPicker.prototype.set color):
        We set the _dontUpdateColor flag here such that we don't attempt to
        notify about a color change at this point in case the selected color
        is too saturated to be represented accurately on the color wheel and
        we would end up changing the color by virtue of presenting the popover.

        (WebInspector.ColorPicker.prototype.colorWheelColorDidChange):
        (WebInspector.ColorPicker.prototype.sliderValueDidChange):
        (WebInspector.ColorPicker.prototype._updateColor):
        (WebInspector.ColorPicker.prototype._updateSliders):

        * UserInterface/ColorWheel.css: Added.

        * UserInterface/ColorWheel.js: Added.
        The ColorWheel makes use of three different <canvas> elements to draw itself.
        The "raw" canvas is used to draw the raw, un-tinted color wheel with poor
        aliasing. The "raw" canvas is only drawn when the dimension is changed.
        The "tinted" canvas is used to draw the "raw" canvas with a black overlay
        based on the brightness set on the wheel. The "final" canvas, the only <canvas>
        element attached to the DOM, is used to draw the "tinted" canvas into a circle
        clip of a slightly narrower radius so that the drawn image is visually more pleasing
        and can be displayed above virtually any background color.

        We use color math to generate the color wheel, courtesy of Dean Jackson, and also to
        figure out where to position the crosshair for the provided base color as well as
        the opposite operation where we get the color under the mouse pointer.

        The color wheel fires a single delegate method call colorWheelColorDidChange(colorWheel),
        the colors themselves being retrieved via the public properties tintedColor and rawColor.

        (WebInspector.ColorWheel):
        (WebInspector.ColorWheel.prototype.set dimension):
        (WebInspector.ColorWheel.prototype.get element):
        (WebInspector.ColorWheel.prototype.get brightness):
        (WebInspector.ColorWheel.prototype.set brightness):
        (WebInspector.ColorWheel.prototype.get tintedColor):
        (WebInspector.ColorWheel.prototype.set tintedColor):
        (WebInspector.ColorWheel.prototype.get rawColor):
        (WebInspector.ColorWheel.prototype.handleEvent):
        (WebInspector.ColorWheel.prototype._handleMousedown):
        (WebInspector.ColorWheel.prototype._handleMousemove):
        (WebInspector.ColorWheel.prototype._handleMouseup):
        (WebInspector.ColorWheel.prototype._pointInCircleForEvent):
        (WebInspector.ColorWheel.prototype._pointInCircleForEvent.angleFromCenterToPoint):
        (WebInspector.ColorWheel.prototype._pointInCircleForEvent.pointOnCircumference):
        (WebInspector.ColorWheel.prototype._updateColorForMouseEvent):
        (WebInspector.ColorWheel.prototype._setCrosshairPosition):
        (WebInspector.ColorWheel.prototype._tintedColorToPointAndBrightness):
        (WebInspector.ColorWheel.prototype._drawRawCanvas):
        (WebInspector.ColorWheel.prototype._colorAtPointWithBrightness):
        (WebInspector.ColorWheel.prototype._drawTintedCanvas):
        (WebInspector.ColorWheel.prototype._draw):

        * UserInterface/Images/SliderThumb.png: Added.
        * UserInterface/Images/SliderThumb@2x.png: Added.
        * UserInterface/Images/SliderThumbPressed.png: Added.
        * UserInterface/Images/SliderThumbPressed@2x.png: Added.
        Supporting artwork for the new Slider class.

        * UserInterface/Main.html:
        Remove the previous color picker class and add the new one, as well as the new Slider class.

        * UserInterface/Slider.css: Added.

        * UserInterface/Slider.js: Added.
        New slider to match the look of the sliders used in the native OS X color picker. The most
        interesting feature of these sliders is that they can be transformed using CSS in any way
        and will still operate correctly due to always converting the mouse coordinates in the page
        coordinate system to the coordinate system local to the backing element. For instance, the
        color picker uses two sliders transformed to be displayed vertically.

        As it stands these slides only support values between 0 and 1 and fire a single delegate
        method call sliderValueDidChange(slider, newValue).

        (WebInspector.Slider):
        (WebInspector.Slider.prototype.get element):
        (WebInspector.Slider.prototype.get value):
        (WebInspector.Slider.prototype.set value):
        (WebInspector.Slider.prototype.handleEvent):
        (WebInspector.Slider.prototype._handleMousedown):
        (WebInspector.Slider.prototype._handleMousemove):
        (WebInspector.Slider.prototype._handleMouseup):
        (WebInspector.Slider.prototype._localPointForEvent):
        (WebInspector.Slider.prototype.get _maxX):

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj:
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        Update file names for the new color picker.

2013-11-14  Antoine Quint  <graouts@apple.com>

        Web Inspector: Popovers may shrink unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=124350

        Reviewed by Timothy Hatcher.

        Because we always get the intersection of the preferred frame and the container frame to
        ensure the popover fits within its container based on a preferred frame that would place
        the arrow within the center of the attachment edge, we get in situations where we may
        shrink the popover instead of shifting it to fit within the container frame. We now first
        shift the preferred frame before getting its intersection with the container frame to
        avoid such situations.

        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype._bestMetricsForEdge):

2013-11-13  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Split Inspector.json into individual domain json files
        https://bugs.webkit.org/show_bug.cgi?id=124098

        Reviewed by Timothy Hatcher.

        Removed now stale comments referring to the combined Inspector.json.
        Make update-InspectorBackendCommands helper script generate a
        combined Inspector.json to still work for tip of tree.

        * Scripts/update-InspectorBackendCommands.rb:
        * UserInterface/ApplicationCacheObserver.js:
        * UserInterface/CSSObserver.js:
        * UserInterface/CanvasObserver.js:
        * UserInterface/ConsoleObserver.js:
        * UserInterface/DOMObserver.js:
        * UserInterface/DOMStorageObserver.js:
        * UserInterface/DatabaseObserver.js:
        * UserInterface/DebuggerObserver.js:
        * UserInterface/InspectorBackendCommands.js:
        * UserInterface/InspectorObserver.js:
        * UserInterface/LayerTreeObserver.js:
        * UserInterface/NetworkObserver.js:
        * UserInterface/PageObserver.js:
        * UserInterface/ProfilerObserver.js:
        * UserInterface/Resource.js:
        * UserInterface/RuntimeObserver.js:
        * UserInterface/TimelineObserver.js:

2013-11-12  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: ContentFlowTreeContentView should use only one DOMTreeOutline
        https://bugs.webkit.org/show_bug.cgi?id=124230

        Reviewed by Timothy Hatcher.

        Changed ContentFlowTreeContentView to use one DOMTreeOutline by just
        populating it with root DOMTreeElements directly. That is very
        similar to how DOMTreeOutline works when omitRootDOMNode is used.

        Now that ContentFlowTreeContentView has only one DOMTreeOutline,
        it makes sense to change its base class to be DOMTreeContentView instead.
        Also, with that I've changed its name to ContentFlowDOMTreeContentView.

        I had to move all the DOMTree document loading code from DOMTreeContentView to a
        new class called FrameDOMTreeContentView. This is used to display the DOM of the
        frame objects. FrameDOMTreeContentView is also inheriting from DOMTreeContentView.

        Issues that are fixed as a side effect:
        - Selection path components are now displaying all the sibling elements for contentFlow.contentNodes
        (those are the nodes that have "-webkit-flow-into" set directly).
        - Keyboard navigation works for the contentFlow.contentNodes.
        - Search is implemented in DOMTreeContentView, so that code now works for flows too.
        The DOMAgents's search API will use all the Documents to lookup for nodes, so it might
        find DOM nodes that are not part of the flow. This is in line with the behavior for the
        frames.

        * UserInterface/ContentFlowDOMTreeContentView.js: Renamed from ContentFlowTreeContentView
        to better reflect the inheritance from DOMTreeContentView.
        (WebInspector.ContentFlowDOMTreeContentView):
        (WebInspector.ContentFlowDOMTreeContentView.prototype.closed):
        (WebInspector.ContentFlowDOMTreeContentView.prototype._createContentTrees):
        (WebInspector.ContentFlowDOMTreeContentView.prototype._contentNodeWasAdded):
        (WebInspector.ContentFlowDOMTreeContentView.prototype._contentNodeWasRemoved):
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        * UserInterface/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        (WebInspector.DOMTreeContentView.prototype.closed):
        (WebInspector.DOMTreeContentView.prototype.):
        (WebInspector.DOMTreeContentView.prototype._restoreSelectedNodeAfterUpdate):
        (WebInspector.DOMTreeContentView.prototype._selectedNodeDidChange):
        * UserInterface/FrameDOMTreeContentView.js: Added.
        (WebInspector.FrameDOMTreeContentView):
        (WebInspector.FrameDOMTreeContentView.prototype.get domTree):
        (WebInspector.FrameDOMTreeContentView.prototype.closed):
        (WebInspector.FrameDOMTreeContentView.prototype._rootDOMNodeAvailable):
        (WebInspector.FrameDOMTreeContentView.prototype._rootDOMNodeInvalidated):
        (WebInspector.FrameDOMTreeContentView.prototype._requestRootDOMNode):
        * UserInterface/Main.html:

2013-11-08  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: remove -webkit-min and -webkit-max from CSS completions
        https://bugs.webkit.org/show_bug.cgi?id=124072

        Reviewed by Timothy Hatcher.

        -webkit-min and -webkit-max are not implemented in WebCore, despite mentions of it.

        * UserInterface/CSSKeywordCompletions.js:

2013-11-07  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Use a Map object to store the ContentFlows
        https://bugs.webkit.org/show_bug.cgi?id=124015

        Reviewed by Joseph Pecoraro.

        Changed the Object hashmap to a Map based hashmap when storing the flows in DOMTreeManager.

        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager):
        (WebInspector.DOMTreeManager.prototype.getNamedFlowCollection):
        (WebInspector.DOMTreeManager.prototype.namedFlowRemoved):
        (WebInspector.DOMTreeManager.prototype._sendNamedFlowUpdateEvents):

2013-11-07  Timothy Hatcher  <timothy@apple.com>

        Fix up some sidebar switching details to make selections persist better.

        Translate represented objects between sidebars so the same item can be reselected
        as you switch between frames and main reources. Also fix some null checks that are
        needed on selectedSidebarPanel.

        https://bugs.webkit.org/show_bug.cgi?id=124001

        Reviewed by Joseph Pecoraro.

        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel.prototype.treeElementForRepresentedObject): Added. Translate a Frame
        representedObject into a main resource representedObject.
        * UserInterface/Main.js:
        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar): Null check selectedSidebarPanel.
        (WebInspector._updateNavigationSidebarForCurrentContentView): Fix a logic error to match other code.
        allowedNavigationSidebarPanels.length needs to have a length before using contains.
        (WebInspector._contentBrowserCurrentContentViewDidChange): Null check selectedSidebarPanel.
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.treeElementForRepresentedObject): Translate a main resource
        representedObject into a Frame representedObject.

2013-11-07  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Removing a content node of a ContentFlow from the DOM will send a 0 nodeId
        https://bugs.webkit.org/show_bug.cgi?id=123577

        Reviewed by  Timothy Hatcher.

        Fixed the content node removal from the content flow.

        * UserInterface/ContentFlowTreeContentView.js:
        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager):
        (WebInspector.DOMTreeManager.prototype._createContentFlowFromPayload): Registered all the content nodes
        in the _contentNodesToFlowsMap.
        (WebInspector.DOMTreeManager.prototype._unbind): Added call to _removeContentNodeFromFlowIfNeeded.
        (WebInspector.DOMTreeManager.prototype._removeContentNodeFromFlowIfNeeded): Called from _unbind to check
        and remove a node from it's parent content flow if needed.
        (WebInspector.DOMTreeManager.prototype.unregisteredNamedFlowContentElement):

2013-11-06  Timothy Hatcher  <timothy@apple.com>

        Properly null check positionToReveal in ResourceSidebarPanel.prototype.showSourceCode.

        https://bugs.webkit.org/show_bug.cgi?id=123921

        Reviewed by Joseph Pecoraro.

        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showSourceCode):

2013-11-06  Timothy Hatcher  <timothy@apple.com>

        Fix the display of query parameters when the value is missing.

        https://bugs.webkit.org/show_bug.cgi?id=123920

        Reviewed by Joseph Pecoraro.

        * UserInterface/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel.prototype._createNameValueDataGrid):

2013-11-06  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: When a flow is clicked the content of flow needs to be displayed
        https://bugs.webkit.org/show_bug.cgi?id=122927

        Reviewed by Joseph Pecoraro.

        ContentFlowTreeContentView is now used to display the content nodes of a ContentFlow. It is
        very similar to the DOMTreeContentView class, but can handle multiple root nodes.

        * UserInterface/ContentFlowTreeContentView.js: Added.
        (WebInspector.ContentFlowTreeContentView):
        (WebInspector.ContentFlowTreeContentView.prototype.get selectionPathComponents):
        (WebInspector.ContentFlowTreeContentView.prototype.updateLayout):
        (WebInspector.ContentFlowTreeContentView.prototype.shown):
        (WebInspector.ContentFlowTreeContentView.prototype.hidden):
        (WebInspector.ContentFlowTreeContentView.prototype.closed):
        (WebInspector.ContentFlowTreeContentView.prototype._selectedNodeDidChange):
        (WebInspector.ContentFlowTreeContentView.prototype._pathComponentSelected):
        (WebInspector.ContentFlowTreeContentView.prototype._createContentNodeTree):
        (WebInspector.ContentFlowTreeContentView.prototype._createContentTrees):
        (WebInspector.ContentFlowTreeContentView.prototype._contentNodeWasAdded):
        (WebInspector.ContentFlowTreeContentView.prototype._contentNodeWasRemoved):
        * UserInterface/ContentView.js:
        (WebInspector.ContentView):
        (WebInspector.ContentView.isViewable):
        * UserInterface/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.ondeselect): We need to remove the selected "dom node"
        so that the element is not going to stay selected after the we move to a different DOM tree.
        * UserInterface/DOMTreeOutline.js:
        (WebInspector.DOMTreeOutline.prototype.selectDOMNode):
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.sidebarPanelForRepresentedObject):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):

2013-11-01  Antoine Quint  <graouts@apple.com>

        Remove custom Function.prototype.bind() in favor of native version
        https://bugs.webkit.org/show_bug.cgi?id=123608

        Reviewed by Joseph Pecoraro.

        * UserInterface/Utilities.js:

2013-11-01  Antoine Quint  <graouts@apple.com>

        Error trying to serialize a color created without an alpha component to RGBA or HSLA
        https://bugs.webkit.org/show_bug.cgi?id=123623

        Reviewed by Joseph Pecoraro.

        Check whether we have .rgba and .hsla ivars before trying to retrieve them to serialize
        the color to RGBA or HSLA format.

        * UserInterface/Color.js:
        (WebInspector.Color.prototype.toString):

2013-11-01  Antoine Quint  <graouts@apple.com>

        Remove custom Element.prototype.remove() in favor of native version
        https://bugs.webkit.org/show_bug.cgi?id=123607

        Reviewed by Timothy Hatcher.

        * UserInterface/Utilities.js:

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints in auto-formatted JavaScript editors are not working
        https://bugs.webkit.org/show_bug.cgi?id=123589

        Reviewed by Timothy Hatcher.

        The internal this._ignoreCodeMirrorContentDidChangeEvent flag was being used
        in two places that could be nested, meaning the flag was deleted while it
        was still expected to be set. Change it instead to a counter, to handle nesting.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype.set string):
        (WebInspector.TextEditor.prototype.set formatted):
        (WebInspector.TextEditor.prototype._contentChanged):

2013-10-31  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale optional native memory instrumentation protocol params
        https://bugs.webkit.org/show_bug.cgi?id=123552

        Reviewed by Timothy Hatcher.

        * UserInterface/InspectorBackendCommands.js:

2013-10-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix PrettyPrinting Tool Load from Saved URL

        Reviewed by Timothy Hatcher.

        * Tools/PrettyPrinting/index.html:

2013-10-28  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Add protocol API to expose content nodes addition/removal
        https://bugs.webkit.org/show_bug.cgi?id=123424

        Reviewed by Timothy Hatcher.

        Exposed the new CSS Agent events to the ContentFlow class that will now maintain
        a list of nodes in the "contentNodes" property.

        * UserInterface/CSSObserver.js:
        (WebInspector.CSSObserver.prototype.regionOversetChanged):
        (WebInspector.CSSObserver.prototype.registeredNamedFlowContentElement):
        (WebInspector.CSSObserver.prototype.unregisteredNamedFlowContentElement):
        * UserInterface/ContentFlow.js:
        (WebInspector.ContentFlow):
        (WebInspector.ContentFlow.prototype.set overset):
        (WebInspector.ContentFlow.prototype.get contentNodes):
        (WebInspector.ContentFlow.prototype.insertContentNodeBefore):
        (WebInspector.ContentFlow.prototype.appendContentNode):
        (WebInspector.ContentFlow.prototype.removeContentNode):
        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager.prototype._createContentFlowFromPayload):
        (WebInspector.DOMTreeManager.prototype._updateContentFlowFromPayload):
        (WebInspector.DOMTreeManager.prototype.regionOversetChanged):
        (WebInspector.DOMTreeManager.prototype.registeredNamedFlowContentElement):
        (WebInspector.DOMTreeManager.prototype.unregisteredNamedFlowContentElement):
        * UserInterface/InspectorBackendCommands.js:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: PrettyPrinting tool should have save button
        https://bugs.webkit.org/show_bug.cgi?id=123371

        Reviewed by Timothy Hatcher.

        Add buttons to save as a URL to share or to save/clear to
        localStorage for easier reloads testing local changes.

        * Tools/PrettyPrinting/index.html:

2013-10-25  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Command+Click on url(…) should go to image not source line
        https://bugs.webkit.org/show_bug.cgi?id=123362

        Reviewed by Timothy Hatcher.

        CodeMirror changed "url" from being type "variable-2" to "string-2".

        * UserInterface/CodeMirrorAdditions.js:

2013-10-25  Jessie Berlin  <jberlin@apple.com>

        Ran update-localizable-strings after changes made in r157947.

        Rubber-stamped by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:

2013-10-24  Mark Rowe  <mrowe@apple.com>

        Remove references to OS X 10.7 from Xcode configuration settings.

        Now that we're not building for OS X 10.7 they're no longer needed.

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/15312643> Prepare for the mysterious future.

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/Version.xcconfig:

2013-10-24  Timothy Hatcher  <timothy@apple.com>

        Allow editing CSS resources after they have been pretty printed.

        https://bugs.webkit.org/show_bug.cgi?id=123297

        Reviewed by Joseph Pecoraro.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor): Remove the need for _readOnly.
        (WebInspector.TextEditor.prototype.set readOnly): Set CodeMirror readOnly directly.
        (WebInspector.TextEditor.prototype.set formatted): Don't call _updateCodeMirrorReadOnly.
        (WebInspector.TextEditor.prototype._updateCodeMirrorReadOnly): Removed.
        (WebInspector.TextEditor.prototype._contentChanged): Clear _formatted and _formatterSourceMap
        on edit and notify the delegate and fire the FormattingDidChange event.

2013-10-24  Timothy Hatcher  <timothy@apple.com>

        Adjust the precision of byte strings in Web Inspector.

        https://bugs.webkit.org/show_bug.cgi?id=123281

        Reviewed by Joseph Pecoraro.

        * UserInterface/Utilities.js:
        (Number.bytesToString): More precision for MB and less precision for 10..1023 KB.

2013-10-24  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: Add a way to test the Manager and model classes
        https://bugs.webkit.org/show_bug.cgi?id=123223

        Reviewed by Timothy Hatcher.

        Moved some global functions out of Main.js, so that they can be used in the
        layout tests without including Main.js.

        * UserInterface/Main.html: Referenced the new JS files.
        * UserInterface/Main.js:
        * UserInterface/MessageDispatcher.js: Added.
        (WebInspector.dispatchNextQueuedMessageFromBackend):
        (WebInspector.dispatchMessageFromBackend):
        * UserInterface/URLUtilities.js: Added.
        (removeURLFragment):
        (relativePath):
        (parseURL):
        (absoluteURL):
        (parseLocationQueryParameters):
        (parseQueryString):
        (WebInspector.displayNameForURL):
        (WebInspector.displayNameForHost):
        * UserInterface/Utilities.js:

2013-10-21  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: [CSS Regions] Flows are not loading if you refresh the page several times
        https://bugs.webkit.org/show_bug.cgi?id=123123

        Reviewed by Joseph Pecoraro.

        There was a typo in the code where an exception was thrown because "flowKey" was undefined.

        * UserInterface/DOMTree.js:
        (WebInspector.DOMTree.prototype._contentFlowListWasUpdated):

2013-10-21  Oliver Hunt  <oliver@apple.com>

        Restore accidentally removed files.

        * UserInterface/GoToLineDialog.css: Added.
        (.go-to-line-dialog):
        (.go-to-line-dialog > div):
        (.go-to-line-dialog > div > input):
        (.go-to-line-dialog > div > input::-webkit-input-placeholder):
        (.go-to-line-dialog > div > img):
        (.go-to-line-dialog > div > img:active):
        (.go-to-line-dialog.non-empty > div > img):
        * UserInterface/GoToLineDialog.js: Added.
        (WebInspector.GoToLineDialog):
        (WebInspector.GoToLineDialog.prototype.present):
        (WebInspector.GoToLineDialog.prototype.dismiss):
        (WebInspector.GoToLineDialog.prototype.handleEvent):
        (WebInspector.GoToLineDialog.prototype._handleInputEvent):
        (WebInspector.GoToLineDialog.prototype._handleKeydownEvent):
        (WebInspector.GoToLineDialog.prototype._handleBlurEvent):
        (WebInspector.GoToLineDialog.prototype._handleMousedownEvent):
        (WebInspector.GoToLineDialog.prototype._handleClickEvent):
        (WebInspector.GoToLineDialog.prototype._clear):
        * UserInterface/Images/CloseWhite.svg: Added.

2013-10-18  Alexandru Chiculita  <achicu@adobe.com>

        Web Inspector: CSS Regions: Add the list of flows in the FrameTreeElement
        https://bugs.webkit.org/show_bug.cgi?id=122924

        Reviewed by Timothy Hatcher.

        Added code to collect the flows from the backend into the DOMTree object
        on the frontend. Added ContentFlow to represent the flows on the frontend
        side and created ContentFlowTreeElement to display the flows in the FrameTreeElement.

        * Localizations/en.lproj/localizedStrings.js:
        * Scripts/copy-user-interface-resources.sh:
        * UserInterface/CSSObserver.js:
        (WebInspector.CSSObserver.prototype.namedFlowCreated):
        (WebInspector.CSSObserver.prototype.namedFlowRemoved):
        (WebInspector.CSSObserver.prototype.regionLayoutUpdated):
        (WebInspector.CSSObserver.prototype.regionOversetChanged):
        * UserInterface/ContentFlow.js: Added.
        (WebInspector.ContentFlow):
        (WebInspector.ContentFlow.prototype.get id):
        (WebInspector.ContentFlow.prototype.get documentNodeIdentifier):
        (WebInspector.ContentFlow.prototype.get name):
        (WebInspector.ContentFlow.prototype.get overset):
        (WebInspector.ContentFlow.prototype.set overset):
        * UserInterface/ContentFlowIcon.css: Added.
        (.content-flow-icon .icon):
        * UserInterface/ContentFlowTreeElement.js: Added.
        (WebInspector.ContentFlowTreeElement):
        * UserInterface/DOMTree.js:
        (WebInspector.DOMTree):
        (WebInspector.DOMTree.prototype.get flowMap):
        (WebInspector.DOMTree.prototype.get flowsCount):
        (WebInspector.DOMTree.prototype._framePageExecutionContextChanged):
        (WebInspector.DOMTree.prototype.requestContentFlowList):
        (WebInspector.DOMTree.prototype._isContentFlowInCurrentDocument):
        (WebInspector.DOMTree.prototype._contentFlowListWasUpdated):
        (WebInspector.DOMTree.prototype._contentFlowWasAdded):
        (WebInspector.DOMTree.prototype._contentFlowWasRemoved):
        * UserInterface/DOMTreeManager.js:
        (WebInspector.DOMTreeManager):
        (WebInspector.DOMTreeManager._flowPayloadHashKey):
        (WebInspector.DOMTreeManager.prototype._buildHighlightConfig):
        (WebInspector.DOMTreeManager.prototype._createContentFlowFromPayload):
        (WebInspector.DOMTreeManager.prototype._updateContentFlowFromPayload):
        (WebInspector.DOMTreeManager.prototype.getNamedFlowCollection):
        (WebInspector.DOMTreeManager.prototype.namedFlowCreated):
        (WebInspector.DOMTreeManager.prototype.namedFlowRemoved):
        (WebInspector.DOMTreeManager.prototype._sendNamedFlowUpdateEvents):
        (WebInspector.DOMTreeManager.prototype.regionLayoutUpdated):
        (WebInspector.DOMTreeManager.prototype.regionOversetChanged):
        * UserInterface/FrameTreeElement.js:
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.onpopulate):
        (WebInspector.FrameTreeElement.prototype.onexpand):
        (WebInspector.FrameTreeElement.prototype._childContentFlowWasAdded):
        (WebInspector.FrameTreeElement.prototype._childContentFlowWasRemoved):
        (WebInspector.FrameTreeElement.prototype._rootDOMNodeInvalidated):
        (WebInspector.FrameTreeElement.prototype._addChildForRepresentedObject):
        (WebInspector.FrameTreeElement.prototype._removeChildForRepresentedObject):
        (WebInspector.FrameTreeElement.prototype._addTreeElementForRepresentedObject):
        (WebInspector.FrameTreeElement.prototype._compareResourceTreeElements):
        (WebInspector.FrameTreeElement.prototype._insertResourceTreeElement):
        (WebInspector.FrameTreeElement.prototype._parentTreeElementForRepresentedObject):
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders):
        * UserInterface/Images/ContentFlow.svg: Added.
        * UserInterface/Main.html:
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype._treeElementSelected):

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: Go to line keyboard command and dialog
        https://bugs.webkit.org/show_bug.cgi?id=122893

        Reviewed by Timothy Hatcher.

        Add a text input over source code text editors, centered within the width of the editor
        and towards the top of the editor, upon pressing Command+L or Control+G to match the
        behavior in Chrome.

        * Localizations/en.lproj/localizedStrings.js:
        New localized string "Line Number".

        * UserInterface/GoToLineDialog.css: Added.
        Styling for the go-to-line dialog.

        * UserInterface/GoToLineDialog.js: Added.
        (WebInspector.GoToLineDialog):
        Generate the DOM structure for the dialog.

        (WebInspector.GoToLineDialog.prototype.present):
        Present the dialog as a child of a parent element. The dialog's text field automatically
        gets focus and resets to be empty.

        (WebInspector.GoToLineDialog.prototype.dismiss):
        Dismiss the dialog if visible, this triggers the goToLineDialogWasDismissed delegate method.

        (WebInspector.GoToLineDialog.prototype.handleEvent):
        Route the various events registered in the dialog's DOM tree: input, keydown, blur, mousedown
        and click.

        (WebInspector.GoToLineDialog.prototype._handleInputEvent):
        Update the "non-empty" class on the dialog's element depending on the content of the dialog's
        text field. If there is content in the text field, this will make the clear icon visible.

        (WebInspector.GoToLineDialog.prototype._handleKeydownEvent):
        If the Esc. key is pressed when there is text in the dialog's input field, clear the input field.
        If no text is in the input field, dismiss the input field. When the Enter key is pressed, we call
        the isGoToLineDialogValueValid() method on the delegate to figure out if the text field value is
        valid. If it's not, we select the text field value so that it may be easily replaced and play
        en error sound. If it's valid, we call the goToLineDialogValueWasValidated() delegate method
        and dismiss the dialog.

        (WebInspector.GoToLineDialog.prototype._handleBlurEvent):
        Dismiss the dialog when its text field loses focus. This ensures that clicking anywhere outside
        of the dialog removes it from display.

        (WebInspector.GoToLineDialog.prototype._handleMousedownEvent):
        Upon pressing the mouse down on the clear icon, select the entire text field content (matches
        the behavior of Xcode) and prevent the default event action that would blur the text field
        which would dismiss the dialog.

        (WebInspector.GoToLineDialog.prototype._handleClickEvent):
        Clear the content of the dialog's text field upon clicking on its clear button.

        (WebInspector.GoToLineDialog.prototype._clear):
        Reset the dialog's text field's value to an empty string and remove the "non-empty" CSS class name
        controlling the display of the clear button.

        * UserInterface/Images/CloseWhite.svg: Added.
        Variation of the Close.svg icon with a white cross.

        * UserInterface/Main.html:
        Link to the newly added resources for GoToLineDialog.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor):
        Register the Command+L and Control+G keyboard shortcuts to bring up the go-to-line dialog.

        (WebInspector.SourceCodeTextEditor.prototype.showGoToLineDialog):
        Method called upon pressing the Command+L and Control+G keyboard shorcuts creating an instance
        of a GoToDialog if necessary, becoming its delegate and presenting it in the context of the
        editor's root element.

        (WebInspector.SourceCodeTextEditor.prototype.isGoToLineDialogValueValid):
        Delegate method called to validate the line number presently set in the go-to-dialog's text field,
        checking it's a number between 1 and the number of lines in the source code.

        (WebInspector.SourceCodeTextEditor.prototype.goToLineDialogValueWasValidated):
        Delegate method called when the line number set in the go-to-dialog's text field has been validated.
        We reveal and select the line at the number provided.

        (WebInspector.SourceCodeTextEditor.prototype.goToLineDialogWasDismissed):
        Ensure the source code editor regains focus upon dismissing the go-to-dialog.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.revealPosition):
        Add a new opt-in option to not highlight the revealed position. The code in goToLineDialogValueWasValidated()
        sets that new flag to true to avoid an unnecessary highlight on top of the selection.

        (WebInspector.TextEditor.prototype.get lineCount):
        Expose the lineCount() method on the private CodeMirror instance.

        (WebInspector.TextEditor.prototype.focus):
        Expose the focus() method on the private CodeMirror instance.

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: logged objects are highlighted in blue
        https://bugs.webkit.org/show_bug.cgi?id=122897

        Reviewed by Joseph Pecoraro.

        Switch to using the system highlight color for the background selected messages.
        Also removing SVG assets no longer needed since we won't be showing white prompt
        and result icons anymore as well as a few generated canvas states.

        * UserInterface/Images/UserInputPromptPreviousSelected.svg: Removed.
        * UserInterface/Images/UserInputResultSelected.svg: Removed.
        * UserInterface/LogContentView.css:
        (.console-messages:focus .console-item.selected):
        * UserInterface/Main.js:
        (WebInspector._generateDisclosureTriangleImages):

2013-10-17  Antoine Quint  <graouts@apple.com>

        Web Inspector: allow front-end to trigger the system beep sound to signal an error
        https://bugs.webkit.org/show_bug.cgi?id=122955

        Reviewed by Timothy Hatcher.

        Provide a stub method for the new InspectorFrontendHost.beep() method.

        * UserInterface/InspectorFrontendHostStub.js:
        (WebInspector.InspectorFrontendHostStub.prototype.beep):

2013-10-15  Antoine Quint  <graouts@apple.com>

        Web Inspector: can't select text inside a text node
        https://bugs.webkit.org/show_bug.cgi?id=122828

        Reviewed by Timothy Hatcher.

        Cancel the default user interaction when a drag action starts if the
        element is being edited.

        * UserInterface/DOMTreeElement.js:
        (WebInspector.DOMTreeElement.prototype.onattach):
        (WebInspector.DOMTreeElement.prototype.handleEvent):

2013-10-10  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: content views and managers should save/restore view state.
        https://bugs.webkit.org/show_bug.cgi?id=122546

        To restore the same content view and sidebars when re-opening the
        inspector, a cookie is saved whenever a new content view is shown
        in the main content browser. Previously, this cookie was created
        and restored using navigation sidebar-specific logic. This has two
        major flaws: non-default sidebars for a represented object are not
        restored correctly; and it centralizes storage of view-specific
        state such as subview selections.

        This patch adds ContentView methods for saving a key for the
        view's represented object, and saving/restoring any view-specific
        state as the view is shown. The 'type' field of the cookie
        specifies the manager which deserializes the cookie into a
        represented object.

        Reviewed by Timothy Hatcher.

        * UserInterface/ApplicationCacheFrameContentView.js:
        (WebInspector.ApplicationCacheFrameContentView):
        (WebInspector.ApplicationCacheFrameContentView.prototype.saveToCookie):
        (WebInspector.ApplicationCacheFrameContentView.prototype._maybeUpdate):
        (WebInspector.ApplicationCacheFrameContentView.prototype._updateStatus):
        (WebInspector.ApplicationCacheFrameContentView.prototype.updateStatus):
        (WebInspector.ApplicationCacheFrameContentView.prototype._updateCallback):
        * UserInterface/ApplicationCacheManager.js:
        (WebInspector.ApplicationCacheManager.prototype.networkStateUpdated):
        (WebInspector.ApplicationCacheManager.prototype.applicationCacheStatusUpdated):
        (WebInspector.ApplicationCacheManager.prototype.):
        (WebInspector.ApplicationCacheManager.prototype.requestApplicationCache):
        (WebInspector.ApplicationCacheManager.prototype.objectForCookie):
        (WebInspector.ApplicationCacheManager.prototype._manifestForFrameLoaded):
        (WebInspector.ApplicationCacheManager.prototype._framesWithManifestsLoaded):
        (WebInspector.ApplicationCacheManager.prototype._frameManifestUpdated):
        * UserInterface/BackForwardEntry.js:
        (WebInspector.BackForwardEntry):
        (WebInspector.BackForwardEntry.prototype._restoreFromCookie):
        * UserInterface/ContentBrowser.js:
        (WebInspector.ContentBrowser.prototype.showContentViewForRepresentedObject):
        (WebInspector.ContentBrowser.prototype.showContentView):
        * UserInterface/ContentView.js:
        (WebInspector.ContentView.prototype.saveToCookie):
        (WebInspector.ContentView.prototype.restoreFromCookie):
        * UserInterface/ContentViewContainer.js:
        (WebInspector.ContentViewContainer.prototype.showContentView):
        * UserInterface/CookieStorageContentView.js:
        (WebInspector.CookieStorageContentView.prototype.update):
        (WebInspector.CookieStorageContentView.prototype.saveToCookie):
        (WebInspector.CookieStorageContentView.prototype._rebuildTable):
        (WebInspector.CookieStorageContentView.prototype._filterCookies):
        * UserInterface/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView.prototype.saveToCookie):
        * UserInterface/DatabaseContentView.js:
        (WebInspector.DatabaseContentView.prototype.saveToCookie):
        (WebInspector.DatabaseContentView.prototype._messagesClicked):
        * UserInterface/DatabaseTableContentView.js:
        (WebInspector.DatabaseTableContentView):
        (WebInspector.DatabaseTableContentView.prototype.saveToCookie):
        * UserInterface/FrameContentView.js:
        (WebInspector.FrameContentView.prototype.saveToCookie):
        (WebInspector.FrameContentView.prototype.restoreFromCookie):
        * UserInterface/FrameResourceManager.js:
        (WebInspector.FrameResourceManager.prototype.objectForCookie):
        * UserInterface/InstrumentSidebarPanel.js:
        (WebInspector.InstrumentSidebarPanel):
        (WebInspector.InstrumentSidebarPanel.prototype.showTimeline):
        (WebInspector.InstrumentSidebarPanel.prototype.shown):
        (WebInspector.InstrumentSidebarPanel.prototype._timelinesTreeElementSelected):
        * UserInterface/Main.js:
        (WebInspector.loaded):
        (WebInspector.contentLoaded):
        (WebInspector.openURL):
        (WebInspector._updateCurrentContentViewCookie):
        (WebInspector._showContentViewForCookie.lastAttemptToRestoreFromCookie):
        (WebInspector._showContentViewForCookie):
        (WebInspector._resolveAndShowPendingContentViewCookie.delayedWork):
        (WebInspector._resolveAndShowPendingContentViewCookie):
        (WebInspector.elementDragStart):
        (WebInspector.elementDragEnd):
        (WebInspector.createMessageTextView):
        (WebInspector.linkifyStringAsFragment):
        * UserInterface/NavigationSidebarPanel.js:
        * UserInterface/ResourceClusterContentView.js:
        (WebInspector.ResourceClusterContentView.prototype.saveToCookie):
        (WebInspector.ResourceClusterContentView.prototype.restoreFromCookie):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.showSourceCode):
        (WebInspector.ResourceSidebarPanel.prototype._mainFrameDidChange):
        (WebInspector.ResourceSidebarPanel.prototype._domStorageObjectWasAdded):
        (WebInspector.ResourceSidebarPanel.prototype._databaseWasAdded):
        (WebInspector.ResourceSidebarPanel.prototype._cookieStorageObjectWasAdded):
        (WebInspector.ResourceSidebarPanel.prototype._frameManifestAdded):
        * UserInterface/ScriptContentView.js:
        (WebInspector.ScriptContentView.prototype.saveToCookie):
        (WebInspector.ScriptContentView.prototype.restoreFromCookie):
        * UserInterface/StorageManager.js:
        (WebInspector.StorageManager.prototype.findMatchingObjectInArray):
        (WebInspector.StorageManager.prototype.objectForCookie):
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager):
        (WebInspector.TimelineManager.prototype.get timelines):
        (WebInspector.TimelineManager.prototype.objectForCookie):
        * UserInterface/TimelinesContentView.js:
        (WebInspector.TimelinesContentView.prototype.saveToCookie):
        (WebInspector.TimelinesContentView.prototype.restoreFromCookie):
        (WebInspector.TimelinesContentView.prototype._makeColumnScopeBar):

2013-10-10  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/13341666> WebKit should always build against an SDK.

        Have all projects default to building against the OS X Internal SDK for the Production
        configuration. For the Debug and Release configurations, look for UseInternalSDK.xcconfig
        to determine whether the OS X Internal SDK should be used. If not, use the normal OS X SDK.

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:

2013-10-04  Antoine Quint  <graouts@apple.com>

        Web Inspector: pressing the Cmd key over a CSS property should underline it immediately (jump to definition mode)
        https://bugs.webkit.org/show_bug.cgi?id=119012

        Reviewed by Joseph Pecoraro.

        We add an "enabled" state to the tokenTrackingController to indicate that we're interested
        in tracking hovered tokens. The tokenTrackingController is now only enabled in the
        CSSStyleDeclarationTextEditor when the Cmd key is pressed and in the SourceCodeTextEditor
        when either the Cmd key is pressed (NonSymbolTokens mode) or when the debugger is paused
        (JavaScriptExpression mode).

        The tokenTrackingController is now smarter about how it tracks mouse events when it's enabled,
        tracking "mouseenter" and "mouseleave" events to enable tracking allowing immediate detection of
        tokens being hovered or no longer being hovered even with quick mouse movements. Additioanlly,
        using the new top-level mouse coordinates tracking, we can detect a hovered token as soon as
        it's being enabled to provide instant feedback to the user.

        This new top-level mouse coordinates tracking couple with tracking of modifier keys also fixes
        http://webkit.org/b/119011.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._updateJumpToSymbolTrackingMode):
        Highlight the last known hovered candidate's range as soon as the Cmd key is pressed and enable
        the tokenTrackingController if we're dealing with a non-read-only editor. When the Cmd key is
        released, disable the tokenTrackingController.

        * UserInterface/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController):
        (WebInspector.CodeMirrorTokenTrackingController.prototype.get enabled):
        (WebInspector.CodeMirrorTokenTrackingController.prototype.set enabled):
        New enabled state for the tokenTrackingController which indicates whether it should be tracking
        mouse events to track hovered tokens in the editor. Upon being enabled, the tokenTrackingController
        looks up the mouse coordinates continuously tracked at the window level to check for a token
        at the last known mouse coordinates in case we're already over a token that may be highlighted.

        (WebInspector.CodeMirrorTokenTrackingController.prototype.highlightLastHoveredRange):
        New public method allowing to highlight the last know candidate range, if any. This is used from
        editor code when the Cmd key is pressed and we want to force the last know candidate to be
        highlighted.

        (WebInspector.CodeMirrorTokenTrackingController.prototype._startTracking):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._stopTracking):
        Make these two methods private now that they're automatically called by the "mouseenter" and
        "mouseleave" event handling when we're in the "enabled" state. Additionally, the public
        "tracking" property has been removed since it is no longer useful to the developer.

        (WebInspector.CodeMirrorTokenTrackingController.prototype.handleEvent):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._mouseEntered):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._mouseLeft):
        New handlers for the "mouseenter" and "mouseleave" events enabling tracking of hovered tokens.

        (WebInspector.CodeMirrorTokenTrackingController.prototype._mouseMovedOverEditor):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._updateHoveredTokenInfo):
        Refactor _mouseMovedOverEditor() into two methods with the new _updateHoveredTokenInfo()
        allowing to customize the mouse coordinates to be used since we may call
        _updateHoveredTokenInfo() outside of the context of a mouse event (ie. a keypress event).

        (WebInspector.CodeMirrorTokenTrackingController.prototype._windowLostFocus):
        (WebInspector.CodeMirrorTokenTrackingController.prototype._resetTrackingStates):
        New private method combining all the various states that need to be reset when tracking
        is turned off, including the removal of the highlighted range if any. This is now called
        when the window loses focus.

        * UserInterface/Main.js:
        (WebInspector.loaded):
        (WebInspector._mouseMoved):
        Add a new window-level "mousemove" event handler to always track mouse coordinates and key modifier
        states. This ensures that we may have the most accurate information possible for key modifiers and
        allow code to query the last recorded mouse position in situations where it wouldn't be possible
        to have dealt with a mouse event, as is the case when the tokenTrackingController just started tracking.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._updateTokenTrackingControllerEnabled):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidPause):
        (WebInspector.SourceCodeTextEditor.prototype._debuggerDidResume):
        (WebInspector.SourceCodeTextEditor.prototype._enableJumpToSymbolTrackingModeSettings):
        (WebInspector.SourceCodeTextEditor.prototype._disableJumpToSymbolTrackingModeSettings):
        Update the "enabled" state on the tokenTrackingController when it may have changed based
        on those two conditions: we should have either an active debugger call frame or the
        Cmd key should have been pressed. This ensures we only track hovered tokens as needed.

        (WebInspector.SourceCodeTextEditor.prototype._updateJumpToSymbolTrackingMode):
        Highlight the last known hovered candidate's range as soon as the Cmd key is pressed.

2013-10-02  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: save and restore source positions in back/forward history
        https://bugs.webkit.org/show_bug.cgi?id=122062

        Reviewed by Timothy Hatcher.

        Previously, the back/forward entries comprised of only the content
        views, but not their positions if navigated via hyperlink (i.e.,
        handling script.js:42).  When multiple instances of the same
        content view appeared in the back/forward list, the most recent
        navigation was displayed rather than the linked position.

        We now store context necessary to re-navigate such hyperlinks by
        storing view- specific data inside a cookie object, and invoke a
        supplied callback to take any position initialization actions,
        such as calling TextEditor.revealPosition.  This state is
        encapsulated into BackForwardEntry instances.

        Functions that save and restore scroll positions inside content
        views have been changed to store state in BackForwardEntry
        instances, so multiple scroll positions can be saved for a content
        view appearing in the navigation history more than once.

        * UserInterface/BackForwardEntry.js: Added.
        (WebInspector.BackForwardEntry):
        (WebInspector.BackForwardEntry.prototype.get contentView):
        (WebInspector.BackForwardEntry.prototype.get cookie):
        (WebInspector.BackForwardEntry.prototype.prepareToShow):
        (WebInspector.BackForwardEntry.prototype.prepareToHide):
        (WebInspector.BackForwardEntry.prototype._restoreFromCookie):
        (WebInspector.BackForwardEntry.prototype._restoreScrollPositions):
        (WebInspector.BackForwardEntry.prototype._saveScrollPositions):
        * UserInterface/ContentBrowser.js:
        (WebInspector.ContentBrowser.prototype.showContentView):
        (WebInspector.ContentBrowser.prototype._updateContentViewNavigationItems):
        (WebInspector.ContentBrowser.prototype._updateFindBanner):
        * UserInterface/ContentViewContainer.js:
        (WebInspector.ContentViewContainer.prototype.get currentContentView):
        (WebInspector.ContentViewContainer.prototype.get currentBackForwardEntry):
        (WebInspector.ContentViewContainer.prototype.showContentView):
        (WebInspector.ContentViewContainer.prototype.showBackForwardEntryForIndex):
        (WebInspector.ContentViewContainer.prototype.replaceContentView):
        (WebInspector.ContentViewContainer.prototype.closeAllContentViewsOfPrototype):
        (WebInspector.ContentViewContainer.prototype.closeAllContentViews):
        (WebInspector.ContentViewContainer.prototype.goBack):
        (WebInspector.ContentViewContainer.prototype.goForward):
        (WebInspector.ContentViewContainer.prototype.shown):
        (WebInspector.ContentViewContainer.prototype.hidden):
        (WebInspector.ContentViewContainer.prototype._showEntry):
        (WebInspector.ContentViewContainer.prototype._hideEntry):
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.openURL):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype.restoreCallback):
        (WebInspector.ResourceSidebarPanel.prototype.showSourceCode):

2013-10-02  Antoine Quint  <graouts@apple.com>

        Web Inspector: highlight newly added console messages in the Activity Viewer
        https://bugs.webkit.org/show_bug.cgi?id=122093

        Reviewed by Joseph Pecoraro.

        Fade the appropriate console log button in the Activity Viewer for a short duration
        to call attention to it when its count is incremented. The animation may be restarted
        in-flight if the count is incremented as we were pulsing the opacity.

        * UserInterface/DashboardView.css:
        (.toolbar .dashboard > .item.pulsing):
        (@-webkit-keyframes console-item-pulse):
        New pulse animation for a console item in the Activity Viewer, the new "pulsing" CSS
        class is applied in WebInspector.DashboardView.prototype._setConsoleItemValue().

        * UserInterface/DashboardView.js:
        (WebInspector.DashboardView.prototype.set logs):
        (WebInspector.DashboardView.prototype.set issues):
        (WebInspector.DashboardView.prototype.set errors):
        Refactor setters to use the new WebInspector.DashboardView.prototype._setConsoleItemValue()
        method.

        (WebInspector.DashboardView.prototype._setConsoleItemValue):
        We now set the ivar backing console item values in this new refactored method and additionally
        apply an animation to the DOM element for the given item if its value is incremented such that
        it pulses, subtly calling out the developer's attention to it.

        * UserInterface/Utilities.js:
        New Element.prototype.recalculateStyles() method to abstract the hack required to force
        a style recalc on a given element.

2013-10-01  Antoine Quint  <graouts@apple.com>

        Web Inspector: evaluate and show a popover for selected text in JS source when paused
        https://bugs.webkit.org/show_bug.cgi?id=122151

        Reviewed by Joseph Pecoraro.

        Identify if the hovered token is contained within the text selection (if any) and use
        the selection as the hovered expression to allow the user to select text and hover it
        to see what it evaluates to.

        * UserInterface/CodeMirrorTokenTrackingController.js:
        (WebInspector.CodeMirrorTokenTrackingController.prototype.highlightRange):
        Check we're trying to highlight a different range before removing the highlight
        and applying the new one, this prevents the marked text from flashing if it's
        being re-hovered which would easily happen when hovering multiple tokens within
        the same selection.

        (WebInspector.CodeMirrorTokenTrackingController.prototype._processJavaScriptExpression):
        In the case where there is selected text, check whether the hovered token is at least
        partially contained within the selection, and if so use the selection text as the
        hovered expression to evaluate.

2013-10-01  Antoine Quint  <graouts@apple.com>

        Console buttons don’t show after page reload
        https://bugs.webkit.org/show_bug.cgi?id=116515

        Reviewed by Darin Adler.

        The correct display of navigation items in the ContentBrowser is contingent on
        the ContentViewContainer's _backForwardList being up-to-date when the navigation
        items are retrieved from it. However, when the main resource changes (in this case
        the user refreshes the browser), calls are made to ContentViewContainer's
        closeAllContentViewsOfPrototype() which may modify the _backForwardList but doesn't
        necessarily notify of a change to the currentContentView since we may be still showing
        the same view in case it wasn't directly related to the main resource, for instance
        the console log.

        We now check if the _backForwardList is changed as a result of calling
        closeAllContentViewsOfPrototype() and in that case also dispatch the
        CurrentContentViewDidChange event which will restore the correct state
        for the back/forward buttons and navigation items of the navigation bar.

        * UserInterface/ContentViewContainer.js:
        (WebInspector.ContentViewContainer.prototype.closeAllContentViewsOfPrototype):
        Track changes to the _backForwardList and dispatch the CurrentContentViewDidChange
        event in case such changes happened.

2013-09-30  Antoine Quint  <graouts@apple.com>

        Web Inspector: rows in the Layer sidebar panel may have the incorrect background color
        https://bugs.webkit.org/show_bug.cgi?id=122108

        Reviewed by Darin Adler.

        The LayerTreeDataGrid is a custom DataGrid subclass which exposes a .setChildren() method
        used to sort chidren without DOM order manipulation, for performance reason. However, since
        the way the alternating background color is usually implemented is based on the built-in
        CSS pseudo-classes working with DOM order, the background colors of nodes in the LayerTreeDataGrid
        can be incorrect depending on the sort order and the number of nodes. To fix this, we now manually
        set "even" and "odd" CSS classes on those nodes when they're sorted such that we have a chance
        to style them as intended.

        * UserInterface/LayerTreeDataGrid.js:
        (WebInspector.LayerTreeDataGrid.prototype._updateChildren):
        Check if the data grid node index is even or odd and reflect this via an exclusive "even"
        or "odd" CSS class name.

        * UserInterface/LayerTreeSidebarPanel.css:
        (.layer-tree.panel .data-container tbody > tr.even):
        (.layer-tree.panel .data-container tbody > tr.odd):
        Apply alternating colors based on the exclusive "even" and "odd" CSS class names as applied in
        WebInspector.LayerTreeDataGrid.prototype._updateChildren().

2013-09-30  Antoine Quint  <graouts@apple.com>

        Web Inspector: Popover displaying "reasons for compositing" may remain on screen after selected layer is removed
        https://bugs.webkit.org/show_bug.cgi?id=117575

        Ensure the popover attached to the selected data grid node is updated when the
        content or sort order of the Layer sidebar panel is updated.

        Reviewed by Darin Adler.

        * UserInterface/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel.prototype._sortDataGrid):

2013-09-30  Antoine Quint  <graouts@apple.com>

        Web Inspector: nodes can be dragged from the console log
        https://bugs.webkit.org/show_bug.cgi?id=122105

        Reviewed by Darin Adler.

        Catch "dragstart" events targeting nodes hosted in a DOMTreeOutline within the console
        log view and prevent the default logic to trigger so that these nodes can't be dragged
        off the console as it wouldn't make sense to.

        * UserInterface/DOMTreeOutline.js:
        (WebInspector.DOMTreeOutline):
        Create a class property to allow the CSS class name to be used in WebInspector.LogContentView.

        * UserInterface/LogContentView.js:
        (WebInspector.LogContentView):
        (WebInspector.LogContentView.prototype._ondragstart):
        Track the "dragstart" events in their capture phase such that, if the event target is
        a DOM node hosted in a DOMTreeOutline, we can prevent the event from propagating and
        cancel its default behavior such that no dragging at all is performed.

2013-09-26  Brian J. Burg  <burg@cs.washington.edu>

        Web Inspector: dissociate old content views that are spliced from back/forward list
        https://bugs.webkit.org/show_bug.cgi?id=121987

        Reviewed by Timothy Hatcher.

        There was a bug where old back/forward list entries were not being dissociated when
        the newly-shown content view was already in the list. Instead, dissociation should be
        skipped if the old list entry is not already in the list.

        * UserInterface/ContentViewContainer.js:
        (WebInspector.ContentViewContainer.prototype.showContentView):

2013-09-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Activity viewer not properly reset when reloading
        https://bugs.webkit.org/show_bug.cgi?id=121958

        Reviewed by Darin Adler.

        Reset the resources count and accumulated size when we detect the main frame
        has changed, which will work with documents where there are no resources besides
        frames in which case WebInspector.Frame.Event.AllResourcesRemoved was not fired
        and our counts wouldn't be reset correctly.

        * UserInterface/DashboardManager.js:
        (WebInspector.DashboardManager):
        (WebInspector.DashboardManager.prototype._mainResourceDidChange):

2013-09-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: Keep DOM tree expanded on page reload
        https://bugs.webkit.org/show_bug.cgi?id=121665

        Reviewed by Darin Adler.

        Allow the node that was selected before reloading the page to be selected
        at the page is reloaded. Credit goes to Joseph Pecoraro for the fix.

        * UserInterface/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView.prototype._rootDOMNodeAvailable.selectNode):

2013-09-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Using Breakpoint Actions Breaks iOS inspection
        https://bugs.webkit.org/show_bug.cgi?id=121862

        Reviewed by Timothy Hatcher.

        Only use DebuggerAgent.BreakpointActionType if it is available.
        Otherwise leave options undefined for breakpoints since the backend
        does not support it.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype._setBreakpoint):

2013-09-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Include iOS 7 Inspector.json Version
        https://bugs.webkit.org/show_bug.cgi?id=121852

        Reviewed by Timothy Hatcher.

        * UserInterface/Legacy/7.0/InspectorBackendCommands.js: Added.
        * Versions/Inspector-iOS-7.0.json: Added.

2013-09-24  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/14971518> WebKit should build against the Xcode default toolchain when targeting OS X 10.8

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2013-09-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoint Actions input should disable spellchecking
        https://bugs.webkit.org/show_bug.cgi?id=121846

        Reviewed by Timothy Hatcher.

        * UserInterface/BreakpointActionView.js:

2013-09-21  Timothy Hatcher  <timothy@apple.com>

        Hook up the initiator info and show it in the Resource details sidebar.

        https://bugs.webkit.org/show_bug.cgi?id=121741

        Reviewed by Joseph Pecoraro.

        * UserInterface/FrameResourceManager.js:
        (WebInspector.FrameResourceManager.prototype.resourceRequestWillBeSent):
        (WebInspector.FrameResourceManager.prototype.resourceRequestWasServedFromMemoryCache):
        (WebInspector.FrameResourceManager.prototype._addNewResourceToFrame):
        (WebInspector.FrameResourceManager.prototype._initiatorSourceCodeLocationFromPayload):
        * UserInterface/NetworkObserver.js:
        (WebInspector.NetworkObserver.prototype.requestWillBeSent):
        (WebInspector.NetworkObserver.prototype.requestServedFromMemoryCache):
        * UserInterface/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.get initiatorSourceCodeLocation):
        * UserInterface/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel):
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshURL):

2013-09-20  Timothy Hatcher  <timothy@apple.com>

        Parse MIME-types and strip them down to the base type when needed.

        The use of charset in a MIME-type interferes with our type maps,
        preventing the right syntax highlighting mode and pretty printing.

        https://bugs.webkit.org/show_bug.cgi?id=121723

        Reviewed by Joseph Pecoraro.

        * UserInterface/ConsolePrompt.js:
        (WebInspector.ConsolePrompt):
        * UserInterface/FontResourceContentView.js:
        * UserInterface/Resource.js:
        (WebInspector.Resource.Type.fromMIMEType):
        (WebInspector.Resource.prototype.get mimeTypeComponents):
        (WebInspector.Resource.prototype.get syntheticMIMEType):
        (WebInspector.Resource.prototype.get contentURL):
        (WebInspector.Resource.prototype.updateForResponse):
        * UserInterface/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel.prototype._refreshRequestDataSection):
        * UserInterface/SourceMapResource.js:
        (WebInspector.SourceMapResource.prototype.requestContentFromBackend):
        * UserInterface/SyntaxHighlightingSupport.js:
        (WebInspector.syntaxHighlightStringAsDocumentFragment):
        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.set mimeType):
        * UserInterface/Utilities.js:
        (parseMIMEType): Added.

2013-09-20  Marcelo Morais  <m.morais@samsung.com>

        Web Inspector: Fix keyboard shortcuts for other platforms
        https://bugs.webkit.org/show_bug.cgi?id=120657

        Reviewed by Timothy Hatcher.

        Handling keyboard shortcuts according to the current platform.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.loadResourceSynchronously):
        (.WebInspector.InspectorFrontendHostStub.prototype.platform): Added. Return the
        current platform.
        * UserInterface/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.Modifier.get CommandOrControl): Added. Created keyboard
        modifier to return Control or Command key according to current platform.
        * UserInterface/ContentBrowser.js:
        (WebInspector.ContentBrowser): Returning Control or Command key for keyboard
        shortcuts according to current platform.
        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel): Ditto.
        * UserInterface/FindBanner.js:
        (WebInspector.FindBanner): Ditto.
        * UserInterface/JavaScriptLogViewController.js:
        (WebInspector.JavaScriptLogViewController): Ditto.
        * UserInterface/LogContentView.js:
        (WebInspector.LogContentView): Ditto.
        * UserInterface/Main.js:
        (WebInspector.contentLoaded): Ditto.
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel): Ditto.

2013-09-20  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed gardening. Teach WebInspectorUI.vcxproj folder to
        ignore Visual Studio's local user settings file.

        * WebInspectorUI.vcxproj: Added property svn:ignore.

2013-09-17  Gustavo Noronha Silva  <gns@gnome.org>

        [GTK] Cannot find WebInspectorUI/UserInterface/Main.html referenced in GResourceBundle.xml
        https://bugs.webkit.org/show_bug.cgi?id=121405

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: if srcdir == builddir the WebInspectorUI variable that is used both to list
        the dependencies of the GResourceBundle and to normalize the paths added to the XML through sed
        replacement will end up starting with ./, which would be fine if automake did not remove that
        from the paths in the target's dependency. We deal with that by normalizing the path we use to
        take that quirk into account.

2013-09-17  Timothy Hatcher  <timothy@apple.com>

        Clean up the Inspector's WebSocket code and prevent it from dropping messages.

        https://bugs.webkit.org/show_bug.cgi?id=121391

        Reviewed by Joseph Pecoraro.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.initializeWebSocket): Added. Create the socket
        and call _sendPendingMessagesToBackendIfNeeded.
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend): Store messages as pending
        if the socket isn't ready yet. Call _sendPendingMessagesToBackendIfNeeded.
        (.WebInspector.InspectorFrontendHostStub.prototype._sendPendingMessagesToBackendIfNeeded): Added.
        * UserInterface/Main.js:
        (WebInspector._initializeWebSocketIfNeeded): Move socket creation to initializeWebSocket.

2013-09-16  Timothy Hatcher  <timothy@apple.com>

        Make InspectorTimelineAgent use an enum for the record type instead of a string.

        https://bugs.webkit.org/show_bug.cgi?id=121461

        Reviewed by Joseph Pecoraro.

        * UserInterface/InspectorBackendCommands.js:
        * UserInterface/Legacy/6.0/InspectorBackendCommands.js:
        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype.eventRecorded.processRecord):
        (WebInspector.TimelineManager.prototype.eventRecorded):
        * Versions/Inspector-iOS-6.0.json:

2013-09-16  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: TypeError when updating ResourceTreeElement created in strange order
        https://bugs.webkit.org/show_bug.cgi?id=121382

        Reviewed by Timothy Hatcher.

        Patch by Brian Burg. Fix an uncaught exception that can happen on navigations.

        * UserInterface/ResourceTreeElement.js:
        (WebInspector.ResourceTreeElement.prototype._updateStatus):

2013-09-16  Timothy Hatcher  <timothy@apple.com>

        Make InspectorTypeBuilder generate better enums in C++.

        https://bugs.webkit.org/show_bug.cgi?id=121440

        Reviewed by Joseph Pecoraro.

        * UserInterface/InspectorBackendCommands.js: Updated to make Css be CSS.

2013-09-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        [GTK] Move to the new web inspector
        https://bugs.webkit.org/show_bug.cgi?id=120647

        Reviewed by Carlos Garcia Campos.

        * GNUmakefile.am: Added. Generate the GResource source and link it into libWebCore.

2013-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Duplicated color swatches changing autocompletes color names
        https://bugs.webkit.org/show_bug.cgi?id=121265

        Reviewed by Timothy Hatcher.

        CodeMirror bookmarks at position used to be unique but no longer are.
        Define an extension to give us unique bookmarks as we expected, and
        update all the old locations using setBookmark.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.didDismissPopover):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._updateTextMarkers):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.event.newColorText):
        * UserInterface/CodeMirrorAdditions.js:

2013-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update CodeMirror for gutter fix
        https://bugs.webkit.org/show_bug.cgi?id=121262

        Update CodeMirror to 757944449 to fix gutter click issue:
        <https://github.com/marijnh/CodeMirror/issues/1807>

        Reviewed by Timothy Hatcher.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        (FormatterContentBuilder.prototype._appendIndent):
        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * UserInterface/CodeMirrorAdditions.js:
        * UserInterface/CodeMirrorFormatters.js:
        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.didRemoveBreakpoint):
        (WebInspector.DebuggerManager.prototype._removeBreakpoint):
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/less.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor.prototype.hasFormatter):

2013-09-12  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Update License copyrights in minified JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=121264

        Reviewed by Timothy Hatcher.

        * Scripts/copy-user-interface-resources.sh:

2013-09-11  Geoffrey Garen  <ggaren@apple.com>

        Removed some unused functions from the debugger interface
        https://bugs.webkit.org/show_bug.cgi?id=121194

        Reviewed by Joseph Pecoraro.

        We plan to use the "evaluate" API and debugger activation property access for all the features we need.

        * UserInterface/InspectorBackendCommands.js: Updated by script.

2013-09-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Download Archive button incorrectly styled when disabled and tree element is not-selected
        https://bugs.webkit.org/show_bug.cgi?id=120866

        Reviewed by Timothy Hatcher.

        * UserInterface/TreeElementStatusButton.css:
        (.item > .status > .status-button.disabled > svg *):

2013-09-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Lint JavaScript and CSS for minor issues
        https://bugs.webkit.org/show_bug.cgi?id=120884

        Reviewed by Timothy Hatcher.

        JS, caught a bunch of missing semicolons but at least one possible
        issue with duplicate object literal keys in CSSKeywordCompletions.

        CSS, cause some duplicate properties, an invalid property value,
        and some "0px" => "0" cleanup.

2013-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoint Action JS Editor has line wrapping issues with long no-space lines
        https://bugs.webkit.org/show_bug.cgi?id=120822

        Reviewed by Timothy Hatcher.

        * UserInterface/BreakpointActionView.css:
        (.breakpoint-action-eval-editor > .CodeMirror):
        (.breakpoint-action-eval-editor > .CodeMirror-scroll):

2013-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Edit Breakpoint popover sometimes appears misplaced in top left
        https://bugs.webkit.org/show_bug.cgi?id=120804

        Reviewed by Timothy Hatcher.

        Grab the bounding rect immediately, instead of grabbing it from the element
        after the user has selected the "Edit Breakpoint" context menu item. When
        the popover was misplaced it was when using an element had been removed or
        replaced in the DOM, and caused a bogus bounding client rect.

        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint.prototype.editBreakpoint):
        (WebInspector.Breakpoint.prototype._showEditBreakpointPopover):

2013-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove harmless assert, triggered hitting breakpoint in auto prettyprinted code on reload
        https://bugs.webkit.org/show_bug.cgi?id=120332

        Reviewed by Timothy Hatcher.

        * UserInterface/TextEditor.js:

2013-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoint Actions
        https://bugs.webkit.org/show_bug.cgi?id=120576

        Reviewed by Timothy Hatcher.

        Give the CodeMirror editor for JavaScript Breakpoint Actions JS Runtime
        completions (like window, document, etc.).

        The logic was inside of JavaScriptLogViewController but was already
        entirely independent. Factor it out into its own class and plug it into
        CodeMirrorCompletionController as a "CompletionsProvider".

        Because the class hooks into a global event to reset some state, make
        it a singleton, so new instances are not leaked.

        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.loaded):
        * UserInterface/RuntimeManager.js: Added.
        (WebInspector.RuntimeManager):
        (WebInspector.RuntimeManager.prototype.evalCallback):
        (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow):
        Move eval in window to new RuntimeManager. A slightly cleaner place to this
        since it is used both by the console and JS completions provider.

        * UserInterface/CodeMirrorCompletionController.js:
        (WebInspector.CodeMirrorCompletionController):
        (WebInspector.CodeMirrorCompletionController.prototype.setExtendedCompletionProvider):
        (WebInspector.CodeMirrorCompletionController.prototype._completeAtCurrentPosition):
        Allow a completions provider plugin to completions controller. If one
        is available, this supercedes the delegate extend completions path.

        * UserInterface/BreakpointActionView.js:
        * UserInterface/ConsolePrompt.js:
        (WebInspector.ConsolePrompt):
        Use the new JS completions provider to get runtime JS completions.
        NOTE: ConsolePrompt still needs the delegate path for SQL completions.

        * UserInterface/JavaScriptLogViewController.js:
        (WebInspector.JavaScriptLogViewController):
        (WebInspector.JavaScriptLogViewController.prototype.consolePromptTextCommitted):
        * UserInterface/JavaScriptRuntimeCompletionProvider.js: Added.
        (WebInspector.JavaScriptRuntimeCompletionProvider):
        (get WebInspector.JavaScriptRuntimeCompletionProvider.prototype.):
        (get WebInspector.JavaScriptRuntimeCompletionProvider.prototype.completionControllerCompletionsNeeded):
        Move the JS completions code to a new class. No changes needed.

2013-09-05  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoint Actions
        https://bugs.webkit.org/show_bug.cgi?id=120576

        Reviewed by Timothy Hatcher.

        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get actions):
        (WebInspector.Breakpoint.prototype.get options):
        (WebInspector.Breakpoint.prototype.get info):
        (WebInspector.Breakpoint.prototype._serializableActions):
        Saving, restoring, and serialization.

        (WebInspector.Breakpoint.prototype.createAction):
        (WebInspector.Breakpoint.prototype.recreateAction):
        (WebInspector.Breakpoint.prototype.removeAction):
        (WebInspector.Breakpoint.prototype.breakpointActionDidChange):
        Modifying _actions ivar.

        (WebInspector.Breakpoint.prototype._editBreakpointPopoverContentElement):
        (WebInspector.Breakpoint.prototype._popoverActionsCreateAddActionButton):
        (WebInspector.Breakpoint.prototype._popoverActionsAddActionButtonClicked):
        (WebInspector.Breakpoint.prototype._popoverActionsInsertBreakpointActionView):
        (WebInspector.Breakpoint.prototype.breakpointActionViewAppendActionView):
        (WebInspector.Breakpoint.prototype.breakpointActionViewRemoveActionView):
        (WebInspector.Breakpoint.prototype.breakpointActionViewResized):
        Popover UI containing breakpoint action views and converting to and from
        having no actions.

        (WebInspector.Breakpoint.prototype.willDismissPopover):
        Cleanup some ivars when the popover dismisses.

        * UserInterface/Breakpoint.css:
        (.popover .edit-breakpoint-popover-content.wide):
        Wider setting when there are actions in the popover.

        (.popover .edit-breakpoint-popover-content > table > tr > th):
        Keep the title labels at the top of their section.

        * UserInterface/BreakpointAction.js:
        (WebInspector.BreakpointAction):
        (WebInspector.BreakpointAction.prototype.get breakpoint):
        (WebInspector.BreakpointAction.prototype.get type):
        (WebInspector.BreakpointAction.prototype.get data):
        (WebInspector.BreakpointAction.prototype.set data):
        (WebInspector.BreakpointAction.prototype.get info):
        Very basic BreakpointAction class. Notifies Breakpoint on data changes.
        Type changes are not allowed, instead just create a new BreakpointAction.

        * UserInterface/BreakpointActionView.css: Added.
        (.breakpoint-action-block-header):
        (.breakpoint-action-remove-button):
        (.breakpoint-action-remove-button:active):
        (.breakpoint-action-append-button):
        (.breakpoint-action-block-body):
        (.breakpoint-action-block-body > input):
        (.breakpoint-action-eval-editor):
        (.breakpoint-action-eval-editor > .CodeMirror):
        (.breakpoint-action-eval-editor > .CodeMirror-scroll):
        * UserInterface/BreakpointActionView.js: Added.
        (WebInspector.BreakpointActionView):
        (WebInspector.BreakpointActionView.displayStringForType):
        (WebInspector.BreakpointActionView.prototype.get action):
        (WebInspector.BreakpointActionView.prototype.get element):
        (WebInspector.BreakpointActionView.prototype._pickerChanged):
        (WebInspector.BreakpointActionView.prototype._appendActionButtonClicked):
        (WebInspector.BreakpointActionView.prototype._removeActionButtonClicked):
        (WebInspector.BreakpointActionView.prototype._updateBody.switch.break):
        (WebInspector.BreakpointActionView.prototype._logInputChanged):
        (WebInspector.BreakpointActionView.prototype._codeMirrorBlurred):
        (WebInspector.BreakpointActionView.prototype._codeMirrorViewportChanged):
        UI and form controls for individual breakpoint actions. The view
        wraps a single BreakpointAction, and for any actions that could affect
        other views the delegate is notified.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager):
        (WebInspector.DebuggerManager.prototype._debuggerBreakpointActionType):
        When sending to the backend, make sure to send protocol enums.

        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype.update):
        Update the popover when content changes.

        * UserInterface/Images/BreakpointActionAdd.svg: Added.
        * UserInterface/Images/BreakpointActionRemove.svg: Added.
        * UserInterface/InspectorBackendCommands.js:
        * UserInterface/Main.html:
        * Localizations/en.lproj/localizedStrings.js:
        Misc. New strings, images, includes.

2013-09-03  Antoine Quint  <graouts@apple.com>

        Web Inspector: exceptions triggered from console evaluation do not pause the debugger
        https://bugs.webkit.org/show_bug.cgi?id=120460

        We used to preclude any debugging from errors stemming from code evaluated in the console
        as we would always set the doNotPauseOnExceptionsAndMuteConsole parameter to "false" when
        calling JavaScriptLogViewController._evaluateInInspectedWindow(). However, it is desirable
        to allow debugging code ran from the console.

        We now allow debugging in such a scenario and we filter out call frames coming from the
        Web Inspector injected script as well as the call frame for the console prompt such that
        we only pause in the debugger in case the exception is in code under the console prompt
        and not the console code prompt itself.

        Additionally, to prevent stepping out to call frames we may have filtered out, we disable
        the "step out" button in cases where there are no further frames in the frontend to go out to.

        Reviewed by Timothy Hatcher.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.debuggerDidPause):
        Filter out call frames that have a URL coming from Web Inspector injected script by looking
        for a URL starting with the "__WebInspector" prefix. If we determine that there are no call
        frames left after filtering, we resume code evaluation such that we only pause in the debugger
        when the exception is in code evluated under the console prompt.

        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause):
        (WebInspector.DebuggerSidebarPanel.prototype._debuggerActiveCallFrameDidChange):
        Monitor any change to the active call frame such that we may tie the state of the
        "step out" button to the availability of a call frame to step out to in the filtered
        list set on the DebuggerManager.

        * UserInterface/JavaScriptLogViewController.js:
        (WebInspector.JavaScriptLogViewController.prototype.consolePromptTextCommitted):
        Set the doNotPauseOnExceptionsAndMuteConsole to "false" when calling _evaluateInInspectedWindow()
        in order to allow pausing on exceptions coming from code evalued in the console. Also, explicitly
        set a sourceURL for the script to evaluate such that we may identify its origin when filtering
        call frames stemming from inspector code.

        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel.prototype._scriptWasAdded):
        Filter out any script resource starting with the Web Inspector-specific "__WebInspector" prefix
        so that injected script does not show up.

2013-08-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Correct windows build. Get rid of unnecessary pre-build step. We don't build anything
        in this project, just copy some files into the WebKit resource folder. This was fooling the
        build system into thinking something failed, resulting in a build error.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Remove reference to WebInspectorUIPreBuild.cmd
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters:
        * WebInspectorUI.vcxproj/WebInspectorUIPreBuild.cmd: Removed.

2013-08-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Build correction after dependency change.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Remove circular dependency on
        WebKit, and control this at the solution level. The prior change broke external
        builders.

2013-08-30  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Unreviewed build gardening.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Adjust build dependencies so
        that WebInspectorUI 'builds' after WebKit so that the expected resource directory
        structure is always in place.

2013-08-30  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints should have Automatically Continue Option
        https://bugs.webkit.org/show_bug.cgi?id=120187

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/Breakpoint.css:
        (#edit-breakpoint-popoover-auto-continue):
        Misc. changes for UI.

        * UserInterface/Breakpoint.js:
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get autoContinue):
        (WebInspector.Breakpoint.prototype.set autoContinue):
        (WebInspector.Breakpoint.prototype.get options):
        (WebInspector.Breakpoint.prototype.get info):
        General maintenance of the autoContinue state.

        (WebInspector.Breakpoint.prototype._popoverToggleEnabledCheckboxChanged):
        (WebInspector.Breakpoint.prototype._popoverToggleAutoContinueCheckboxChanged):
        (WebInspector.Breakpoint.prototype._editBreakpointPopoverContentElement):
        Edit Breakpoint UI for setting autoContinue state.

        * UserInterface/InspectorBackend.js:
        (InspectorBackendClass.prototype.registerCommand):
        (InspectorBackendClass.prototype._supports):
        Extension to check if a BackendCommands method supports a particular param.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager):
        (WebInspector.DebuggerManager.prototype._setBreakpoint):
        * UserInterface/InspectorBackendCommands.js:
        Change to backend agent calls for the new protocol API.

2013-08-29  Timothy Hatcher  <timothy@apple.com>

        Make incrementing and decrementing numbers by 0.1 require the control key, and not near zero numbers.

        https://bugs.webkit.org/show_bug.cgi?id=120492
        <rdar://problem/13738935> Incrementing and decrementing numbers near zero is annoying compared to earlier releases

        Reviewed by Joseph Pecoraro.

        * UserInterface/CodeMirrorAdditions.js:
        (alterNumber): Remove near zero check.

2013-08-29  Timothy Hatcher  <timothy@apple.com>

        Only modify numbers if they are identified by CodeMirror as a number.

        https://bugs.webkit.org/show_bug.cgi?id=120484

        <rdar://problem/13877085> REGRESSION: Alt-up and Alt-down don't work when cursor is in unit
        <rdar://problem/13058697> PARITY: Option-Up arrow in "translate3d" should not modify number to make" translate4d"

        Reviewed by Joseph Pecoraro.

        * UserInterface/CodeMirrorAdditions.js:
        (CodeMirror.prototype.alterNumberInRange): Correctly preserve the selection, even if it differs from
        the range passed in.
        (alterNumber): Find number tokens and pass those to alterNumberInRange.
        (alterNumber.findNumberToken): Added. Helper.

2013-08-29  Timothy Hatcher  <timothy@apple.com>

        Make incrementing and decrementing numbers by 0.1 require the control key, and not near zero numbers.

        https://bugs.webkit.org/show_bug.cgi?id=120492
        <rdar://problem/13738935> Incrementing and decrementing numbers near zero is annoying compared to earlier releases

        Reviewed by Joseph Pecoraro.

        * UserInterface/CodeMirrorAdditions.js:
        (alterNumber): Remove near zero check.

2013-08-29  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Download Web Archive of Inspected Page
        https://bugs.webkit.org/show_bug.cgi?id=119774

        Reviewed by Timothy Hatcher.

        * UserInterface/ContentBrowser.js:
        (WebInspector.ContentBrowser.prototype._saveDataToFile):
        Allow a custom save handler which will do all the work.

        * UserInterface/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        (WebInspector.DOMTreeContentView.prototype.get supportsSave):
        (WebInspector.DOMTreeContentView.prototype.get saveData.saveHandler):
        (WebInspector.DOMTreeContentView.prototype.get saveData):
        Allow Save keyboard shortcut to download an archive viewing the DOM Tree.

        * UserInterface/ResourceTreeElement.js:
        (WebInspector.ResourceTreeElement.prototype._updateStatus):
        * UserInterface/FrameTreeElement.js:
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.updateStatusForMainFrame):
        (WebInspector.FrameTreeElement.prototype._mainResourceDidChange):
        (WebInspector.FrameTreeElement.prototype._shouldGroupIntoFolders):
        (WebInspector.FrameTreeElement.prototype._reloadPageClicked):
        (WebInspector.FrameTreeElement.prototype._downloadButtonClicked):
        (WebInspector.FrameTreeElement.prototype._updateDownloadButton):
        (WebInspector.FrameTreeElement.prototype._pageArchiveStarted):
        (WebInspector.FrameTreeElement.prototype._pageArchiveEnded):
        Move handling of main frame TreeElement buttons to FrameTreeElement.
        Add a Download button, and enable/disable it appropriately.

        * UserInterface/ResourceTreeElement.css:
        * UserInterface/TreeElementStatusButton.css: Copied from Source/WebInspectorUI/UserInterface/ResourceTreeElement.css.
        (.item > .status > .status-button):
        (.item > .status > .status-button > svg *):
        (.item.selected > .status > .status-button > svg *):
        (.item.selected > .status > .status-button:active > svg *):
        (.item > .status > .status-button.disabled > svg *):
        (.item.selected > .status > .status-button.disabled > svg *):
        * UserInterface/TreeElementStatusButton.js: Added.
        (WebInspector.TreeElementStatusButton):
        (WebInspector.TreeElementStatusButton.prototype.get element):
        (WebInspector.TreeElementStatusButton.prototype.get hidden):
        (WebInspector.TreeElementStatusButton.prototype.set hidden):
        (WebInspector.TreeElementStatusButton.prototype.get enabled):
        (WebInspector.TreeElementStatusButton.prototype.set enabled):
        (WebInspector.TreeElementStatusButton.prototype._clicked):
        Make buttons in the TreeElement status a generic class to share styling
        and handling of the buttons. New "disabled" state with even more
        transparent is used when the page is downloading.

        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.archiveMainFrame):
        (WebInspector.canArchiveMainFrame):
        Generic API for archiving the page and determining if you can archive it.

        * UserInterface/InspectorBackendCommands.js:
        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.save):
        * UserInterface/Images/DownloadArrow.svg: Added.
        * Localizations/en.lproj/localizedStrings.js:
        Misc. updates and new files.

2013-08-28  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Give reload icon an :active state and allow CSS to style some SVG images
        https://bugs.webkit.org/show_bug.cgi?id=120384

        Reviewed by Timothy Hatcher.

        The Reload icon is duplicated just to provide different fill colors.
        Convert from using <img> to an <svg> document for this image, and style
        it with CSS. This also makes it trivial to add an :active state.

        * UserInterface/ImageUtilities.js:
        (.invokeCallbackWithDocument):
        (.imageLoad):
        (.imageError):
        (wrappedSVGDocument):
        Helpers for downloading and in memory caching SVG images.

        * UserInterface/Images/Reload.svg:
        * UserInterface/Images/ReloadSelected.svg: Removed.
        Updated Reload image better matches the original design (slightly
        larger). And the duplicate image can be removed.

        * UserInterface/ResourceTreeElement.css:
        (.item.resource > .status > .reload-button):
        (.item.resource > .status > .reload-button > svg *):
        (.item.resource.selected > .status > .reload-button > svg *):
        (.item.resource.selected > .status > .reload-button:active > svg *):
        Different styles, including a new :active style.

        * UserInterface/ResourceTreeElement.js:
        (WebInspector.ResourceTreeElement.prototype._updateStatusWithMainFrameButtons):
        (WebInspector.ResourceTreeElement.prototype._updateStatus):
        Handle updating the main frame's state asynchronously since loading the SVG
        image document is asynchronous.

2013-08-27  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Debugger should have Continue to Here Context Menu
        https://bugs.webkit.org/show_bug.cgi?id=120189

        Reviewed by Timothy Hatcher.

        When paused in the debugger and presenting a Context Menu in the
        gutter, include a "Continue to Here" option. This requires a
        script/line/column location combination.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype.continueToLocation):
        * UserInterface/Resource.js:
        (WebInspector.Resource.prototype.scriptForLocation):
        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype.continueToLocation):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):

2013-08-26  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: We should regenerate InspectorBackendCommands.js for Legacy Inspector.json versions
        https://bugs.webkit.org/show_bug.cgi?id=120242

        Reviewed by Timothy Hatcher.

        - Include the iOS 6.0 Inspector.json which maps to Legacy/6.0/InspectorBackendCommands.js.
        - Provide a helper script to regenerate the backend commands file for trunk and Versions.
        - Regenerated file now includes enums and other minor changes.

        * Scripts/update-InspectorBackendCommands.rb: Added.
        * UserInterface/InspectorBackendCommands.js:
        * UserInterface/Legacy/6.0/InspectorBackendCommands.js:
        * Versions/Inspector-iOS-6.0.json: Added.

2013-08-24  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Breakpoints in the editors gutter should have a contextmenu
        https://bugs.webkit.org/show_bug.cgi?id=120169

        Reviewed by Timothy Hatcher.

        Updated CodeMirror now has a gutterContextMenu event. Use that to give
        breakpoint related context menus. Add, Edit, Enable/Disable, Delete, and
        Reveal in Debugger Navigation Sidebar.

        * Localizations/en.lproj/localizedStrings.js:
        "Add Breakpoint", and "Reveal in Debugger Navigation Sidebar".

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.addBreakpoint):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.revealInSidebar):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.removeBreakpoints):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.toggleBreakpoints):
        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
        Show a context menu when clicking on the gutter for 0 breakpoints,
        1 breakpoint, or >1 breakpoints. The only tricky handler is addBreakpoint,
        since that must update the TextEditor for the new breakpoint info.

        * UserInterface/TextEditor.js:
        (WebInspector.TextEditor):
        (WebInspector.TextEditor.prototype._gutterContextMenu):
        Send to delegate if the delegate implements textEditorGutterContextMenu.

2013-08-23  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Fix js minification of updated CodeMirror
        https://bugs.webkit.org/show_bug.cgi?id=120231

        Reviewed by Andy Estes.

        Workaround a jsmin issue with "return //.test();" lines when
        minifying JavaScript in production builds.

        * Scripts/copy-user-interface-resources.sh:
        * UserInterface/External/CodeMirror/codemirror.js:
        (window.CodeMirror):

2013-08-22  Joseph Pecoraro  <pecoraro@apple.com>

        <https://webkit.org/b/120165> Web Inspector: Update CodeMirror to 3.16.1

        Reviewed by Andy Estes.

        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/xml.js:

2013-08-21  Brent Fulgham  <bfulgham@apple.com>

        [Windows] Clean up project file after %PlatformArchitecture% change landed.

        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Remove hard-coded settings covered
        by our configuration files.
        * WebInspectorUI.vcxproj/WebInspectorUIPostBuild.cmd: Use the %PlatformArchitecture%
        macro to support 32- and 64-bit builds.

2013-08-20  Brent Fulgham  <bfulgham@apple.com>

        <http://webkit.org/b/120098> [Windows] Enable the New Web Inspector

        Reviewed by Brian Weinstein.

        Add a new project to copy files to the appropriate spots in the
        Windows port.

        * WebInspectorUI.vcxproj: Added.
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj: Added.
        * WebInspectorUI.vcxproj/WebInspectorUI.vcxproj.filters: Added.
        * WebInspectorUI.vcxproj/WebInspectorUIPostBuild.cmd: Added.
        * WebInspectorUI.vcxproj/WebInspectorUIPreBuild.cmd: Added.

2013-08-19  James Craig  <james@cookiecrook.com>

        <https://webkit.org/b/118106> Web Inspector: AX: Add additional contextual labels for Error/Warnings/Logs that will be spoken for screen readers

        Reviewed by Joseph Pecoraro.

        Changed general console "Output" string to more specific "Error", "Warning", etc for accessibility.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/ConsoleCommandResult.js:
        * UserInterface/ConsoleMessageImpl.js:

2013-08-16  James Craig  <james@cookiecrook.com>

        <https://webkit.org/b/118105> Web Inspector: AX: Add support for ARIA tablists/tabs to inspector tabs

        Reviewed by Joseph Pecoraro.

        Updating accessibility roles and attributes for single-select toolbar item sets.

        * UserInterface/ActivateButtonNavigationItem.js:
        (WebInspector.ActivateButtonNavigationItem):
        (WebInspector.ActivateButtonNavigationItem.prototype.set activated):
        * UserInterface/ActivateButtonToolbarItem.js:
        (WebInspector.ActivateButtonToolbarItem):
        * UserInterface/ButtonToolbarItem.js:
        (WebInspector.ButtonToolbarItem):
        * UserInterface/SidebarPanel.js:
        (WebInspector.SidebarPanel):
        * UserInterface/Toolbar.js:
        (WebInspector.Toolbar):

2013-08-13  Dean Jackson  <dino@apple.com>

        <https://webkit.org/b/119778> Add Canvas protocol observer

        Reviewed by Joseph Pecoraro.

        In preparation for listening to backend events about canvas profiling,
        add a canvas observer.

        * UserInterface/CanvasObserver.js: New empty CanvasObserver object.
        (WebInspector.CanvasObserver):
        (WebInspector.CanvasObserver.prototype.contextCreated):
        (WebInspector.CanvasObserver.prototype.traceLogsRemoved):
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.loaded):

2013-08-11  Dean Jackson  <dino@apple.com>

        Update localizedStrings - I think I checked in an unmerged version
        in the previous commit.

        * Localizations/en.lproj/localizedStrings.js:

2013-08-11  Dean Jackson  <dino@apple.com>

        Bootstrap canvas profiler
        https://bugs.webkit.org/show_bug.cgi?id=119652
        <rdar://problem/14703665>

        Reviewed by Joseph Pecoraro.

        Add enough to get an empty Canvas profile recording
        and displayed.

        * Localizations/en.lproj/localizedStrings.js: Add canvas strings.
        * UserInterface/CanvasProfileObject.js: Added. Mostly copied from CSS Selector Profiles.
        * UserInterface/CanvasProfileType.js: Added. Ditto.
        * UserInterface/CanvasDataGridNode.js: Added. Ditto.
        * UserInterface/CanvasProfileView.js: Added. Ditto.
        * UserInterface/ContentView.js:
        (WebInspector.ContentView): Add support for the new View type.
        (WebInspector.ContentView.isViewable):
        * UserInterface/InstrumentSidebarPanel.js:
        (WebInspector.InstrumentSidebarPanel): Add support for canvas profiles.
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphMousedOver):
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphMousedDown):
        (WebInspector.InstrumentSidebarPanel.prototype._recordProfileGlyphClicked):
        (WebInspector.InstrumentSidebarPanel.prototype._profileTypeWasSelected):
        (WebInspector.InstrumentSidebarPanel.prototype._profilesCleared):
        * UserInterface/Main.html: Load the new files.
        * UserInterface/ProfileManager.js: New methods and support for canvas profiles.
        (WebInspector.ProfileManager):
        (WebInspector.ProfileManager.prototype.initialize):
        (WebInspector.ProfileManager.prototype.isProfilingCanvas):
        (WebInspector.ProfileManager.prototype.startProfilingCanvas):
        (WebInspector.ProfileManager.prototype.stopProfilingCanvas):
        (WebInspector.ProfileManager.prototype._checkForInterruptions):
        (WebInspector.ProfileManager.prototype._attemptToResumeProfiling):

2013-08-07  Timothy Hatcher  <timothy@apple.com>

        Switch the generated images off of PDFs and onto SVGs now that bug 119492 is fixed.

        https://bugs.webkit.org/show_bug.cgi?id=118677

        Reviewed by Joseph Pecoraro.

        * UserInterface/ApplicationCacheDetailsSidebarPanel.js:
        (WebInspector.ApplicationCacheDetailsSidebarPanel):
        * UserInterface/CSSStyleDeclarationSection.js:
        (WebInspector.CSSStyleDeclarationSection):
        * UserInterface/CSSStyleDetailsSidebarPanel.js:
        (WebInspector.CSSStyleDetailsSidebarPanel):
        * UserInterface/ContentBrowser.js:
        (WebInspector.ContentBrowser):
        * UserInterface/DOMNodeDetailsSidebarPanel.js:
        (WebInspector.DOMNodeDetailsSidebarPanel):
        * UserInterface/DOMTreeContentView.js:
        (WebInspector.DOMTreeContentView):
        * UserInterface/DataGrid.js:
        (WebInspector.DataGrid.prototype._generateSortIndicatorImagesIfNeeded):
        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        * UserInterface/DetailsSection.js:
        (WebInspector.DetailsSection.prototype._generateDisclosureTrianglesIfNeeded):
        * UserInterface/FindBanner.js:
        (WebInspector.FindBanner.prototype._generateButtonsGlyphsIfNeeded):
        * UserInterface/Images/BackArrow.pdf: Removed.
        * UserInterface/Images/BottomUpTree.pdf: Removed.
        * UserInterface/Images/Breakpoints.pdf: Removed.
        * UserInterface/Images/Close.pdf: Removed.
        * UserInterface/Images/Crosshair.pdf: Removed.
        * UserInterface/Images/DisclosureTriangleSmallClosed.pdf: Removed.
        * UserInterface/Images/DisclosureTriangleSmallOpen.pdf: Removed.
        * UserInterface/Images/DisclosureTriangleTinyClosed.pdf: Removed.
        * UserInterface/Images/DisclosureTriangleTinyOpen.pdf: Removed.
        * UserInterface/Images/DockBottom.pdf: Removed.
        * UserInterface/Images/DockRight.pdf: Removed.
        * UserInterface/Images/ForwardArrow.pdf: Removed.
        * UserInterface/Images/GoToArrow.pdf: Removed.
        * UserInterface/Images/LayerBorders.pdf: Removed.
        * UserInterface/Images/LessColumns.pdf: Removed.
        * UserInterface/Images/Locked.pdf: Removed.
        * UserInterface/Images/MoreColumns.pdf: Removed.
        * UserInterface/Images/NavigationItemAngleBrackets.pdf: Removed.
        * UserInterface/Images/NavigationItemBrushAndRuler.pdf: Removed.
        * UserInterface/Images/NavigationItemBug.pdf: Removed.
        * UserInterface/Images/NavigationItemCurleyBraces.pdf: Removed.
        * UserInterface/Images/NavigationItemFile.pdf: Removed.
        * UserInterface/Images/NavigationItemLayers.pdf: Removed.
        * UserInterface/Images/NavigationItemLog.pdf: Removed.
        * UserInterface/Images/NavigationItemMagnifyingGlass.pdf: Removed.
        * UserInterface/Images/NavigationItemStopwatch.pdf: Removed.
        * UserInterface/Images/NavigationItemStorage.pdf: Removed.
        * UserInterface/Images/NavigationItemTrash.pdf: Removed.
        * UserInterface/Images/NavigationItemVariable.pdf: Removed.
        * UserInterface/Images/Pause.pdf: Removed.
        * UserInterface/Images/Percent.pdf: Removed.
        * UserInterface/Images/Plus.pdf: Removed.
        * UserInterface/Images/Resume.pdf: Removed.
        * UserInterface/Images/ShadowDOM.pdf: Removed.
        * UserInterface/Images/SortIndicatorDownArrow.pdf: Removed.
        * UserInterface/Images/SortIndicatorUpArrow.pdf: Removed.
        * UserInterface/Images/SplitToggleDown.pdf: Removed.
        * UserInterface/Images/SplitToggleUp.pdf: Removed.
        * UserInterface/Images/StepInto.pdf: Removed.
        * UserInterface/Images/StepOut.pdf: Removed.
        * UserInterface/Images/StepOver.pdf: Removed.
        * UserInterface/Images/Undock.pdf: Removed.
        * UserInterface/InstrumentSidebarPanel.js:
        (WebInspector.InstrumentSidebarPanel):
        * UserInterface/JavaScriptProfileView.js:
        (WebInspector.JavaScriptProfileView):
        * UserInterface/LayerTreeSidebarPanel.js:
        (WebInspector.LayerTreeSidebarPanel):
        * UserInterface/LogContentView.js:
        (WebInspector.LogContentView):
        * UserInterface/Main.js:
        (WebInspector.contentLoaded):
        (WebInspector._updateDockNavigationItems):
        (WebInspector._generateDisclosureTriangleImages):
        * UserInterface/NavigationSidebarPanel.js:
        (WebInspector.NavigationSidebarPanel.prototype._generateDisclosureTrianglesIfNeeded):
        * UserInterface/ProfileView.js:
        (WebInspector.ProfileView):
        * UserInterface/ResourceDetailsSidebarPanel.js:
        (WebInspector.ResourceDetailsSidebarPanel):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        * UserInterface/ScopeChainDetailsSidebarPanel.js:
        (WebInspector.ScopeChainDetailsSidebarPanel):
        * UserInterface/ScriptContentView.js:
        (WebInspector.ScriptContentView):
        * UserInterface/TextContentView.js:
        (WebInspector.TextContentView):
        * UserInterface/TextResourceContentView.js:
        (WebInspector.TextResourceContentView):
        * UserInterface/TimelinesContentView.js:

2013-08-08  Dean Jackson  <dino@apple.com>

        Remove use of prefixed transition event
        https://bugs.webkit.org/show_bug.cgi?id=119598

        Reviewed by Joseph Pecoraro.

        "webkitTransitionEnd" -> "transitionend".

        * UserInterface/Popover.js:
        (WebInspector.Popover):
        (WebInspector.Popover.prototype.handleEvent):

2013-08-08  Dean Jackson  <dino@apple.com>

        Unprefix use of transitions in Web Inspector code
        https://bugs.webkit.org/show_bug.cgi?id=119588

        Reviewed by Tim Hatcher.

        Replace "-webkit-transition" with "transition".

        * UserInterface/CSSCompletions.js:
        (WebInspector.CSSCompletions.requestCSSNameCompletions.collectPropertyNameForCodeMirror):
        * UserInterface/FindBanner.css:
        (.find-banner):
        (.find-banner.showing):
        (.supports-find-banner.no-find-banner-transition):
        (.supports-find-banner):
        (.supports-find-banner.showing-find-banner):
        * UserInterface/NetworkTimeline.css:
        (.network-graph-side:hover .network-graph-label):
        * UserInterface/Popover.css:
        (.popover.fade-out):

2013-08-08  Vivek Galatage  <vivek.vg@samsung.com>

        Web Inspector: Use granular DOMStorage modification events to avoid complete DataGrid update.
        https://bugs.webkit.org/show_bug.cgi?id=119541

        Reviewed by Joseph Pecoraro.

        InspectorDOMStorageAgent sends more granular events about the storage modifications.
        Using these would avoid the complete rebuilding of the DataGrid.

        * UserInterface/DOMStorageContentView.js:
        (WebInspector.DOMStorageContentView.prototype.itemsCleared):
        (WebInspector.DOMStorageContentView.prototype.itemRemoved):
        (WebInspector.DOMStorageContentView.prototype.itemAdded):
        (WebInspector.DOMStorageContentView.prototype.itemUpdated):
        * UserInterface/DOMStorageObserver.js:
        (WebInspector.DOMStorageObserver.prototype.domStorageItemsCleared):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemRemoved):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemAdded):
        (WebInspector.DOMStorageObserver.prototype.domStorageItemUpdated):
        * UserInterface/StorageManager.js:
        (WebInspector.StorageManager.prototype.domStorageItemsCleared):
        (WebInspector.StorageManager.prototype.domStorageItemRemoved):
        (WebInspector.StorageManager.prototype.domStorageItemAdded):
        (WebInspector.StorageManager.prototype.domStorageItemUpdated):

2013-08-06  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Remove stale code in ResourceContentView
        https://bugs.webkit.org/show_bug.cgi?id=119527

        The handling of Resource Type changes moved to ResourceClusterContentView,
        this removeEventListener is stale and doesn't do anything anymore.

        Reviewed by Timothy Hatcher.

        * UserInterface/ResourceContentView.js:
        (WebInspector.ResourceContentView.prototype.closed):

2013-08-06  Timothy Hatcher  <timothy@apple.com>

        Convert all Web Inspector PDFs to SVGs.

        Some PDFs need to stay around until bug 119492 is fixed. But the SVGs are there for when they are needed.
        Updated some of the existing SVGs to be consistent with the format of the new SVGs.

        https://bugs.webkit.org/show_bug.cgi?id=118677

        Rubber-stamped by Joseph Pecoraro.

        * UserInterface/BreakpointIcons.css:
        * UserInterface/BreakpointTreeElement.css:
        * UserInterface/CallFrameIcons.css:
        * UserInterface/DatabaseContentView.css:
        * UserInterface/FilterBar.css:
        * UserInterface/HierarchicalPathComponent.css:
        * UserInterface/Images/BackArrow.svg: Added.
        * UserInterface/Images/BottomUpTree.svg: Added.
        * UserInterface/Images/BreakpointButton.pdf: Removed.
        * UserInterface/Images/BreakpointButton.svg: Added.
        * UserInterface/Images/BreakpointInactiveButton.pdf: Removed.
        * UserInterface/Images/BreakpointInactiveButton.svg: Added.
        * UserInterface/Images/Breakpoints.svg: Added.
        * UserInterface/Images/Close.svg: Added.
        * UserInterface/Images/Crosshair.svg: Added.
        * UserInterface/Images/DOMCharacterData.pdf: Removed.
        * UserInterface/Images/DOMCharacterData.svg: Added.
        * UserInterface/Images/DOMComment.pdf: Removed.
        * UserInterface/Images/DOMComment.svg: Added.
        * UserInterface/Images/DOMDocument.pdf: Removed.
        * UserInterface/Images/DOMDocument.svg: Added.
        * UserInterface/Images/DOMDocumentType.pdf: Removed.
        * UserInterface/Images/DOMDocumentType.svg: Added.
        * UserInterface/Images/DOMElement.pdf: Removed.
        * UserInterface/Images/DOMElement.svg: Added.
        * UserInterface/Images/DOMNode.pdf: Removed.
        * UserInterface/Images/DOMNode.svg: Added.
        * UserInterface/Images/DOMTextNode.pdf: Removed.
        * UserInterface/Images/DOMTextNode.svg: Added.
        * UserInterface/Images/DOMTree.pdf: Removed.
        * UserInterface/Images/DOMTree.svg: Added.
        * UserInterface/Images/DisclosureTriangleSmallClosed.svg: Added.
        * UserInterface/Images/DisclosureTriangleSmallOpen.svg: Added.
        * UserInterface/Images/DisclosureTriangleTinyClosed.svg: Added.
        * UserInterface/Images/DisclosureTriangleTinyOpen.svg: Added.
        * UserInterface/Images/DockBottom.svg: Added.
        * UserInterface/Images/DockRight.svg: Added.
        * UserInterface/Images/Error.pdf: Removed.
        * UserInterface/Images/Error.svg: Added.
        * UserInterface/Images/ErrorSmall.pdf: Removed.
        * UserInterface/Images/Errors.svg:
        * UserInterface/Images/ErrorsEnabled.svg:
        * UserInterface/Images/EventListener.pdf: Removed.
        * UserInterface/Images/EventListener.svg: Added.
        * UserInterface/Images/Exception.pdf: Removed.
        * UserInterface/Images/Exception.svg: Added.
        * UserInterface/Images/FilterFieldGlyph.pdf: Removed.
        * UserInterface/Images/FilterFieldGlyph.svg: Added.
        * UserInterface/Images/ForwardArrow.svg: Added.
        * UserInterface/Images/Function.pdf: Removed.
        * UserInterface/Images/Function.svg: Added.
        * UserInterface/Images/GoToArrow.svg: Added.
        * UserInterface/Images/HierarchicalNavigationItemChevron.pdf: Removed.
        * UserInterface/Images/HierarchicalNavigationItemChevron.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner1.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner1.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner10.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner10.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner11.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner11.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner12.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner12.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner2.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner2.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner3.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner3.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner4.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner4.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner5.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner5.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner6.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner6.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner7.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner7.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner8.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner8.svg: Added.
        * UserInterface/Images/IndeterminateProgressSpinner9.pdf: Removed.
        * UserInterface/Images/IndeterminateProgressSpinner9.svg: Added.
        * UserInterface/Images/Issues.svg:
        * UserInterface/Images/IssuesEnabled.svg:
        * UserInterface/Images/LayerBorders.svg: Added.
        * UserInterface/Images/LessColumns.svg: Added.
        * UserInterface/Images/Locked.svg: Added.
        * UserInterface/Images/Logs.svg:
        * UserInterface/Images/Memory.svg:
        * UserInterface/Images/MoreColumns.svg: Added.
        * UserInterface/Images/Native.pdf: Removed.
        * UserInterface/Images/Native.svg: Added.
        * UserInterface/Images/NavigationItemAngleBrackets.svg: Added.
        * UserInterface/Images/NavigationItemBrushAndRuler.svg: Added.
        * UserInterface/Images/NavigationItemBug.svg: Added.
        * UserInterface/Images/NavigationItemCurleyBraces.svg: Added.
        * UserInterface/Images/NavigationItemFile.svg: Added.
        * UserInterface/Images/NavigationItemLayers.svg: Added.
        * UserInterface/Images/NavigationItemLog.svg: Added.
        * UserInterface/Images/NavigationItemMagnifyingGlass.svg: Added.
        * UserInterface/Images/NavigationItemStopwatch.svg: Added.
        * UserInterface/Images/NavigationItemStorage.svg: Added.
        * UserInterface/Images/NavigationItemTrash.svg: Added.
        * UserInterface/Images/NavigationItemVariable.svg: Added.
        * UserInterface/Images/NetworkBarLabelCalloutLeft.pdf: Removed.
        * UserInterface/Images/NetworkBarLabelCalloutLeft.svg: Added.
        * UserInterface/Images/NetworkBarLabelCalloutRight.pdf: Removed.
        * UserInterface/Images/NetworkBarLabelCalloutRight.svg: Added.
        * UserInterface/Images/NetworkBarLabelCalloutWhiteLeft.pdf: Removed.
        * UserInterface/Images/NetworkBarLabelCalloutWhiteLeft.svg: Added.
        * UserInterface/Images/NetworkBarLabelCalloutWhiteRight.pdf: Removed.
        * UserInterface/Images/NetworkBarLabelCalloutWhiteRight.svg: Added.
        * UserInterface/Images/Pause.svg: Added.
        * UserInterface/Images/Percent.svg: Added.
        * UserInterface/Images/Plus.svg: Added.
        * UserInterface/Images/PseudoElement.pdf: Removed.
        * UserInterface/Images/PseudoElement.svg: Added.
        * UserInterface/Images/Reflection.pdf: Removed.
        * UserInterface/Images/Reflection.svg: Added.
        * UserInterface/Images/Reload.svg:
        * UserInterface/Images/ReloadSelected.svg:
        * UserInterface/Images/Request.pdf: Removed.
        * UserInterface/Images/Request.svg: Added.
        * UserInterface/Images/Resources.svg:
        * UserInterface/Images/Response.pdf: Removed.
        * UserInterface/Images/Response.svg: Added.
        * UserInterface/Images/ResultLine.pdf: Removed.
        * UserInterface/Images/ResultLine.svg: Added.
        * UserInterface/Images/Resume.svg: Added.
        * UserInterface/Images/ShadowDOM.svg: Added.
        * UserInterface/Images/SortIndicatorDownArrow.svg: Added.
        * UserInterface/Images/SortIndicatorUpArrow.svg: Added.
        * UserInterface/Images/SourceCode.pdf: Removed.
        * UserInterface/Images/SourceCode.svg: Added.
        * UserInterface/Images/SplitToggleDown.svg: Added.
        * UserInterface/Images/SplitToggleUp.svg: Added.
        * UserInterface/Images/StepInto.svg: Added.
        * UserInterface/Images/StepOut.svg: Added.
        * UserInterface/Images/StepOver.svg: Added.
        * UserInterface/Images/StyleRuleAuthor.pdf: Removed.
        * UserInterface/Images/StyleRuleAuthor.svg: Added.
        * UserInterface/Images/StyleRuleInherited.pdf: Removed.
        * UserInterface/Images/StyleRuleInherited.svg: Added.
        * UserInterface/Images/StyleRuleInheritedElement.pdf: Removed.
        * UserInterface/Images/StyleRuleInheritedElement.svg: Added.
        * UserInterface/Images/StyleRuleInspector.pdf: Removed.
        * UserInterface/Images/StyleRuleInspector.svg: Added.
        * UserInterface/Images/StyleRuleUser.pdf: Removed.
        * UserInterface/Images/StyleRuleUser.svg: Added.
        * UserInterface/Images/StyleRuleUserAgent.pdf: Removed.
        * UserInterface/Images/StyleRuleUserAgent.svg: Added.
        * UserInterface/Images/Time.svg:
        * UserInterface/Images/Undock.svg: Added.
        * UserInterface/Images/UpDownArrows.svg:
        * UserInterface/Images/UserInputPrompt.pdf: Removed.
        * UserInterface/Images/UserInputPrompt.svg: Added.
        * UserInterface/Images/UserInputPromptPrevious.pdf: Removed.
        * UserInterface/Images/UserInputPromptPrevious.svg: Added.
        * UserInterface/Images/UserInputPromptPreviousSelected.pdf: Removed.
        * UserInterface/Images/UserInputPromptPreviousSelected.svg: Added.
        * UserInterface/Images/UserInputResult.pdf: Removed.
        * UserInterface/Images/UserInputResult.svg: Added.
        * UserInterface/Images/UserInputResultSelected.pdf: Removed.
        * UserInterface/Images/UserInputResultSelected.svg: Added.
        * UserInterface/Images/Warning.pdf: Removed.
        * UserInterface/Images/Warning.svg: Added.
        * UserInterface/Images/WarningSmall.pdf: Removed.
        * UserInterface/Images/Weight.svg:
        * UserInterface/IndeterminateProgressSpinner.css:
        * UserInterface/LayerTreeSidebarPanel.css:
        * UserInterface/LogContentView.css:
        * UserInterface/Main.css:
        * UserInterface/NetworkTimeline.css:
        * UserInterface/PathComponentIcons.css:
        * UserInterface/QuickConsole.css:
        * UserInterface/RulesStyleDetailsPanel.css:
        * UserInterface/SearchIcons.css:
        * UserInterface/StyleRuleIcons.css:

2013-07-23  David Farler  <dfarler@apple.com>

        Provide optional OTHER_CFLAGS, OTHER_CPPFLAGS, OTHER_LDFLAGS additions for building with ASAN
        https://bugs.webkit.org/show_bug.cgi?id=117762

        Reviewed by Mark Rowe.

        * Configurations/DebugRelease.xcconfig:
        Add ASAN_OTHER_CFLAGS, CPLUSPLUSFLAGS, LDFLAGS.

2013-07-30  Roland Takács  <rtakacs@inf.u-szeged.hu>

        Web Inspector: doesn't use localized user interface at remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=119252

        Reviewed by Timothy Hatcher.

        Added a flag in order to not use localizedStrings in remote inspector.

        * UserInterface/InspectorFrontendHostStub.js:
        * UserInterface/LoadLocalizedStrings.js:
        * UserInterface/Main.js:
        (WebInspector.UIString):

2013-07-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: control+clicking on a numeric token should not show the context menu
        https://bugs.webkit.org/show_bug.cgi?id=119048

        Reviewed by Timothy Hatcher.

        Track "contextmenu" events when we're hovering a token containing a numeric value
        and call preventDefault() in the event handler to ensure that the context menu does
        not appear.

        * UserInterface/CodeMirrorDragToAlterNumberController.js:
        (WebInspector.CodeMirrorDragToAlterNumberController.prototype.handleEvent):
        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._setTracksMouseClickAndDrag):

2013-07-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: support click-and-drag editing of CSS numeric values
        https://bugs.webkit.org/show_bug.cgi?id=118896

        Reviewed by Timothy Hatcher.

        Add support for adjustment of numeric values in the various CodeMirror editors
        by holding the option key and dragging the mouse. By default, dragging one pixel
        changes the value by 1, but key modifiers allow to customize that behavior by using
        the control key to change the value to 0.1 and the shift key to change the value to 10.

        * UserInterface/CodeMirrorAdditions.js:
        Split adjustNumber() into two methods such that we may use its logic from the
        CodeMirrorDragToAlterNumberController. The new method, CodeMirror.prototype.alterNumberInRange()
        allow to set begin and end CodeMirror positions such that the existing alterNumber()
        can use information based on the current cursor position, and CodeMirrorDragToAlterNumberController
        can use information based on the hovered token.

        * UserInterface/CodeMirrorDragToAlterNumberController.css: Added.
        (.CodeMirror.drag-to-adjust .CodeMirror-lines):
        Set the cursor to "col-resize" when a number token is hovered and the option key
        modifier is pressed.

        * UserInterface/CodeMirrorDragToAlterNumberController.js: Added.
        (WebInspector.CodeMirrorDragToAlterNumberController):
        We define the new "dragToAdjustNumbers" CodeMirror option.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype.set enabled):
        The "enabled" property controls whether the associated CodeMirror instance
        may act upon hovering numeric values to adjust them via a drag interaction.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype.handleEvent):
        Proxy for various event-specific methods to deal with mouse events. We also bind
        the value of the "active" property to the "mouseenter" and "mouseleave" events
        if we're not currently dragging-to-adjust.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._setActive):
        The "active" property is set when the mouse is over the associated CodeMirror
        editor and when it's on we track all "mousemove" events such that we may
        identify tokens containing numeric values. We also start tracking changes to the
        option modifier key press state such that we may change the cursor accordingly.
        We ensure that the CodeMirror instance is not read-only such that we don't
        allow adjustment of numeric values in places where they couldn't be committed.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._setDragging):
        The "dragging" property reflects whether a dragging-to-adjust interaction
        is underway. We call into WebInspector.elementDragStart() and WebInspector.elementDragEnd()
        to set the cursor to "col-resize" for the whole document while tracking mousemove
        and mouseup events at the window level such that we can drag-to-adjust even outside
        of the inspector window.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._setTracksMouseClickAndDrag):
        The "tracksMouseClickAndDrag" property is set to true whenever the controller
        has detected that a token containing a numeric value is being hovered and the
        option modifier key is pressed. This property controls the cursor value for the
        hovered token to reflect that a drag-to-adjust interaction is allowed and tracks
        "mousedown" events for when a dragging interaction may be initiated.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._modifiersDidChange):
        Sets the "tracksMouseClickAndDrag" property depending on the availability of a hovered
        token containing a numeric value and the pressed state of the option modified key.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._mouseMoved):
        Handles "mousemove" events when we're not in the "dragging" state such that we
        check the currently hovered token, if any, to see if it contains a number that
        we may drag-to-adjust. Subsequently, we may enter the "tracksMouseClickAndDrag"
        state.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._mouseWasPressed):
        Handles "mousedown" events during a drag-to-adjust interaction. We simply track
        the current mouse position in the x-axis and enter the "dragging" state.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._mouseWasDragged):
        Handles "mousemove" events when we are in the "dragging" state. We compare the
        current mouse position in the x-axis with the last recoreded value and determine
        the amount by which we should adjust the value, taking into account the shift and
        control modifier keys. We then call into WebInspector.alterNumberInRange() to
        apply the change amount to the associated CodeMirror editor.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._mouseWasReleased):
        Handles "mouseup" events, simply exiting the "dragging" state and resetting other
        parameters we would have customized as a result of the drag-to-adjust interaction.

        (WebInspector.CodeMirrorDragToAlterNumberController.prototype._reset):
        Resetting some parameters we would have customized as a result of the drag-to-adjust
        interaction.

        * UserInterface/Main.html:
        Include the new CodeMirrorDragToAlterNumberController.{js|css} files.

        * UserInterface/Main.js:
        (WebInspector.elementDragStart):
        (WebInspector.elementDragEnd):
        Add an extra parameter to elementDragStart() such that the caller may specify the event
        target for the "mousemove" and "mouseup" events.

2013-07-23  Roland Takacs  <rtakacs@inf.u-szeged.hu>

        WebSocket initialization to use remote inspector
        https://bugs.webkit.org/show_bug.cgi?id=118678

        Reviewed by Timothy Hatcher.

        Add WebSocket initialization and define a 'connect-src' directive in the
        Content-Security-Policy HTTP header to enable the connection.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend):
        * UserInterface/Main.html:
        * UserInterface/Main.js:
        (WebInspector.loaded):
        (WebInspector._initializeWebSocketIfNeeded.createSocket.WebInspector):
        (WebInspector._initializeWebSocketIfNeeded.createSocket):
        (WebInspector._initializeWebSocketIfNeeded):

2013-07-22  Diego Pino Garcia  <dpino@igalia.com>

        Web Inspector: When right-clicking on a DataGrid column, show editing
        menu option as "Edit <columnName>" instead of just "Edit"
        https://bugs.webkit.org/show_bug.cgi?id=118970

        Reviewed by Timothy Hatcher.

        * Localizations/en.lproj/localizedStrings.js: Add literal "Edit '%s'"
        * UserInterface/DataGrid.js: Change "Edit" for "Edit <columnTitle>"
        (WebInspector.DataGrid.prototype._contextMenuInDataTable):

2013-07-21  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Cleanup InspectorFrontendHostStub.js
        https://bugs.webkit.org/show_bug.cgi?id=118959

        Reviewed by Timothy Hatcher.

        Remove some functions because we dont use on New Inspector.

        * UserInterface/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.save):

2013-07-17  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Fix a typo in WebInspector.loaded
        https://bugs.webkit.org/show_bug.cgi?id=118834

        Reviewed by Timothy Hatcher.

        * UserInterface/Main.js:
        (WebInspector.loaded):

2013-07-16  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: InspectorFrontendHost is undefined
        https://bugs.webkit.org/show_bug.cgi?id=118715

        Reviewed by Timothy Hatcher.

        Add InspectorFrontendHostStub.js to New Inspector because of the InspectorFrontendHost initialization.

        * UserInterface/InspectorFrontendHostStub.js: Added.
        (.WebInspector.InspectorFrontendHostStub):
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):
        (.WebInspector.InspectorFrontendHostStub.prototype.port):
        (.WebInspector.InspectorFrontendHostStub.prototype.bringToFront):
        (.WebInspector.InspectorFrontendHostStub.prototype.closeWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.requestSetDockSide):
        (.WebInspector.InspectorFrontendHostStub.prototype.setAttachedWindowHeight):
        (.WebInspector.InspectorFrontendHostStub.prototype.setAttachedWindowWidth):
        (.WebInspector.InspectorFrontendHostStub.prototype.setToolbarHeight):
        (.WebInspector.InspectorFrontendHostStub.prototype.moveWindowBy):
        (.WebInspector.InspectorFrontendHostStub.prototype.loaded):
        (.WebInspector.InspectorFrontendHostStub.prototype.localizedStringsURL):
        (.WebInspector.InspectorFrontendHostStub.prototype.inspectedURLChanged):
        (.WebInspector.InspectorFrontendHostStub.prototype.copyText):
        (.WebInspector.InspectorFrontendHostStub.prototype.openInNewTab):
        (.WebInspector.InspectorFrontendHostStub.prototype.canSave):
        (.WebInspector.InspectorFrontendHostStub.prototype.save):
        (.WebInspector.InspectorFrontendHostStub.prototype.append):
        (.WebInspector.InspectorFrontendHostStub.prototype.close.cleanup):
        (.WebInspector.InspectorFrontendHostStub.prototype.close):
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend):
        (.WebInspector.InspectorFrontendHostStub.prototype.loadResourceSynchronously):
        * UserInterface/Main.html:

2013-07-15  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Remove unused columns from select query in ImageUtilities.js
        https://bugs.webkit.org/show_bug.cgi?id=118694

        Reviewed by Timothy Hatcher.

        * UserInterface/ImageUtilities.js: Remove pixelRatio and formatVersion from select query.

2013-07-15  Timothy Hatcher  <timothy@apple.com>

        Update CodeMirror to 3.14.1.

        https://bugs.webkit.org/show_bug.cgi?id=118605

        Reviewed by Joseph Pecoraro.

        * Scripts/update-codemirror-resources.rb: Updated the list to add closebrackets.js and sorted the files.
        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/Formatter.js:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/closebrackets.js:
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/comment.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/matchbrackets.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:

2013-07-15  Timothy Hatcher  <timothy@apple.com>

        Make sure to add main resources for sub-frames to the Network Timeline.

        https://bugs.webkit.org/show_bug.cgi?id=118649

        Reviewed by Joseph Pecoraro.

        * UserInterface/TimelineManager.js:
        (WebInspector.TimelineManager.prototype._mainResourceDidChange): Remove the
        call to _clear() and early return for event.target.isMainFrame(). The _clear()
        is already handled if needed by the call to _startAutoRecording(), so it was
        redundant here and caused the erroneous addition of isMainFrame() early return.

2013-07-15  Timothy Hatcher  <timothy@apple.com>

        Properly handle style text changes while the color popover is open.

        https://bugs.webkit.org/show_bug.cgi?id=118575

        Reviewed by Joseph Pecoraro.

        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._colorSwatchClicked.updateCodeMirror):
        The original text marker might have been cleared by a style update, in this case we need to
        find the new color text marker so we know the right range for the new style color text.

2013-07-14  Commit Queue  <commit-queue@webkit.org>

        Unreviewed, rolling out r152598.
        http://trac.webkit.org/changeset/152598
        https://bugs.webkit.org/show_bug.cgi?id=118658

        totally broke the web inspector (JS ERROR: SyntaxError:
        Expected token '}') (Requested by thorton on #webkit).

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/Formatter.js:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        * Tools/PrettyPrinting/codemirror.css:
        (.CodeMirror-scrollbar-filler):
        (.CodeMirror-gutters):
        (.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler):
        (.CodeMirror-widget):
        * Tools/PrettyPrinting/codemirror.js:
        (window.CodeMirror):
        (window.CodeMirror.):
        (.do):
        (moveVisually):
        * Tools/PrettyPrinting/css.js:
        (.):
        (CodeMirror):
        * Tools/PrettyPrinting/javascript.js:
        (.):
        * UserInterface/External/CodeMirror/codemirror.css:
        (.CodeMirror-widget):
        * UserInterface/External/CodeMirror/codemirror.js:
        (window.CodeMirror):
        (window.CodeMirror.):
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/comment.js:
        (.):
        * UserInterface/External/CodeMirror/css.js:
        (.):
        (CodeMirror):
        * UserInterface/External/CodeMirror/javascript.js:
        (.):
        * UserInterface/External/CodeMirror/matchbrackets.js:
        (.):
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:

2013-07-12  Timothy Hatcher  <timothy@apple.com>

        Update CodeMirror to 7f560afa1c (3.14+).

        https://bugs.webkit.org/show_bug.cgi?id=118605

        Reviewed by Sam Weinig.

        * Tools/PrettyPrinting/CodeMirrorFormatters.js:
        * Tools/PrettyPrinting/Formatter.js:
        * Tools/PrettyPrinting/FormatterContentBuilder.js:
        * Tools/PrettyPrinting/codemirror.css:
        * Tools/PrettyPrinting/codemirror.js:
        * Tools/PrettyPrinting/css.js:
        * Tools/PrettyPrinting/javascript.js:
        * UserInterface/External/CodeMirror/codemirror.css:
        * UserInterface/External/CodeMirror/codemirror.js:
        * UserInterface/External/CodeMirror/coffeescript.js:
        * UserInterface/External/CodeMirror/comment.js:
        * UserInterface/External/CodeMirror/css.js:
        * UserInterface/External/CodeMirror/javascript.js:
        * UserInterface/External/CodeMirror/matchbrackets.js:
        * UserInterface/External/CodeMirror/sql.js:
        * UserInterface/External/CodeMirror/xml.js:

2013-07-12  Seokju Kwon  <seokju.kwon@gmail.com>

        Web Inspector: Pass null for sidebarPanels and role in WebInspector.Sidebar()
        https://bugs.webkit.org/show_bug.cgi?id=118589

        Reviewed by Timothy Hatcher.

        sidebarPanels : It is necessary to get correct argument after r152141.
        Without this, error messages can be displayed.
        role : Could pass null for it since default value is "group".

        * UserInterface/Main.js:
        (WebInspector.contentLoaded):

2013-07-03  Timothy Hatcher  <timothy@apple.com>

        Guard remaining calls to decodeURIComponent with a try/catch.

        https://bugs.webkit.org/show_bug.cgi?id=118371

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.js:
        (WebInspector.displayNameForURL):
        (WebInspector.updateWindowTitle):
        * UserInterface/Utilities.js:
        (arrayResult):
        (queryString):

2013-07-03  Jessie Berlin  <jberlin@apple.com>

        Ran update-webkit-localizable-strings.

        Rubber-stamped by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js:

2013-06-28  Dean Jackson  <dino@apple.com>

        Update Apple System fonts in auto-complete
        https://bugs.webkit.org/show_bug.cgi?id=118205
        <rdar://problem/14308488>

        Reviewed by Joseph Pecoraro.

        Update for the new Apple System font names, and remove some invalid entries.

        * UserInterface/CSSKeywordCompletions.js: General cleanup. Note that
        "apple-system-short-caption2" looks like it was accidentally omitted. It wasn't :)

2013-06-28  James Craig  <james@cookiecrook.com>

        Web Inspector: AX: VoiceOver speaks all inspector search fields as 'required'
        https://bugs.webkit.org/show_bug.cgi?id=118122

        Reviewed by Timothy Hatcher.

        Removed bogus "required" state, and switched :valid selector to use :not(:placeholder-shown)
        so that screen readers will not indicate a bogus :required/:invalid state to the user.
        Minor cosmetic difference blocked by http://webkit.org/b/118162

        * UserInterface/FilterBar.css:
        (.filter-bar > input[type="search"]:focus):
        (.filter-bar > input[type="search"]:not(:placeholder-shown)):
        * UserInterface/FilterBar.js:
        (WebInspector.FilterBar):
        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        * UserInterface/SearchBar.css:
        (.search-bar > input[type="search"]:focus):
        (.search-bar > input[type="search"]:not(:placeholder-shown)):
        * UserInterface/SearchBar.js:
        (WebInspector.SearchBar):

2013-06-27  James Craig  <james@cookiecrook.com>

        Web Inspector: AX: Add container ARIA roles (toolbar, main, labeled regions, etc.)
        so the layout is more discoverable to screen reader users
        https://bugs.webkit.org/show_bug.cgi?id=118104

        Reviewed by Timothy Hatcher.

        Made the basic layout (toolbar, sidebars, main) of the Web Inspector understandable
        and navigable with VoiceOver.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/ButtonNavigationItem.js:
        * UserInterface/CSSStyleDetailsSidebarPanel.js:
        * UserInterface/DashboardManager.js:
        * UserInterface/Main.js:
        * UserInterface/NavigationBar.js:
        * UserInterface/NavigationItem.js:
        * UserInterface/NavigationSidebarPanel.js:
        * UserInterface/RadioButtonNavigationItem.js:
        * UserInterface/Sidebar.js:
        * UserInterface/SidebarPanel.js:
        * UserInterface/Toolbar.js:

2013-06-27  James Craig  <james@cookiecrook.com>

        Web Inspector: AX: Console log of the Inspector does not announce output for screen readers
        https://bugs.webkit.org/show_bug.cgi?id=115976

        Reviewed by Timothy Hatcher.

        Main console log area (div.console-messages) is now an ARIA live region (role="log")
        so screen readers speak plain text updates.

        Also added contextual labels (e.g. input/output) but speech output verification of
        those is currently blocked by http://webkit.org/b/118096

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/ConsoleCommand.js:
        (WebInspector.ConsoleCommand.prototype.toMessageElement):
        * UserInterface/ConsoleCommandResult.js:
        (WebInspector.ConsoleCommandResult.prototype.toMessageElement):
        * UserInterface/LogContentView.css:
        (@media reader):
        * UserInterface/LogContentView.js:
        (WebInspector.LogContentView):


2013-06-27  Matthew Holden  <jftholden@yahoo.com>

        Web Inspector: Display color picker in popover on color swatch click
        https://bugs.webkit.org/show_bug.cgi?id=117919

        Reviewed by Timothy Hatcher.

        Includes fixes from second code review.

        * Localizations/en.lproj/localizedStrings.js:
        * UserInterface/CSSColorPicker.css: Added.
        (.colorpicker-container):
        (.colorpicker-fill-parent):
        (.colorpicker-top):
        (.colorpicker-color):
        (.colorpicker-bottom span):
        (.colorpicker-text):
        (.colorpicker-color-text-value):
        (.colorpicker-hue):
        (.colorpicker-fill):
        (.colorpicker-range-container):
        (.colorpicker-range-container *):
        (.colorpicker-range-container label):
        (.colorpicker-range-container input):
        (.colorpicker-saturation):
        (.colorpicker-value):
        (.colorpicker-dragger):
        (.colorpicker-slider):
        (.colorpicker-container .swatch):
        (.colorpicker-container .swatch-inner):
        * UserInterface/CSSColorPicker.js: Added.
        (WebInspector.CSSColorPicker.consume):
        (WebInspector.CSSColorPicker.move):
        (WebInspector.CSSColorPicker.start):
        (WebInspector.CSSColorPicker.stop):
        (WebInspector.CSSColorPicker.makeDraggable):
        (WebInspector.CSSColorPicker.hueDrag):
        (WebInspector.CSSColorPicker.colorDragStart):
        (WebInspector.CSSColorPicker.colorDrag):
        (WebInspector.CSSColorPicker.alphaDrag):
        (WebInspector.CSSColorPicker.colorSwatchClicked):
        (WebInspector.CSSColorPicker):
        (WebInspector.CSSColorPicker.prototype.get element):
        (WebInspector.CSSColorPicker.prototype.set color):
        (WebInspector.CSSColorPicker.prototype.get color):
        (WebInspector.CSSColorPicker.prototype.get outputColorFormat):
        (WebInspector.CSSColorPicker.prototype.get colorHueOnly):
        (WebInspector.CSSColorPicker.prototype.set displayText):
        (WebInspector.CSSColorPicker.prototype.shown):
        (WebInspector.CSSColorPicker.prototype._updateHelperLocations):
        (WebInspector.CSSColorPicker.prototype._updateDisplay):
        (WebInspector.CSSColorPicker.hsvaToRGBA):
        (WebInspector.CSSColorPicker.rgbaToHSVA):
        * UserInterface/CSSStyleDeclarationTextEditor.js:
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.didDismissPopover):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype._createColorSwatches):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.event.newColorText.colorTextMarker):
        (WebInspector.CSSStyleDeclarationTextEditor.prototype.event.newColorText):
        * UserInterface/Main.html:

2013-06-26  Antoine Quint  <graouts@apple.com>

        Web Inspector: stepping through while paused in debugger makes a popover appear
        https://bugs.webkit.org/show_bug.cgi?id=117994

        There is no obvious need to call tokenTrackingControllerNewHighlightCandidate when the
        active call frame changes and it leads to an extraneous display of the popover.

        Reviewed by Timothy Hatcher.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype._activeCallFrameDidChange):

2013-06-24  Antoine Quint  <graouts@apple.com>

        Web Inspector: WebInspector.displayNameForURL() failure prevents DOM inspection
        https://bugs.webkit.org/show_bug.cgi?id=117927

        Handle possible mis-encoded URI fragments passed to decodeURIComponent() which
        could prevent inspection of the DOM.

        Reviewed by Timothy Hatcher.

        * UserInterface/Main.js:
        (WebInspector.displayNameForURL):

2013-06-17  Darin Adler  <darin@apple.com>

        Sort all the Xcode project files
        https://bugs.webkit.org/show_bug.cgi?id=117696

        Reviewed by Anders Carlsson.

        * WebInspectorUI.xcodeproj/project.pbxproj: Ran the sort-Xcode-project-file script.

2013-06-21  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Uncaught exception when pretty printing WebInspector.Script
        https://bugs.webkit.org/show_bug.cgi?id=117893

        This was an issue with an earlier refactoring. The sourceCode is a Script,
        so replace the non-existent local variable "script" with "this._sourceCode".

        Reviewed by Timothy Hatcher.

        * UserInterface/SourceCodeTextEditor.js:
        (WebInspector.SourceCodeTextEditor.prototype.textEditorUpdatedFormatting):

2013-06-21  Timothy Hatcher  <timothy@apple.com>

        Stop removing and re-adding breakpoints from the backend on reload.

        On reload the sourceCode for breakpoints are nulled out, which fires DisplayLocationDidChange.
        Then the sourceCode is reassociated, firing DisplayLocationDidChange again. In these cases we
        don't need to update the backend, since nothing really changed.

        https://bugs.webkit.org/show_bug.cgi?id=117877

        Reviewed by Joseph Pecoraro.

        * UserInterface/DebuggerManager.js:
        (WebInspector.DebuggerManager.prototype._breakpointDisplayLocationDidChange): Return early when
        _ignoreBreakpointDisplayLocationDidChangeEvent is true.
        (WebInspector.DebuggerManager.prototype.reset): Set _ignoreBreakpointDisplayLocationDidChangeEvent.
        (WebInspector.DebuggerManager.prototype._associateBreakpointsWithSourceCode): Ditto.

2013-06-19  Antoine Quint  <graouts@apple.com>

        Web Inspector: Copying array or object output does not contain values
        https://bugs.webkit.org/show_bug.cgi?id=117669

        ConsoleCommandResult was overriding toClipboardString() but wasn't using the complex code
        in ConsoleMessageImpl's toClipboardString() to provide a nicely formatted output for objects.
        We now use a "clipboarPrefixString" property to customize the prefix used in the clipboard
        and, additionally, only use that prefix if we're copying more than a single message since it's
        the only situation where it's useful to have the ">" or "<" prefix shown. Console messages with
        a log level always print the level and when saving the console log using Cmd+S, all messages
        contain their prefix as well.

        Reviewed by Timothy Hatcher.

        * UserInterface/ConsoleCommand.js:
        (WebInspector.ConsoleCommand.prototype.toClipboardString):
        Handle the new isPrefixOptional argument.

        * UserInterface/ConsoleCommandResult.js:
        (WebInspector.ConsoleCommandResult.prototype.get clipboarPrefixString):
        Provide a custom "< " prefix and set "enforcesClipboardPrefixString" to false such that
        the prefix isn't printed out in situations when it may not.

        * UserInterface/ConsoleMessageImpl.js:
        Set "enforcesClipboardPrefixString" to true since we always want to log the log level
        prefix in all situations.

        (WebInspector.ConsoleMessageImpl.prototype.get clipboarPrefixString):
        Implement this new getter to return our clipboard string such that subclasses may
        customize it.

        (WebInspector.ConsoleMessageImpl.prototype.toClipboardString):
        Take into account both isPrefixOptional and the "enforcesClipboardPrefixString" property
        to only log the prefix if necessary.

        * UserInterface/LogContentView.js:
        (WebInspector.LogContentView.prototype._formatMessagesAsData):
        Make the logging of prefix optional when we have a single message selected and we're
        not saving via Cmd+S.

2013-06-18  Joseph Pecoraro  <pecoraro@apple.com>

        Web Inspector: Infrequent uncaught exception with debugger popovers breaks inspector
        https://bugs.webkit.org/show_bug.cgi?id=117755

        Create the ZERO_SIZE and ZERO_RECT objects after we've setup the Size
        and Rect prototypes, so they get the expected methods. We then need to
        handle the ZERO_RECT case better, and not attempt to draw a background
        in a canvas with a 0 size, which would produce an exception.

        Reviewed by Timothy Hatcher.

        * UserInterface/Geometry.js:
        * UserInterface/Popover.js:
        (WebInspector.Popover.prototype._update):

2013-06-18  Timothy Hatcher  <timothy@apple.com>

        If the tree outline is processing a selection currently, then don't change the selection.

        This is needed to allow breakpoints tree elements to be selected without jumping back to
        selecting the resource tree element.

        https://bugs.webkit.org/show_bug.cgi?id=117746

        Reviewed by Joseph Pecoraro.

        * UserInterface/Main.js:
        (WebInspector._revealAndSelectRepresentedObjectInNavigationSidebar):
        * UserInterface/TreeOutline.js:
        (TreeElement.prototype.select):

2013-06-18  Timothy Hatcher  <timothy@apple.com>

        Update breakpoints to match Xcode 5.

        This updates the breakpoint images, line colors, and moves breakpoints toggle button
        to the Debugger sidebar navigation bar.

        https://bugs.webkit.org/show_bug.cgi?id=117723

        Reviewed by Joseph Pecoraro.

        * Localizations/en.lproj/localizedStrings.js: Updated.
        * UserInterface/DebuggerSidebarPanel.css: Removed custom toggle button rules.
        * UserInterface/DebuggerSidebarPanel.js:
        (WebInspector.DebuggerSidebarPanel):
        (WebInspector.DebuggerSidebarPanel.prototype._breakpointsToggleButtonClicked):
        * UserInterface/Images/Breakpoint.png: Updated.
        * UserInterface/Images/Breakpoints.pdf: Added.
        * UserInterface/Images/Breakpoint@2x.png: Updated.
        * UserInterface/Images/BreakpointButton.pdf: Updated.
        * UserInterface/Images/BreakpointInactive.png: Updated.
        * UserInterface/Images/BreakpointInactive@2x.png: Updated.
        * UserInterface/Images/BreakpointInactiveButton.pdf: Updated.
        * UserInterface/Images/InstructionPointer.png: Updated.
        * UserInterface/Images/InstructionPointer@2x.png: Updated.
        * UserInterface/SourceCodeTextEditor.css:
        (.source-code.text-editor > .CodeMirror .error): Updated background-color and removed box-shadow.
        (.source-code.text-editor > .CodeMirror .warning): Ditto.
        * UserInterface/TextEditor.css:
        (.text-editor > .CodeMirror .has-breakpoint .CodeMirror-linenumber::before): Changed left position to 0.
        (.text-editor > .CodeMirror .execution-line .CodeMirror-linenumber::after): Updated position.
        (.text-editor > .CodeMirror .execution-line): Updated background-color and removed box-shadow.

2013-06-13  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/117615> Web Inspector: JS PrettyPrinting Should have space between "do" and "{"

        Reviewed by Timothy Hatcher.

        * UserInterface/CodeMirrorFormatters.js:

2013-06-13  Joseph Pecoraro  <pecoraro@apple.com>

        <http://webkit.org/b/117612> Web Inspector: "Search Resource Content" should cancel when I remove all text search text

        Reviewed by Timothy Hatcher.

        * UserInterface/ResourceSidebarPanel.js:
        (WebInspector.ResourceSidebarPanel):
        (WebInspector.ResourceSidebarPanel.prototype._searchFieldInput):

== Rolled over to ChangeLog-2013-06-11 ==
