<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[192789] trunk/Source/WebInspectorUI</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/192789">192789</a></dd>
<dt>Author</dt> <dd>bburg@apple.com</dd>
<dt>Date</dt> <dd>2015-11-29 16:39:08 -0800 (Sun, 29 Nov 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Web Inspector: allow multiple UI components to add menu items upon getting a &quot;contextmenu&quot; event
https://bugs.webkit.org/show_bug.cgi?id=151629

Reviewed by Timothy Hatcher.

The existing Context Menu system assumes that only one UI component
will need to provide context menu items. But in some scenarios, there
are multiple UI components that could provide relevant menu items. For
example, right-clicking on an DOM element in the console should show
menu items relevant to 1) the DOM element, 2) the console in general,
and 3) global menu items. Existing code shows menu items provided by
the first object that handles the event and calls ContextMenu.show().

This patch changes behavior so that a context menu can be built up
by multiple 'contextmenu' event handlers. A ContextMenu instance is
hidden on the 'contextmenu' event object; client code calls a
factory method that digs out this existing context menu or creates a
new one as needed. To actually show the context menu through the
InspectorFrontendHost methods, the top-level app controller adds a
bubbling listener for 'contextmenu' and shows the event's context
menu if one has been created.

Along the way, do some cleanup. Do s/var/let/, arrowize some functions,
use Array.{map,some}, and simplify some other code as a result.

No new tests yet, since we can't trigger context menu easily from
an inspector test. All affected context menus were manually verified.

* UserInterface/Base/Main.js:
(WebInspector.contentLoaded):
* UserInterface/Controllers/BreakpointPopoverController.js:
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems):
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.editBreakpoint): Deleted.
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.removeBreakpoint): Deleted.
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.toggleBreakpoint): Deleted.
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.toggleAutoContinue): Deleted.
(WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.revealOriginalSourceCodeLocation): Deleted.
* UserInterface/Views/BreakpointTreeElement.js:
(WebInspector.BreakpointTreeElement.prototype.oncontextmenu):
* UserInterface/Views/CSSStyleDeclarationSection.js:
* UserInterface/Views/ContextMenu.js:
(WebInspector.ContextMenuItem.prototype._buildDescriptor):
(WebInspector.ContextMenuItem):
(WebInspector.ContextSubMenuItem.prototype.appendItem):
(WebInspector.ContextSubMenuItem.prototype.appendSubMenuItem):
(WebInspector.ContextSubMenuItem.prototype.appendCheckboxItem):
(WebInspector.ContextSubMenuItem.prototype._pushItem):
(WebInspector.ContextSubMenuItem.prototype._buildDescriptor):
(WebInspector.ContextSubMenuItem):
(WebInspector.ContextMenu.createFromEvent):
(WebInspector.ContextMenu.prototype.show):
(WebInspector.ContextMenu.prototype.handleEvent):
(WebInspector.ContextMenu.prototype._buildDescriptor):
* UserInterface/Views/DOMTreeOutline.js:
(WebInspector.DOMTreeOutline.prototype._contextMenuEventFired):
(WebInspector.DOMTreeOutline.prototype._populateContextMenu.logElement):
(WebInspector.DOMTreeOutline.prototype._populateContextMenu):
* UserInterface/Views/DataGrid.js:
(WebInspector.DataGrid.prototype._contextMenuInDataTable):
* UserInterface/Views/DebuggerSidebarPanel.js:
(WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement):
(WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement.removeAllResourceBreakpoints): Deleted.
(WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement.toggleAllResourceBreakpoints): Deleted.
* UserInterface/Views/LogContentView.js:
(WebInspector.LogContentView.prototype._handleContextMenuEvent):
* UserInterface/Views/ObjectPreviewView.js:
(WebInspector.ObjectPreviewView.prototype._contextMenuHandler):
(WebInspector.ObjectPreviewView):
* UserInterface/Views/ObjectTreeBaseTreeElement.js:
(WebInspector.ObjectTreeBaseTreeElement.prototype._contextMenuHandler):
(WebInspector.ObjectTreeBaseTreeElement.prototype._appendMenusItemsForObject):
(WebInspector.ObjectTreeBaseTreeElement):
* UserInterface/Views/SourceCodeTextEditor.js:
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.continueToLocation): Deleted.
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.addBreakpoint): Deleted.
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.revealInSidebar): Deleted.
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.removeBreakpoints): Deleted.
(WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.toggleBreakpoints): Deleted.
* UserInterface/Views/TabBarItem.js:
(WebInspector.TabBarItem.prototype._handleContextMenuEvent):
(WebInspector.TabBarItem):
(WebInspector.TabBarItem.prototype._handleContextMenuEvent.closeTab): Deleted.
(WebInspector.TabBarItem.prototype._handleContextMenuEvent.closeOtherTabs): Deleted.
* UserInterface/Views/TimelineSidebarPanel.js:
(WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar):
(WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar.toggleReplayInterface): Deleted.
* UserInterface/Views/Toolbar.js:
(WebInspector.Toolbar.prototype._handleContextMenuEvent):
* UserInterface/Views/VisualStyleSelectorTreeItem.js:
(WebInspector.VisualStyleSelectorTreeItem.prototype._handleContextMenuEvent):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebInspectorUIChangeLog">trunk/Source/WebInspectorUI/ChangeLog</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceBaseMainjs">trunk/Source/WebInspectorUI/UserInterface/Base/Main.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceControllersBreakpointPopoverControllerjs">trunk/Source/WebInspectorUI/UserInterface/Controllers/BreakpointPopoverController.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsCSSStyleDeclarationSectionjs">trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationSection.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsContextMenujs">trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenu.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDOMTreeOutlinejs">trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDataGridjs">trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsLogContentViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeBaseTreeElementjs">trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeBaseTreeElement.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsSourceCodeTextEditorjs">trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTabBarItemjs">trunk/Source/WebInspectorUI/UserInterface/Views/TabBarItem.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsTimelineSidebarPaneljs">trunk/Source/WebInspectorUI/UserInterface/Views/TimelineSidebarPanel.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsToolbarjs">trunk/Source/WebInspectorUI/UserInterface/Views/Toolbar.js</a></li>
<li><a href="#trunkSourceWebInspectorUIUserInterfaceViewsVisualStyleSelectorTreeItemjs">trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebInspectorUIChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/ChangeLog (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/ChangeLog        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/ChangeLog        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -1,3 +1,97 @@
</span><ins>+2015-11-29  Brian Burg  &lt;bburg@apple.com&gt;
+
+        Web Inspector: allow multiple UI components to add menu items upon getting a &quot;contextmenu&quot; event
+        https://bugs.webkit.org/show_bug.cgi?id=151629
+
+        Reviewed by Timothy Hatcher.
+
+        The existing Context Menu system assumes that only one UI component
+        will need to provide context menu items. But in some scenarios, there
+        are multiple UI components that could provide relevant menu items. For
+        example, right-clicking on an DOM element in the console should show
+        menu items relevant to 1) the DOM element, 2) the console in general,
+        and 3) global menu items. Existing code shows menu items provided by
+        the first object that handles the event and calls ContextMenu.show().
+
+        This patch changes behavior so that a context menu can be built up
+        by multiple 'contextmenu' event handlers. A ContextMenu instance is
+        hidden on the 'contextmenu' event object; client code calls a
+        factory method that digs out this existing context menu or creates a
+        new one as needed. To actually show the context menu through the
+        InspectorFrontendHost methods, the top-level app controller adds a
+        bubbling listener for 'contextmenu' and shows the event's context
+        menu if one has been created.
+
+        Along the way, do some cleanup. Do s/var/let/, arrowize some functions,
+        use Array.{map,some}, and simplify some other code as a result.
+
+        No new tests yet, since we can't trigger context menu easily from
+        an inspector test. All affected context menus were manually verified.
+
+        * UserInterface/Base/Main.js:
+        (WebInspector.contentLoaded):
+        * UserInterface/Controllers/BreakpointPopoverController.js:
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems):
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.editBreakpoint): Deleted.
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.removeBreakpoint): Deleted.
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.toggleBreakpoint): Deleted.
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.toggleAutoContinue): Deleted.
+        (WebInspector.BreakpointPopoverController.prototype.appendContextMenuItems.revealOriginalSourceCodeLocation): Deleted.
+        * UserInterface/Views/BreakpointTreeElement.js:
+        (WebInspector.BreakpointTreeElement.prototype.oncontextmenu):
+        * UserInterface/Views/CSSStyleDeclarationSection.js:
+        * UserInterface/Views/ContextMenu.js:
+        (WebInspector.ContextMenuItem.prototype._buildDescriptor):
+        (WebInspector.ContextMenuItem):
+        (WebInspector.ContextSubMenuItem.prototype.appendItem):
+        (WebInspector.ContextSubMenuItem.prototype.appendSubMenuItem):
+        (WebInspector.ContextSubMenuItem.prototype.appendCheckboxItem):
+        (WebInspector.ContextSubMenuItem.prototype._pushItem):
+        (WebInspector.ContextSubMenuItem.prototype._buildDescriptor):
+        (WebInspector.ContextSubMenuItem):
+        (WebInspector.ContextMenu.createFromEvent):
+        (WebInspector.ContextMenu.prototype.show):
+        (WebInspector.ContextMenu.prototype.handleEvent):
+        (WebInspector.ContextMenu.prototype._buildDescriptor):
+        * UserInterface/Views/DOMTreeOutline.js:
+        (WebInspector.DOMTreeOutline.prototype._contextMenuEventFired):
+        (WebInspector.DOMTreeOutline.prototype._populateContextMenu.logElement):
+        (WebInspector.DOMTreeOutline.prototype._populateContextMenu):
+        * UserInterface/Views/DataGrid.js:
+        (WebInspector.DataGrid.prototype._contextMenuInDataTable):
+        * UserInterface/Views/DebuggerSidebarPanel.js:
+        (WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement):
+        (WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement.removeAllResourceBreakpoints): Deleted.
+        (WebInspector.DebuggerSidebarPanel.prototype._breakpointTreeOutlineContextMenuTreeElement.toggleAllResourceBreakpoints): Deleted.
+        * UserInterface/Views/LogContentView.js:
+        (WebInspector.LogContentView.prototype._handleContextMenuEvent):
+        * UserInterface/Views/ObjectPreviewView.js:
+        (WebInspector.ObjectPreviewView.prototype._contextMenuHandler):
+        (WebInspector.ObjectPreviewView):
+        * UserInterface/Views/ObjectTreeBaseTreeElement.js:
+        (WebInspector.ObjectTreeBaseTreeElement.prototype._contextMenuHandler):
+        (WebInspector.ObjectTreeBaseTreeElement.prototype._appendMenusItemsForObject):
+        (WebInspector.ObjectTreeBaseTreeElement):
+        * UserInterface/Views/SourceCodeTextEditor.js:
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu):
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.continueToLocation): Deleted.
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.addBreakpoint): Deleted.
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.revealInSidebar): Deleted.
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.removeBreakpoints): Deleted.
+        (WebInspector.SourceCodeTextEditor.prototype.textEditorGutterContextMenu.toggleBreakpoints): Deleted.
+        * UserInterface/Views/TabBarItem.js:
+        (WebInspector.TabBarItem.prototype._handleContextMenuEvent):
+        (WebInspector.TabBarItem):
+        (WebInspector.TabBarItem.prototype._handleContextMenuEvent.closeTab): Deleted.
+        (WebInspector.TabBarItem.prototype._handleContextMenuEvent.closeOtherTabs): Deleted.
+        * UserInterface/Views/TimelineSidebarPanel.js:
+        (WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar):
+        (WebInspector.TimelineSidebarPanel.prototype._contextMenuNavigationBarOrStatusBar.toggleReplayInterface): Deleted.
+        * UserInterface/Views/Toolbar.js:
+        (WebInspector.Toolbar.prototype._handleContextMenuEvent):
+        * UserInterface/Views/VisualStyleSelectorTreeItem.js:
+        (WebInspector.VisualStyleSelectorTreeItem.prototype._handleContextMenuEvent):
+
</ins><span class="cx"> 2015-11-28  Devin Rousso  &lt;dcrousso+webkit@gmail.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Styles sidebar placeholder is misaligned
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceBaseMainjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Base/Main.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Base/Main.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -190,6 +190,7 @@
</span><span class="cx">     window.addEventListener(&quot;keyup&quot;, this._windowKeyUp.bind(this));
</span><span class="cx">     window.addEventListener(&quot;mousemove&quot;, this._mouseMoved.bind(this), true);
</span><span class="cx">     window.addEventListener(&quot;pagehide&quot;, this._pageHidden.bind(this));
</span><ins>+    window.addEventListener(&quot;contextmenu&quot;, this._contextMenuRequested.bind(this));
</ins><span class="cx"> 
</span><span class="cx">     // Add platform style classes so the UI can be tweaked per-platform.
</span><span class="cx">     document.body.classList.add(WebInspector.Platform.name + &quot;-platform&quot;);
</span><span class="lines">@@ -1325,6 +1326,14 @@
</span><span class="cx">     this._saveCookieForOpenTabs();
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WebInspector._contextMenuRequested = function(event)
+{
+    const onlyExisting = true;
+    let proposedContextMenu = WebInspector.ContextMenu.createFromEvent(event, onlyExisting);
+    if (proposedContextMenu)
+        proposedContextMenu.show();
+};
+
</ins><span class="cx"> WebInspector._undock = function(event)
</span><span class="cx"> {
</span><span class="cx">     InspectorFrontendHost.requestSetDockSide(&quot;undocked&quot;);
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceControllersBreakpointPopoverControllerjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Controllers/BreakpointPopoverController.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Controllers/BreakpointPopoverController.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Controllers/BreakpointPopoverController.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -40,8 +40,7 @@
</span><span class="cx">     {
</span><span class="cx">         console.assert(document.body.contains(breakpointDisplayElement), &quot;Breakpoint popover display element must be in the DOM.&quot;);
</span><span class="cx"> 
</span><del>-        function editBreakpoint()
-        {
</del><ins>+        const editBreakpoint = () =&gt; {
</ins><span class="cx">             console.assert(!this._popover, &quot;Breakpoint popover already exists.&quot;);
</span><span class="cx">             if (this._popover)
</span><span class="cx">                 return;
</span><span class="lines">@@ -53,50 +52,46 @@
</span><span class="cx">             let bounds = WebInspector.Rect.rectFromClientRect(breakpointDisplayElement.getBoundingClientRect());
</span><span class="cx">             bounds.origin.x -= 1; // Move the anchor left one pixel so it looks more centered.
</span><span class="cx">             this._popover.present(bounds.pad(2), [WebInspector.RectEdge.MAX_Y]);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function removeBreakpoint()
-        {
</del><ins>+        const removeBreakpoint = () =&gt; {
</ins><span class="cx">             WebInspector.debuggerManager.removeBreakpoint(breakpoint);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function toggleBreakpoint()
-        {
</del><ins>+        const toggleBreakpoint = () =&gt; {
</ins><span class="cx">             breakpoint.disabled = !breakpoint.disabled;
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function toggleAutoContinue()
-        {
</del><ins>+        const toggleAutoContinue = () =&gt; {
</ins><span class="cx">             breakpoint.autoContinue = !breakpoint.autoContinue;
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function revealOriginalSourceCodeLocation()
-        {
</del><ins>+        const revealOriginalSourceCodeLocation = () =&gt; {
</ins><span class="cx">             WebInspector.showOriginalOrFormattedSourceCodeLocation(breakpoint.sourceCodeLocation);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><span class="cx">         if (WebInspector.debuggerManager.isBreakpointEditable(breakpoint))
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Edit Breakpoint…&quot;), editBreakpoint.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Edit Breakpoint…&quot;), editBreakpoint);
</ins><span class="cx"> 
</span><span class="cx">         if (breakpoint.autoContinue &amp;&amp; !breakpoint.disabled) {
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoint&quot;), toggleBreakpoint.bind(this));
-            contextMenu.appendItem(WebInspector.UIString(&quot;Cancel Automatic Continue&quot;), toggleAutoContinue.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoint&quot;), toggleBreakpoint);
+            contextMenu.appendItem(WebInspector.UIString(&quot;Cancel Automatic Continue&quot;), toggleAutoContinue);
</ins><span class="cx">         } else if (!breakpoint.disabled)
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoint&quot;), toggleBreakpoint.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoint&quot;), toggleBreakpoint);
</ins><span class="cx">         else
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoint&quot;), toggleBreakpoint.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoint&quot;), toggleBreakpoint);
</ins><span class="cx"> 
</span><span class="cx">         if (!breakpoint.autoContinue &amp;&amp; !breakpoint.disabled &amp;&amp; breakpoint.actions.length)
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Set to Automatically Continue&quot;), toggleAutoContinue.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Set to Automatically Continue&quot;), toggleAutoContinue);
</ins><span class="cx"> 
</span><span class="cx">         if (WebInspector.debuggerManager.isBreakpointRemovable(breakpoint)) {
</span><span class="cx">             contextMenu.appendSeparator();
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoint&quot;), removeBreakpoint.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoint&quot;), removeBreakpoint);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (breakpoint._sourceCodeLocation.hasMappedLocation()) {
</span><span class="cx">             contextMenu.appendSeparator();
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Reveal in Original Resource&quot;), revealOriginalSourceCodeLocation.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Reveal in Original Resource&quot;), revealOriginalSourceCodeLocation);
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsBreakpointTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/BreakpointTreeElement.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -99,9 +99,8 @@
</span><span class="cx"> 
</span><span class="cx">     oncontextmenu(event)
</span><span class="cx">     {
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx">         WebInspector.breakpointPopoverController.appendContextMenuItems(contextMenu, this._breakpoint, this._statusImageElement);
</span><del>-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     onattach()
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsCSSStyleDeclarationSectionjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationSection.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationSection.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/CSSStyleDeclarationSection.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -431,22 +431,20 @@
</span><span class="cx">         if (window.getSelection().toString().length)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><span class="cx">         if (!this._style.inherited) {
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Duplicate Selector&quot;), function() {
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Duplicate Selector&quot;), () =&gt; {
</ins><span class="cx">                 if (this._delegate &amp;&amp; typeof this._delegate.cssStyleDeclarationSectionFocusNextNewInspectorRule === &quot;function&quot;)
</span><span class="cx">                     this._delegate.cssStyleDeclarationSectionFocusNextNewInspectorRule();
</span><span class="cx"> 
</span><span class="cx">                 this._style.nodeStyles.addRule(this._currentSelectorText);
</span><del>-            }.bind(this));
</del><ins>+            });
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        contextMenu.appendItem(WebInspector.UIString(&quot;Copy Rule&quot;), function() {
</del><ins>+        contextMenu.appendItem(WebInspector.UIString(&quot;Copy Rule&quot;), () =&gt; {
</ins><span class="cx">             InspectorFrontendHost.copyText(this._style.generateCSSRuleString());
</span><del>-        }.bind(this));
-
-        contextMenu.show();
</del><ins>+        });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _toggleRuleOnOff()
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsContextMenujs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenu.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenu.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ContextMenu.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -73,11 +73,11 @@
</span><span class="cx">     {
</span><span class="cx">         switch (this._type) {
</span><span class="cx">         case &quot;item&quot;:
</span><del>-            return { type: &quot;item&quot;, id: this._id, label: this._label, enabled: !this._disabled };
</del><ins>+            return {type: &quot;item&quot;, id: this._id, label: this._label, enabled: !this._disabled};
</ins><span class="cx">         case &quot;separator&quot;:
</span><del>-            return { type: &quot;separator&quot; };
</del><ins>+            return {type: &quot;separator&quot;};
</ins><span class="cx">         case &quot;checkbox&quot;:
</span><del>-            return { type: &quot;checkbox&quot;, id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled };
</del><ins>+            return {type: &quot;checkbox&quot;, id: this._id, label: this._label, checked: !!this._checked, enabled: !this._disabled};
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> };
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> 
</span><span class="cx">     appendItem(label, handler, disabled)
</span><span class="cx">     {
</span><del>-        var item = new WebInspector.ContextMenuItem(this._contextMenu, &quot;item&quot;, label, disabled);
</del><ins>+        let item = new WebInspector.ContextMenuItem(this._contextMenu, &quot;item&quot;, label, disabled);
</ins><span class="cx">         this._pushItem(item);
</span><span class="cx">         this._contextMenu._setHandler(item.id(), handler);
</span><span class="cx">         return item;
</span><span class="lines">@@ -103,14 +103,14 @@
</span><span class="cx"> 
</span><span class="cx">     appendSubMenuItem(label, disabled)
</span><span class="cx">     {
</span><del>-        var item = new WebInspector.ContextSubMenuItem(this._contextMenu, label, disabled);
</del><ins>+        let item = new WebInspector.ContextSubMenuItem(this._contextMenu, label, disabled);
</ins><span class="cx">         this._pushItem(item);
</span><span class="cx">         return item;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     appendCheckboxItem(label, handler, checked, disabled)
</span><span class="cx">     {
</span><del>-        var item = new WebInspector.ContextMenuItem(this._contextMenu, &quot;checkbox&quot;, label, disabled, checked);
</del><ins>+        let item = new WebInspector.ContextMenuItem(this._contextMenu, &quot;checkbox&quot;, label, disabled, checked);
</ins><span class="cx">         this._pushItem(item);
</span><span class="cx">         this._contextMenu._setHandler(item.id(), handler);
</span><span class="cx">         return item;
</span><span class="lines">@@ -126,7 +126,7 @@
</span><span class="cx">     {
</span><span class="cx">         if (this._pendingSeparator) {
</span><span class="cx">             this._items.push(new WebInspector.ContextMenuItem(this._contextMenu, &quot;separator&quot;));
</span><del>-            delete this._pendingSeparator;
</del><ins>+            this._pendingSeparator = null;
</ins><span class="cx">         }
</span><span class="cx">         this._items.push(item);
</span><span class="cx">     }
</span><span class="lines">@@ -138,10 +138,8 @@
</span><span class="cx"> 
</span><span class="cx">     _buildDescriptor()
</span><span class="cx">     {
</span><del>-        var result = { type: &quot;subMenu&quot;, label: this._label, enabled: !this._disabled, subItems: [] };
-        for (var i = 0; i &lt; this._items.length; ++i)
-            result.subItems.push(this._items[i]._buildDescriptor());
-        return result;
</del><ins>+        let subItems = this._items.map((item) =&gt; item._buildDescriptor());
+        return {type: &quot;subMenu&quot;, label: this._label, enabled: !this._disabled, subItems};
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="lines">@@ -158,6 +156,14 @@
</span><span class="cx"> 
</span><span class="cx">     // Static
</span><span class="cx"> 
</span><ins>+    static createFromEvent(event, onlyExisting = false)
+    {
+        if (!event[WebInspector.ContextMenu.ProposedMenuSymbol] &amp;&amp; !onlyExisting)
+            event[WebInspector.ContextMenu.ProposedMenuSymbol] = new WebInspector.ContextMenu(event);
+
+        return event[WebInspector.ContextMenu.ProposedMenuSymbol] || null;
+    }
+
</ins><span class="cx">     static contextMenuItemSelected(id)
</span><span class="cx">     {
</span><span class="cx">         if (WebInspector.ContextMenu._lastContextMenu)
</span><span class="lines">@@ -181,8 +187,7 @@
</span><span class="cx">     {
</span><span class="cx">         console.assert(this._event instanceof MouseEvent);
</span><span class="cx"> 
</span><del>-        var menuObject = this._buildDescriptor();
-
</del><ins>+        let menuObject = this._buildDescriptor();
</ins><span class="cx">         if (menuObject.length) {
</span><span class="cx">             WebInspector.ContextMenu._lastContextMenu = this;
</span><span class="cx"> 
</span><span class="lines">@@ -204,7 +209,7 @@
</span><span class="cx">     {
</span><span class="cx">         this._event.target.removeEventListener(&quot;contextmenu&quot;, this, true);
</span><span class="cx">         InspectorFrontendHost.showContextMenu(event, this._menuObject);
</span><del>-        delete this._menuObject;
</del><ins>+        this._menuObject = null;
</ins><span class="cx"> 
</span><span class="cx">         event.stopImmediatePropagation();
</span><span class="cx">     }
</span><span class="lines">@@ -219,10 +224,7 @@
</span><span class="cx"> 
</span><span class="cx">     _buildDescriptor()
</span><span class="cx">     {
</span><del>-        var result = [];
-        for (var i = 0; i &lt; this._items.length; ++i)
-            result.push(this._items[i]._buildDescriptor());
-        return result;
</del><ins>+        return this._items.map((item) =&gt; item._buildDescriptor());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _itemSelected(id)
</span><span class="lines">@@ -231,3 +233,5 @@
</span><span class="cx">             this._handlers[id].call(this);
</span><span class="cx">     }
</span><span class="cx"> };
</span><ins>+
+WebInspector.ContextMenu.ProposedMenuSymbol = Symbol(&quot;context-menu-proposed-menu&quot;);
</ins><span class="cx">\ No newline at end of file
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDOMTreeOutlinejs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DOMTreeOutline.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -485,13 +485,12 @@
</span><span class="cx"> 
</span><span class="cx">     _contextMenuEventFired(event)
</span><span class="cx">     {
</span><del>-        var treeElement = this._treeElementFromEvent(event);
</del><ins>+        let treeElement = this._treeElementFromEvent(event);
</ins><span class="cx">         if (!treeElement)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx">         this.populateContextMenu(contextMenu, event, treeElement);
</span><del>-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _updateModifiedNodes()
</span><span class="lines">@@ -512,7 +511,7 @@
</span><span class="cx">             WebInspector.RemoteObject.resolveNode(domNode, WebInspector.RuntimeManager.ConsoleObjectGroup, function(remoteObject) {
</span><span class="cx">                 if (!remoteObject)
</span><span class="cx">                     return;
</span><del>-                var text = WebInspector.UIString(&quot;Selected Element&quot;);
</del><ins>+                let text = WebInspector.UIString(&quot;Selected Element&quot;);
</ins><span class="cx">                 WebInspector.consoleLogViewController.appendImmediateExecutionWithResult(text, remoteObject, true);
</span><span class="cx">             });
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDataGridjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DataGrid.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -1101,9 +1101,9 @@
</span><span class="cx"> 
</span><span class="cx">     _contextMenuInDataTable(event)
</span><span class="cx">     {
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><del>-        var gridNode = this.dataGridNodeFromNode(event.target);
</del><ins>+        let gridNode = this.dataGridNodeFromNode(event.target);
</ins><span class="cx">         if (this.dataGrid._refreshCallback &amp;&amp; (!gridNode || gridNode !== this.placeholderNode))
</span><span class="cx">             contextMenu.appendItem(WebInspector.UIString(&quot;Refresh&quot;), this._refreshCallback.bind(this));
</span><span class="cx"> 
</span><span class="lines">@@ -1114,17 +1114,15 @@
</span><span class="cx">                 if (gridNode === this.placeholderNode)
</span><span class="cx">                     contextMenu.appendItem(WebInspector.UIString(&quot;Add New&quot;), this._startEditing.bind(this, event.target));
</span><span class="cx">                 else {
</span><del>-                    var element = event.target.enclosingNodeOrSelfWithNodeName(&quot;td&quot;);
-                    var columnIdentifier = element.__columnIdentifier;
-                    var columnTitle = this.dataGrid.columns.get(columnIdentifier)[&quot;title&quot;];
</del><ins>+                    let element = event.target.enclosingNodeOrSelfWithNodeName(&quot;td&quot;);
+                    let columnIdentifier = element.__columnIdentifier;
+                    let columnTitle = this.dataGrid.columns.get(columnIdentifier)[&quot;title&quot;];
</ins><span class="cx">                     contextMenu.appendItem(WebInspector.UIString(&quot;Edit “%s”&quot;).format(columnTitle), this._startEditing.bind(this, event.target));
</span><span class="cx">                 }
</span><span class="cx">             }
</span><span class="cx">             if (this.dataGrid._deleteCallback &amp;&amp; gridNode !== this.placeholderNode)
</span><span class="cx">                 contextMenu.appendItem(WebInspector.UIString(&quot;Delete&quot;), this._deleteCallback.bind(this, gridNode));
</span><span class="cx">         }
</span><del>-
-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _clickInDataTable(event)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsDebuggerSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -579,32 +579,23 @@
</span><span class="cx">         if (!(treeElement instanceof WebInspector.ResourceTreeElement) &amp;&amp; !(treeElement instanceof WebInspector.ScriptTreeElement))
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var breakpoints = this._breakpointsBeneathTreeElement(treeElement);
-        var shouldDisable = false;
-        for (var i = 0; i &lt; breakpoints.length; ++i) {
-            if (!breakpoints[i].disabled) {
-                shouldDisable = true;
-                break;
-            }
-        }
</del><ins>+        let breakpoints = this._breakpointsBeneathTreeElement(treeElement);
+        let shouldDisable = breakpoints.some((breakpoint) =&gt; !breakpoint.disabled);
</ins><span class="cx"> 
</span><del>-        function removeAllResourceBreakpoints()
-        {
</del><ins>+        let removeAllResourceBreakpoints = () =&gt; {
</ins><span class="cx">             this._removeAllBreakpoints(breakpoints);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function toggleAllResourceBreakpoints()
-        {
</del><ins>+        let toggleAllResourceBreakpoints = () =&gt; {
</ins><span class="cx">             this._toggleAllBreakpoints(breakpoints, shouldDisable);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx">         if (shouldDisable)
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoints&quot;), toggleAllResourceBreakpoints.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoints&quot;), toggleAllResourceBreakpoints);
</ins><span class="cx">         else
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoints&quot;), toggleAllResourceBreakpoints.bind(this));
-        contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoints&quot;), removeAllResourceBreakpoints.bind(this));
-        contextMenu.show();
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoints&quot;), toggleAllResourceBreakpoints);
+        contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoints&quot;), removeAllResourceBreakpoints);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _treeElementSelected(treeElement, selectedByUser)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsLogContentViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/LogContentView.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -352,15 +352,12 @@
</span><span class="cx">         if (event.target.enclosingNodeOrSelfWithNodeName(&quot;a&quot;))
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx">         contextMenu.appendItem(WebInspector.UIString(&quot;Clear Log&quot;), this._clearLog.bind(this));
</span><span class="cx">         contextMenu.appendSeparator();
</span><span class="cx"> 
</span><del>-        var clearLogOnReloadUIString = WebInspector.logManager.clearLogOnNavigateSetting.value ? WebInspector.UIString(&quot;Keep Log on Navigation&quot;) : WebInspector.UIString(&quot;Clear Log on Navigation&quot;);
-
</del><ins>+        let clearLogOnReloadUIString = WebInspector.logManager.clearLogOnNavigateSetting.value ? WebInspector.UIString(&quot;Keep Log on Navigation&quot;) : WebInspector.UIString(&quot;Clear Log on Navigation&quot;);
</ins><span class="cx">         contextMenu.appendItem(clearLogOnReloadUIString, this._toggleClearLogOnNavigateSetting.bind(this));
</span><del>-
-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _mousedown(event)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectPreviewViewjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectPreviewView.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -261,20 +261,18 @@
</span><span class="cx"> 
</span><span class="cx">     _contextMenuHandler(event)
</span><span class="cx">     {
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><del>-        contextMenu.appendItem(WebInspector.UIString(&quot;Log Value&quot;), function() {
-            var remoteObject = this._remoteObject;
-            var isImpossible = !this._propertyPath || this._propertyPath.isFullPathImpossible();
-            var text = isImpossible ? WebInspector.UIString(&quot;Selected Value&quot;) : this._propertyPath.displayPath(WebInspector.PropertyPath.Type.Value);
</del><ins>+        contextMenu.appendItem(WebInspector.UIString(&quot;Log Value&quot;), () =&gt; {
+            let remoteObject = this._remoteObject;
+            let isImpossible = !this._propertyPath || this._propertyPath.isFullPathImpossible();
+            let text = isImpossible ? WebInspector.UIString(&quot;Selected Value&quot;) : this._propertyPath.displayPath(WebInspector.PropertyPath.Type.Value);
</ins><span class="cx"> 
</span><span class="cx">             if (!isImpossible)
</span><span class="cx">                 WebInspector.quickConsole.prompt.pushHistoryItem(text);
</span><span class="cx"> 
</span><span class="cx">             WebInspector.consoleLogViewController.appendImmediateExecutionWithResult(text, this._remoteObject, isImpossible);
</span><del>-        }.bind(this));
-
-        contextMenu.show();        
</del><ins>+        });
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsObjectTreeBaseTreeElementjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeBaseTreeElement.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeBaseTreeElement.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/ObjectTreeBaseTreeElement.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -182,7 +182,7 @@
</span><span class="cx"> 
</span><span class="cx">     _contextMenuHandler(event)
</span><span class="cx">     {
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><span class="cx">         if (typeof this.treeOutline.objectTreeElementAddContextMenuItems === &quot;function&quot;) {
</span><span class="cx">             this.treeOutline.objectTreeElementAddContextMenuItems(this, contextMenu);
</span><span class="lines">@@ -190,30 +190,24 @@
</span><span class="cx">                 contextMenu.appendSeparator();
</span><span class="cx">         }             
</span><span class="cx"> 
</span><del>-        var resolvedValue = this.resolvedValue();
-        if (!resolvedValue) {
-            if (!contextMenu.isEmpty())
-                contextMenu.show();
</del><ins>+        if (!this.resolvedValue())
</ins><span class="cx">             return;
</span><del>-        }
</del><span class="cx"> 
</span><span class="cx">         if (this._property &amp;&amp; this._property.symbol)
</span><span class="cx">             contextMenu.appendItem(WebInspector.UIString(&quot;Log Symbol&quot;), this._logSymbolProperty.bind(this));
</span><span class="cx"> 
</span><span class="cx">         contextMenu.appendItem(WebInspector.UIString(&quot;Log Value&quot;), this._logValue.bind(this));
</span><span class="cx"> 
</span><del>-        var propertyPath = this.resolvedValuePropertyPath();
</del><ins>+        let propertyPath = this.resolvedValuePropertyPath();
</ins><span class="cx">         if (propertyPath &amp;&amp; !propertyPath.isFullPathImpossible()) {
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Copy Path to Property&quot;), function() {
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Copy Path to Property&quot;), () =&gt; {
</ins><span class="cx">                 InspectorFrontendHost.copyText(propertyPath.displayPath(WebInspector.PropertyPath.Type.Value));
</span><del>-            }.bind(this));
</del><ins>+            });
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         contextMenu.appendSeparator();
</span><span class="cx"> 
</span><span class="cx">         this._appendMenusItemsForObject(contextMenu, resolvedValue);
</span><del>-
-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _appendMenusItemsForObject(contextMenu, resolvedValue)
</span><span class="lines">@@ -226,12 +220,12 @@
</span><span class="cx">                         if (error)
</span><span class="cx">                             return;
</span><span class="cx"> 
</span><del>-                        var location = response.location;
-                        var sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
</del><ins>+                        let location = response.location;
+                        let sourceCode = WebInspector.debuggerManager.scriptForIdentifier(location.scriptId);
</ins><span class="cx">                         if (!sourceCode)
</span><span class="cx">                             return;
</span><span class="cx"> 
</span><del>-                        var sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber || 0);
</del><ins>+                        let sourceCodeLocation = sourceCode.createSourceCodeLocation(location.lineNumber, location.columnNumber || 0);
</ins><span class="cx">                         WebInspector.showSourceCodeLocation(sourceCodeLocation);
</span><span class="cx">                     });
</span><span class="cx">                 });
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsSourceCodeTextEditorjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/SourceCodeTextEditor.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -971,46 +971,36 @@
</span><span class="cx"> 
</span><span class="cx">         event.preventDefault();
</span><span class="cx"> 
</span><del>-        function continueToLocation()
-        {
-            WebInspector.debuggerManager.continueToLocation(script.id, sourceCodeLocation.lineNumber, sourceCodeLocation.columnNumber);
-        }
-
-        function addBreakpoint()
-        {
-            var data = this.textEditorBreakpointAdded(this, lineNumber, columnNumber);
</del><ins>+        let addBreakpoint = () =&gt; {
+            let data = this.textEditorBreakpointAdded(this, lineNumber, columnNumber);
</ins><span class="cx">             this.setBreakpointInfoForLineAndColumn(data.lineNumber, data.columnNumber, data.breakpointInfo);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function revealInSidebar()
-        {
-            WebInspector.showDebuggerTab(breakpoint);
-        }
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
-
</del><span class="cx">         // Paused. Add Continue to Here option only if we have a script identifier for the location.
</span><span class="cx">         if (WebInspector.debuggerManager.paused) {
</span><del>-            var editorLineInfo = {lineNumber, columnNumber};
-            var unformattedLineInfo = this._unformattedLineInfoForEditorLineInfo(editorLineInfo);
-            var sourceCodeLocation = this._sourceCode.createSourceCodeLocation(unformattedLineInfo.lineNumber, unformattedLineInfo.columnNumber);
</del><ins>+            let editorLineInfo = {lineNumber, columnNumber};
+            let unformattedLineInfo = this._unformattedLineInfoForEditorLineInfo(editorLineInfo);
+            let sourceCodeLocation = this._sourceCode.createSourceCodeLocation(unformattedLineInfo.lineNumber, unformattedLineInfo.columnNumber);
</ins><span class="cx"> 
</span><ins>+            let script;
</ins><span class="cx">             if (sourceCodeLocation.sourceCode instanceof WebInspector.Script)
</span><del>-                var script = sourceCodeLocation.sourceCode;
</del><ins>+                script = sourceCodeLocation.sourceCode;
</ins><span class="cx">             else if (sourceCodeLocation.sourceCode instanceof WebInspector.Resource)
</span><del>-                var script = sourceCodeLocation.sourceCode.scriptForLocation(sourceCodeLocation);
</del><ins>+                script = sourceCodeLocation.sourceCode.scriptForLocation(sourceCodeLocation);
</ins><span class="cx"> 
</span><span class="cx">             if (script) {
</span><del>-
-                contextMenu.appendItem(WebInspector.UIString(&quot;Continue to Here&quot;), continueToLocation);
</del><ins>+                contextMenu.appendItem(WebInspector.UIString(&quot;Continue to Here&quot;), () =&gt; {
+                    WebInspector.debuggerManager.continueToLocation(script.id, sourceCodeLocation.lineNumber, sourceCodeLocation.columnNumber);
+                });
</ins><span class="cx">                 contextMenu.appendSeparator();
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        var breakpoints = [];
-        for (var i = 0; i &lt; editorBreakpoints.length; ++i) {
-            var lineInfo = editorBreakpoints[i];
-            var breakpoint = this._breakpointForEditorLineInfo(lineInfo);
</del><ins>+        let breakpoints = [];
+        for (let lineInfo of editorBreakpoints) {
+            let breakpoint = this._breakpointForEditorLineInfo(lineInfo);
</ins><span class="cx">             console.assert(breakpoint);
</span><span class="cx">             if (breakpoint)
</span><span class="cx">                 breakpoints.push(breakpoint);
</span><span class="lines">@@ -1018,9 +1008,7 @@
</span><span class="cx"> 
</span><span class="cx">         // No breakpoints.
</span><span class="cx">         if (!breakpoints.length) {
</span><del>-
</del><span class="cx">             contextMenu.appendItem(WebInspector.UIString(&quot;Add Breakpoint&quot;), addBreakpoint.bind(this));
</span><del>-            contextMenu.show();
</del><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -1030,43 +1018,33 @@
</span><span class="cx"> 
</span><span class="cx">             if (!WebInspector.isShowingDebuggerTab()) {
</span><span class="cx">                 contextMenu.appendSeparator();
</span><del>-                contextMenu.appendItem(WebInspector.UIString(&quot;Reveal in Debugger Tab&quot;), revealInSidebar);
</del><ins>+                contextMenu.appendItem(WebInspector.UIString(&quot;Reveal in Debugger Tab&quot;), () =&gt; {
+                    WebInspector.showDebuggerTab(breakpoint);
+                });
</ins><span class="cx">             }
</span><span class="cx"> 
</span><del>-            contextMenu.show();
</del><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         // Multiple breakpoints.
</span><del>-        var shouldDisable = false;
-        for (var i = 0; i &lt; breakpoints.length; ++i) {
-            if (!breakpoints[i].disabled) {
-                shouldDisable = true;
-                break;
-            }
-        }
-
-        function removeBreakpoints()
-        {
-            for (var i = 0; i &lt; breakpoints.length; ++i) {
-                var breakpoint = breakpoints[i];
</del><ins>+        let removeBreakpoints = () =&gt; {
+            for (let breakpoint of breakpoints) {
</ins><span class="cx">                 if (WebInspector.debuggerManager.isBreakpointRemovable(breakpoint))
</span><span class="cx">                     WebInspector.debuggerManager.removeBreakpoint(breakpoint);
</span><span class="cx">             }
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function toggleBreakpoints()
-        {
-            for (var i = 0; i &lt; breakpoints.length; ++i)
-                breakpoints[i].disabled = shouldDisable;
-        }
</del><ins>+        let shouldDisable = breakpoints.some((breakpoint) =&gt; !breakpoint.disabled);
+        let toggleBreakpoints = (shouldDisable) =&gt; {
+            for (let breakpoint of breakpoints)
+                breakpoint.disabled = shouldDisable;
+        };
</ins><span class="cx"> 
</span><span class="cx">         if (shouldDisable)
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoints&quot;), toggleBreakpoints.bind(this));
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Disable Breakpoints&quot;), toggleBreakpoints);
</ins><span class="cx">         else
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoints&quot;), toggleBreakpoints.bind(this));
-        contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoints&quot;), removeBreakpoints.bind(this));
-        contextMenu.show();
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Enable Breakpoints&quot;), toggleBreakpoints);
+        contextMenu.appendItem(WebInspector.UIString(&quot;Delete Breakpoints&quot;), removeBreakpoints);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     textEditorBreakpointAdded(textEditor, lineNumber, columnNumber)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTabBarItemjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TabBarItem.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TabBarItem.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TabBarItem.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -180,34 +180,24 @@
</span><span class="cx">         if (!this._parentTabBar)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        var hasOtherNonPinnedTabs = false;
-        for (var item of this._parentTabBar.tabBarItems) {
-            if (item === this || item.pinned)
-                continue;
-            hasOtherNonPinnedTabs = true;
-            break; 
-        }
-
-        function closeTab()
-        {
</del><ins>+        let closeTab = () =&gt; {
</ins><span class="cx">             this._parentTabBar.removeTabBarItem(this);
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        function closeOtherTabs()
-        {
-            var tabBarItems = this._parentTabBar.tabBarItems;
-            for (var i = tabBarItems.length - 1; i &gt;= 0; --i) {
-                var item = tabBarItems[i];
</del><ins>+        let closeOtherTabs = () =&gt; {
+            let tabBarItems = this._parentTabBar.tabBarItems;
+            for (let i = tabBarItems.length - 1; i &gt;= 0; --i) {
+                let item = tabBarItems[i];
</ins><span class="cx">                 if (item === this || item.pinned)
</span><span class="cx">                     continue;
</span><span class="cx">                 this._parentTabBar.removeTabBarItem(item);
</span><span class="cx">             }
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
-        contextMenu.appendItem(WebInspector.UIString(&quot;Close Tab&quot;), closeTab.bind(this), !hasOtherNonPinnedTabs);
-        contextMenu.appendItem(WebInspector.UIString(&quot;Close Other Tabs&quot;), closeOtherTabs.bind(this), !hasOtherNonPinnedTabs);
-        contextMenu.show();
</del><ins>+        let hasOtherNonPinnedTabs = this._parentTabBar.tabBarItems.some((item) =&gt; item !== this &amp;&amp; !item.pinned);
+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
+        contextMenu.appendItem(WebInspector.UIString(&quot;Close Tab&quot;), closeTab, !hasOtherNonPinnedTabs);
+        contextMenu.appendItem(WebInspector.UIString(&quot;Close Other Tabs&quot;), closeOtherTabs, !hasOtherNonPinnedTabs);
</ins><span class="cx">     }
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsTimelineSidebarPaneljs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/TimelineSidebarPanel.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/TimelineSidebarPanel.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/TimelineSidebarPanel.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -944,16 +944,15 @@
</span><span class="cx">         if (!window.ReplayAgent)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        function toggleReplayInterface() {
</del><ins>+        let toggleReplayInterface = () =&gt; {
</ins><span class="cx">             WebInspector.showReplayInterfaceSetting.value = !WebInspector.showReplayInterfaceSetting.value;
</span><del>-        }
</del><ins>+        };
</ins><span class="cx"> 
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx">         if (WebInspector.showReplayInterfaceSetting.value)
</span><span class="cx">             contextMenu.appendItem(WebInspector.UIString(&quot;Hide Replay Controls&quot;), toggleReplayInterface);
</span><span class="cx">         else
</span><span class="cx">             contextMenu.appendItem(WebInspector.UIString(&quot;Show Replay Controls&quot;), toggleReplayInterface);
</span><del>-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _replayCaptureButtonClicked()
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsToolbarjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/Toolbar.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/Toolbar.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/Toolbar.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -199,7 +199,7 @@
</span><span class="cx"> 
</span><span class="cx">     _handleContextMenuEvent(event)
</span><span class="cx">     {
</span><del>-        var contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><span class="cx">         contextMenu.appendCheckboxItem(WebInspector.UIString(&quot;Icon and Text (Vertical)&quot;), this._changeDisplayMode.bind(this, WebInspector.Toolbar.DisplayMode.IconAndLabelVertical), this._displayMode === WebInspector.Toolbar.DisplayMode.IconAndLabelVertical);
</span><span class="cx">         contextMenu.appendCheckboxItem(WebInspector.UIString(&quot;Icon and Text (Horizontal)&quot;), this._changeDisplayMode.bind(this, WebInspector.Toolbar.DisplayMode.IconAndLabelHorizontal), this._displayMode === WebInspector.Toolbar.DisplayMode.IconAndLabelHorizontal);
</span><span class="lines">@@ -210,8 +210,6 @@
</span><span class="cx">             contextMenu.appendSeparator();
</span><span class="cx">             contextMenu.appendCheckboxItem(WebInspector.UIString(&quot;Small Icons&quot;), this._toggleSmallIcons.bind(this), this._sizeMode === WebInspector.Toolbar.SizeMode.Small);
</span><span class="cx">         }
</span><del>-
-        contextMenu.show();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _changeDisplayMode(displayMode)
</span></span></pre></div>
<a id="trunkSourceWebInspectorUIUserInterfaceViewsVisualStyleSelectorTreeItemjs"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js (192788 => 192789)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js        2015-11-29 22:03:18 UTC (rev 192788)
+++ trunk/Source/WebInspectorUI/UserInterface/Views/VisualStyleSelectorTreeItem.js        2015-11-30 00:39:08 UTC (rev 192789)
</span><span class="lines">@@ -132,27 +132,25 @@
</span><span class="cx"> 
</span><span class="cx">     _handleContextMenuEvent(event)
</span><span class="cx">     {
</span><del>-        let contextMenu = new WebInspector.ContextMenu(event);
</del><ins>+        let contextMenu = WebInspector.ContextMenu.createFromEvent(event);
</ins><span class="cx"> 
</span><span class="cx">         if (this.representedObject.ownerRule) {
</span><del>-            contextMenu.appendItem(WebInspector.UIString(&quot;Show Source&quot;), function() {
</del><ins>+            contextMenu.appendItem(WebInspector.UIString(&quot;Show Source&quot;), () =&gt; {
</ins><span class="cx">                 if (event.metaKey)
</span><span class="cx">                     WebInspector.showOriginalUnformattedSourceCodeLocation(this.representedObject.ownerRule.sourceCodeLocation);
</span><span class="cx">                 else
</span><span class="cx">                     WebInspector.showSourceCodeLocation(this.representedObject.ownerRule.sourceCodeLocation);
</span><del>-            }.bind(this));
</del><ins>+            });
</ins><span class="cx">         }
</span><span class="cx"> 
</span><del>-        contextMenu.appendItem(WebInspector.UIString(&quot;Copy Rule&quot;), function() {
</del><ins>+        contextMenu.appendItem(WebInspector.UIString(&quot;Copy Rule&quot;), () =&gt; {
</ins><span class="cx">             InspectorFrontendHost.copyText(this.representedObject.generateCSSRuleString());
</span><del>-        }.bind(this));
</del><ins>+        });
</ins><span class="cx"> 
</span><del>-        contextMenu.appendItem(WebInspector.UIString(&quot;Reset&quot;), function() {
</del><ins>+        contextMenu.appendItem(WebInspector.UIString(&quot;Reset&quot;), () =&gt; {
</ins><span class="cx">             this.representedObject.resetText();
</span><span class="cx">             this.dispatchEventToListeners(WebInspector.VisualStyleSelectorTreeItem.Event.StyleTextReset);
</span><del>-        }.bind(this));
-
-        contextMenu.show();
</del><ins>+        });
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     _handleCheckboxChanged(event)
</span></span></pre>
</div>
</div>

</body>
</html>