| Index: third_party/WebKit/Source/devtools/front_end/console/ConsoleContextSelector.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/console/ConsoleContextSelector.js b/third_party/WebKit/Source/devtools/front_end/console/ConsoleContextSelector.js
|
| index c65d6d038869fcd0e6b67537d8a132fa2a452ae5..8f8bcae76d0589f85b3dae8a6f94924a37b228f3 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/console/ConsoleContextSelector.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/console/ConsoleContextSelector.js
|
| @@ -1,14 +1,15 @@
|
| // Copyright 2015 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
| -
|
| /**
|
| - * @constructor
|
| * @implements {WebInspector.TargetManager.Observer}
|
| - * @param {!Element} selectElement
|
| + * @unrestricted
|
| */
|
| -WebInspector.ConsoleContextSelector = function(selectElement)
|
| -{
|
| +WebInspector.ConsoleContextSelector = class {
|
| + /**
|
| + * @param {!Element} selectElement
|
| + */
|
| + constructor(selectElement) {
|
| this._selectElement = selectElement;
|
| /**
|
| * @type {!Map.<!WebInspector.ExecutionContext, !Element>}
|
| @@ -16,207 +17,198 @@ WebInspector.ConsoleContextSelector = function(selectElement)
|
| this._optionByExecutionContext = new Map();
|
|
|
| WebInspector.targetManager.observeTargets(this);
|
| - WebInspector.targetManager.addModelListener(WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextCreated, this._onExecutionContextCreated, this);
|
| - WebInspector.targetManager.addModelListener(WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextChanged, this._onExecutionContextChanged, this);
|
| - WebInspector.targetManager.addModelListener(WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextDestroyed, this._onExecutionContextDestroyed, this);
|
| -
|
| - this._selectElement.addEventListener("change", this._executionContextChanged.bind(this), false);
|
| - WebInspector.context.addFlavorChangeListener(WebInspector.ExecutionContext, this._executionContextChangedExternally, this);
|
| -};
|
| -
|
| -WebInspector.ConsoleContextSelector.prototype = {
|
| - /**
|
| - * @param {!WebInspector.ExecutionContext} executionContext
|
| - * @return {string}
|
| - */
|
| - _titleFor: function(executionContext)
|
| - {
|
| - var result;
|
| - if (executionContext.isDefault) {
|
| - if (executionContext.frameId) {
|
| - var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(executionContext.target());
|
| - var frame = resourceTreeModel && resourceTreeModel.frameForId(executionContext.frameId);
|
| - result = frame ? frame.displayName() : executionContext.label();
|
| - } else {
|
| - result = executionContext.target().decorateLabel(executionContext.label());
|
| - }
|
| - } else {
|
| - result = "\u00a0\u00a0\u00a0\u00a0" + (executionContext.label() || executionContext.origin);
|
| - }
|
| -
|
| - var maxLength = 50;
|
| - return result.trimMiddle(maxLength);
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.ExecutionContext} executionContext
|
| - */
|
| - _executionContextCreated: function(executionContext)
|
| - {
|
| - // FIXME(413886): We never want to show execution context for the main thread of shadow page in service/shared worker frontend.
|
| - // This check could be removed once we do not send this context to frontend.
|
| - if (!executionContext.target().hasJSCapability())
|
| - return;
|
| -
|
| - var newOption = createElement("option");
|
| - newOption.__executionContext = executionContext;
|
| - newOption.text = this._titleFor(executionContext);
|
| - this._optionByExecutionContext.set(executionContext, newOption);
|
| - var options = this._selectElement.options;
|
| - var contexts = Array.prototype.map.call(options, mapping);
|
| - var index = contexts.lowerBound(executionContext, executionContext.runtimeModel.executionContextComparator());
|
| - this._selectElement.insertBefore(newOption, options[index]);
|
| -
|
| - if (executionContext === WebInspector.context.flavor(WebInspector.ExecutionContext))
|
| - this._select(newOption);
|
| -
|
| - /**
|
| - * @param {!Element} option
|
| - * @return {!WebInspector.ExecutionContext}
|
| - */
|
| - function mapping(option)
|
| - {
|
| - return option.__executionContext;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _onExecutionContextCreated: function(event)
|
| - {
|
| - var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| - this._executionContextCreated(executionContext);
|
| - this._updateSelectionWarning();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _onExecutionContextChanged: function(event)
|
| - {
|
| - var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| - var option = this._optionByExecutionContext.get(executionContext);
|
| - if (option)
|
| - option.text = this._titleFor(executionContext);
|
| - this._updateSelectionWarning();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.ExecutionContext} executionContext
|
| - */
|
| - _executionContextDestroyed: function(executionContext)
|
| - {
|
| - var option = this._optionByExecutionContext.remove(executionContext);
|
| - option.remove();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _onExecutionContextDestroyed: function(event)
|
| - {
|
| - var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| - this._executionContextDestroyed(executionContext);
|
| - this._updateSelectionWarning();
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.Event} event
|
| - */
|
| - _executionContextChangedExternally: function(event)
|
| - {
|
| - var executionContext = /** @type {?WebInspector.ExecutionContext} */ (event.data);
|
| - if (!executionContext)
|
| - return;
|
| -
|
| - var options = this._selectElement.options;
|
| - for (var i = 0; i < options.length; ++i) {
|
| - if (options[i].__executionContext === executionContext)
|
| - this._select(options[i]);
|
| - }
|
| - },
|
| -
|
| - _executionContextChanged: function()
|
| - {
|
| - var option = this._selectedOption();
|
| - var newContext = option ? option.__executionContext : null;
|
| - WebInspector.context.setFlavor(WebInspector.ExecutionContext, newContext);
|
| - this._updateSelectionWarning();
|
| - },
|
| -
|
| - _updateSelectionWarning: function()
|
| - {
|
| - var executionContext = WebInspector.context.flavor(WebInspector.ExecutionContext);
|
| - this._selectElement.parentElement.classList.toggle("warning", !this._isTopContext(executionContext) && this._hasTopContext());
|
| - },
|
| -
|
| - /**
|
| - * @param {?WebInspector.ExecutionContext} executionContext
|
| - * @return {boolean}
|
| - */
|
| - _isTopContext: function(executionContext)
|
| - {
|
| - if (!executionContext || !executionContext.isDefault)
|
| - return false;
|
| + WebInspector.targetManager.addModelListener(
|
| + WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextCreated,
|
| + this._onExecutionContextCreated, this);
|
| + WebInspector.targetManager.addModelListener(
|
| + WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextChanged,
|
| + this._onExecutionContextChanged, this);
|
| + WebInspector.targetManager.addModelListener(
|
| + WebInspector.RuntimeModel, WebInspector.RuntimeModel.Events.ExecutionContextDestroyed,
|
| + this._onExecutionContextDestroyed, this);
|
| +
|
| + this._selectElement.addEventListener('change', this._executionContextChanged.bind(this), false);
|
| + WebInspector.context.addFlavorChangeListener(
|
| + WebInspector.ExecutionContext, this._executionContextChangedExternally, this);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.ExecutionContext} executionContext
|
| + * @return {string}
|
| + */
|
| + _titleFor(executionContext) {
|
| + var result;
|
| + if (executionContext.isDefault) {
|
| + if (executionContext.frameId) {
|
| var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(executionContext.target());
|
| - var frame = executionContext.frameId && resourceTreeModel && resourceTreeModel.frameForId(executionContext.frameId);
|
| - if (!frame)
|
| - return false;
|
| - return frame.isMainFrame();
|
| - },
|
| -
|
| - /**
|
| - * @return {boolean}
|
| - */
|
| - _hasTopContext: function()
|
| - {
|
| - var options = this._selectElement.options;
|
| - for (var i = 0; i < options.length; i++){
|
| - if (this._isTopContext(options[i].__executionContext))
|
| - return true;
|
| - }
|
| - return false;
|
| - },
|
| -
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetAdded: function(target)
|
| - {
|
| - target.runtimeModel.executionContexts().forEach(this._executionContextCreated, this);
|
| - },
|
| + var frame = resourceTreeModel && resourceTreeModel.frameForId(executionContext.frameId);
|
| + result = frame ? frame.displayName() : executionContext.label();
|
| + } else {
|
| + result = executionContext.target().decorateLabel(executionContext.label());
|
| + }
|
| + } else {
|
| + result = '\u00a0\u00a0\u00a0\u00a0' + (executionContext.label() || executionContext.origin);
|
| + }
|
|
|
| - /**
|
| - * @override
|
| - * @param {!WebInspector.Target} target
|
| - */
|
| - targetRemoved: function(target)
|
| - {
|
| - var executionContexts = this._optionByExecutionContext.keysArray();
|
| - for (var i = 0; i < executionContexts.length; ++i) {
|
| - if (executionContexts[i].target() === target)
|
| - this._executionContextDestroyed(executionContexts[i]);
|
| - }
|
| - },
|
| + var maxLength = 50;
|
| + return result.trimMiddle(maxLength);
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.ExecutionContext} executionContext
|
| + */
|
| + _executionContextCreated(executionContext) {
|
| + // FIXME(413886): We never want to show execution context for the main thread of shadow page in service/shared worker frontend.
|
| + // This check could be removed once we do not send this context to frontend.
|
| + if (!executionContext.target().hasJSCapability())
|
| + return;
|
| +
|
| + var newOption = createElement('option');
|
| + newOption.__executionContext = executionContext;
|
| + newOption.text = this._titleFor(executionContext);
|
| + this._optionByExecutionContext.set(executionContext, newOption);
|
| + var options = this._selectElement.options;
|
| + var contexts = Array.prototype.map.call(options, mapping);
|
| + var index = contexts.lowerBound(executionContext, executionContext.runtimeModel.executionContextComparator());
|
| + this._selectElement.insertBefore(newOption, options[index]);
|
| +
|
| + if (executionContext === WebInspector.context.flavor(WebInspector.ExecutionContext))
|
| + this._select(newOption);
|
|
|
| /**
|
| * @param {!Element} option
|
| + * @return {!WebInspector.ExecutionContext}
|
| */
|
| - _select: function(option)
|
| - {
|
| - this._selectElement.selectedIndex = Array.prototype.indexOf.call(/** @type {?} */ (this._selectElement), option);
|
| - this._updateSelectionWarning();
|
| - },
|
| -
|
| - /**
|
| - * @return {?Element}
|
| - */
|
| - _selectedOption: function()
|
| - {
|
| - if (this._selectElement.selectedIndex >= 0)
|
| - return this._selectElement[this._selectElement.selectedIndex];
|
| - return null;
|
| + function mapping(option) {
|
| + return option.__executionContext;
|
| + }
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _onExecutionContextCreated(event) {
|
| + var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| + this._executionContextCreated(executionContext);
|
| + this._updateSelectionWarning();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _onExecutionContextChanged(event) {
|
| + var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| + var option = this._optionByExecutionContext.get(executionContext);
|
| + if (option)
|
| + option.text = this._titleFor(executionContext);
|
| + this._updateSelectionWarning();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.ExecutionContext} executionContext
|
| + */
|
| + _executionContextDestroyed(executionContext) {
|
| + var option = this._optionByExecutionContext.remove(executionContext);
|
| + option.remove();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _onExecutionContextDestroyed(event) {
|
| + var executionContext = /** @type {!WebInspector.ExecutionContext} */ (event.data);
|
| + this._executionContextDestroyed(executionContext);
|
| + this._updateSelectionWarning();
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.Event} event
|
| + */
|
| + _executionContextChangedExternally(event) {
|
| + var executionContext = /** @type {?WebInspector.ExecutionContext} */ (event.data);
|
| + if (!executionContext)
|
| + return;
|
| +
|
| + var options = this._selectElement.options;
|
| + for (var i = 0; i < options.length; ++i) {
|
| + if (options[i].__executionContext === executionContext)
|
| + this._select(options[i]);
|
| + }
|
| + }
|
| +
|
| + _executionContextChanged() {
|
| + var option = this._selectedOption();
|
| + var newContext = option ? option.__executionContext : null;
|
| + WebInspector.context.setFlavor(WebInspector.ExecutionContext, newContext);
|
| + this._updateSelectionWarning();
|
| + }
|
| +
|
| + _updateSelectionWarning() {
|
| + var executionContext = WebInspector.context.flavor(WebInspector.ExecutionContext);
|
| + this._selectElement.parentElement.classList.toggle(
|
| + 'warning', !this._isTopContext(executionContext) && this._hasTopContext());
|
| + }
|
| +
|
| + /**
|
| + * @param {?WebInspector.ExecutionContext} executionContext
|
| + * @return {boolean}
|
| + */
|
| + _isTopContext(executionContext) {
|
| + if (!executionContext || !executionContext.isDefault)
|
| + return false;
|
| + var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(executionContext.target());
|
| + var frame = executionContext.frameId && resourceTreeModel && resourceTreeModel.frameForId(executionContext.frameId);
|
| + if (!frame)
|
| + return false;
|
| + return frame.isMainFrame();
|
| + }
|
| +
|
| + /**
|
| + * @return {boolean}
|
| + */
|
| + _hasTopContext() {
|
| + var options = this._selectElement.options;
|
| + for (var i = 0; i < options.length; i++) {
|
| + if (this._isTopContext(options[i].__executionContext))
|
| + return true;
|
| + }
|
| + return false;
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetAdded(target) {
|
| + target.runtimeModel.executionContexts().forEach(this._executionContextCreated, this);
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + * @param {!WebInspector.Target} target
|
| + */
|
| + targetRemoved(target) {
|
| + var executionContexts = this._optionByExecutionContext.keysArray();
|
| + for (var i = 0; i < executionContexts.length; ++i) {
|
| + if (executionContexts[i].target() === target)
|
| + this._executionContextDestroyed(executionContexts[i]);
|
| }
|
| + }
|
| +
|
| + /**
|
| + * @param {!Element} option
|
| + */
|
| + _select(option) {
|
| + this._selectElement.selectedIndex = Array.prototype.indexOf.call(/** @type {?} */ (this._selectElement), option);
|
| + this._updateSelectionWarning();
|
| + }
|
| +
|
| + /**
|
| + * @return {?Element}
|
| + */
|
| + _selectedOption() {
|
| + if (this._selectElement.selectedIndex >= 0)
|
| + return this._selectElement[this._selectElement.selectedIndex];
|
| + return null;
|
| + }
|
| };
|
|
|