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 = { ...@@ -210,7 +210,7 @@ WebInspector.Setting.prototype = {
*/ */
WebInspector.RegExpSetting = function(name, defaultValue, eventSupport, storage, regexFlags) 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; this._regexFlags = regexFlags;
} }
...@@ -221,19 +221,22 @@ WebInspector.RegExpSetting.prototype = { ...@@ -221,19 +221,22 @@ WebInspector.RegExpSetting.prototype = {
*/ */
get: function() 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() getAsArray: function()
{ {
var value = WebInspector.Setting.prototype.get.call(this); return WebInspector.Setting.prototype.get.call(this);
if (typeof value === "string") // Backward compatibility.
value = [value];
value.remove("");
return value;
}, },
/** /**
...@@ -242,16 +245,15 @@ WebInspector.RegExpSetting.prototype = { ...@@ -242,16 +245,15 @@ WebInspector.RegExpSetting.prototype = {
*/ */
set: function(value) 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) setAsArray: function(value)
{ {
delete this._regex; delete this._regex;
value.remove("");
WebInspector.Setting.prototype.set.call(this, value); WebInspector.Setting.prototype.set.call(this, value);
}, },
...@@ -454,7 +456,7 @@ WebInspector.VersionController = function() ...@@ -454,7 +456,7 @@ WebInspector.VersionController = function()
{ {
} }
WebInspector.VersionController.currentVersion = 8; WebInspector.VersionController.currentVersion = 9;
WebInspector.VersionController.prototype = { WebInspector.VersionController.prototype = {
updateVersion: function() updateVersion: function()
...@@ -641,6 +643,36 @@ WebInspector.VersionController.prototype = { ...@@ -641,6 +643,36 @@ WebInspector.VersionController.prototype = {
setting.set(value); 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 {!WebInspector.Setting} breakpointsSetting
* @param {number} maxBreakpointsCount * @param {number} maxBreakpointsCount
......
...@@ -29,19 +29,22 @@ WebInspector.FrameworkBlackboxDialog = function() ...@@ -29,19 +29,22 @@ WebInspector.FrameworkBlackboxDialog = function()
var section = contents.createChild("div", "section"); var section = contents.createChild("div", "section");
var container = section.createChild("div", "settings-list-container"); 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 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 = 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.element.classList.add("blackbox-patterns-list");
this._patternsList.addEventListener(WebInspector.SettingsList.Events.Removed, this._patternRemovedFromList.bind(this)); this._patternsList.addEventListener(WebInspector.SettingsList.Events.Removed, this._patternRemovedFromList.bind(this));
container.appendChild(this._patternsList.element); container.appendChild(this._patternsList.element);
/** @type {!Object.<string, boolean>} */ /** @type {!StringMap.<string>} */
this._entries = {}; this._entries = new StringMap();
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray(); var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray();
for (var i = 0; i < patterns.length; ++i) for (var i = 0; i < patterns.length; ++i)
this._addPattern(patterns[i]); this._addPattern(patterns[i].pattern, patterns[i].disabled);
this.element.tabIndex = 0; this.element.tabIndex = 0;
} }
...@@ -108,7 +111,7 @@ WebInspector.FrameworkBlackboxDialog.prototype = { ...@@ -108,7 +111,7 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
case "pattern": case "pattern":
return itemId; return itemId;
case "value": case "value":
return WebInspector.UIString("Blackbox"); return /** @type {string} */ (this._entries.get(itemId));
default: default:
console.assert("Should not be reached."); console.assert("Should not be reached.");
} }
...@@ -123,9 +126,10 @@ WebInspector.FrameworkBlackboxDialog.prototype = { ...@@ -123,9 +126,10 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
_patternValidate: function(itemId, data) _patternValidate: function(itemId, data)
{ {
var regex; var regex;
var oldPattern = itemId;
var newPattern = data["pattern"]; var newPattern = data["pattern"];
try { try {
if (newPattern && !this._entries[newPattern]) if (newPattern && (oldPattern === newPattern || !this._entries.contains(newPattern)))
regex = new RegExp(newPattern); regex = new RegExp(newPattern);
} catch (e) { } catch (e) {
} }
...@@ -142,21 +146,32 @@ WebInspector.FrameworkBlackboxDialog.prototype = { ...@@ -142,21 +146,32 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
var newPattern = data["pattern"]; var newPattern = data["pattern"];
if (!newPattern) if (!newPattern)
return; return;
var disabled = (data["value"] === this._disabledLabel);
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray(); var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray();
var pos = oldPattern ? patterns.indexOf(oldPattern) : -1; for (var i = 0; i <= patterns.length; ++i) {
if (pos === -1) if (i === patterns.length) {
patterns.push(newPattern); patterns.push({ pattern: newPattern, disabled: disabled });
else break;
patterns[pos] = newPattern; }
if (patterns[i].pattern === oldPattern) {
patterns[i] = { pattern: newPattern, disabled: disabled };
break;
}
}
WebInspector.settings.skipStackFramesPattern.setAsArray(patterns); 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) { if (oldPattern) {
this._patternsList.removeItem(oldPattern); this._patternsList.removeItem(oldPattern);
delete this._entries[oldPattern]; this._entries.remove(oldPattern);
} }
this._addPattern(newPattern); this._addPattern(newPattern, disabled);
this._patternsList.selectItem(newPattern);
}, },
/** /**
...@@ -167,21 +182,27 @@ WebInspector.FrameworkBlackboxDialog.prototype = { ...@@ -167,21 +182,27 @@ WebInspector.FrameworkBlackboxDialog.prototype = {
var pattern = /** @type{?string} */ (event.data); var pattern = /** @type{?string} */ (event.data);
if (!pattern) if (!pattern)
return; return;
delete this._entries[pattern]; this._entries.remove(pattern);
var patterns = WebInspector.settings.skipStackFramesPattern.getAsArray(); 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); WebInspector.settings.skipStackFramesPattern.setAsArray(patterns);
}, },
/** /**
* @param {string} pattern * @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; return;
this._entries[pattern] = true; this._entries.put(pattern, disabled ? this._disabledLabel : this._blackboxLabel);
this._patternsList.addItem(pattern, null); this._patternsList.addItem(pattern, null);
this._resize(); this._resize();
}, },
......
...@@ -695,7 +695,7 @@ WebInspector.SettingsList = function(columns, itemRenderer) ...@@ -695,7 +695,7 @@ WebInspector.SettingsList = function(columns, itemRenderer)
this.element.tabIndex = -1; this.element.tabIndex = -1;
this._itemRenderer = itemRenderer; this._itemRenderer = itemRenderer;
/** @type {!Object.<?string, !Element>} */ /** @type {!Object.<?string, !Element>} */
this._listItems = {}; this._listItems = { __proto__: null };
/** @type {!Array.<?string>} */ /** @type {!Array.<?string>} */
this._ids = []; this._ids = [];
this._columns = columns; this._columns = columns;
...@@ -763,7 +763,8 @@ WebInspector.SettingsList.prototype = { ...@@ -763,7 +763,8 @@ WebInspector.SettingsList.prototype = {
*/ */
removeItem: function(id) removeItem: function(id)
{ {
this._listItems[id].remove(); if (this._listItems[id])
this._listItems[id].remove();
delete this._listItems[id]; delete this._listItems[id];
this._ids.remove(id); this._ids.remove(id);
if (id === this._selectedId) { if (id === this._selectedId) {
...@@ -894,6 +895,30 @@ WebInspector.EditableSettingsList.prototype = { ...@@ -894,6 +895,30 @@ WebInspector.EditableSettingsList.prototype = {
return listItem; 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 {!Element} columnElement
* @param {{id: string, placeholder: (string|undefined), options: (!Array.<string>|undefined)}} column * @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