Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2117)

Unified Diff: Source/devtools/front_end/settings/SettingsScreen.js

Issue 1066573002: DevTools: migrate from ui-setting to settings extension point. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: review comments addressed Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/profiler/module.json ('k') | Source/devtools/front_end/settings/module.json » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/settings/SettingsScreen.js
diff --git a/Source/devtools/front_end/settings/SettingsScreen.js b/Source/devtools/front_end/settings/SettingsScreen.js
index 00d73dd53dd159f4d289f5e6343cab12772258e5..60da0cfc264990876e857c8c04ac40eaa9a85096 100644
--- a/Source/devtools/front_end/settings/SettingsScreen.js
+++ b/Source/devtools/front_end/settings/SettingsScreen.js
@@ -215,7 +215,16 @@ WebInspector.GenericSettingsTab = function()
{
WebInspector.SettingsTab.call(this, WebInspector.UIString("General"), "general-tab-content");
- this._populateSectionsFromExtensions();
+ /** @const */
+ var explicitSectionOrder = ["", "Appearance", "Elements", "Sources", "Network", "Profiler", "Console", "Extensions"];
+ /** @type {!Map<string, !Element>} */
+ this._nameToSection = new Map();
+ /** @type {!Map<string, !Element>} */
+ this._nameToSettingElement = new Map();
+ for (var sectionName of explicitSectionOrder)
+ this._sectionElement(sectionName);
+ self.runtime.extensions("setting").forEach(this._addSetting.bind(this));
+ self.runtime.extensions(WebInspector.SettingUI).forEach(this._addSettingUI.bind(this));
this._appendSection().appendChild(createTextButton(WebInspector.UIString("Restore defaults and reload"), restoreAndReload));
@@ -228,130 +237,90 @@ WebInspector.GenericSettingsTab = function()
}
WebInspector.GenericSettingsTab.prototype = {
- _populateSectionsFromExtensions: function()
- {
- /** @const */
- var explicitSectionOrder = ["", "Appearance", "Elements", "Sources", "Network", "Profiler", "Console", "Extensions"];
-
- var allExtensions = self.runtime.extensions("ui-setting");
+ /**
+ * @param {!Runtime.Extension} extension
+ */
+ _addSetting: function(extension)
+ {
+ var descriptor = extension.descriptor();
+ var sectionName = descriptor["category"] || "";
+
+ var settingName = descriptor["settingName"];
+ var setting = WebInspector.settings[settingName];
+ var uiTitle = WebInspector.UIString(extension.title(WebInspector.platform()));
+
+ var sectionElement = this._sectionElement(sectionName);
+ var parentSettingName = descriptor["parentSettingName"];
+ var parentSettingElement = parentSettingName ? this._nameToSettingElement.get(descriptor["parentSettingName"]) : null;
+ var parentFieldset = null;
+ if (parentSettingElement) {
+ parentFieldset = parentSettingElement.__fieldset;
+ if (!parentFieldset) {
+ parentFieldset = WebInspector.SettingsUI.createSettingFieldset(WebInspector.settings[parentSettingName]);
+ parentSettingElement.appendChild(parentFieldset);
+ parentSettingElement.__fieldset = parentFieldset;
+ }
+ }
- /** @type {!Multimap.<string, !Runtime.Extension>} */
- var extensionsBySectionId = new Multimap();
- /** @type {!Multimap.<string, !Runtime.Extension>} */
- var childSettingExtensionsByParentName = new Multimap();
+ var settingControl;
- allExtensions.forEach(function(extension) {
- var descriptor = extension.descriptor();
- var sectionName = descriptor["section"] || "";
- if (!sectionName && descriptor["parentSettingName"]) {
- childSettingExtensionsByParentName.set(descriptor["parentSettingName"], extension);
- return;
+ switch (descriptor["settingType"]) {
+ case "boolean":
+ settingControl = WebInspector.SettingsUI.createSettingCheckbox(uiTitle, setting);
+ break;
+ case "enum":
+ var descriptorOptions = descriptor["options"];
+ var options = new Array(descriptorOptions.length);
+ for (var i = 0; i < options.length; ++i) {
+ // The third array item flags that the option name is "raw" (non-i18n-izable).
+ var optionName = descriptorOptions[i][2] ? descriptorOptions[i][0] : WebInspector.UIString(descriptorOptions[i][0]);
+ options[i] = [optionName, descriptorOptions[i][1]];
}
- extensionsBySectionId.set(sectionName, extension);
- });
-
- var sectionIds = extensionsBySectionId.keysArray();
- var explicitlyOrderedSections = explicitSectionOrder.keySet();
- for (var i = 0; i < explicitSectionOrder.length; ++i) {
- var extensions = extensionsBySectionId.get(explicitSectionOrder[i]);
- if (!extensions.size)
- continue;
- this._addSectionWithExtensionProvidedSettings(explicitSectionOrder[i], extensions.valuesArray(), childSettingExtensionsByParentName);
- }
- for (var i = 0; i < sectionIds.length; ++i) {
- if (explicitlyOrderedSections[sectionIds[i]])
- continue;
- this._addSectionWithExtensionProvidedSettings(sectionIds[i], extensionsBySectionId.get(sectionIds[i]).valuesArray(), childSettingExtensionsByParentName);
+ settingControl = this._createSelectSetting(uiTitle, options, setting);
+ break;
+ default:
+ console.error("Invalid setting type: " + descriptor["settingType"]);
+ return;
}
+ this._nameToSettingElement.set(settingName, settingControl);
+ (parentFieldset || sectionElement).appendChild(/** @type {!Element} */ (settingControl));
},
/**
- * @param {string} sectionName
- * @param {!Array.<!Runtime.Extension>} extensions
- * @param {!Multimap.<string, !Runtime.Extension>} childSettingExtensionsByParentName
+ * @param {!Runtime.Extension} extension
*/
- _addSectionWithExtensionProvidedSettings: function(sectionName, extensions, childSettingExtensionsByParentName)
+ _addSettingUI: function(extension)
{
- var uiSectionName = sectionName && WebInspector.UIString(sectionName);
- var sectionElement = this._appendSection(uiSectionName);
- extensions.forEach(processSetting.bind(this, null));
+ var descriptor = extension.descriptor();
+ var sectionName = descriptor["category"] || "";
+ extension.instancePromise().then(appendCustomSetting.bind(this));
/**
- * @param {?Element} parentFieldset
- * @param {!Runtime.Extension} extension
+ * @param {!Object} object
* @this {WebInspector.GenericSettingsTab}
*/
- function processSetting(parentFieldset, extension)
+ function appendCustomSetting(object)
{
- var descriptor = extension.descriptor();
- var experimentName = descriptor["experiment"];
- if (experimentName && !Runtime.experiments.isEnabled(experimentName))
- return;
-
- if (descriptor["settingType"] === "custom") {
- extension.instancePromise().then(appendCustomSetting);
- return;
- }
-
- var uiTitle = WebInspector.UIString(descriptor["title"]);
- var settingName = descriptor["settingName"];
- var setting = WebInspector.settings[settingName];
- var settingControl = createSettingControl.call(this, uiTitle, setting, descriptor);
- if (settingName) {
- var childSettings = childSettingExtensionsByParentName.get(settingName);
- if (childSettings.size) {
- var fieldSet = WebInspector.SettingsUI.createSettingFieldset(setting);
- settingControl.appendChild(fieldSet);
- childSettings.valuesArray().forEach(function(item) { processSetting.call(this, fieldSet, item); }, this);
- }
- }
- appendAsChild(settingControl);
-
- /**
- * @param {!Object} object
- */
- function appendCustomSetting(object)
- {
- var uiSettingDelegate = /** @type {!WebInspector.UISettingDelegate} */ (object);
- var element = uiSettingDelegate.settingElement();
- if (element)
- appendAsChild(element);
- }
-
- /**
- * @param {!Object} settingControl
- */
- function appendAsChild(settingControl)
- {
- (parentFieldset || sectionElement).appendChild(/** @type {!Element} */ (settingControl));
- }
+ var settingUI = /** @type {!WebInspector.SettingUI} */ (object);
+ var element = settingUI.settingElement();
+ if (element)
+ this._sectionElement(sectionName).appendChild(element);
}
+ },
- /**
- * @param {string} uiTitle
- * @param {!WebInspector.Setting} setting
- * @param {!Object} descriptor
- * @return {!Element}
- * @this {WebInspector.GenericSettingsTab}
- */
- function createSettingControl(uiTitle, setting, descriptor)
- {
- switch (descriptor["settingType"]) {
- case "checkbox":
- return WebInspector.SettingsUI.createSettingCheckbox(uiTitle, setting);
- case "select":
- var descriptorOptions = descriptor["options"];
- var options = new Array(descriptorOptions.length);
- for (var i = 0; i < options.length; ++i) {
- // The third array item flags that the option name is "raw" (non-i18n-izable).
- var optionName = descriptorOptions[i][2] ? descriptorOptions[i][0] : WebInspector.UIString(descriptorOptions[i][0]);
- options[i] = [optionName, descriptorOptions[i][1]];
- }
- return this._createSelectSetting(uiTitle, options, setting);
- default:
- throw "Invalid setting type: " + descriptor["settingType"];
- }
+ /**
+ * @param {string} sectionName
+ * @return {!Element}
+ */
+ _sectionElement: function(sectionName)
+ {
+ var sectionElement = this._nameToSection.get(sectionName);
+ if (!sectionElement) {
+ var uiSectionName = sectionName && WebInspector.UIString(sectionName);
+ sectionElement = this._appendSection(uiSectionName);
+ this._nameToSection.set(sectionName, sectionElement);
}
+ return sectionElement;
},
__proto__: WebInspector.SettingsTab.prototype
@@ -359,14 +328,13 @@ WebInspector.GenericSettingsTab.prototype = {
/**
* @constructor
- * @extends {WebInspector.UISettingDelegate}
+ * @implements {WebInspector.SettingUI}
*/
-WebInspector.SettingsScreen.SkipStackFramePatternSettingDelegate = function()
+WebInspector.SettingsScreen.SkipStackFramePatternSettingUI = function()
{
- WebInspector.UISettingDelegate.call(this);
}
-WebInspector.SettingsScreen.SkipStackFramePatternSettingDelegate.prototype = {
+WebInspector.SettingsScreen.SkipStackFramePatternSettingUI.prototype = {
/**
* @override
* @return {!Element}
@@ -379,9 +347,7 @@ WebInspector.SettingsScreen.SkipStackFramePatternSettingDelegate.prototype = {
_onManageButtonClick: function()
{
WebInspector.FrameworkBlackboxDialog.show(WebInspector.inspectorView.element);
- },
-
- __proto__: WebInspector.UISettingDelegate.prototype
+ }
}
/**
« no previous file with comments | « Source/devtools/front_end/profiler/module.json ('k') | Source/devtools/front_end/settings/module.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698