Commit ce6f73cc authored by aandrey@chromium.org's avatar aandrey@chromium.org

DevTools: Support Blackbox/Disabled options in framework blackboxing UI dialog.

BUG=267592
R=vsevik

Review URL: https://codereview.chromium.org/413213003

git-svn-id: svn://svn.chromium.org/blink/trunk@179035 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1d759b09
......@@ -210,7 +210,7 @@ WebInspector.Setting.prototype = {
*/
WebInspector.RegExpSetting = function(name, defaultValue, eventSupport, storage, regexFlags)
{
WebInspector.Setting.call(this, name, [defaultValue], eventSupport, storage);
WebInspector.Setting.call(this, name, defaultValue ? [{ pattern: defaultValue }] : [], eventSupport, storage);
this._regexFlags = regexFlags;
}
......@@ -221,19 +221,22 @@ WebInspector.RegExpSetting.prototype = {
*/
get: function()
{
return this.getAsArray().join("|");
var result = [];
var items = this.getAsArray();
for (var i = 0; i < items.length; ++i) {
var item = items[i];
if (item.pattern && !item.disabled)
result.push(item.pattern);
}
return result.join("|");
},
/**
* @return {!Array.<string>}
* @return {!Array.<{pattern: string, disabled: (boolean|undefined)}>}
*/
getAsArray: function()
{
var value = WebInspector.Setting.prototype.get.call(this);
if (typeof value === "string") // Backward compatibility.
value = [value];
value.remove("");
return value;
return WebInspector.Setting.prototype.get.call(this);
},
/**
......@@ -242,16 +245,15 @@ WebInspector.RegExpSetting.prototype = {
*/
set: function(value)
{
this.setAsArray([value]);
this.setAsArray([{ pattern: value }]);
},
/**
* @param {!Array.<string>} value
* @param {!Array.<{pattern: string, disabled: (boolean|undefined)}>} value
*/
setAsArray: function(value)
{
delete this._regex;
value.remove("");
WebInspector.Setting.prototype.set.call(this, value);
},
......@@ -454,7 +456,7 @@ WebInspector.VersionController = function()
{
}
WebInspector.VersionController.currentVersion = 8;
WebInspector.VersionController.currentVersion = 9;
WebInspector.VersionController.prototype = {
updateVersion: function()
......@@ -641,6 +643,36 @@ WebInspector.VersionController.prototype = {
setting.set(value);
},
_updateVersionFrom8To9: function()
{
if (!window.localStorage)
return;
var settingNames = [
"skipStackFramesPattern",
"workspaceFolderExcludePattern"
];
for (var i = 0; i < settingNames.length; ++i) {
var settingName = settingNames[i];
if (!(settingName in window.localStorage))
continue;
try {
var value = JSON.parse(window.localStorage[settingName]);
if (!value)
continue;
if (typeof value === "string")
value = [value];
for (var j = 0; j < value.length; ++j) {
if (typeof value[j] === "string")
value[j] = { pattern: value[j] };
}
window.localStorage[settingName] = JSON.stringify(value);
} catch(e) {
}
}
},
/**
* @param {!WebInspector.Setting} breakpointsSetting
* @param {number} maxBreakpointsCount
......
......@@ -29,19 +29,22 @@ WebInspector.FrameworkBlackboxDialog = function()
var section = contents.createChild("div", "section");
var container = section.createChild("div", "settings-list-container");
this._blackboxLabel = WebInspector.UIString("Blackbox");
this._disabledLabel = WebInspector.UIString("Disabled");
var column1 = { id: "pattern", placeholder: "/framework\\.js$" };
var column2 = { id: "value", options: [WebInspector.UIString("Blackbox")] };
var column2 = { id: "value", options: [this._blackboxLabel, this._disabledLabel] };
this._patternsList = new WebInspector.EditableSettingsList([column1, column2], this._patternValuesProvider.bind(this), this._patternValidate.bind(this), this._patternEdit.bind(this));
this._patternsList.element.classList.add("blackbox-patterns-list");
this._patternsList.addEventListener(WebInspector.SettingsList.Events.Removed, this._patternRemovedFromList.bind(this));
container.appendChild(this._patternsList.element);
/** @type {!Object.<string, boolean>} */
this._entries = {};
/** @type {!StringMap.<string>} */
this._entries = new StringMap();
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray();
for (var i = 0; i < patterns.length; ++i)
this._addPattern(patterns[i]);
this._addPattern(patterns[i].pattern, patterns[i].disabled);
this.element.tabIndex = 0;
}
......@@ -108,7 +111,7 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
case "pattern":
return itemId;
case "value":
return WebInspector.UIString("Blackbox");
return /** @type {string} */ (this._entries.get(itemId));
default:
console.assert("Should not be reached.");
}
......@@ -123,9 +126,10 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
_patternValidate: function(itemId, data)
{
var regex;
var oldPattern = itemId;
var newPattern = data["pattern"];
try {
if (newPattern && !this._entries[newPattern])
if (newPattern && (oldPattern === newPattern || !this._entries.contains(newPattern)))
regex = new RegExp(newPattern);
} catch (e) {
}
......@@ -142,21 +146,32 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
var newPattern = data["pattern"];
if (!newPattern)
return;
var disabled = (data["value"] === this._disabledLabel);
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray();
var pos = oldPattern ? patterns.indexOf(oldPattern) : -1;
if (pos === -1)
patterns.push(newPattern);
else
patterns[pos] = newPattern;
for (var i = 0; i <= patterns.length; ++i) {
if (i === patterns.length) {
patterns.push({ pattern: newPattern, disabled: disabled });
break;
}
if (patterns[i].pattern === oldPattern) {
patterns[i] = { pattern: newPattern, disabled: disabled };
break;
}
}
WebInspector.settings.skipStackFramesPattern.setAsArray(patterns);
if (oldPattern && oldPattern === newPattern) {
this._entries.put(newPattern, disabled ? this._disabledLabel : this._blackboxLabel)
this._patternsList.refreshItem(newPattern);
return;
}
if (oldPattern) {
this._patternsList.removeItem(oldPattern);
delete this._entries[oldPattern];
this._entries.remove(oldPattern);
}
this._addPattern(newPattern);
this._patternsList.selectItem(newPattern);
this._addPattern(newPattern, disabled);
},
/**
......@@ -167,21 +182,27 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
var pattern = /** @type{?string} */ (event.data);
if (!pattern)
return;
delete this._entries[pattern];
this._entries.remove(pattern);
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray();
patterns.remove(pattern);
for (var i = 0; i < patterns.length; ++i) {
if (patterns[i].pattern === pattern) {
patterns.splice(i, 1);
break;
}
}
WebInspector.settings.skipStackFramesPattern.setAsArray(patterns);
},
/**
* @param {string} pattern
* @param {boolean=} disabled
*/
_addPattern: function(pattern)
_addPattern: function(pattern, disabled)
{
if (!pattern || this._entries[pattern])
if (!pattern || this._entries.contains(pattern))
return;
this._entries[pattern] = true;
this._entries.put(pattern, disabled ? this._disabledLabel : this._blackboxLabel);
this._patternsList.addItem(pattern, null);
this._resize();
},
......
......@@ -695,7 +695,7 @@ WebInspector.SettingsList = function(columns, itemRenderer)
this.element.tabIndex = -1;
this._itemRenderer = itemRenderer;
/** @type {!Object.<?string, !Element>} */
this._listItems = {};
this._listItems = { __proto__: null };
/** @type {!Array.<?string>} */
this._ids = [];
this._columns = columns;
......@@ -763,7 +763,8 @@ WebInspector.SettingsList.prototype = {
*/
removeItem: function(id)
{
this._listItems[id].remove();
if (this._listItems[id])
this._listItems[id].remove();
delete this._listItems[id];
this._ids.remove(id);
if (id === this._selectedId) {
......@@ -894,6 +895,30 @@ WebInspector.EditableSettingsList.prototype = {
return listItem;
},
/**
* @param {?string} itemId
*/
refreshItem: function(itemId)
{
if (!itemId)
return;
var listItem = this._listItems[itemId];
if (!listItem)
return;
for (var i = 0; i < this._columns.length; ++i) {
var column = this._columns[i];
var columnId = column.id;
var value = this._valuesProvider(itemId, columnId);
var textElement = this._textElements[itemId][columnId];
textElement.textContent = value;
textElement.title = value;
var editElement = this._editInputElements[itemId][columnId];
this._setEditElementValue(editElement, value || "");
}
},
/**
* @param {!Element} columnElement
* @param {{id: string, placeholder: (string|undefined), options: (!Array.<string>|undefined)}} column
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment