2016-12-12 Matt Baker Web Inspector: Breakpoint Log action should support template literals https://bugs.webkit.org/show_bug.cgi?id=165116 Reviewed by Joseph Pecoraro. * Localizations/en.lproj/localizedStrings.js: New string "${expr} = expression" for breakpoint popover. * UserInterface/Controllers/BreakpointLogMessageLexer.js: Added. To support template literal placeholders in message text, it is necessary to distinguish plain text parts of the message from placeholders, since plain text must be escaped. (WebInspector.BreakpointLogMessageLexer): (WebInspector.BreakpointLogMessageLexer.prototype.tokenize): (WebInspector.BreakpointLogMessageLexer.prototype.reset): (WebInspector.BreakpointLogMessageLexer.prototype._finishPlainText): (WebInspector.BreakpointLogMessageLexer.prototype._finishExpression): (WebInspector.BreakpointLogMessageLexer.prototype._appendToken): (WebInspector.BreakpointLogMessageLexer.prototype._consume): (WebInspector.BreakpointLogMessageLexer.prototype._peek): (WebInspector.BreakpointLogMessageLexer.prototype._expression): (WebInspector.BreakpointLogMessageLexer.prototype._plainText): (WebInspector.BreakpointLogMessageLexer.prototype._possiblePlaceholder): (WebInspector.BreakpointLogMessageLexer.prototype._regExpOrStringLiteral): * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype._debuggerBreakpointOptions): Build breakpoint "options" object for DebuggerAgent. If a Log action contains template literal placeholders it is changed to an Evaluate action, which calls console.log with a template literal. (WebInspector.DebuggerManager.prototype._setBreakpoint): Use converted breakpoint options. * UserInterface/Main.html: * UserInterface/Test.html: New file. * UserInterface/Views/BreakpointActionView.css: (.breakpoint-action-block-body > .description): Styles for breakpoint Log action hint text. * UserInterface/Views/BreakpointActionView.js: (WebInspector.BreakpointActionView.prototype._updateBody): Add Log action hint text element. 2016-12-11 Matt Baker Web Inspector: ThreadTreeElement should have a "Resume" status button when paused https://bugs.webkit.org/show_bug.cgi?id=165581 Reviewed by Joseph Pecoraro. * UserInterface/Images/Resume.svg: Fill/stroke should be unspecified so that both can be styled in CSS. * UserInterface/Views/DebuggerDashboardView.css: (.dashboard.debugger .navigation-bar .item.debugger-dashboard-pause.activated): * UserInterface/Views/DebuggerSidebarPanel.css: (.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-pause-resume): (.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-pause-resume.activated): Recreate original style which relied on 'fill="none"' being specified in the SVG. * UserInterface/Views/ThreadTreeElement.css: (.tree-outline > .item.thread .icon): (.tree-outline > .item.thread .status-button.resume): (.tree-outline > .item.thread .status-button.resume:active): (.tree-outline:matches(:focus, .force-focus) > .item.thread.selected .status-button.resume): (.tree-outline > .item.thread.selected .status-button.resume,): (.details-section.call-stack .thread .icon): Deleted. Status button styles. Colors match those of the goto-arrow button. * UserInterface/Views/ThreadTreeElement.js: (WebInspector.ThreadTreeElement.prototype.refresh): Update status icon. (WebInspector.ThreadTreeElement.prototype.oncontextmenu): (WebInspector.ThreadTreeElement.prototype._updateStatus): Add/remove status button based on paused state. Stop propagation of "mousedown" events on the status button, to prevent button press from selecting the tree element. (WebInspector.ThreadTreeElement): 2016-12-11 Joseph Pecoraro Web Inspector: Move MainTarget and WorkerTarget to their own files https://bugs.webkit.org/show_bug.cgi?id=165701 Reviewed by Brian Burg. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.scriptDidParse): * UserInterface/Main.html: * UserInterface/Protocol/MainTarget.js: Added. (WebInspector.MainTarget): (WebInspector.MainTarget.prototype.get displayName): (WebInspector.MainTarget.prototype.get mainResource): * UserInterface/Protocol/Target.js: (WebInspector.Target): (WebInspector.MainTarget): Deleted. (WebInspector.MainTarget.prototype.get displayName): Deleted. (WebInspector.MainTarget.prototype.get mainResource): Deleted. (WebInspector.MainTarget.prototype.initialize): Deleted. (WebInspector.WorkerTarget): Deleted. (WebInspector.WorkerTarget.prototype.get displayName): Deleted. (WebInspector.WorkerTarget.prototype.initialize): Deleted. * UserInterface/Protocol/WorkerTarget.js: Added. (WebInspector.WorkerTarget): (WebInspector.WorkerTarget.prototype.get displayName): * UserInterface/Test.html: 2016-12-09 Joseph Pecoraro Web Inspector: Frontend should not be resetting TypeProfiler state when switching between ContentViews https://bugs.webkit.org/show_bug.cgi?id=165648 Reviewed by Brian Burg. * UserInterface/Base/Main.js: (WebInspector.loaded): Update all backends when the state changes. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype._setTypeTokenAnnotatorEnabledState): (WebInspector.SourceCodeTextEditor.prototype.set _basicBlockAnnotatorEnabled): Moved this code to when the global Setting (which affects all editors) changes. 2016-12-09 Joseph Pecoraro Web Inspector: Some resources fetched via Fetch API do not have data https://bugs.webkit.org/show_bug.cgi?id=165230 Reviewed by Alex Christensen. * Localizations/en.lproj/localizedStrings.js: New "Fetch" and "Fetches" localized strings. * UserInterface/Models/Resource.js: (WebInspector.Resource.displayNameForType): * UserInterface/Models/ResourceCollection.js: (WebInspector.ResourceCollection.verifierForType): * UserInterface/Views/CollectionContentView.js: (WebInspector.CollectionContentView): * UserInterface/Views/ResourceClusterContentView.js: (WebInspector.ResourceClusterContentView.prototype.get responseContentView): * UserInterface/Views/ResourceTreeElement.js: (WebInspector.ResourceTreeElement.compareResourceTreeElements): New ResourceType.Fetch. Behave like XHR in most places. 2016-12-08 Joseph Pecoraro Web Inspector: Unable to delete breakpoint from worker script https://bugs.webkit.org/show_bug.cgi?id=165578 Reviewed by Matt Baker. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype._removeBreakpoint): Match setting breakpoints. If this is a "URL breakpoint", affect all targets. If this is a "Script breakpoint", affect just the single target containing that Script. 2016-12-07 Devin Rousso REGRESSION(r203912): Web Inspector: Navigation sidebar widths are not saved https://bugs.webkit.org/show_bug.cgi?id=165496 Reviewed by Matt Baker. * UserInterface/Views/TabBrowser.js: (WebInspector.TabBrowser): (WebInspector.TabBrowser.prototype._sidebarWidthDidChange): (WebInspector.TabBrowser.prototype._showNavigationSidebarPanelForTabContentView): (WebInspector.TabBrowser.prototype._sidebarWidthDidChange): Renamed from _detailsSidebarWidthDidChange. Add event listener for when the navigation sidebar's width is changed. * UserInterface/Views/TabContentView.js: (WebInspector.TabContentView): (WebInspector.TabContentView.prototype.get navigationSidebarPanel): (WebInspector.TabContentView.prototype.get navigationSidebarCollapsedSetting): (WebInspector.TabContentView.prototype.get navigationSidebarWidthSetting): (WebInspector.TabContentView.prototype.get detailsSidebarPanels): (WebInspector.TabContentView.prototype.get detailsSidebarCollapsedSetting): (WebInspector.TabContentView.prototype.get detailsSidebarSelectedPanelSetting): (WebInspector.TabContentView.prototype.get detailsSidebarWidthSetting): Add WebInspector.Setting object for the navigation sidebar's width. 2016-12-07 Nikita Vasilyev Web Inspector: Control Flow Profiler's event handlers aren't getting removed when ContentView closes https://bugs.webkit.org/show_bug.cgi?id=165556 Reviewed by Joseph Pecoraro. * UserInterface/Views/ScriptContentView.js: (WebInspector.ScriptContentView.prototype.closed): * UserInterface/Views/TextResourceContentView.js: (WebInspector.TextResourceContentView.prototype.closed): 2016-12-07 Joseph Pecoraro Web Inspector: Add ability to distinguish if a Script was parsed as a module https://bugs.webkit.org/show_bug.cgi?id=164900 Reviewed by Timothy Hatcher. * UserInterface/Models/Script.js: (WebInspector.Script.prototype.get sourceType): New property of Scripts. SourceType is either Program or Module. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.scriptDidParse): * UserInterface/Protocol/DebuggerObserver.js: (WebInspector.DebuggerObserver.prototype.scriptParsed): Convert incoming module boolean into SourceType when creating new Scripts. * UserInterface/Models/ScriptSyntaxTree.js: (WebInspector.ScriptSyntaxTree): (WebInspector.ScriptSyntaxTree.prototype._recurse): (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree): Update the generic AST for new module specific Esprima types. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorScriptSourceType): * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype._startWorkerPrettyPrint): For pretty printing correctly state if this is a module or not for Esprima. 2016-12-07 Joseph Pecoraro Web Inspector: Update Esprima to support new features / syntax (**, async/await, trailing comma) https://bugs.webkit.org/show_bug.cgi?id=164830 Reviewed by Timothy Hatcher. * UserInterface/External/Esprima/LICENSE: * UserInterface/External/Esprima/esprima.js: Updated to Esprima@7219731 (4.0.0-dev). * UserInterface/Models/ScriptSyntaxTree.js: (WebInspector.ScriptSyntaxTree.prototype._recurse): (WebInspector.ScriptSyntaxTree.prototype._createInternalSyntaxTree): * UserInterface/Workers/Formatter/ESTreeWalker.js: (ESTreeWalker.prototype._walkChildren): Add new nodes (AwaitExpression). Add new states (async boolean property on Functions). Remove stale properties (defaults is no longer needed, as parameters with default values are now AssignmentPatterns). Update MetaProperty where meta/property are now Identifiers not strings. * UserInterface/Workers/Formatter/EsprimaFormatter.js: (EsprimaFormatter.prototype._handleTokenAtNode): Handle pretty printing of new nodes and identifiers. * Controllers/FrameResourceManager.js Address a console.assert warning for stripping assertions in Production. 2016-12-07 Joseph Pecoraro Web Inspector: Remove unused and mostly untested Page domain commands and events https://bugs.webkit.org/show_bug.cgi?id=165507 Reviewed by Brian Burg. * UserInterface/Protocol/PageObserver.js: (WebInspector.PageObserver.prototype.javascriptDialogOpening): (WebInspector.PageObserver.prototype.javascriptDialogClosed): (WebInspector.PageObserver.prototype.scriptsEnabled): Keep stub in case legacy backends dispatch the event to the frontend. * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js: * Versions/Inspector-iOS-10.0.json: * Versions/Inspector-iOS-7.0.json: * Versions/Inspector-iOS-8.0.json: * Versions/Inspector-iOS-9.0.json: * Versions/Inspector-iOS-9.3.json: Remove handleJavaScriptDialog command from legacy backends because it doesn't appear as if the iOS backend handled it at all. 2016-12-06 Alexey Proskuryakov Correct SDKROOT values in xcconfig files https://bugs.webkit.org/show_bug.cgi?id=165487 rdar://problem/29539209 Reviewed by Dan Bernstein. Fix suggested by Dan Bernstein. * Configurations/DebugRelease.xcconfig: 2016-12-05 Matt Baker Web Inspector: Object.shallowEqual([{}], [{}]) should return true https://bugs.webkit.org/show_bug.cgi?id=165397 Reviewed by Brian Burg. * UserInterface/Base/Utilities.js: (value): Array.shallowEqual should compare array items using strict equivalence, and on failure defer to Object.shallowEqual. 2016-12-05 Joseph Pecoraro Web Inspector: Remove legacy styles https://bugs.webkit.org/show_bug.cgi?id=165389 Reviewed by Matt Baker. Remove styles for platforms we don't build on anymore (Mavericks and Mountain Lion). There are also no "unknown-mac" styles to upgrade to a named platform. * UserInterface/Base/Platform.js: Add sierra and remove older unsupported platforms. * UserInterface/Views/Main.css: (body): (body:not(.mavericks)): Deleted. * UserInterface/Views/TabBar.css: (body.mavericks .tab-bar > .item:not(.disabled).selected): Deleted. * UserInterface/Views/Toolbar.css: (body .toolbar): (body.window-inactive .toolbar): (body.mac-platform:not(.docked) .toolbar): (body.mac-platform:not(.docked)): (body:not(.mavericks) .toolbar,): Deleted. (body.window-inactive:not(.mavericks) .toolbar): Deleted. (body.mac-platform:not(.docked, .mavericks) .toolbar): Deleted. (body.mac-platform:not(.docked, .mavericks)): Deleted. Remove mavericks specific styles. 2016-12-02 Andy Estes [Cocoa] Adopt the PRODUCT_BUNDLE_IDENTIFIER build setting https://bugs.webkit.org/show_bug.cgi?id=164492 Reviewed by Dan Bernstein. * Configurations/WebInspectorUIFramework.xcconfig: Set PRODUCT_BUNDLE_IDENTIFIER to com.apple.$(PRODUCT_NAME:rfc1034identifier). * Info.plist: Changed CFBundleIdentifier's value from com.apple.${PRODUCT_NAME:rfc1034identifier} to ${PRODUCT_BUNDLE_IDENTIFIER}. 2016-12-02 Nikita Vasilyev REGRESSION (r192344): Web Inspector: Turning off Code Coverage or Type Profiler logs an error https://bugs.webkit.org/show_bug.cgi?id=164804 Reviewed by Matt Baker. BasicBlockAnnotator and TypeTokenAnnotator were instanciated for a resource in an inactive Debugger tab. * UserInterface/Views/NavigationSidebarPanel.js: (WebInspector.NavigationSidebarPanel.prototype.showDefaultContentViewForTreeElement): Don't show any content view if we are not in a selected tab. 2016-12-01 Matt Baker Web Inspector: Show async stack traces for workers https://bugs.webkit.org/show_bug.cgi?id=165235 Reviewed by Joseph Pecoraro. * UserInterface/Views/CallFrameTreeElement.css: (.tree-outline > .children > .item.call-frame.async-boundary): (.tree-outline:not(.single-thread) > .children > .item.call-frame.async-boundary): (.tree-outline .item.call-frame.async-boundary::before): (.tree-outline.single-thread .item.call-frame.async-boundary::before): (.tree-outline .item.call-frame.async-boundary): Deleted. Style changes for single/multiple-thread call stacks. Padding changes to account for Thread tree element. Make selectors more specific where needed. * UserInterface/Views/DebuggerSidebarPanel.css: (.sidebar > .panel.navigation.debugger .tree-outline.single-thread > .item.thread): (.sidebar > .panel.navigation.debugger .tree-outline.single-thread): Style changes for single/multiple-thread call stacks. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel): Use a single tree outline for showing a single thread or multiple threads. For single-threaded, hide Thread tree element and un-indent children. (WebInspector.DebuggerSidebarPanel.prototype._targetAdded): (WebInspector.DebuggerSidebarPanel.prototype._targetRemoved): (WebInspector.DebuggerSidebarPanel.prototype._updateCallStackTreeOutline): Update tree style and whether Thread tree element is selectable. (WebInspector.DebuggerSidebarPanel.prototype._debuggerActiveCallFrameDidChange): Remove support for second tree outline. (WebInspector.DebuggerSidebarPanel.prototype._updateSingleThreadCallStacks): Deleted. (WebInspector.DebuggerSidebarPanel.prototype._selectActiveCallFrameTreeElement): Deleted. (WebInspector.DebuggerSidebarPanel.prototype._showSingleThreadCallStacks): Deleted. (WebInspector.DebuggerSidebarPanel.prototype._showMultipleThreadCallStacks): Deleted. No longer needed after unifying tree outlines. * UserInterface/Views/ThreadTreeElement.js: (WebInspector.ThreadTreeElement.prototype.refresh): Append call frames from the async stack trace. 2016-11-30 Joseph Pecoraro Web Inspector: Clicking on link in Web Inspector can cause UIProcess to crash https://bugs.webkit.org/show_bug.cgi?id=165157 Reviewed by Brian Burg. By correctly disallowing slashes in the scheme Web Inspector resolves the correct absolute URL and doesn't end up trying to navigate to an incorrect file URL. * UserInterface/Base/URLUtilities.js: (parseURL): Disallow "/" characters in the scheme portion. (/http://example.com) Allow path to be optional before a fragment portion. (http://example.com#frag) 2016-11-29 Joseph Pecoraro Web Inspector: Improve name sorting in HeapSnapshot data grids https://bugs.webkit.org/show_bug.cgi?id=165170 Reviewed by Matt Baker. When sorting the Name column, group named properties and unnamed properties and sort them each individually: - Sort named properties by their property name (property names will be unique if they exist) - Sort unnamed properties by their class name (guaranteed) - Sort any tied class names by their object id This makes using the Object Graph with Name sort easier to follow. In the ascending sort you see all the named properties first, followed by the unnamed (internal) properties. * UserInterface/Views/HeapSnapshotContentView.js: (WebInspector.HeapSnapshotObjectGraphContentView): Since this data grid column now sorts on more than just the "Class Name" rename it to "Name". * UserInterface/Views/HeapSnapshotDataGridTree.js: (WebInspector.HeapSnapshotDataGridTree.buildSortComparator): Make the sort of the `className` column more general to handle sorting by property names, class names, and object identifiers. * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js: (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.get propertyName): (WebInspector.HeapSnapshotInstanceDataGridNode.prototype.createCellContent): Provide a lazy `propertyName` accessor where we compute it once and stash it on the DataGridNode to avoid extra work when resorting. (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populate.propertyName): (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populate): In the initial populated sort, provide the necessary property name property the sort comparator expects. 2016-11-29 Matt Baker Web Inspector: Breakpoints button enabled state is too subtle https://bugs.webkit.org/show_bug.cgi?id=165153 Reviewed by Joseph Pecoraro. * UserInterface/Images/Breakpoints.svg: Change to path so stroke and fill can be styled. * UserInterface/Views/DebuggerSidebarPanel.css: (.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-breakpoints): (.sidebar > .panel.navigation.debugger > .navigation-bar .debugger-breakpoints.activated): Fill and stroke styles for the active and inactive breakpoint button. 2016-11-28 Matt Baker Web Inspector: Debugger should have an option for showing asynchronous call stacks https://bugs.webkit.org/show_bug.cgi?id=163230 Reviewed by Joseph Pecoraro. * Localizations/en.lproj/localizedStrings.js: New string for generic async call stack boundary label: "(async)". * UserInterface/Controllers/DebuggerManager.js: Create async stack depth setting and set default depth. (WebInspector.DebuggerManager.prototype.get asyncStackTraceDepth): (WebInspector.DebuggerManager.prototype.set asyncStackTraceDepth): Make async stack depth setting accessible to the frontend. (WebInspector.DebuggerManager.prototype.initializeTarget): Set async stack depth value on the target. (WebInspector.DebuggerManager.prototype.debuggerDidPause): Plumbing for the async stack trace payload. * UserInterface/Models/ConsoleMessage.js: (WebInspector.ConsoleMessage): Updated for new StackTrace.fromPayload use. * UserInterface/Models/DebuggerData.js: (WebInspector.DebuggerData): (WebInspector.DebuggerData.prototype.get asyncStackTrace): (WebInspector.DebuggerData.prototype.updateForPause): (WebInspector.DebuggerData.prototype.updateForResume): More plumbing. * UserInterface/Models/StackTrace.js: Update frontend model for use as new protocol object Console.StackTrace, which was previously an alias for a simple array of Console.CallFrames. (WebInspector.StackTrace): (WebInspector.StackTrace.fromPayload): (WebInspector.StackTrace.fromString): (WebInspector.StackTrace.prototype.get topCallFrameIsBoundary): (WebInspector.StackTrace.prototype.get parentStackTrace): * UserInterface/Protocol/DebuggerObserver.js: (WebInspector.DebuggerObserver.prototype.paused): More plumbing. * UserInterface/Views/CallFrameTreeElement.css: (.tree-outline .item.call-frame.async-boundary): Use default cursor since boundary element is not selectable. (.tree-outline .item.call-frame.async-boundary .icon): (.tree-outline .item.call-frame.async-boundary::before,): (.tree-outline .item.call-frame.async-boundary::after): (.tree-outline .item.call-frame.async-boundary::before): Dimmed text and divider line styles for boundary element. * UserInterface/Views/CallFrameTreeElement.js: (WebInspector.CallFrameTreeElement): Add a flag denoting whether the call frame is an async call trace boundary, and set styles accordingly. * UserInterface/Views/DebuggerSidebarPanel.js: Set async stack trace depth, if supported. (WebInspector.DebuggerSidebarPanel.prototype._updateSingleThreadCallStacks): Add call frames for async stack traces to the call stack TreeOutline. (WebInspector.DebuggerSidebarPanel.prototype._treeSelectionDidChange): Ensure that async call frames cannot become the active call frame. * UserInterface/Views/Variables.css: (:root): Add --text-color-gray-medium, for dimmed text in async boundary element. 2016-11-18 Matt Baker Web Inspector: TimelineDataGridNode assertions when refreshing page https://bugs.webkit.org/show_bug.cgi?id=162642 Reviewed by Timothy Hatcher. This patch fixes a number of deficiencies in the Network tab that caused TimelineDataGridNode graphs to refresh before the tab became visible. * UserInterface/Views/ElementsTabContentView.js: (WebInspector.ElementsTabContentView): (WebInspector.ElementsTabContentView.prototype.shown): Drive-by fix: defer showing the DOM content view until the tab is shown. * UserInterface/Views/NetworkGridContentView.js: (WebInspector.NetworkGridContentView): Drive-by event listener cleanup. (WebInspector.NetworkGridContentView.prototype.get startTime): (WebInspector.NetworkGridContentView.prototype.get endTime): Back endTime with a variable, instead of using the ruler value which isn't valid before the tab is shown for the first time. (WebInspector.NetworkGridContentView.prototype.shown): Force the grid to update its layout, and that of the Timeline column ruler. During layout the ruler's secondsPerPixel value is used, which isn't valid until the ruler does an initial layout. (WebInspector.NetworkGridContentView.prototype.reset): Clear pending records. This was causing duplicates to appear when the inspected page was refreshed multiple times prior to showing the Network tab for the first time. (WebInspector.NetworkGridContentView.prototype.layout): Should more closely match behavior in NetworkTimelineView.prototype.layout. Graph end time padding is added if no longer updating the current time. (WebInspector.NetworkGridContentView.prototype._networkTimelineRecordAdded): Track endTime of the last record added, so that the graph end time can be padded once the current time is no longer being updated. (WebInspector.NetworkGridContentView.prototype._update): (WebInspector.NetworkGridContentView.prototype._stopUpdatingCurrentTime): Graph end time padding shouldn't be applied here, since this isn't called if the inspected page finishes loading before the view is shown. (WebInspector.NetworkGridContentView.prototype._clearNetworkItems): Deleted. Replaced by an arrow function. * UserInterface/Views/NetworkSidebarPanel.js: (WebInspector.NetworkSidebarPanel.prototype._networkTimelineReset): Don't show the content view if the tab is hidden. 2016-11-17 Devin Rousso Web Inspector: Shift clicking on named color value only shows its hex form https://bugs.webkit.org/show_bug.cgi?id=162758 Reviewed by Timothy Hatcher. * UserInterface/Models/Color.js: (WebInspector.Color.prototype.nextFormat): Reworked the logic for the formatting order to be the following: - Long HEX and Long HEXAlpha - RGB and RGBA - HSL and HSLA - Keyword (if applicable) - Short HEX (if applicable) - Short HEXAlpha (if applicable) It will only show formats with alpha values if the color value has an alpha that is not 1. If the alpha is not 1, it will not show formats with non-alpha values. The changes to this function have no effect on the context menu items of InlineSwatch elements. The purpose of each of those items is to allow the user to change the format to a specified type, whereas WebInspector.Color.prototype.nextFormat is used to cycle through all of the relevant formats. (WebInspector.Color.prototype._toRGBString): (WebInspector.Color.prototype._toRGBAString): (WebInspector.Color.prototype._toHSLString): (WebInspector.Color.prototype._toHSLAString): Unrelated fix of extra decimals when converting from HEX to RGB and HSL. * UserInterface/Views/CSSStyleDeclarationTextEditor.js: (WebInspector.CSSStyleDeclarationTextEditor._inlineSwatchValueChanged): Removed assertion for `_hasActiveInlineSwatchEditor` since the value may change from switching the format of a color swatch (Shift-Click). 2016-11-16 Joseph Pecoraro Web Inspector: Background tabs are often updating non-stop because they think they are visible https://bugs.webkit.org/show_bug.cgi?id=164841 Reviewed by Matt Baker. * UserInterface/Views/NetworkGridContentView.js: (WebInspector.NetworkGridContentView.prototype._networkTimelineRecordAdded): * UserInterface/Views/TimelineRecordingContentView.js: (WebInspector.TimelineRecordingContentView.prototype._update): Don't constantly update when this tab is not in the foreground. 2016-11-15 Joseph Pecoraro Web Inspector: SourceCodeTextEditor should display execution lines for background threads https://bugs.webkit.org/show_bug.cgi?id=164679 Reviewed by Timothy Hatcher. There may be multiple threads paused in the same content view. With this change we should a thread indicator for each primary line a thread is paused on. It uses the same inline line indicator that inline errors/warnings (issues) use. When there is a single thread (just the Page) we don't show thread indicators. But as soon as there are multiple threads we start managing and showing them. The line indicator contains the name of the thread on the side. Note that SourceCodeTextEditor maintains the thread indicators, but it still always handles the ActiveCallFrame as it used to, pushing values down into TextEditor. The ActiveCallFrame styles override the thread line indicators (albeit with the same styles). The reason these are still separate is that TextEditor has some special styles regarding its gutter for the active execution line. Eventually we may want to find a way to push this up into SourceCodeTextEditor. * Localizations/en.lproj/localizedStrings.js: New string "%d Threads" when multiple threads are on the same line. * UserInterface/Views/ScopeChainDetailsSidebarPanel.js: (WebInspector.ScopeChainDetailsSidebarPanel): (WebInspector.ScopeChainDetailsSidebarPanel.prototype._activeCallFrameDidChange): Update Watch Expressions when the active call frame changes. * UserInterface/Views/SourceCodeTextEditor.css: (.source-code.text-editor > .CodeMirror .line-indicator-widget): (.source-code.text-editor > .CodeMirror .line-indicator-widget.inline): (.source-code.text-editor > .CodeMirror .line-indicator-widget > .arrow): (.source-code.text-editor > .CodeMirror .line-indicator-widget.inline > .arrow): (.source-code.text-editor > .CodeMirror .line-indicator-widget > .icon): (.source-code.text-editor > .CodeMirror .line-indicator-widget > .text): (.source-code.text-editor > .CodeMirror .line-indicator-widget.inline > .text): Share line indicator widget styles between issue widgets and thread widgets. (.source-code.text-editor > .CodeMirror .thread-indicator): (.source-code.text-editor > .CodeMirror .thread-widget): (.source-code.text-editor > .CodeMirror .thread-widget.inline): (.source-code.text-editor > .CodeMirror .thread-widget.inline > .arrow): Colors for the thread-widget line-indicators. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor): (WebInspector.SourceCodeTextEditor.prototype.close): New event listeners handling for Target added / removed events. (WebInspector.SourceCodeTextEditor.prototype._targetAdded): (WebInspector.SourceCodeTextEditor.prototype._targetRemoved): Update thread indicators as needed. (WebInspector.SourceCodeTextEditor.prototype._looselyMatchesSourceCodeLocation): More generic match based just on the URLs. Even if the exact script comes from a different target, if they share the same URL that is fine. (WebInspector.SourceCodeTextEditor.prototype._callFramesDidChange): (WebInspector.SourceCodeTextEditor.prototype._addThreadIndicatorForTarget): (WebInspector.SourceCodeTextEditor.prototype._removeThreadIndicatorForTarget): (WebInspector.SourceCodeTextEditor.prototype._threadIndicatorWidgetForLine): (WebInspector.SourceCodeTextEditor.prototype._updateThreadIndicatorWidget): (WebInspector.SourceCodeTextEditor.prototype._handleThreadIndicatorWidgetClick): Manage thread line indicator widgets. There are 3 maps we maintain. 1. line -> [threads] List of threads paused on a line, needed for the UI text. 2. line -> widget Gets the widget on a line so we can modify and eventually remove it. 3. target -> line If a target is removed, we need to know what line it had an indicator on. (WebInspector.SourceCodeTextEditor.prototype._isWidgetToggleable): Generalize for all of our different line indicator widgets. (WebInspector.SourceCodeTextEditor.prototype._contentDidPopulate): (WebInspector.SourceCodeTextEditor.prototype.textEditorUpdatedFormatting): (WebInspector.SourceCodeTextEditor.prototype._reinsertAllThreadIndicators): When first populated, or reformatted, clear and reinsert all widgets. (WebInspector.SourceCodeTextEditor.prototype._reinsertAllIssues): (WebInspector.SourceCodeTextEditor.prototype._logCleared): (WebInspector.SourceCodeTextEditor.prototype._clearIssueWidgets): Renamed. Rename _clearWidgets to _clearIssueWidgets. 2016-11-15 Joseph Pecoraro Web Inspector: Remove unused and untested Page.setTouchEmulationEnabled command https://bugs.webkit.org/show_bug.cgi?id=164793 Reviewed by Timothy Hatcher. * Localizations/en.lproj/localizedStrings.js: Tooltips for new button. * UserInterface/Base/Main.js: (WebInspector.loaded): New global setting. * UserInterface/Views/DOMTreeContentView.js: (WebInspector.DOMTreeContentView): (WebInspector.DOMTreeContentView.prototype.get navigationItems): (WebInspector.DOMTreeContentView.prototype._showPrintStylesSettingChanged): (WebInspector.DOMTreeContentView.prototype._togglePrintStylesSetting): New navigation bar button to toggle print styles. * UserInterface/Controllers/CSSStyleManager.js: (WebInspector.CSSStyleManager.prototype.mediaTypeChanged): After toggling styles we will need to refresh styles, so provide a meaningful way to trigger refreshing styles from the frontend. * UserInterface/Images/Printer.svg: Added. * UserInterface/Images/gtk/Printer.svg: Added. New Printer icon for enabling / disabling print styles. * UserInterface/Images/gtk/Crosshair.svg: * UserInterface/Images/gtk/LayerBorders.svg: * UserInterface/Images/gtk/NavigationItemCurleyBraces.svg: * UserInterface/Images/gtk/NavigationItemTypes.svg: * UserInterface/Images/gtk/PaintFlashing.svg: * UserInterface/Images/gtk/ShadowDOM.svg: * UserInterface/Images/gtk/ToggleLeftSidebar.svg: * UserInterface/Images/gtk/ToggleRightSidebar.svg: * UserInterface/Images/gtk/UpDownArrows.svg: Fix a number of existing GTK images to have activated styles. 2016-11-15 Nikita Vasilyev REGRESSION (r208248): Web Inspector: Pressing Left Arrow breaks autocomplete https://bugs.webkit.org/show_bug.cgi?id=164391 Reviewed by Matt Baker. Unroll r208248. * UserInterface/Controllers/CodeMirrorCompletionController.js: (WebInspector.CodeMirrorCompletionController): (WebInspector.CodeMirrorCompletionController.prototype.updateCompletions): (WebInspector.CodeMirrorCompletionController.prototype.isCompletionChange): (WebInspector.CodeMirrorCompletionController.prototype.hideCompletions): (WebInspector.CodeMirrorCompletionController.prototype.close): (WebInspector.CodeMirrorCompletionController.prototype.completionSuggestionsSelectedCompletion): (WebInspector.CodeMirrorCompletionController.prototype._createCompletionHintMarker): (WebInspector.CodeMirrorCompletionController.prototype._applyCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._applyCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._commitCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._commitCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._removeLastChangeFromHistory): (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint.clearMarker): (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._completeAtCurrentPosition): (WebInspector.CodeMirrorCompletionController.prototype._generateJavaScriptCompletions): 2016-11-15 Joseph Pecoraro Web Inspector: Remove unused and untested Page.setTouchEmulationEnabled command https://bugs.webkit.org/show_bug.cgi?id=164793 Reviewed by Matt Baker. * UserInterface/Protocol/Legacy/10.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/7.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/8.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/9.0/InspectorBackendCommands.js: * UserInterface/Protocol/Legacy/9.3/InspectorBackendCommands.js: * Versions/Inspector-iOS-10.0.json: * Versions/Inspector-iOS-7.0.json: * Versions/Inspector-iOS-8.0.json: * Versions/Inspector-iOS-9.0.json: * Versions/Inspector-iOS-9.3.json: 2016-11-15 Joseph Pecoraro Web Inspector: URL Breakpoints that resolve in multiple workers should only appear in the UI once https://bugs.webkit.org/show_bug.cgi?id=164334 Reviewed by Matt Baker. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel.prototype._addBreakpoint): Don't add a duplicate BreakpointTreeElements for the same Breakpoint. 2016-11-14 Joseph Pecoraro Web Inspector: Worker debugging should pause all targets and view call frames in all targets https://bugs.webkit.org/show_bug.cgi?id=164305 Reviewed by Timothy Hatcher. This implements a policy where, when one Target ("Thread") pauses the frontend triggers a pause in all other Targets. The intended user experience is "all threads pause" whenever the frontend shows the debugger paused UI. DebuggerManager has a few straight forward changes: - The paused state reflects if any target is paused. - The Paused Event is fired when going from !paused -> paused. This means when the first target pauses. - The Resumed Event is fired when going from paused -> !paused. This means only after all targets have resumed. - The CallFrameDidChange Event now includes the Target that updated. When a Target first pauses the frontend then immediately pauses all other Targets. This puts them into a "pausing" state (we display as Idle) and they will pause as soon as they start executing JavaScript. When a Target steps the "paused" state isn't changing. So this is just a CallFramesDidChange update. When clicking Resume we resume all targets. This is will be the normal, expected way users resume execution. Note that one of the threads may then hit a breakpoint and re-pause all threads. Sometimes when multiple threads are paused you may want to run an individual thread to completion but keep other threads paused. There is a context menu on the ThreadTreeElement to resume just that single thread. It will continue and pause for its next run loop. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Images/Thread.svg: Added. * UserInterface/Images/gtk/Thread.svg: Added. * UserInterface/Main.html: New strings and files. * UserInterface/Base/Main.js: (WebInspector.loaded): * UserInterface/Test/Test.js: (WebInspector.loaded): Place the TargetManager first since other managers may want to listen for TargetAdded / TargetRemoved events. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.get paused): This is now a computed state. (WebInspector.DebuggerManager.prototype.pause): (WebInspector.DebuggerManager.prototype.resume): Affect all targets. (WebInspector.DebuggerManager.prototype.stepOver): (WebInspector.DebuggerManager.prototype.stepInto): (WebInspector.DebuggerManager.prototype.stepOut): (WebInspector.DebuggerManager.prototype.reset): Update to use the paused computed property. (WebInspector.DebuggerManager.prototype.continueUntilNextRunLoop): Issue the new Debugger.continueUntilNextRunLoop command on a given target. (WebInspector.DebuggerManager.prototype.initializeTarget): When a new Target is created and we were already paused, then start that Worker in a paused state. (WebInspector.DebuggerManager.prototype.debuggerDidPause): Recover from bad cases where the backend informs the frontend about internal JavaScript that it shouldn't know about. Legacy backend do this but also there are corner cases we need to handle. Dispatch events appropriately now that multiple targets may be paused. (WebInspector.DebuggerManager.prototype._didResumeInternal): Dispatch events appropriately now that multiple targets may be paused. (WebInspector.DebuggerManager.prototype._targetRemoved): Remove debugger data for targets that go away to avoid leaks. * UserInterface/Models/DebuggerData.js: (WebInspector.DebuggerData): (WebInspector.DebuggerData.prototype.get paused): (WebInspector.DebuggerData.prototype.get pausing): Move some more per-Target state into DebuggerData. (WebInspector.DebuggerData.prototype.pauseIfNeeded): (WebInspector.DebuggerData.prototype.resumeIfNeeded): (WebInspector.DebuggerData.prototype.continueUntilNextRunLoop): These should only be called by DebuggerManager. They correctly update the state of the DebuggerData for this Target, and also issue the underlying command to the target. (WebInspector.DebuggerData.prototype.updateForPause): (WebInspector.DebuggerData.prototype.updateForResume): Handle a special case where continueUntilNextRunLoop triggers an invisible "pause" on the backend that we should mirror. * UserInterface/Protocol/Target.js: (WebInspector.MainTarget): (WebInspector.MainTarget.prototype.get displayName): (WebInspector.MainTarget.prototype.initialize): Better display names. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel): (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause): (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidResume): (WebInspector.DebuggerSidebarPanel.prototype._updateSingleThreadCallStacks): (WebInspector.DebuggerSidebarPanel.prototype._selectActiveCallFrameTreeElement): (WebInspector.DebuggerSidebarPanel.prototype._showSingleThreadCallStacks): (WebInspector.DebuggerSidebarPanel.prototype._showMultipleThreadCallStacks): (WebInspector.DebuggerSidebarPanel.prototype._findThreadTreeElementForTarget): (WebInspector.DebuggerSidebarPanel.prototype._targetAdded): (WebInspector.DebuggerSidebarPanel.prototype._targetRemoved): (WebInspector.DebuggerSidebarPanel.prototype._debuggerCallFramesDidChange): (WebInspector.DebuggerSidebarPanel.prototype._debuggerActiveCallFrameDidChange): The DebuggerSidebar still has a single "Call Stacks" section, but maintains two TreeOutlines and only shows one at a time. The Single Thread view shows a flat list of the call frames for the Main Target when it is the only target. The Multiple Threads view shows a list of Threads and their call frames. We always keep both up to date, because we may need to swap between them purely as Targets are added / removed. There is a bit of extra logic to ensure we select elements properly based only on the visible tree outline. * UserInterface/Views/LogContentView.js: (WebInspector.LogContentView.prototype.didAppendConsoleMessageView): When evaluating in a particular target, "runAfterPendingDispatches" must wait for all other commands in that particular target to have completed. So use the target specific version. * UserInterface/Views/NavigationSidebarPanel.js: (WebInspector.NavigationSidebarPanel.prototype._isTreeElementWithoutRepresentedObject): Gracefully handle a few more TreeElements without a represented object. * UserInterface/Views/IdleTreeElement.css: Added. (.details-section.call-stack .idle .icon): * UserInterface/Views/IdleTreeElement.js: Added. (WebInspector.IdleTreeElement): Very basic tree element to encapsulate an Idle call frame with an empty represented object. * UserInterface/Views/ThreadTreeElement.css: Added. (.details-section.call-stack .thread .icon): * UserInterface/Views/ThreadTreeElement.js: Added. (WebInspector.ThreadTreeElement): (WebInspector.ThreadTreeElement.prototype.get target): (WebInspector.ThreadTreeElement.prototype.refresh): (WebInspector.ThreadTreeElement.prototype.onattach): (WebInspector.ThreadTreeElement.prototype.oncontextmenu): ThreadTreeElement has no represented object, but makes it easy to refresh a list of CallFrameTreeElements for a given target. 2016-11-14 Timothy Hatcher Web Inspector: Disable Warning Filter in Debugger Tab By Default https://bugs.webkit.org/show_bug.cgi?id=164723 rdar://problem/29251780 Reviewed by Joseph Pecoraro. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel): Made "debugger-show-resources-with-issues-only" false by default. 2016-11-14 Nikita Vasilyev Web Inspector: Settings tab should look more like a native macOS view https://bugs.webkit.org/show_bug.cgi?id=164708 Reviewed by Timothy Hatcher. * UserInterface/Views/SettingsTabContentView.css: (.content-view.settings): (.content-view.settings > .header): (.content-view.settings > .setting-container): Match macOS Sierra default font size for settings view. (.content-view.settings > .setting-container > .setting-name): (.content-view.settings > .setting-container > .setting-value-controller): (.content-view.settings > .setting-container > .setting-value-controller input): (.content-view.settings > .setting-container > .setting-value-controller input[type="checkbox"]): Make checkbox larger. (.content-view.settings > .setting-container > .setting-value-controller select): (.content-view.settings > .setting-container > .setting-value-controller input[type="number"]): Decrease the width of the number fields to make them just wide enough to fit 2 digit numbers. 2016-11-12 Joseph Pecoraro Web Inspector: Type Profiler and Code Coverage Profiler should work in Workers https://bugs.webkit.org/show_bug.cgi?id=164682 Reviewed by Darin Adler. * UserInterface/Controllers/BasicBlockAnnotator.js: * UserInterface/Models/ScriptSyntaxTree.js: (WebInspector.ScriptSyntaxTree.prototype.updateTypes): Use the target associated with the Script. * UserInterface/Protocol/Target.js: (WebInspector.WorkerTarget.prototype.initialize): When initializing a Worker Target, match the existing state of the Page for these profilers. * UserInterface/Views/ScopeChainDetailsSidebarPanel.js: * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptTypeInformation): (WebInspector.SourceCodeTextEditor.prototype.willDismissPopover): Use the correct target for this Script / Resource. (WebInspector.SourceCodeTextEditor.prototype._setTypeTokenAnnotatorEnabledState): (WebInspector.SourceCodeTextEditor.prototype.set _basicBlockAnnotatorEnabled): Enable / disable for all targets when toggling profilers. 2016-11-11 Anthony Ricaud Web Inspector: Whitespace in Editor should be less visible than regular content https://bugs.webkit.org/show_bug.cgi?id=164660 Reviewed by Matt Baker. * UserInterface/Views/CodeMirrorOverrides.css: (.show-whitespace-characters .CodeMirror .cm-whitespace::before): 2016-11-11 Nikita Vasilyev Web Inspector: Call RuntimeAgent.disableControlFlowProfiler when Code Coverage Profiler is turned off https://bugs.webkit.org/show_bug.cgi?id=163407 Reviewed by Timothy Hatcher. Turning Type Profiler off by clicking [T] icon now disables its backend by calling RuntimeAgent.disableTypeProfiler(). * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype._setTypeTokenAnnotatorEnabledState): 2016-11-11 Nikita Vasilyev Web Inspector: Settings tab: make the header smaller to fit more content https://bugs.webkit.org/show_bug.cgi?id=164613 Reviewed by Timothy Hatcher. * UserInterface/Views/SettingsTabContentView.css: (.content-view.settings > .header): Use hv units for margin. 1vh = 1% of viewport height. When Web Inspector window is taller, the margin is larger. (.content-view.settings > .setting-container): Convert padding to margin to make spacing between the header and the first section better. 2016-11-10 Nikita Vasilyev Web Inspector: Call RuntimeAgent.disableControlFlowProfiler when Code Coverage Profiler is turned off https://bugs.webkit.org/show_bug.cgi?id=163407 Reviewed by Joseph Pecoraro. Turning Code Coverage off by clicking [C] icon now disables its backend by calling RuntimeAgent.disableControlFlowProfiler(). * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.set _basicBlockAnnotatorEnabled): 2016-11-10 Aaron Chu Web Inspector: AXI: clarify button roles (e.g. toggle or popup button) https://bugs.webkit.org/show_bug.cgi?id=130726 Reviewed by Brian Burg. Updated Inspector to show the button type using the new mapping information. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Models/DOMNode.js: (WebInspector.DOMNode.prototype.accessibilityProperties.accessibilityPropertiesCallback): (WebInspector.DOMNode.prototype.accessibilityProperties): * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility.accessibilityPropertiesCallback): (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility): 2016-11-09 Joseph Pecoraro Web Inspector: DebuggerManager.Event.Resumed introduces test flakiness https://bugs.webkit.org/show_bug.cgi?id=161951 Reviewed by Brian Burg. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.debuggerDidResume): Now, Debugger.resumed events really mean the debugger resumed, so act immediately instead of guessing. We must still guess in legacy backends. * UserInterface/Test/Test.js: When the inspector frontend encounters an issue, log it. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel.prototype._debuggerDidPause): (WebInspector.DebuggerSidebarPanel.prototype._debuggerActiveCallFrameDidChange): Always enable the step out button. I don't think it makes sense to disable it sometimes, and if there are issues with this we should solve the issues instead of hiding them. 2016-11-09 Joseph Pecoraro Web Inspector: Associate Worker Resources with the Worker and not the Page https://bugs.webkit.org/show_bug.cgi?id=164342 Reviewed by Timothy Hatcher. A Target may have its own list of Resource. For example, Workers may request any resources via XHR/Fetch. So we associate a ResourceCollection with a Target, and ensure we show them in Web Inspector as you would expect. At this point, Target starts acting like Frame. Target has a resourceCollection and extraScriptsCollection just like Frame. Target has events for ResourceAdded just like Frame. Even though Resource loads are happening in Workers, the Network data still comes from the Page's Network agent. The added "targetId" data with the Resource will let us associate a Resoure with a Target. When opening inspector after a page has loaded, the frontend loads Resources via the Page.getResourceTree path. In this case, the frontend may be informed of Resources for a Target that it does not know about yet. In these cases, it sets them aside as Orphaned resources for a target. Later, when that Target is created, it will adopt its Orphaned resources. Places that used to listen to just Frame.Event.ResourceWasAdded should now also listen for Target.Event.ResourceAdded to ensure it sees the resources associated with non-page targets. * UserInterface/Protocol/Target.js: (WebInspector.Target): (WebInspector.Target.prototype.get identifier): (WebInspector.Target.prototype.get resourceCollection): (WebInspector.Target.prototype.get extraScriptCollection): (WebInspector.Target.prototype.addResource): (WebInspector.Target.prototype.adoptResource): (WebInspector.Target.prototype.addScript): Give Target resource collections. (WebInspector.MainTarget): (WebInspector.MainTarget.prototype.get mainResource): Pass through to the FrameResourceManager for the MainTarget. (WebInspector.WorkerTarget): (WebInspector.WorkerTarget.prototype.initialize): Adopt orphaned resources on creation. * UserInterface/Models/Resource.js: (WebInspector.Resource): (WebInspector.Resource.prototype.get target): (WebInspector.Resource.prototype.get type): Resource now has a Target. During creation, if there is a targetId then we must produce a Target or null (orphaned). (WebInspector.Resource.prototype.associateWithScript): When associating a Resource with a Script, we can use this opportunity to convert from an XML / Other type to Script. * UserInterface/Models/Script.js: (WebInspector.Script.prototype._resolveResource): When associating Scripts with a resource we must associate resources from within the proper Target. If it is the Main target we still use the FrameResourceManager which keep searches across all Frames. * UserInterface/Protocol/NetworkObserver.js: (WebInspector.NetworkObserver.prototype.requestWillBeSent): * UserInterface/Controllers/FrameResourceManager.js: (WebInspector.FrameResourceManager.prototype.initialize): (WebInspector.FrameResourceManager.prototype.frameDidNavigate): (WebInspector.FrameResourceManager.prototype.resourceRequestWillBeSent): (WebInspector.FrameResourceManager.prototype.resourceRequestWasServedFromMemoryCache): (WebInspector.FrameResourceManager.prototype.resourceRequestDidReceiveResponse): (WebInspector.FrameResourceManager.prototype.adoptOrphanedResourcesForTarget): (WebInspector.FrameResourceManager.prototype._addNewResourceToFrameOrTarget): (WebInspector.FrameResourceManager.prototype._addResourceToTarget): (WebInspector.FrameResourceManager.prototype._createResource): (WebInspector.FrameResourceManager.prototype._addFrameTreeFromFrameResourceTreePayload): (WebInspector.FrameResourceManager.prototype._addOrphanedResource): (WebInspector.FrameResourceManager.prototype._mainFrameDidChange): (WebInspector.FrameResourceManager.prototype._addNewResourceToFrame): Deleted. When creating Resources from Network events we may now have a targetId. Once created a Resource must be associated with a Frame, Target, or orphaned. * UserInterface/Main.html: * UserInterface/Views/TargetTreeElement.js: Removed. * UserInterface/Views/WorkerTreeElement.js: Added. (WebInspector.WorkerTreeElement): (WebInspector.WorkerTreeElement.prototype.get target): (WebInspector.WorkerTreeElement.prototype.onexpand): (WebInspector.WorkerTreeElement.prototype.oncollapse): (WebInspector.WorkerTreeElement.prototype.onpopulate): (WebInspector.WorkerTreeElement.prototype.updateSourceMapResources): (WebInspector.WorkerTreeElement.prototype.onattach): (WebInspector.WorkerTreeElement.prototype.compareChildTreeElements): (WebInspector.WorkerTreeElement.prototype._handleContextMenuEvent): (WebInspector.WorkerTreeElement.prototype._scriptAdded): (WebInspector.WorkerTreeElement.prototype._resourceAdded): Convert TargetTreeElement to WorkerTreeElement as that is clearer. Behave like FrameTreeElement and populate resources on creation, handle SourceMapResource, etc. * UserInterface/Views/FolderizedTreeElement.js: (WebInspector.FolderizedTreeElement.prototype.registerFolderizeSettings): (WebInspector.FolderizedTreeElement.prototype._compareTreeElementsByMainTitle): (WebInspector.FolderizedTreeElement.prototype._parentTreeElementForRepresentedObject): If the display name for a folder is `null` then there is no folder, and place such child tree elements at the top level. This will be the case for a Worker's Script's, which we choose not to folderize. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.scriptDidParse): * UserInterface/Controllers/TargetManager.js: (WebInspector.TargetManager.prototype.targetForIdentifier): * UserInterface/Models/DefaultDashboard.js: (WebInspector.DefaultDashboard): * UserInterface/Controllers/TimelineManager.js: (WebInspector.TimelineManager): * UserInterface/Controllers/WorkerManager.js: (WebInspector.WorkerManager.prototype.workerCreated): * UserInterface/Views/OpenResourceDialog.js: (WebInspector.OpenResourceDialog.prototype.didDismissDialog): (WebInspector.OpenResourceDialog.prototype.didPresentDialog): (WebInspector.OpenResourceDialog.prototype._addScriptsForTarget): Deleted. (WebInspector.OpenResourceDialog.prototype._addResourcesForTarget): Added. Ensure those that listen for Frame.Event.ResourceWasAdded now also listen for Target.Event.ResourceAdded. * UserInterface/Views/ContextMenuUtilities.js: (WebInspector.appendContextMenuItemsForSourceCode): (WebInspector.appendContextMenuItemsForResource): Deleted. * UserInterface/Views/ResourceTimelineDataGridNode.js: (WebInspector.ResourceTimelineDataGridNode.prototype.appendContextMenuItems): * UserInterface/Views/ResourceTreeElement.js: (WebInspector.ResourceTreeElement.prototype._updateTitles): (WebInspector.ResourceTreeElement.prototype._handleContextMenuEvent): Generalize ContextMenu helper to SourceCode so it can be used on a Script or Resource. * UserInterface/Views/ResourceDetailsSidebarPanel.js: (WebInspector.ResourceDetailsSidebarPanel.prototype.inspect): When looking at a WorkerTarget's mainResource (Script) show the Resource Details sidebar for its Resource. * UserInterface/Views/ResourceSidebarPanel.js: (WebInspector.ResourceSidebarPanel): (WebInspector.ResourceSidebarPanel.prototype._scriptWasAdded): (WebInspector.ResourceSidebarPanel.prototype._scriptsCleared): (WebInspector.ResourceSidebarPanel.prototype._addTargetWithMainResource): (WebInspector.ResourceSidebarPanel.prototype._targetRemoved): (WebInspector.ResourceSidebarPanel.prototype._addScriptForNonMainTarget): Deleted. Simplify ResourceSidebarPanel to only handle adding WorkerTreeElements, which will do the rest of the work for their Resources/Scripts. * UserInterface/Views/SourceCodeTreeElement.js: (WebInspector.SourceCodeTreeElement.prototype.descendantResourceTreeElementTypeDidChange): When we were changing the type of a resource, it would remove and re-insert. This would collapse the parent if it was the only child in removal, and not expand the parent when re-inserting. This ensures we re-expand. 2016-11-09 Nikita Vasilyev Web Inspector: Settings tab sections overlap each other in docked Inspector window https://bugs.webkit.org/show_bug.cgi?id=164564 Reviewed by Joseph Pecoraro. * UserInterface/Views/SettingsTabContentView.css: (.content-view.settings): Make settings sections non-shrinkable and make the content view vertically scrollable. (.content-view.settings > .setting-container): Set vertical padding that looks good for non-shrinkable sections. 2016-11-09 Nikita Vasilyev Web Inspector: Settings tab: Checkbox labels should be clickable https://bugs.webkit.org/show_bug.cgi?id=164470 Reviewed by Matt Baker. * UserInterface/Views/SettingsTabContentView.js: (WebInspector.SettingsTabContentView.prototype.initialLayout): Add a label element to make checkboxes clickable. 2016-11-09 Devin Rousso Web Inspector: Allow FolderTreeElement to display content when selected https://bugs.webkit.org/show_bug.cgi?id=164407 Reviewed by Timothy Hatcher. * UserInterface/Main.html: Add CollectionContentView and TitleView. * UserInterface/Base/Main.js: * UserInterface/Views/ContentView.js: (WebInspector.ContentView.createFromRepresentedObject): (WebInspector.ContentView.isViewable): Add support for Collection as the representedObject of a content view. * UserInterface/Views/CollectionContentView.css: Added. (.content-view.collection): (.content-view.collection > .content-view): * UserInterface/Views/CollectionContentView.js: Added. (WebInspector.CollectionContentView): (WebInspector.CollectionContentView.prototype.initialLayout): (WebInspector.CollectionContentView.prototype._addContentViewForItem): (WebInspector.CollectionContentView.prototype._removeContentViewForItem): (WebInspector.CollectionContentView.prototype._handleItemAdded): (WebInspector.CollectionContentView.prototype._handleItemRemoved): (WebInspector.CollectionContentView.prototype._handleContentError): Takes in a Collection when constructed, and attempts to display a sub-ContentView for each item in the collection if the type of the collection is viewable en masse. Currently, this is only supported for WebInspector.Resource.Type.Image collections. * UserInterface/Views/ResourceContentView.js: (WebInspector.ResourceContentView.prototype._contentError): Dispatch an event whenever the content fails to load. * UserInterface/Views/ResourceSidebarPanel.js: (WebInspector.ResourceSidebarPanel.prototype._treeSelectionDidChange): * UserInterface/Views/ResourcesTabContentView.js: (WebInspector.ResourcesTabContentView.prototype.canShowRepresentedObject): Allow FolderTreeElements to be selected. * UserInterface/Views/TitleView.css: Added. (.title-view): * UserInterface/Views/TitleView.js: Added. (WebInspector.TitleView): Basic view that displays the given text in the center of the viewable area. 2016-11-03 Nikita Vasilyev Web Inspector: Stack overflow when searching a timeline recording for JS function names https://bugs.webkit.org/show_bug.cgi?id=161784 Reviewed by Timothy Hatcher. _populate method of ProfileNodeDataGridNode and ProfileDataGridNode traverses all children of a given node. makeVisible function of DataGrid#_applyFiltersToNode traverses all its parents to expand them. This creates an infinite recursion. Remove "populate" event before appending child nodes to prevent it. * UserInterface/Views/ProfileDataGridNode.js: (WebInspector.ProfileDataGridNode.prototype._populate): (WebInspector.ProfileDataGridNode): * UserInterface/Views/ProfileNodeDataGridNode.js: (WebInspector.ProfileNodeDataGridNode.prototype._populate): (WebInspector.ProfileNodeDataGridNode): 2016-11-03 Devin Rousso Web Inspector: Modify FolderTreeElement to have a Collection as a its represented object https://bugs.webkit.org/show_bug.cgi?id=164349 Reviewed by Matt Baker. * UserInterface/Views/FolderTreeElement.js: (WebInspector.FolderTreeElement): Now accepts a representedObject parameter, which must be a WebInspector.Collection. * UserInterface/Views/FolderizedTreeElement.js: (WebInspector.FolderizedTreeElement.prototype.registerFolderizeSettings): (WebInspector.FolderizedTreeElement.prototype.updateParentStatus): (WebInspector.FolderizedTreeElement.prototype._parentTreeElementForRepresentedObject): (WebInspector.FolderizedTreeElement.prototype._settingsForRepresentedObject): (WebInspector.FolderizedTreeElement.prototype._shouldGroupIntoFolders): (WebInspector.FolderizedTreeElement): Rework the logic for creating WebInspector.FolderTreeElement so that items for the representedObject parameter may be passed in via registerFolderizeSettings. * UserInterface/Views/FrameTreeElement.js: (WebInspector.FrameTreeElement): (WebInspector.FrameTreeElement.): Deleted. (WebInspector.FrameTreeElement.makeChildCountCallback): Deleted. Rework logic for calling registerFolderizeSettings to support the representedObject parameter. Also changed calls to WebInspector.Frame to support the WebInspector.Collection class. * UserInterface/Views/ResourceSidebarPanel.js: (WebInspector.ResourceSidebarPanel.prototype.treeElementForRepresentedObject): (WebInspector.ResourceSidebarPanel.prototype._scriptWasAdded): (WebInspector.ResourceSidebarPanel.prototype._scriptsCleared): Create WebInspector.Collection instances of Script model objects for additional folders created by the Resources sidebar: - Anonymous Scripts - Extension Scripts - Extra Scripts 2016-11-02 Joseph Pecoraro Web Inspector: Include DebuggerAgent in Workers - see, pause, and step through scripts https://bugs.webkit.org/show_bug.cgi?id=164136 Reviewed by Brian Burg. By implementing DebuggerAgent, Workers will inform the frontend about Scripts that evaluate in the Worker's VM and the Worker VM can pause and send the pausing CallFrames to the frontend. This means that WebInspector.Script and WebInspector.CallFrame will need to be made target aware. This also means that each Target will have its own set of debugger data, such as the list of scripts and pause data like the pause reason / call frames. Previously all this data was managed by DebuggerManager. With this change we split that data out of DebuggerManager to be per-target DebuggerData. DebuggerManager keeps `activeCallFrame` but the list of scripts and pause data have moved into `DebuggerData` which is per-target, accessed through DebuggerManager's new dataForTarget(target) method. Finally we make a few changes to the UserInterface to make Workers and their scripts, appear grouped together. The Resources sidebar previously had a single top level item for the Main Frame, which has all its resources as its children (potentially grouped into folders). With this change, each Worker gets its own top level item as well, and the Worker's subresources (imported scripts) become its children. We also now associate a single mainResource with Targets. In the case of Workers, we assume and assert that this is a Script. If this were to ever change we would need to adjust the assumptions. * UserInterface/Main.html: * UserInterface/Test.html: New files. * UserInterface/Base/Main.js: * UserInterface/Test/Test.js: Add WebInspector.assumingMainTarget to fill in all the places where we assume the main target right now, but would need to handle non-main targets as other agents are implemented in workers. For example profile data that assumes the main target right now could be worker targets when we implement ScriptProfiler / Heap agents. * UserInterface/Protocol/Connection.js: (InspectorBackend.WorkerConnection): * UserInterface/Protocol/Target.js: (WebInspector.Target): (WebInspector.Target.prototype.get DebuggerAgent): (WebInspector.Target.prototype.get mainResource): (WebInspector.Target.prototype.set mainResource): (WebInspector.WorkerTarget.prototype.initialize): (WebInspector.WorkerTarget): Include DebuggerAgent in Targets. Include a mainResource for Worker Targets. * UserInterface/Protocol/DebuggerObserver.js: (WebInspector.DebuggerObserver.prototype.scriptParsed): (WebInspector.DebuggerObserver.prototype.breakpointResolved): (WebInspector.DebuggerObserver.prototype.paused): (WebInspector.DebuggerObserver.prototype.resumed): Pass the target on to managers when necessary. * UserInterface/Models/DebuggerData.js: Added. (WebInspector.DebuggerData): (WebInspector.DebuggerData.prototype.get target): (WebInspector.DebuggerData.prototype.get callFrames): (WebInspector.DebuggerData.prototype.get pauseReason): (WebInspector.DebuggerData.prototype.get pauseData): (WebInspector.DebuggerData.prototype.get scripts): (WebInspector.DebuggerData.prototype.scriptForIdentifier): (WebInspector.DebuggerData.prototype.scriptsForURL): (WebInspector.DebuggerData.prototype.reset): (WebInspector.DebuggerData.prototype.addScript): (WebInspector.DebuggerData.prototype.pause): (WebInspector.DebuggerData.prototype.unpause): Extract per-target data from DebuggerManager. This includes the list of scripts evaluated in a Target, and any pause data for this target such as the pause reason and call frames. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.dataForTarget): (WebInspector.DebuggerManager.prototype.get pauseReason): Deleted. (WebInspector.DebuggerManager.prototype.get pauseData): Deleted. (WebInspector.DebuggerManager.prototype.get callFrames): Deleted. (WebInspector.DebuggerManager.prototype.reset): New way to access per-target debugger data. (WebInspector.DebuggerManager.prototype.initializeTarget): When a new Target is created, synchronize frontend state with the target. Things like the list of breakpoints and global breakpoint states. (WebInspector.DebuggerManager.prototype.scriptForIdentifier): (WebInspector.DebuggerManager.prototype.scriptsForURL): Convenience accessors for scripts must now provide a Target. (WebInspector.DebuggerManager.prototype.get knownNonResourceScripts): This is a convenience accessors for a list of all scripts across all targets so this handles getting the list across all targets. (WebInspector.DebuggerManager.prototype.pause): (WebInspector.DebuggerManager.prototype.resume): (WebInspector.DebuggerManager.prototype.stepOver): (WebInspector.DebuggerManager.prototype.stepInto): (WebInspector.DebuggerManager.prototype.stepOut): (WebInspector.DebuggerManager.prototype.continueToLocation): Stepping commands affect the current target with the active call frame. Eventually we will change Pause and Resume behavior to affect all targets. (WebInspector.DebuggerManager.prototype.addBreakpoint): (WebInspector.DebuggerManager.prototype.breakpointResolved): (WebInspector.DebuggerManager.prototype._setBreakpoint.didSetBreakpoint): (WebInspector.DebuggerManager.prototype._setBreakpoint): (WebInspector.DebuggerManager.prototype._removeBreakpoint): Breakpoints should be set on all targets, but we need a way to set them on a specific target, when initializing an individual target when we want to inform that single target of all of the breakpoints. (WebInspector.DebuggerManager.prototype._breakpointDisabledStateDidChange): (WebInspector.DebuggerManager.prototype._updateBreakOnExceptionsState): Changing global breakpoint state should inform all targets. (WebInspector.DebuggerManager.prototype.scriptDidParse): Associate Scripts with a Target. Identify the main resource of a Worker Target and set it as soon as we can. (WebInspector.DebuggerManager.prototype.debuggerDidPause): (WebInspector.DebuggerManager.prototype.debuggerDidResume): (WebInspector.DebuggerManager.prototype._sourceCodeLocationFromPayload): (WebInspector.DebuggerManager.prototype._scopeChainFromPayload): (WebInspector.DebuggerManager.prototype._scopeChainNodeFromPayload): (WebInspector.DebuggerManager.prototype._mainResourceDidChange): (WebInspector.DebuggerManager.prototype._didResumeInternal): Pausing and resuming now happens per-target, so associate created model objects (CallFrame, ScopeChain objects) and any other necessary data with the target. * UserInterface/Models/Breakpoint.js: (WebInspector.Breakpoint): (WebInspector.Breakpoint.prototype.get target): (WebInspector.Breakpoint.prototype.get info): * UserInterface/Models/CallFrame.js: (WebInspector.CallFrame): (WebInspector.CallFrame.prototype.get target): (WebInspector.CallFrame.fromDebuggerPayload): (WebInspector.CallFrame.fromPayload): * UserInterface/Models/ConsoleMessage.js: (WebInspector.ConsoleMessage): * UserInterface/Models/Script.js: (WebInspector.Script): (WebInspector.Script.prototype.get target): (WebInspector.Script.prototype.isMainResource): (WebInspector.Script.prototype.requestContentFromBackend): (WebInspector.Script.prototype._resolveResource): * UserInterface/Models/StackTrace.js: (WebInspector.StackTrace.fromPayload): (WebInspector.StackTrace.fromString): * UserInterface/Models/ProbeManager.js: (WebInspector.ProbeManager.prototype.didSampleProbe): * UserInterface/Models/Probe.js: (WebInspector.ProbeSample): * UserInterface/Views/ConsoleMessageView.js: (WebInspector.ConsoleMessageView.prototype._appendLocationLink): (WebInspector.ConsoleMessageView.prototype._formatParameterAsString): Associate model objects with a specific target where necessary. * UserInterface/Views/ObjectTreeBaseTreeElement.js: (WebInspector.ObjectTreeBaseTreeElement.prototype._appendMenusItemsForObject): * UserInterface/Controllers/RuntimeManager.js: (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow): * UserInterface/Protocol/RemoteObject.js: (WebInspector.RemoteObject.prototype.findFunctionSourceCodeLocation): Use target specific DebuggerAgent where necessary. * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js: * UserInterface/Controllers/TimelineManager.js: (WebInspector.TimelineManager.prototype._callFramesFromPayload): * UserInterface/Models/ScriptTimelineRecord.js: (WebInspector.ScriptTimelineRecord.prototype._initializeProfileFromPayload.profileNodeFromPayload): * UserInterface/Views/EventListenerSectionGroup.js: (WebInspector.EventListenerSectionGroup.prototype._functionTextOrLink): (WebInspector.EventListenerSectionGroup): * UserInterface/Views/HeapSnapshotInstanceDataGridNode.js: (WebInspector.HeapSnapshotInstanceDataGridNode.logHeapSnapshotNode.node.shortestGCRootPath.): (WebInspector.HeapSnapshotInstanceDataGridNode.logHeapSnapshotNode): (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populateWindowPreview): (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._populatePreview): (WebInspector.HeapSnapshotInstanceDataGridNode.prototype._mouseoverHandler.appendPathRow): * UserInterface/Views/ProfileDataGridNode.js: (WebInspector.ProfileDataGridNode.prototype.iconClassName): (WebInspector.ProfileDataGridNode.prototype.filterableDataForColumn): (WebInspector.ProfileDataGridNode.prototype._displayContent): Use assumed main target and audit these when the Worker gets more Agents. * UserInterface/Controllers/FrameResourceManager.js: (WebInspector.FrameResourceManager.prototype._initiatorSourceCodeLocationFromPayload): This will always be the main target because only the main target has access to the DOM. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.get target): (WebInspector.SourceCodeTextEditor.prototype.customPerformSearch): (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu): (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression.populate): (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedJavaScriptExpression): (WebInspector.SourceCodeTextEditor.prototype._showPopoverForFunction.didGetDetails): (WebInspector.SourceCodeTextEditor.prototype._showPopoverForFunction): Update target specific actions to use the proper target's agents. * UserInterface/Views/TargetTreeElement.js: Added. (WebInspector.TargetTreeElement): (WebInspector.TargetTreeElement.prototype.get target): (WebInspector.TargetTreeElement.prototype.onexpand): (WebInspector.TargetTreeElement.prototype.oncollapse): Add a new tree element for a Target. We currently assume that the main resource for a Target will be a Script right now, as is the case for Web Workers. This simply remembers its expanded or collapsed state and has a better icon. * UserInterface/Views/ResourceIcons.css: (body:matches(.mac-platform, .windows-platform) .script.worker-icon .icon): (body:matches(.mac-platform, .windows-platform) .large .script.worker-icon .icon): * UserInterface/Images/WorkerScript.png: Renamed from Source/WebInspectorUI/UserInterface/Images/WorkerDocument.png. * UserInterface/Images/WorkerScript@2x.png: Renamed from Source/WebInspectorUI/UserInterface/Images/WorkerDocument@2x.png. * UserInterface/Images/WorkerScriptLarge.png: Renamed from Source/WebInspectorUI/UserInterface/Images/WorkerDocumentLarge.png. * UserInterface/Images/WorkerScriptLarge@2x.png: Renamed from Source/WebInspectorUI/UserInterface/Images/WorkerDocumentLarge@2x.png. Improve icon for a Worker's main resource script. * UserInterface/Views/ResourceSidebarPanel.js: (WebInspector.ResourceSidebarPanel): (WebInspector.ResourceSidebarPanel.prototype._scriptWasAdded): (WebInspector.ResourceSidebarPanel.prototype._scriptsCleared): (WebInspector.ResourceSidebarPanel.prototype._addScriptForNonMainTarget): (WebInspector.ResourceSidebarPanel.prototype._addTargetWithMainResource): (WebInspector.ResourceSidebarPanel.prototype._targetRemoved): * UserInterface/Views/SearchSidebarPanel.js: (WebInspector.SearchSidebarPanel.prototype.performSearch.searchScripts): (WebInspector.SearchSidebarPanel.prototype._searchTreeElementForScript): * UserInterface/Views/OpenResourceDialog.js: (WebInspector.OpenResourceDialog.prototype._populateResourceTreeOutline.createTreeElement): (WebInspector.OpenResourceDialog.prototype._populateResourceTreeOutline): (WebInspector.OpenResourceDialog.prototype.didDismissDialog): (WebInspector.OpenResourceDialog.prototype.didPresentDialog): (WebInspector.OpenResourceDialog.prototype._addResourcesForFrame): (WebInspector.OpenResourceDialog.prototype._addScriptsForTarget): (WebInspector.OpenResourceDialog.prototype._scriptAdded): (WebInspector.OpenResourceDialog): * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel.prototype._addTreeElementForSourceCodeToTreeOutline): (WebInspector.DebuggerSidebarPanel.prototype._debuggerCallFramesDidChange): (WebInspector.DebuggerSidebarPanel.prototype._debuggerActiveCallFrameDidChange): (WebInspector.DebuggerSidebarPanel.prototype._updatePauseReasonSection): Include scripts from non-main targets in sidebars. 2016-11-01 Devin Rousso Web Inspector: Creating a new pseudo-selector in the Styles sidebar doesn't work on first attempt https://bugs.webkit.org/show_bug.cgi?id=164092 Reviewed by Timothy Hatcher. * UserInterface/Views/CSSStyleDeclarationSection.css: (.style-declaration-section:not(.invalid-selector).rule-disabled > .header > .icon): (.style-declaration-section.invalid-selector > .header > .icon): (.style-declaration-section.invalid-selector > .header > .selector,): (.style-declaration-section.rule-disabled > .header > .icon): Deleted. * UserInterface/Views/CSSStyleDeclarationSection.js: (WebInspector.CSSStyleDeclarationSection): (WebInspector.CSSStyleDeclarationSection.prototype.refresh): (WebInspector.CSSStyleDeclarationSection.prototype._handleIconElementClicked): (WebInspector.CSSStyleDeclarationSection.prototype._updateSelectorIcon): Added. Re-add logic removed by https://webkit.org/b/159734 for handling invalid selectors. Instead of just refreshing the section whenever the represented CSSRule changes selectors, we only need to refresh if the selector no longer applies to the current element. (WebInspector.CSSStyleDeclarationSection.prototype._handleMouseMove): Added. Fix another issue discovered while adding the invalid selector warnings, where the title attribute of each individual selector was no longer visible. To fix this, whenever the user moves their mouse over the selector input, the position is compared to each selector to find the first one that matches, whose title is then applied to the input element. 2016-11-01 Joseph Pecoraro Web Inspector: Improve debugger highlight in some exception cases https://bugs.webkit.org/show_bug.cgi?id=164300 Reviewed by Matt Baker. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange): When walking up AST nodes and reach a throw statement, use that. 2016-11-01 Joseph Pecoraro Web Inspector: Cleanup stale code in NetworkSidebarPanel https://bugs.webkit.org/show_bug.cgi?id=164295 Reviewed by Matt Baker. * UserInterface/Views/NetworkSidebarPanel.js: (WebInspector.NetworkSidebarPanel.prototype.closed): Deleted. This doesn't appear to be needed since NetworkSidebarPanel never registered any event listeners. 2016-11-01 Devin Rousso REGRESSION (r191419): Web Inspector: Autocomplete is broken https://bugs.webkit.org/show_bug.cgi?id=150493 Reviewed by Timothy Hatcher. Fixed CodeMirror.undo() logic rolled out by r191539 Added calls to CodeMirror.changeGeneration(true) which tells the history stack to "close" the current event, preventing it from being consolidated with new changes. If the user typed fast enough, non-completion changes (like adding ":" in CSS) would get merged with completion changes, causing calls to CodeMirror.undo() to undo those changes as well. To prevent this, a boolean variable is set to true whenever a completion "activity" is in progress, defined by a sequence of completion related events. When this "activity" first starts, call CodeMirror.changeGeneration(true) to freeze the current history. See original bug for more information . * UserInterface/Controllers/CodeMirrorCompletionController.js: (WebInspector.CodeMirrorCompletionController): (WebInspector.CodeMirrorCompletionController.prototype.updateCompletions): (WebInspector.CodeMirrorCompletionController.prototype.isCompletionChange): (WebInspector.CodeMirrorCompletionController.prototype.hideCompletions): (WebInspector.CodeMirrorCompletionController.prototype.close): (WebInspector.CodeMirrorCompletionController.prototype.completionSuggestionsSelectedCompletion): (WebInspector.CodeMirrorCompletionController.prototype._applyCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._applyCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._commitCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._commitCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint.update): (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint): (WebInspector.CodeMirrorCompletionController.prototype._completeAtCurrentPosition): (WebInspector.CodeMirrorCompletionController.prototype._handleBeforeChange): (WebInspector.CodeMirrorCompletionController.prototype._createCompletionHintMarker): Deleted. (WebInspector.CodeMirrorCompletionController.prototype._removeLastChangeFromHistory): Deleted. (WebInspector.CodeMirrorCompletionController.prototype._removeCompletionHint.clearMarker): Deleted. 2016-11-01 Devin Rousso Web Inspector: Replace sublists inside DOM-related model objects with WI.Collection https://bugs.webkit.org/show_bug.cgi?id=164098 Reviewed by Timothy Hatcher. * UserInterface/Models/DOMTree.js: * UserInterface/Models/Frame.js: Add support for WebInspector.Collection. * UserInterface/Models/Script.js: (WebInspector.Script): * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel.prototype._addResourcesRecursivelyForFrame): * UserInterface/Views/FrameTreeElement.js: (WebInspector.FrameTreeElement): (WebInspector.FrameTreeElement.prototype.onpopulate): * UserInterface/Views/OpenResourceDialog.js: (WebInspector.OpenResourceDialog.prototype._addResourcesForFrame): Use new functions defined by changing to WebInspector.Collection. 2016-11-01 Devin Rousso Web Inspector: Fix double remove of ResourceCollection if type changes https://bugs.webkit.org/show_bug.cgi?id=164268 Reviewed by Joseph Pecoraro. * UserInterface/Models/ResourceCollection.js: (WebInspector.ResourceCollection.prototype._resourceTypeDidChange): Change logic so that a non-typed collection will not try to remove a resource that has changed types from the sub-collection of its old type, since the sub-collection itself will handle the removal inside its own event listener for the type change. 2016-11-01 Ryosuke Niwa Web Inspector: Add the support for custom elements https://bugs.webkit.org/show_bug.cgi?id=164266 Reviewed by Joseph Pecoraro. Show the custom element state in DOM node's details pane: - "Element" for all builtin elements. - "Element (Custom)" for any upgraded custom elements. - "Element (Waiting to be upgraded)" for any element waiting to be upgraded. - "Element (Failed to upgrade)" for any custom element that failed during construction or an upgrade. And add "Jump to Definition" to the context menu of an node to find the custom element's definition. * Localizations/en.lproj/localizedStrings.js: Added localized strings. * UserInterface/Controllers/DOMTreeManager.js: (WebInspector.DOMTreeManager.prototype._customElementStateChanged): Added. Update the state and fire WebInspector.DOMTreeManager.Event.CustomElementStateChanged to update the node's details pane. * UserInterface/Models/DOMNode.js: (WebInspector.DOMNode): Set the custom element state or default to "builtin". Use null when the node is not an element. (WebInspector.DOMNode.prototype.isCustomElement): Added. Returns true if this is a successfully constructed or upgraded custom element. (WebInspector.DOMNode.prototype.customElementState): Added. (WebInspector.DOMNode.CustomElementState): Added. * UserInterface/Protocol/DOMObserver.js: (WebInspector.DOMObserver.prototype.customElementStateChanged): Added. * UserInterface/Protocol/RemoteObject.js: (WebInspector.RemoteObject.prototype.getProperty): Added. Retrieves the property of a given name from the remote backend. * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: (WebInspector.DOMNodeDetailsSidebarPanel): Call _customElementStateChanged when the custom element state changes by listening to WebInspector.DOMTreeManager.Event.CustomElementStateChanged. (WebInspector.DOMNodeDetailsSidebarPanel.prototype.layout): (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshIdentity): Extracted from layout. (WebInspector.DOMNodeDetailsSidebarPanel.prototype._customElementStateChanged): Added. (WebInspector.DOMNodeDetailsSidebarPanel.prototype._nodeTypeDisplayName): Include the custom element state when it's not a builtin element (_customElementState returns null in that case). (WebInspector.DOMNodeDetailsSidebarPanel.prototype._customElementState): Get the localized string for each custom element state. * UserInterface/Views/DOMTreeElement.js: (WebInspector.DOMTreeElement.prototype._populateNodeContextMenu): Add "Jump to Definition" item in the context menu of an element when it's a successfully constructed or upgraded custom element. 2016-10-31 Joseph Pecoraro Web Inspector: Shadow DOM scoped styles are missing https://bugs.webkit.org/show_bug.cgi?id=164247 Reviewed by Antti Koivisto. * UserInterface/Models/DOMNodeStyles.js: (WebInspector.DOMNodeStyles.prototype.refresh.fetchedInlineStyles): Fix incorrect WrapperPromise usage. 2016-10-31 Devin Rousso Web Inspector: Arrows for Styles scope bar item are misaligned https://bugs.webkit.org/show_bug.cgi?id=164159 Reviewed by Timothy Hatcher. * UserInterface/Views/ScopeRadioButtonNavigationItem.css: (.scope-radio-button-navigation-item > .scope-radio-button-item-select:focus): (.scope-radio-button-navigation-item > .arrows): 2016-10-31 Devin Rousso Web Inspector: Entering ":n" in Open Resource Dialog, where n > number of lines, should jump to the last line https://bugs.webkit.org/show_bug.cgi?id=160840 Reviewed by Timothy Hatcher. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype.revealPosition): Since it is possible for the given position to be outside the bounds of the CodeMirror instance, wait to get the line handler for the highlight animation until we have constrained the position value. 2016-10-28 Devin Rousso Web Inspector: Preferences for Text Editor behavior https://bugs.webkit.org/show_bug.cgi?id=149120 Reviewed by Timothy Hatcher. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Base/Main.js: (WebInspector.loaded): (WebInspector.contentLoaded): (WebInspector.contentLoaded.setTabSize): (WebInspector.contentLoaded.setInvalidCharacterClassName): (WebInspector.contentLoaded.setWhitespaceCharacterClassName): (WebInspector._tryToRestorePendingTabs): (WebInspector.indentString): (WebInspector._updateNewTabButtonState): Deleted. (WebInspector._newTabItemClicked): Deleted. Removed calls to the New Tab tab bar item on the Tab Bar instance. Added listener to the indentUnit setting to change the tab-size value on . Created helper function to generate the indentString value from settings. * UserInterface/Base/Test.js: (WebInspector.indentString): Assume indent string is " " for tests. * UserInterface/Base/Setting.js: Added global WebInspector.settings dictionary for holding settings with UI editors. * UserInterface/Main.html: Added GeneralTabBarItem, PinnedTabBarItem, and SettingsTabContentView. * UserInterface/Models/CSSStyleDeclaration.js: (WebInspector.CSSStyleDeclaration.prototype.generateCSSRuleString): * UserInterface/Views/CSSStyleDeclarationTextEditor.js: (WebInspector.CSSStyleDeclarationTextEditor.prototype._formattedContentFromEditor): (WebInspector.CSSStyleDeclarationTextEditor.prototype._resetContent.update): * UserInterface/Views/VisualStylePropertyEditor.js: (WebInspector.VisualStylePropertyEditor.generateFormattedTextForNewProperty): * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype._showPopoverForFunction.didGetDetails): Now uses WebInspector.indentUnit for indentation values * UserInterface/Views/CodeMirrorAdditions.js: Added "showWhitespaceCharacter" option to CodeMirror. When enabled, it adds an overlay to the editor that will use pseudo-elements to display whitespace characters (unicode 00B7). * UserInterface/Views/CodeMirrorOverrides.css: (.CodeMirror .cm-tab): (.show-whitespace-characters .CodeMirror .cm-tab::before): (.show-whitespace-characters .CodeMirror .cm-whitespace::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-1::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-2::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-3::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-4::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-5::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-6::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-7::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-8::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-9::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-10::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-11::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-12::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-13::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-14::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-15::before): (.show-whitespace-characters .CodeMirror .cm-whitespace-16::before): (.show-invalid-characters .CodeMirror .cm-invalidchar): (.CodeMirror .cm-invalidchar): Deleted. Use unicode character 00B7 (middle dot) to display a space. Also uses a grey border for visualizing tab characters. * UserInterface/Views/ApplicationCacheFrameContentView.js: * UserInterface/Views/CSSStyleDeclarationTextEditor.js: * UserInterface/Views/ClusterContentView.js: * UserInterface/Views/DOMTreeContentView.js: * UserInterface/Views/DatabaseContentView.js: * UserInterface/Views/IndexedDatabaseObjectStoreContentView.js: * UserInterface/Views/NetworkGridContentView.js: * UserInterface/Views/ResourceContentView.js: * UserInterface/Views/ScriptContentView.js: * UserInterface/Views/TabContentView.js: * UserInterface/Views/TimelineRecordingContentView.js: Add calls to super.shown(), super.hidden(), and super.closed(). * UserInterface/Views/ConsoleTabContentView.js: * UserInterface/Views/DebuggerTabContentView.js: * UserInterface/Views/ElementsTabContentView.js: * UserInterface/Views/NetworkTabContentView.js: * UserInterface/Views/NewTabContentView.js: * UserInterface/Views/ResourcesTabContentView.js: * UserInterface/Views/SearchTabContentView.js: * UserInterface/Views/StorageTabContentView.js: * UserInterface/Views/TimelineTabContentView.js: Now uses WebInspector.GeneralTabBarItem. * UserInterface/Views/GeneralTabBarItem.js: Added. (WebInspector.GeneralTabBarItem): (WebInspector.GeneralTabBarItem.prototype.set title): (WebInspector.GeneralTabBarItem.prototype._handleContextMenuEvent): Split from TabBarItem.js to make pinned tab bar items more distinct. * UserInterface/Views/Main.css: (body): Removed tab-size. * UserInterface/Views/PinnedTabBarItem.js: Added. (WebInspector.PinnedTabBarItem): Split from TabBarItem.js to make pinned tab bar items more distinct. * UserInterface/Views/SettingsTabContentView.css: Added. (.content-view.settings): (.content-view.settings > .header): (.content-view.settings > .setting-container): (.content-view.settings > .setting-container > .setting-name): (.content-view.settings > .setting-container > .setting-value-controller): (.content-view.settings > .setting-container > .setting-value-controller input[type="number"]): * UserInterface/Views/SettingsTabContentView.js: (WebInspector.SettingsTabContentView): (WebInspector.SettingsTabContentView.tabInfo): (WebInspector.SettingsTabContentView.isEphemeral): (WebInspector.SettingsTabContentView.shouldSaveTab): (WebInspector.SettingsTabContentView.prototype.initialLayout): (WebInspector.SettingsTabContentView.isTabAllowed): Deleted. (WebInspector.SettingsTabContentView.prototype.get type): Deleted. Added logic to display an appropriate editor for each item in WebInspector.settings. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.close): Add call to super.close(). * UserInterface/Views/TabBar.css: (.tab-bar:not(.animating) > .item:not(.selected, .disabled):hover): (.tab-bar > .item:not(.pinned) > .flex-space:last-child): (.tab-bar > .item.pinned > .icon): (.tab-bar:not(.animating) > .item:not(.selected, .disabled):hover > .icon): (.tab-bar:not(.animating) > .item:not(.selected, .disabled):hover,): Deleted. (.tab-bar > .item > .flex-space:last-child): Deleted. (.tab-bar > .item.new-tab-button > .icon): Deleted. (.tab-bar:not(.animating) > .item:not(.selected, .disabled):hover > .icon,): Deleted. Removed rules specifically targeting `.new-tab-button`. * UserInterface/Views/TabBar.js: (WebInspector.TabBar): (WebInspector.TabBar.prototype.get newTabTabBarItem): (WebInspector.TabBar.prototype.updateNewTabTabBarItemState): (WebInspector.TabBar.prototype.insertTabBarItem): (WebInspector.TabBar.prototype.removeTabBarItem.animateTabs): (WebInspector.TabBar.prototype.removeTabBarItem): (WebInspector.TabBar.prototype.selectPreviousTab): (WebInspector.TabBar.prototype.selectNextTab): (WebInspector.TabBar.prototype.set selectedTabBarItem): (WebInspector.TabBar.prototype.hasNormalTab): (WebInspector.TabBar.prototype.layout): (WebInspector.TabBar.prototype._hasMoreThanOneNormalTab): (WebInspector.TabBar.prototype._handleMouseDown): (WebInspector.TabBar.prototype._handleMouseMoved): (WebInspector.TabBar.prototype._handleMouseLeave): (WebInspector.TabBar.prototype._handleNewTabClick): (WebInspector.TabBar.prototype._handleNewTabMouseEnter): (WebInspector.TabBar.prototype.get newTabItem): Deleted. (WebInspector.TabBar.prototype.set newTabItem): Deleted. Replaced the newTabItem setter by adding a saved pinned tab bar item (instead of relying upon a different object to give it the pinned tab bar item) that changes modes depending on whether a new tab is able to be created. * UserInterface/Views/TabBarItem.js: (WebInspector.TabBarItem): (WebInspector.TabBarItem.prototype.get element): (WebInspector.TabBarItem.prototype.get representedObject): (WebInspector.TabBarItem.prototype.set representedObject): (WebInspector.TabBarItem.prototype.get parentTabBar): (WebInspector.TabBarItem.prototype.set parentTabBar): (WebInspector.TabBarItem.prototype.get image): (WebInspector.TabBarItem.prototype.set image): (WebInspector.TabBarItem.prototype.get title): (WebInspector.TabBarItem.prototype.set title): (WebInspector.TabBarItem.prototype.get pinned): Deleted. (WebInspector.TabBarItem.prototype._handleContextMenuEvent): Deleted. Split into GeneralTabBarItem and PinnedTabBarItem to simplify the logic of the DOM and allow for easier checking of whether a tab bar item is pinned or not. * UserInterface/Views/TabBrowser.js: (WebInspector.TabBrowser): (WebInspector.TabBrowser.prototype.addTabForContentView): (WebInspector.TabBrowser.prototype.closeTabForContentView): (WebInspector.TabBrowser.prototype._tabBarItemSelected): (WebInspector.TabBrowser.prototype._tabBarItemRemoved): Replaced references to newTabItem with a set number (since each TabBar has a specific number of pinned tabs). * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor): (WebInspector.TextEditor.prototype.close):. Remove settings update event listeners to allow garbage collection. (WebInspector.TextEditor.prototype._startWorkerPrettyPrint): (WebInspector.TextEditor.prototype._startCodeMirrorPrettyPrint): Now uses the settings values in WebInspector.setting for settings on the CodeMirror instance. Also updates the CodeMirror instance if any setting changes. 2016-10-28 Joseph Pecoraro Web Inspector: Include parameter strings for native CustomElementRegistry methods in the console https://bugs.webkit.org/show_bug.cgi?id=164147 Reviewed by Brian Burg. * UserInterface/Models/NativeFunctionParameters.js: 2016-10-28 Matt Baker Unreviewed, worker document images added * UserInterface/Images/WorkerDocument.png: Added. * UserInterface/Images/WorkerDocument@2x.png: Added. * UserInterface/Images/WorkerDocumentLarge.png: Added. * UserInterface/Images/WorkerDocumentLarge@2x.png: Added. 2016-10-27 Devin Rousso Web Inspector: Create general model object Collection class https://bugs.webkit.org/show_bug.cgi?id=163995 Reviewed by Joseph Pecoraro. * UserInterface/Models/Collection.js: Added. (WebInspector.Collection): (WebInspector.Collection.prototype.get items): (WebInspector.Collection.prototype.get typeVerifier): (WebInspector.Collection.prototype.add): (WebInspector.Collection.prototype.remove): (WebInspector.Collection.prototype.clear): (WebInspector.Collection.prototype.toArray): (WebInspector.Collection.prototype.toJSON): (WebInspector.Collection.prototype.itemAdded): (WebInspector.Collection.prototype.itemRemoved): (WebInspector.Collection.prototype.itemsCleared): Class that holds multiple model objects. It can be limited to a specific type by supplying a "typeVerifier", which is a function that accepts a single argument (the model object) and returns true/false depending on if that argument matches the "type" of the collection. * UserInterface/Main.html: * UserInterface/Test.html: * UserInterface/Models/Frame.js: * UserInterface/Views/CookieStorageContentView.js: * UserInterface/Views/DebuggerSidebarPanel.js: * UserInterface/Views/FrameTreeElement.js: * UserInterface/Views/OpenResourceDialog.js: Add support for WebInspector.Collection. * UserInterface/Models/ResourceCollection.js: (WebInspector.ResourceCollection): (WebInspector.ResourceCollection.verifierForType): (WebInspector.ResourceCollection.prototype.resourceCollectionForType): (WebInspector.ResourceCollection.prototype.clear): (WebInspector.ResourceCollection.prototype.itemAdded): (WebInspector.ResourceCollection.prototype.itemRemoved): (WebInspector.ResourceCollection.prototype.itemsCleared): (WebInspector.ResourceCollection.prototype._associateWithResource): (WebInspector.ResourceCollection.prototype._disassociateWithResource): (WebInspector.ResourceCollection.prototype._resourceURLDidChange): (WebInspector.ResourceCollection.prototype._resourceTypeDidChange): (WebInspector.ResourceCollection.prototype.get resources): Deleted. (WebInspector.ResourceCollection.prototype.resourcesWithType): Deleted. (WebInspector.ResourceCollection.prototype.addResource): Deleted. (WebInspector.ResourceCollection.prototype.removeResource): Deleted. (WebInspector.ResourceCollection.prototype.removeAllResources): Deleted. Now a subclass of WebInspector.Collection. Retrieving WebInspector.Resource objects by type and URL is still supported, but requesting by type now returns another instance of WebInspector.ResourceCollection that is configured to only accept the requested type. 2016-10-27 Joseph Pecoraro Web Inspector: Include ConsoleAgent in Workers - real console.log support https://bugs.webkit.org/show_bug.cgi?id=163844 Reviewed by Brian Burg. * UserInterface/Protocol/Target.js: (WebInspector.Target.prototype.get ConsoleAgent): (WebInspector.Target.prototype._initializeNonMainTarget): * UserInterface/Protocol/Connection.js: (InspectorBackend.WorkerConnection): Add ConsoleAgent. * UserInterface/Controllers/LogManager.js: (WebInspector.LogManager.prototype.messageWasAdded): (WebInspector.LogManager.prototype.requestClearMessages): Handle ConsoleAgent calls with multiple targets. * UserInterface/Protocol/ConsoleObserver.js: (WebInspector.ConsoleObserver.prototype.messageAdded): Dispatch with the target in case we create Model objects. * UserInterface/Controllers/WorkerManager.js: (WebInspector.WorkerManager.prototype.workerCreated): The frontend must now call "initialized" on Workers after sending our setup messages (enable, set breakpoints, etc). * UserInterface/Protocol/RemoteObject.js: (WebInspector.RemoteObject.prototype.get target): Expose an accessor for tests. * UserInterface/Protocol/LoggingProtocolTracer.js: (WebInspector.LoggingProtocolTracer.prototype._processEntry): Actually output the Exception, useful when debugging failures in tests. 2016-10-27 Joseph Pecoraro Web Inspector: Include RuntimeAgent in Workers - evaluate in Worker context https://bugs.webkit.org/show_bug.cgi?id=163835 Reviewed by Brian Burg. This introduces the idea that the frontend may communication with multiple backend "Targets" which each have their own set of Agents. - WebInspector.Target - has its own list of Agents - has a InspectorBackend.Connection to communicate with the backend - WebInspector.mainTarget - always exists and represents the thing we are debugging (Page or JSContext) - WebInspector.targets / WebInspector.targetManager - management of all Targets - create new Targets for Workers This also slowly introduces the concept that Model objects may be tied to a specific Target: - WebInspector.RemoteObject - in order to evaluate JS and interact with this object we must know the target (Page or Worker) - when fetching PropertyDescriptors and other RemoteObjects we must continue to pass on the target Finally this makes the QuickConsole list Worker execution contexts in the context picker so that users can choose a Worker context and evaluate JavaScript in that context using the console. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Main.html: * UserInterface/Base/Main.js: (WebInspector.loaded): * UserInterface/Test.html: * UserInterface/Test/Test.js: (WebInspector.loaded): New files, strings, and managers. New global WebInspector.mainTarget. New convenience WebInspector.targets. * UserInterface/Protocol/Target.js: Added. (WebInspector.Target): (WebInspector.Target.prototype.get RuntimeAgent): (WebInspector.Target.prototype.get name): (WebInspector.Target.prototype.get type): (WebInspector.Target.prototype.get connection): (WebInspector.Target.prototype.get executionContext): (WebInspector.Target.prototype.get displayName): (WebInspector.Target.prototype._intializeMainTarget): (WebInspector.Target.prototype._initializeNonMainTarget): Target has some basic properties. * UserInterface/Controllers/TargetManager.js: (WebInspector.TargetManager): (WebInspector.TargetManager.prototype.get targets): (WebInspector.TargetManager.prototype.addTarget): (WebInspector.TargetManager.prototype.removeTarget): Holds the list of Targets and events when created / removed. Each target with a RuntimeAgent has an ExecutionContext. * UserInterface/Controllers/WorkerManager.js: (WebInspector.WorkerManager): (WebInspector.WorkerManager.prototype.workerCreated): (WebInspector.WorkerManager.prototype.workerTerminated): (WebInspector.WorkerManager.prototype.dispatchMessageFromWorker): Create / remove / dispatch on a Worker Target. * UserInterface/Protocol/InspectorBackend.js: (InspectorBackendClass): (InspectorBackendClass.prototype.registerCommand): (InspectorBackendClass.prototype.dispatch): (InspectorBackendClass.prototype.runAfterPendingDispatches): (InspectorBackendClass.prototype._agentForDomain): Keep the original implementations and just dispatch to the main connection. (InspectorBackend.Agent): (InspectorBackend.Agent.prototype.get connection): (InspectorBackend.Agent.prototype.set connection): (InspectorBackend.Agent.prototype.get dispatcher): We will share Agent implementations but just give new "copies" a different connection and dispatcher. (InspectorBackend.Command): (InspectorBackend.Command.create): (InspectorBackend.Command.prototype.invoke): (InspectorBackend.Command.prototype.supports): We continue to have a single Command instance on the Agent. However instead of using the hardcoded Agent on the Instance when evaluated as a function it uses the `this` object which should be an agent. This way: target1.RuntimeAgent.evaluate - `this` is target1 and we use the connection for that target target2.RuntimeAgent.evaluate - `this` is target2 and we use the connection for that target Unfortunately this breaks `RuntimeAgent.evaluate.invoke`. Currently this is solved by providing an extra parameter. In the case where we need to invoke on a particular agent we must provide the agent. target.RuntimeAgent.evaluate.invoke({options}, target.RuntimeAgent) This is unfortunate but only needed in a handful of places right now. (InspectorBackendClass.prototype._sendCommandToBackendWithCallback): Deleted. (InspectorBackendClass.prototype._sendCommandToBackendExpectingPromise): Deleted. (InspectorBackendClass.prototype._sendMessageToBackend): Deleted. (InspectorBackendClass.prototype._dispatchResponse): Deleted. (InspectorBackendClass.prototype._dispatchResponseToCallback): Deleted. (InspectorBackendClass.prototype._dispatchResponseToPromise): Deleted. (InspectorBackendClass.prototype._dispatchEvent): Deleted. (InspectorBackendClass.prototype._flushPendingScripts): Deleted. (InspectorBackend.Agent.prototype.get currentDispatchState): Deleted. (InspectorBackend.Command.prototype.deliverFailure): Deleted. * UserInterface/Protocol/Connection.js: Added. (InspectorBackend.Connection): (InspectorBackend.Connection.prototype.get target): (InspectorBackend.Connection.prototype.set target): (InspectorBackend.Connection.prototype.dispatch): (InspectorBackend.Connection.prototype.runAfterPendingDispatches): (InspectorBackend.Connection.prototype.sendMessageToBackend): (InspectorBackend.Connection.prototype._dispatchResponse): (InspectorBackend.Connection.prototype._dispatchResponseToCallback): (InspectorBackend.Connection.prototype._dispatchResponseToPromise): (InspectorBackend.Connection.prototype._dispatchEvent): (InspectorBackend.Connection.prototype._sendCommandToBackendWithCallback): (InspectorBackend.Connection.prototype._sendCommandToBackendExpectingPromise): (InspectorBackend.Connection.prototype._sendMessageToBackend): (InspectorBackend.Connection.prototype._flushPendingScripts): This extracts the Connection details into its own class. Although we make it appear as though a Target has a list of Agents, we actually have the Connection hold the list of Agents. Instead of cloning the entire Agent we just create a new object extended from the original Agent instance. This allows us to keep the same interface but just change the connection / dispatcher properties within the Agent. (InspectorBackend.MainConnection): (InspectorBackend.MainConnection.prototype.sendMessageToBackend): (InspectorBackend.WorkerConnection): (InspectorBackend.WorkerConnection.sendMessageToBackend): Two different kinds of connections. One for the Main connection and one for Workers. Currently the list of agents we expose on a Worker Target/Connection is hardcoded. * UserInterface/Models/ExecutionContext.js: (WebInspector.ExecutionContext): (WebInspector.ExecutionContext.prototype.get target): We may now have ExecutionContexts that mean a Page, Frames, and Workers. To do this we include the (target, executionContextId) tuple in this object. With this we have everything we need to evaluate JavaScript. * UserInterface/Controllers/RuntimeManager.js: (WebInspector.RuntimeManager): (WebInspector.RuntimeManager.prototype.get activeExecutionContext): (WebInspector.RuntimeManager.prototype.set activeExecutionContext): (WebInspector.RuntimeManager.prototype.get defaultExecutionContextIdentifier): Deleted. (WebInspector.RuntimeManager.prototype.set defaultExecutionContextIdentifier): Deleted. Update from contextId to a full ExecutionContext object. (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow.evalCallback): (WebInspector.RuntimeManager.prototype.evaluateInInspectedWindow): (WebInspector.RuntimeManager.prototype.saveResult): (WebInspector.RuntimeManager.prototype.getPropertiesForRemoteObject): (WebInspector.RuntimeManager.prototype._frameExecutionContextsCleared): * UserInterface/Controllers/FrameResourceManager.js: (WebInspector.FrameResourceManager.prototype.executionContextCreated): * UserInterface/Controllers/JavaScriptLogViewController.js: (WebInspector.JavaScriptLogViewController.prototype.consolePromptShouldCommitText): * UserInterface/Controllers/JavaScriptRuntimeCompletionProvider.js: Anywhere that wants to use the "activeExecutionContext" must use the specific RuntimeAgent tied to that ExecutionContext's Target. * UserInterface/Models/PropertyDescriptor.js: (WebInspector.PropertyDescriptor.fromPayload): * UserInterface/Protocol/RemoteObject.js: (WebInspector.RemoteObject): (WebInspector.RemoteObject.createFakeRemoteObject): (WebInspector.RemoteObject.fromPrimitiveValue): (WebInspector.RemoteObject.fromPayload): (WebInspector.RemoteObject.prototype.getDisplayablePropertyDescriptors): (WebInspector.RemoteObject.prototype.deprecatedGetDisplayableProperties): (WebInspector.RemoteObject.prototype.setPropertyValue): (WebInspector.RemoteObject.prototype.getCollectionEntries): (WebInspector.RemoteObject.prototype.releaseWeakCollectionEntries): (WebInspector.RemoteObject.prototype.callFunction): (WebInspector.RemoteObject.prototype.callFunctionJSON): (WebInspector.RemoteObject.prototype.getOwnPropertyDescriptor.wrappedCallback): (WebInspector.RemoteObject.prototype.getOwnPropertyDescriptor): (WebInspector.RemoteObject.prototype.release): (WebInspector.RemoteObject.prototype._getPropertyDescriptors): (WebInspector.RemoteObject.prototype._getPropertyDescriptorsResolver): (WebInspector.RemoteObject.prototype._deprecatedGetProperties): RemoteObject and related Model Objects now must be tied to a specific Target, because we need to know which Target it belongs to in order to interact with it further. * UserInterface/Views/QuickConsole.js: (WebInspector.QuickConsole): (WebInspector.QuickConsole.prototype.get selectedExecutionContext): (WebInspector.QuickConsole.prototype.set selectedExecutionContext): (WebInspector.QuickConsole.prototype._executionContextPathComponentsToDisplay): (WebInspector.QuickConsole.prototype._rebuildExecutionContextPathComponents): (WebInspector.QuickConsole.prototype._framePageExecutionContextsChanged): (WebInspector.QuickConsole.prototype._frameExecutionContextsCleared): (WebInspector.QuickConsole.prototype._createExecutionContextPathComponent): (WebInspector.QuickConsole.prototype._createExecutionContextPathComponentFromFrame): (WebInspector.QuickConsole.prototype._compareExecutionContextPathComponents): (WebInspector.QuickConsole.prototype._insertOtherExecutionContextPathComponent): (WebInspector.QuickConsole.prototype._removeOtherExecutionContextPathComponent): (WebInspector.QuickConsole.prototype._insertExecutionContextPathComponentForFrame): (WebInspector.QuickConsole.prototype._removeExecutionContextPathComponentForFrame): (WebInspector.QuickConsole.prototype._targetAdded): (WebInspector.QuickConsole.prototype._targetRemoved): (WebInspector.QuickConsole.prototype._pathComponentSelected): (WebInspector.QuickConsole.prototype.get selectedExecutionContextIdentifier): Deleted. (WebInspector.QuickConsole.prototype.set selectedExecutionContextIdentifier): Deleted. (WebInspector.QuickConsole.prototype._defaultExecutionContextChanged): Deleted. Update the code from executionContextId to ExecutionContext objects. Update the picker with ExecutionContextPathComponent for Workers (new Targets). Generalize and cleanup the code to make it easier to follow. 2016-10-27 Joseph Pecoraro Web Inspector: Introduce Page WorkerAgent and Worker InspectorController https://bugs.webkit.org/show_bug.cgi?id=163817 Reviewed by Brian Burg. * UserInterface/Main.html: * UserInterface/Test.html: New files. * UserInterface/Base/Main.js: (WebInspector.loaded): * UserInterface/Test/Test.js: (WebInspector.loaded): New Observers and Managers. * UserInterface/Protocol/WorkerObserver.js: Added. (WebInspector.WorkerObserver.prototype.workerCreated): (WebInspector.WorkerObserver.prototype.workerTerminated): (WebInspector.WorkerObserver.prototype.dispatchMessageFromWorker): (WebInspector.WorkerObserver): * UserInterface/Controllers/WorkerManager.js: Added. (WebInspector.WorkerManager): (WebInspector.WorkerManager.prototype.workerCreated): (WebInspector.WorkerManager.prototype.workerTerminated): (WebInspector.WorkerManager.prototype.dispatchMessageFromWorker): To be implemented with the first Worker agent implementation when there is actually something we can do with the Worker. 2016-10-25 Joseph Pecoraro Web Inspector: Cmd-+ doesn't "zoom in" to increase text size in the Web Inspector https://bugs.webkit.org/show_bug.cgi?id=163961 Reviewed by Brian Burg. * UserInterface/Base/Main.js: (WebInspector.contentLoaded): Add a duplicate set of keyboard shortcuts for the Shift variants. 2016-10-25 Joseph Pecoraro Web Inspector: Remove dead code in FrameTreeElement https://bugs.webkit.org/show_bug.cgi?id=163914 Reviewed by Brian Burg. * UserInterface/Views/FrameTreeElement.js: 2016-10-24 Devin Rousso Web Inspector: Scope chain shouldn't show empty Closure sections https://bugs.webkit.org/show_bug.cgi?id=152348 Reviewed by Joseph Pecoraro. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype._scopeChainNodeFromPayload): * UserInterface/Models/ScopeChainNode.js: (WebInspector.ScopeChainNode): (WebInspector.ScopeChainNode.prototype.get empty): Added support for new empty property. * UserInterface/Views/ScopeChainDetailsSidebarPanel.js: (WebInspector.ScopeChainDetailsSidebarPanel.prototype._generateCallFramesSection): Only create and display a DetailsSection if the scope is not empty (via empty). 2016-10-24 Devin Rousso Web Inspector: Improve Quick Open sorting algorithm https://bugs.webkit.org/show_bug.cgi?id=163705 Reviewed by Joseph Pecoraro. * UserInterface/Models/ResourceQueryResult.js: (WebInspector.ResourceQueryResult.prototype._calculateRank.getMultiplier): (WebInspector.ResourceQueryResult.prototype._calculateRank): Added logic to multiply the ranking increment/decrement based on whether the current match is part of a sequence, whether that sequence began with a special character, and the length of the current sequence. 2016-10-19 Dean Jackson Support CSS Shapes Level 1 without a prefix https://bugs.webkit.org/show_bug.cgi?id=163709 Reviewed by Myles Maxfield. Replace -webkit-shape-outside with shape-outside. * UserInterface/Models/CSSKeywordCompletions.js: 2016-10-19 Aaron Chu Web Inspector: AXI: expose computed tree node and heading level https://bugs.webkit.org/show_bug.cgi?id=130825 Reviewed by Joseph Pecoraro. Updating the Web Accessibility Inspector to display Heading Level and Hierarchical Level. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Models/DOMNode.js: (WebInspector.DOMNode.prototype.accessibilityProperties.accessibilityPropertiesCallback): (WebInspector.DOMNode.prototype.accessibilityProperties): * UserInterface/Views/DOMNodeDetailsSidebarPanel.js: (WebInspector.DOMNodeDetailsSidebarPanel): (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility.accessibilityPropertiesCallback): (WebInspector.DOMNodeDetailsSidebarPanel.prototype._refreshAccessibility): 2016-10-18 Joseph Pecoraro Web Inspector: Styles Sidebar highlights "translate" but not "translateX" https://bugs.webkit.org/show_bug.cgi?id=163613 Reviewed by Timothy Hatcher. * UserInterface/Models/CSSCompletions.js: (WebInspector.CSSCompletions.requestCSSCompletions): The hash table objects we pass to CodeMirror expects keys to be lowercased. 2016-10-18 Joseph Pecoraro Web Inspector: CSS Autocompletion sometimes adds extra unexpected characters https://bugs.webkit.org/show_bug.cgi?id=163612 Reviewed by Timothy Hatcher. * UserInterface/Controllers/CodeMirrorCompletionController.js: (WebInspector.CodeMirrorCompletionController.prototype._generateCSSCompletions): Better handle completions in cases where we are in the middle of a property to avoid orphaned characters, or at the end of a function name to avoid creating duplicate parenthesis. 2016-10-18 Joseph Pecoraro REGRESSION(r201171): Web Inspector: Timeline Recording playhead should always start immediately, not wait until first event https://bugs.webkit.org/show_bug.cgi?id=163583 Reviewed by Timothy Hatcher. * UserInterface/Views/TimelineRecordingContentView.js: (WebInspector.TimelineRecordingContentView.prototype._startUpdatingCurrentTime): Revert logic change introduced by r201171 with no explanation. Whenever we get a start time we should use it, regardless of of what the current time is, precisely because the backend is informing us of the start time to use. 2016-10-17 Joseph Pecoraro Web Inspector: Add toggles for debugger pauses at console.assert failures https://bugs.webkit.org/show_bug.cgi?id=139542 Reviewed by Timothy Hatcher. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.prototype.get assertionsBreakpoint): (WebInspector.DebuggerManager.prototype.isBreakpointRemovable): (WebInspector.DebuggerManager.prototype._breakpointDisabledStateDidChange): New breakpoint and toggling behavior. * Localizations/en.lproj/localizedStrings.js: * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel): (WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineDeleteTreeElement): (WebInspector.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements.isSpecialBreakpoint): (WebInspector.DebuggerSidebarPanel.prototype._compareTopLevelTreeElements): New breakpoint tree element behavior. (WebInspector.DebuggerSidebarPanel.prototype.saveStateToCookie): (WebInspector.DebuggerSidebarPanel.prototype.restoreStateFromCookie): Sidebar restoration if it was selected. * UserInterface/Images/Assertion.svg: Added. * UserInterface/Images/gtk/Assertion.svg: Added. * UserInterface/Views/BreakpointTreeElement.css: (.breakpoint-assertion-icon .icon): New sidebar icon for the global breakpoint. 2016-10-15 Joseph Pecoraro Web Inspector: Cleanup parts of DebuggerManager https://bugs.webkit.org/show_bug.cgi?id=163400 Reviewed by Timothy Hatcher. * UserInterface/Controllers/DebuggerManager.js: (WebInspector.DebuggerManager.restoreBreakpointsSoon): (WebInspector.DebuggerManager.prototype.get paused): (WebInspector.DebuggerManager.prototype.get pauseReason): (WebInspector.DebuggerManager.prototype.get pauseData): (WebInspector.DebuggerManager.prototype.get callFrames): (WebInspector.DebuggerManager.prototype.get activeCallFrame): (WebInspector.DebuggerManager.prototype.set activeCallFrame): Put simple accessors at the top. (WebInspector.DebuggerManager.prototype.get allExceptionsBreakpoint): (WebInspector.DebuggerManager.prototype.get allUncaughtExceptionsBreakpoint): (WebInspector.DebuggerManager.prototype.get breakpoints): (WebInspector.DebuggerManager.prototype.breakpointForIdentifier): (WebInspector.DebuggerManager.prototype.breakpointsForSourceCode): (WebInspector.DebuggerManager.prototype.isBreakpointRemovable): (WebInspector.DebuggerManager.prototype.isBreakpointEditable): (WebInspector.DebuggerManager.prototype.get breakpointsDisabledTemporarily): Group public breakpoint state and access methods. (WebInspector.DebuggerManager.prototype.scriptForIdentifier): (WebInspector.DebuggerManager.prototype.scriptsForURL): (WebInspector.DebuggerManager.prototype.get searchableScripts): (WebInspector.DebuggerManager.prototype.get knownNonResourceScripts): Group public script access methods. (WebInspector.DebuggerManager.prototype.pause): (WebInspector.DebuggerManager.prototype.resume): (WebInspector.DebuggerManager.prototype.stepOver): (WebInspector.DebuggerManager.prototype.stepInto): (WebInspector.DebuggerManager.prototype.stepOut): (WebInspector.DebuggerManager.prototype.continueToLocation): (WebInspector.DebuggerManager.prototype.addBreakpoint): (WebInspector.DebuggerManager.prototype.removeBreakpoint): Group and modernize public methods that perform actions. (WebInspector.DebuggerManager.prototype.nextBreakpointActionIdentifier): Misc. methods. (WebInspector.DebuggerManager.prototype.breakpointResolved): (WebInspector.DebuggerManager.prototype.reset): (WebInspector.DebuggerManager.prototype.playBreakpointActionSound): (WebInspector.DebuggerManager.prototype.scriptDidParse): (WebInspector.DebuggerManager.prototype._setBreakpoint.didSetBreakpoint): (WebInspector.DebuggerManager.prototype._setBreakpoint): (WebInspector.DebuggerManager.prototype._breakpointEditablePropertyDidChange): (WebInspector.DebuggerManager.prototype._updateBreakOnExceptionsState): (WebInspector.DebuggerManager.prototype._associateBreakpointsWithSourceCode): Minor cleanup in protected and private methods. * UserInterface/Models/BreakpointAction.js: (WebInspector.BreakpointAction): Getting the next identifier is an action so it should be a function call. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointAdded): Remove unused parameter. 2016-10-14 Joseph Pecoraro Web Inspector: Dragging to delete a Breakpoint should never trigger a ContentView change https://bugs.webkit.org/show_bug.cgi?id=163403 Reviewed by Timothy Hatcher. * UserInterface/Views/BreakpointTreeElement.js: (WebInspector.BreakpointTreeElement.prototype.ondelete): Signal when a breakpoint tree element will be going away because it was deleted via the keyboard operation within the TreeOutline. This is a dirty way to do the signal but we remove BreakpointTreeElements asynchronously when the Breakpoint actually gets removed from the backend. * UserInterface/Views/DebuggerSidebarPanel.js: (WebInspector.DebuggerSidebarPanel.prototype._removeDebuggerTreeElement): Deselect a BreakpointTreeElement if it was deleted in a way other then the delete keyboard shortcut. This ensures another TreeElement selection doesn't force ContentView changes. 2016-10-14 Joseph Pecoraro Web Inspector: Improve debugger highlight when inside of getter/setter calls https://bugs.webkit.org/show_bug.cgi?id=163428 Reviewed by Timothy Hatcher. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange): When in the middle of a member expression at a '.' or '[' get the best member expression range. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype._updateExecutionRangeHighlight): Include the character at the current position. This is useful since AST Nodes don't give us token info but we would like to know if we are at particular tokens. 2016-10-14 Joseph Pecoraro Web Inspector: Unused Breakpoint getter/setter for "id" - should be "identifier" https://bugs.webkit.org/show_bug.cgi?id=163395 Reviewed by Timothy Hatcher. * UserInterface/Models/Breakpoint.js: (WebInspector.Breakpoint.prototype.get identifier): Renamed. (WebInspector.Breakpoint.prototype.set identifier): Renamed. The only user is DebuggerManager which sets and gets. Previously it was unexpectedly setting a direct property on the Breakpoint instead of using these methods to set the member variable. 2016-10-14 Joseph Pecoraro Web Inspector: Remove uses of delete in SourceCodeTextEditor https://bugs.webkit.org/show_bug.cgi?id=163379 Reviewed by Timothy Hatcher. Remove uses of delete and better group member variables. One of the deletes was deleting an incorrect property. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor): (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointAdded): (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointRemoved): (WebInspector.SourceCodeTextEditor.prototype.textEditorBreakpointMoved): (WebInspector.SourceCodeTextEditor.prototype._tokenTrackingControllerHighlightedMarkedExpression): (WebInspector.SourceCodeTextEditor.prototype._dismissEditingController): (WebInspector.SourceCodeTextEditor.prototype.editingControllerDidFinishEditing): 2016-10-14 Joseph Pecoraro Uncaught Exception: TypeError: this.positionToOffset is not a function - seen hovering expressions with Type Profiler enabled https://bugs.webkit.org/show_bug.cgi?id=163405 Reviewed by Matt Baker. * UserInterface/Views/SourceCodeTextEditor.js: Use correct method name, the old one must have gone away. 2016-10-12 Joseph Pecoraro Web Inspector: Improve support for logging Proxy objects in console https://bugs.webkit.org/show_bug.cgi?id=163323 Reviewed by Timothy Hatcher. * UserInterface/Views/ConsoleMessageView.js: (WebInspector.ConsoleMessageView.prototype._formatParameter): Treat a Proxy like any other object. 2016-10-12 Joseph Pecoraro Emit DebugHooks uniformly with pause locations instead of having separate pause locations and op_debug emits https://bugs.webkit.org/show_bug.cgi?id=162809 Reviewed by Geoffrey Garen. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange): When pausing on the variable assignment inside for..of and for..in don't just highlight "var foo" but include the right hand side "var foo in ..." or "var foo of ...". 2016-10-12 Joseph Pecoraro Web Inspector: Whole program sometimes highlighted instead of just first statement https://bugs.webkit.org/show_bug.cgi?id=163300 Reviewed by Timothy Hatcher. * UserInterface/Views/SourceCodeTextEditor.js: (WebInspector.SourceCodeTextEditor.prototype.textEditorExecutionHighlightRange): Avoid highlighting the entire program by skipping a Program type Node. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype.setExecutionLineAndColumn): Avoid unnecessary work before content has loaded. (WebInspector.TextEditor.prototype.currentPositionToOriginalOffset): Avoid unnecessary indirection to get the CodeMirror editor. 2016-10-11 Joseph Pecoraro Web Inspector: Remove line highlight on primary execution line while stepping because it is distracting https://bugs.webkit.org/show_bug.cgi?id=163294 Reviewed by Timothy Hatcher. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype._updateExecutionLine): When setting the primary execution line, remove default line highlights. 2016-10-10 Matt Baker Web Inspector: Revealed line not highlighted in TextEditor while debugger paused https://bugs.webkit.org/show_bug.cgi?id=163197 Reviewed by Timothy Hatcher. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor.prototype.revealPosition.revealAndHighlightLine): Avoid highlighting the execution line while debugging, but allow other lines to be highlighted. 2016-10-06 Devin Rousso Inspector exception in `parseTextForRule()` when pasting into CSS rule selector https://bugs.webkit.org/show_bug.cgi?id=162792 Reviewed by Matt Baker. * UserInterface/Views/CSSStyleDeclarationSection.js: (WebInspector.CSSStyleDeclarationSection.prototype._handleSelectorPaste.parseTextForRule): Changed regular expression for matching CSS rules to allow newlines in pasted text. 2016-10-02 Devin Rousso Web Inspector: Clicking twice on the color swatch square should hide the color picker https://bugs.webkit.org/show_bug.cgi?id=162759 Reviewed by Matt Baker. * UserInterface/Views/InlineSwatch.js: (WebInspector.InlineSwatch): (WebInspector.InlineSwatch.prototype.didDismissPopover): (WebInspector.InlineSwatch.prototype._swatchElementClicked): Remove the "click" event listener when a popover is presented to prevent improper interaction. Add the event listener back when the popover is dismissed. 2016-10-02 Matt Baker Web Inspector: Exception thrown when hovering network waterfall graphs during reload https://bugs.webkit.org/show_bug.cgi?id=162850 Reviewed by Brian Burg. * UserInterface/Views/ResourceTimelineDataGridNode.js: (WebInspector.ResourceTimelineDataGridNode.prototype._mouseoverRecordBar): Check that the node's data grid reference is valid before use. (WebInspector.ResourceTimelineDataGridNode): 2016-10-01 Joseph Pecoraro Web Inspector: Selection does not show up over execution highlight ranges https://bugs.webkit.org/show_bug.cgi?id=162844 Reviewed by Matt Baker. * Scripts/update-codemirror-resources.rb: * UserInterface/External/CodeMirror/mark-selection.js: Added. * UserInterface/Main.html: New add-on that makes selection a text marker so it can be styled at the same level as other text markers. * UserInterface/Views/TextEditor.css: (.text-editor > .CodeMirror .execution-range-highlight:not(.CodeMirror-selectedtext)): Don't use execution-range-highlight styles if the text is selected. * UserInterface/Views/TextEditor.js: (WebInspector.TextEditor): Enable the text selection as text markers addon. 2016-09-30 Joseph Pecoraro Web Inspector: Make debugger stepping highlights work in inline