| Index: third_party/WebKit/Source/devtools/front_end/console/ConsoleView.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleView.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleView.js
|
| index f41672c9b35a9187a1f414a30b8484b5c94d47c0..4ab0e4925529b14af9d05a8efb9f37181a1aa122 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleView.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleView.js
|
| @@ -154,6 +154,12 @@ WebInspector.ConsoleView = function()
|
| this._initConsoleMessages();
|
|
|
| WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext, this._executionContextChanged, this);
|
| +
|
| + this._messagesElement.addEventListener("mousedown", this._updateStickToBottomOnMouseDown.bind(this), false);
|
| + this._messagesElement.addEventListener("mousewheel", this._updateStickToBottomOnMouseWheel.bind(this), false);
|
| + this._messagesElement.addEventListener("mouseup", this._updateStickToBottomOnMouseUp.bind(this), false);
|
| + this._messagesElement.addEventListener("mouseleave", this._updateStickToBottomOnMouseUp.bind(this), false);
|
| + this._messagesElement.addEventListener("keydown", this._updateStickToBottomOnKeyDown.bind(this), true);
|
| }
|
|
|
| WebInspector.ConsoleView.persistedHistorySize = 300;
|
| @@ -353,7 +359,7 @@ WebInspector.ConsoleView.prototype = {
|
|
|
| restoreScrollPositions: function()
|
| {
|
| - if (this._viewport.scrolledToBottom())
|
| + if (this._viewport.stickToBottom())
|
| this._immediatelyScrollToBottom();
|
| else
|
| WebInspector.Widget.prototype.restoreScrollPositions.call(this);
|
| @@ -363,7 +369,7 @@ WebInspector.ConsoleView.prototype = {
|
| {
|
| this._scheduleViewportRefresh();
|
| this._hidePromptSuggestBox();
|
| - if (this._viewport.scrolledToBottom())
|
| + if (this._viewport.stickToBottom())
|
| this._immediatelyScrollToBottom();
|
| for (var i = 0; i < this._visibleViewMessages.length; ++i)
|
| this._visibleViewMessages[i].onResize();
|
| @@ -383,6 +389,8 @@ WebInspector.ConsoleView.prototype = {
|
| */
|
| function invalidateViewport()
|
| {
|
| + if (this._muteViewportUpdates)
|
| + return Promise.resolve();
|
| if (this._needsFullUpdate) {
|
| this._updateMessageList();
|
| delete this._needsFullUpdate;
|
| @@ -391,12 +399,15 @@ WebInspector.ConsoleView.prototype = {
|
| }
|
| return Promise.resolve();
|
| }
|
| + if (this._muteViewportUpdates)
|
| + return;
|
| this._viewportThrottler.schedule(invalidateViewport.bind(this));
|
| },
|
|
|
| _immediatelyScrollToBottom: function()
|
| {
|
| // This will scroll viewport and trigger its refresh.
|
| + this._viewport.setStickToBottom(true);
|
| this._promptElement.scrollIntoView(true);
|
| },
|
|
|
| @@ -1003,6 +1014,60 @@ WebInspector.ConsoleView.prototype = {
|
| highlightNode.scrollIntoViewIfNeeded();
|
| },
|
|
|
| + _updateStickToBottomOnMouseDown: function()
|
| + {
|
| + this._muteViewportUpdates = true;
|
| + this._viewport.setStickToBottom(false);
|
| + this._wasScrolledToBottom = this._viewport.element.isScrolledToBottom();
|
| + },
|
| +
|
| + _updateStickToBottomOnMouseUp: function()
|
| + {
|
| + this._muteViewportUpdates = false;
|
| + if (this._wasScrolledToBottom) {
|
| + // When stuck to the bottom, clicking the gray area above the scroll
|
| + // thumb should scroll upwards and stop sticking. Smooth scroll
|
| + // events triggered by the click need to finish before querying
|
| + // isScrolledToBottom. The timeout value used is the longest smooth
|
| + // scroll duration, a value retrieved from crbug.com/575409.
|
| + setTimeout(updateViewportState.bind(this), 200);
|
| + } else {
|
| + // In another case, when users drag the scroll thumb to the bottom,
|
| + // the viewport should stick. Checking whether the mouse is released
|
| + // at the bottom of the viewport is not verifiable after an async
|
| + // timeout, so we do it immediately.
|
| + updateViewportState.call(this);
|
| + }
|
| + delete this._wasScrolledToBottom;
|
| +
|
| + /**
|
| + * @this {!WebInspector.ConsoleView}
|
| + */
|
| + function updateViewportState()
|
| + {
|
| + this._viewport.setStickToBottom(this._viewport.element.isScrolledToBottom());
|
| + this._scheduleViewportRefresh();
|
| + }
|
| + },
|
| +
|
| + _updateStickToBottomOnMouseWheel: function()
|
| + {
|
| + this._updateStickToBottomOnMouseDown();
|
| + this._updateStickToBottomOnMouseUp();
|
| + },
|
| +
|
| + _updateStickToBottomOnKeyDown: function(event)
|
| + {
|
| + var isPageUpDown = event.keyCode === WebInspector.KeyboardShortcut.Keys.PageDown.code || event.keyCode === WebInspector.KeyboardShortcut.Keys.PageUp.code;
|
| + var isEsc = event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code;
|
| + if (isEsc)
|
| + return;
|
| + if (isPageUpDown)
|
| + this._updateStickToBottomOnMouseWheel();
|
| + else
|
| + this._viewport.setStickToBottom(true);
|
| + },
|
| +
|
| __proto__: WebInspector.VBox.prototype
|
| }
|
|
|
|
|