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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/common/Settings.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month 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 unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer 11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the 12 * in the documentation and/or other materials provided with the
13 * distribution. 13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its 14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from 15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission. 16 * this software without specific prior written permission.
17 * 17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30
31 /** 30 /**
32 * @constructor 31 * @unrestricted
33 * @param {!WebInspector.SettingsStorage} storage
34 */ 32 */
35 WebInspector.Settings = function(storage) 33 WebInspector.Settings = class {
36 { 34 /**
35 * @param {!WebInspector.SettingsStorage} storage
36 */
37 constructor(storage) {
37 this._settingsStorage = storage; 38 this._settingsStorage = storage;
38 var clearLocalStorage = window.localStorage ? window.localStorage.clear.bind (window.localStorage) : undefined; 39 var clearLocalStorage = window.localStorage ? window.localStorage.clear.bind (window.localStorage) : undefined;
39 this._localStorage = new WebInspector.SettingsStorage(window.localStorage || {}, undefined, undefined, clearLocalStorage); 40 this._localStorage =
41 new WebInspector.SettingsStorage(window.localStorage || {}, undefined, u ndefined, clearLocalStorage);
40 42
41 this._eventSupport = new WebInspector.Object(); 43 this._eventSupport = new WebInspector.Object();
42 /** @type {!Map<string, !WebInspector.Setting>} */ 44 /** @type {!Map<string, !WebInspector.Setting>} */
43 this._registry = new Map(); 45 this._registry = new Map();
44 /** @type {!Map<string, !WebInspector.Setting>} */ 46 /** @type {!Map<string, !WebInspector.Setting>} */
45 this._moduleSettings = new Map(); 47 this._moduleSettings = new Map();
46 self.runtime.extensions("setting").forEach(this._registerModuleSetting.bind( this)); 48 self.runtime.extensions('setting').forEach(this._registerModuleSetting.bind( this));
49 }
50
51 /**
52 * @param {!Runtime.Extension} extension
53 */
54 _registerModuleSetting(extension) {
55 var descriptor = extension.descriptor();
56 var settingName = descriptor['settingName'];
57 var settingType = descriptor['settingType'];
58 var defaultValue = descriptor['defaultValue'];
59 var isLocal = !!descriptor['local'];
60 var setting = settingType === 'regex' ? this.createRegExpSetting(settingName , defaultValue, undefined, isLocal) :
61 this.createSetting(settingName, defa ultValue, isLocal);
62 this._moduleSettings.set(settingName, setting);
63 }
64
65 /**
66 * @param {string} settingName
67 * @return {!WebInspector.Setting}
68 */
69 moduleSetting(settingName) {
70 var setting = this._moduleSettings.get(settingName);
71 if (!setting)
72 throw new Error('No setting registered: ' + settingName);
73 return setting;
74 }
75
76 /**
77 * @param {string} settingName
78 * @return {!WebInspector.Setting}
79 */
80 settingForTest(settingName) {
81 var setting = this._registry.get(settingName);
82 if (!setting)
83 throw new Error('No setting registered: ' + settingName);
84 return setting;
85 }
86
87 /**
88 * @param {string} key
89 * @param {*} defaultValue
90 * @param {boolean=} isLocal
91 * @return {!WebInspector.Setting}
92 */
93 createSetting(key, defaultValue, isLocal) {
94 if (!this._registry.get(key))
95 this._registry.set(
96 key, new WebInspector.Setting(
97 this, key, defaultValue, this._eventSupport, isLocal ? this._ localStorage : this._settingsStorage));
98 return /** @type {!WebInspector.Setting} */ (this._registry.get(key));
99 }
100
101 /**
102 * @param {string} key
103 * @param {*} defaultValue
104 * @return {!WebInspector.Setting}
105 */
106 createLocalSetting(key, defaultValue) {
107 return this.createSetting(key, defaultValue, true);
108 }
109
110 /**
111 * @param {string} key
112 * @param {string} defaultValue
113 * @param {string=} regexFlags
114 * @param {boolean=} isLocal
115 * @return {!WebInspector.RegExpSetting}
116 */
117 createRegExpSetting(key, defaultValue, regexFlags, isLocal) {
118 if (!this._registry.get(key))
119 this._registry.set(
120 key, new WebInspector.RegExpSetting(
121 this, key, defaultValue, this._eventSupport, isLocal ? this._ localStorage : this._settingsStorage,
122 regexFlags));
123 return /** @type {!WebInspector.RegExpSetting} */ (this._registry.get(key));
124 }
125
126 clearAll() {
127 this._settingsStorage.removeAll();
128 this._localStorage.removeAll();
129 var versionSetting = WebInspector.settings.createSetting(WebInspector.Versio nController._currentVersionName, 0);
130 versionSetting.set(WebInspector.VersionController.currentVersion);
131 }
47 }; 132 };
48 133
49 WebInspector.Settings.prototype = {
50 /**
51 * @param {!Runtime.Extension} extension
52 */
53 _registerModuleSetting: function(extension)
54 {
55 var descriptor = extension.descriptor();
56 var settingName = descriptor["settingName"];
57 var settingType = descriptor["settingType"];
58 var defaultValue = descriptor["defaultValue"];
59 var isLocal = !!descriptor["local"];
60 var setting = settingType === "regex" ? this.createRegExpSetting(setting Name, defaultValue, undefined, isLocal) : this.createSetting(settingName, defaul tValue, isLocal);
61 this._moduleSettings.set(settingName, setting);
62 },
63
64 /**
65 * @param {string} settingName
66 * @return {!WebInspector.Setting}
67 */
68 moduleSetting: function(settingName)
69 {
70 var setting = this._moduleSettings.get(settingName);
71 if (!setting)
72 throw new Error("No setting registered: " + settingName);
73 return setting;
74 },
75
76 /**
77 * @param {string} settingName
78 * @return {!WebInspector.Setting}
79 */
80 settingForTest: function(settingName)
81 {
82 var setting = this._registry.get(settingName);
83 if (!setting)
84 throw new Error("No setting registered: " + settingName);
85 return setting;
86 },
87
88 /**
89 * @param {string} key
90 * @param {*} defaultValue
91 * @param {boolean=} isLocal
92 * @return {!WebInspector.Setting}
93 */
94 createSetting: function(key, defaultValue, isLocal)
95 {
96 if (!this._registry.get(key))
97 this._registry.set(key, new WebInspector.Setting(this, key, defaultV alue, this._eventSupport, isLocal ? this._localStorage : this._settingsStorage)) ;
98 return /** @type {!WebInspector.Setting} */ (this._registry.get(key));
99 },
100
101 /**
102 * @param {string} key
103 * @param {*} defaultValue
104 * @return {!WebInspector.Setting}
105 */
106 createLocalSetting: function(key, defaultValue)
107 {
108 return this.createSetting(key, defaultValue, true);
109 },
110
111 /**
112 * @param {string} key
113 * @param {string} defaultValue
114 * @param {string=} regexFlags
115 * @param {boolean=} isLocal
116 * @return {!WebInspector.RegExpSetting}
117 */
118 createRegExpSetting: function(key, defaultValue, regexFlags, isLocal)
119 {
120 if (!this._registry.get(key))
121 this._registry.set(key, new WebInspector.RegExpSetting(this, key, de faultValue, this._eventSupport, isLocal ? this._localStorage : this._settingsSto rage, regexFlags));
122 return /** @type {!WebInspector.RegExpSetting} */ (this._registry.get(ke y));
123 },
124
125 clearAll: function()
126 {
127 this._settingsStorage.removeAll();
128 this._localStorage.removeAll();
129 var versionSetting = WebInspector.settings.createSetting(WebInspector.Ve rsionController._currentVersionName, 0);
130 versionSetting.set(WebInspector.VersionController.currentVersion);
131 }
132 };
133
134 /** 134 /**
135 * @constructor 135 * @unrestricted
136 * @param {!Object} object
137 * @param {function(string, string)=} setCallback
138 * @param {function(string)=} removeCallback
139 * @param {function(string)=} removeAllCallback
140 */ 136 */
141 WebInspector.SettingsStorage = function(object, setCallback, removeCallback, rem oveAllCallback) 137 WebInspector.SettingsStorage = class {
142 { 138 /**
139 * @param {!Object} object
140 * @param {function(string, string)=} setCallback
141 * @param {function(string)=} removeCallback
142 * @param {function(string)=} removeAllCallback
143 */
144 constructor(object, setCallback, removeCallback, removeAllCallback) {
143 this._object = object; 145 this._object = object;
144 this._setCallback = setCallback || function() {}; 146 this._setCallback = setCallback || function() {};
145 this._removeCallback = removeCallback || function() {}; 147 this._removeCallback = removeCallback || function() {};
146 this._removeAllCallback = removeAllCallback || function() {}; 148 this._removeAllCallback = removeAllCallback || function() {};
149 }
150
151 /**
152 * @param {string} name
153 * @param {string} value
154 */
155 set(name, value) {
156 this._object[name] = value;
157 this._setCallback(name, value);
158 }
159
160 /**
161 * @param {string} name
162 * @return {boolean}
163 */
164 has(name) {
165 return name in this._object;
166 }
167
168 /**
169 * @param {string} name
170 * @return {string}
171 */
172 get(name) {
173 return this._object[name];
174 }
175
176 /**
177 * @param {string} name
178 */
179 remove(name) {
180 delete this._object[name];
181 this._removeCallback(name);
182 }
183
184 removeAll() {
185 this._object = {};
186 this._removeAllCallback();
187 }
188
189 _dumpSizes() {
190 WebInspector.console.log('Ten largest settings: ');
191
192 var sizes = {__proto__: null};
193 for (var key in this._object)
194 sizes[key] = this._object[key].length;
195 var keys = Object.keys(sizes);
196
197 function comparator(key1, key2) {
198 return sizes[key2] - sizes[key1];
199 }
200
201 keys.sort(comparator);
202
203 for (var i = 0; i < 10 && i < keys.length; ++i)
204 WebInspector.console.log('Setting: \'' + keys[i] + '\', size: ' + sizes[ke ys[i]]);
205 }
147 }; 206 };
148 207
149 WebInspector.SettingsStorage.prototype = {
150 /**
151 * @param {string} name
152 * @param {string} value
153 */
154 set: function(name, value)
155 {
156 this._object[name] = value;
157 this._setCallback(name, value);
158 },
159
160 /**
161 * @param {string} name
162 * @return {boolean}
163 */
164 has: function(name)
165 {
166 return name in this._object;
167 },
168
169 /**
170 * @param {string} name
171 * @return {string}
172 */
173 get: function(name)
174 {
175 return this._object[name];
176 },
177
178 /**
179 * @param {string} name
180 */
181 remove: function(name)
182 {
183 delete this._object[name];
184 this._removeCallback(name);
185 },
186
187 removeAll: function()
188 {
189 this._object = {};
190 this._removeAllCallback();
191 },
192
193 _dumpSizes: function()
194 {
195 WebInspector.console.log("Ten largest settings: ");
196
197 var sizes = { __proto__: null };
198 for (var key in this._object)
199 sizes[key] = this._object[key].length;
200 var keys = Object.keys(sizes);
201
202 function comparator(key1, key2)
203 {
204 return sizes[key2] - sizes[key1];
205 }
206
207 keys.sort(comparator);
208
209 for (var i = 0; i < 10 && i < keys.length; ++i)
210 WebInspector.console.log("Setting: '" + keys[i] + "', size: " + size s[keys[i]]);
211 }
212 };
213
214 /** 208 /**
215 * @constructor
216 * @param {!WebInspector.Settings} settings
217 * @param {string} name
218 * @param {V} defaultValue
219 * @param {!WebInspector.Object} eventSupport
220 * @param {!WebInspector.SettingsStorage} storage
221 * @template V 209 * @template V
210 * @unrestricted
222 */ 211 */
223 WebInspector.Setting = function(settings, name, defaultValue, eventSupport, stor age) 212 WebInspector.Setting = class {
224 { 213 /**
214 * @param {!WebInspector.Settings} settings
215 * @param {string} name
216 * @param {V} defaultValue
217 * @param {!WebInspector.Object} eventSupport
218 * @param {!WebInspector.SettingsStorage} storage
219 */
220 constructor(settings, name, defaultValue, eventSupport, storage) {
225 this._settings = settings; 221 this._settings = settings;
226 this._name = name; 222 this._name = name;
227 this._defaultValue = defaultValue; 223 this._defaultValue = defaultValue;
228 this._eventSupport = eventSupport; 224 this._eventSupport = eventSupport;
229 this._storage = storage; 225 this._storage = storage;
226 }
227
228 /**
229 * @param {function(!WebInspector.Event)} listener
230 * @param {!Object=} thisObject
231 */
232 addChangeListener(listener, thisObject) {
233 this._eventSupport.addEventListener(this._name, listener, thisObject);
234 }
235
236 /**
237 * @param {function(!WebInspector.Event)} listener
238 * @param {!Object=} thisObject
239 */
240 removeChangeListener(listener, thisObject) {
241 this._eventSupport.removeEventListener(this._name, listener, thisObject);
242 }
243
244 get name() {
245 return this._name;
246 }
247
248 /**
249 * @return {V}
250 */
251 get() {
252 if (typeof this._value !== 'undefined')
253 return this._value;
254
255 this._value = this._defaultValue;
256 if (this._storage.has(this._name)) {
257 try {
258 this._value = JSON.parse(this._storage.get(this._name));
259 } catch (e) {
260 this._storage.remove(this._name);
261 }
262 }
263 return this._value;
264 }
265
266 /**
267 * @param {V} value
268 */
269 set(value) {
270 this._value = value;
271 try {
272 var settingString = JSON.stringify(value);
273 try {
274 this._storage.set(this._name, settingString);
275 } catch (e) {
276 this._printSettingsSavingError(e.message, this._name, settingString);
277 }
278 } catch (e) {
279 WebInspector.console.error('Cannot stringify setting with name: ' + this._ name + ', error: ' + e.message);
280 }
281 this._eventSupport.dispatchEventToListeners(this._name, value);
282 }
283
284 remove() {
285 this._settings._registry.delete(this._name);
286 this._settings._moduleSettings.delete(this._name);
287 this._storage.remove(this._name);
288 }
289
290 /**
291 * @param {string} message
292 * @param {string} name
293 * @param {string} value
294 */
295 _printSettingsSavingError(message, name, value) {
296 var errorMessage =
297 'Error saving setting with name: ' + this._name + ', value length: ' + v alue.length + '. Error: ' + message;
298 console.error(errorMessage);
299 WebInspector.console.error(errorMessage);
300 this._storage._dumpSizes();
301 }
230 }; 302 };
231 303
232 WebInspector.Setting.prototype = { 304 /**
233 /** 305 * @unrestricted
234 * @param {function(!WebInspector.Event)} listener 306 */
235 * @param {!Object=} thisObject 307 WebInspector.RegExpSetting = class extends WebInspector.Setting {
236 */ 308 /**
237 addChangeListener: function(listener, thisObject) 309 * @param {!WebInspector.Settings} settings
238 { 310 * @param {string} name
239 this._eventSupport.addEventListener(this._name, listener, thisObject); 311 * @param {string} defaultValue
240 }, 312 * @param {!WebInspector.Object} eventSupport
241 313 * @param {!WebInspector.SettingsStorage} storage
242 /** 314 * @param {string=} regexFlags
243 * @param {function(!WebInspector.Event)} listener 315 */
244 * @param {!Object=} thisObject 316 constructor(settings, name, defaultValue, eventSupport, storage, regexFlags) {
245 */ 317 super(settings, name, defaultValue ? [{pattern: defaultValue}] : [], eventSu pport, storage);
246 removeChangeListener: function(listener, thisObject) 318 this._regexFlags = regexFlags;
247 { 319 }
248 this._eventSupport.removeEventListener(this._name, listener, thisObject) ; 320
249 }, 321 /**
250 322 * @override
251 get name() 323 * @return {string}
252 { 324 */
253 return this._name; 325 get() {
254 }, 326 var result = [];
255 327 var items = this.getAsArray();
256 /** 328 for (var i = 0; i < items.length; ++i) {
257 * @return {V} 329 var item = items[i];
258 */ 330 if (item.pattern && !item.disabled)
259 get: function() 331 result.push(item.pattern);
260 { 332 }
261 if (typeof this._value !== "undefined") 333 return result.join('|');
262 return this._value; 334 }
263 335
264 this._value = this._defaultValue; 336 /**
265 if (this._storage.has(this._name)) { 337 * @return {!Array.<{pattern: string, disabled: (boolean|undefined)}>}
266 try { 338 */
267 this._value = JSON.parse(this._storage.get(this._name)); 339 getAsArray() {
268 } catch (e) { 340 return super.get();
269 this._storage.remove(this._name); 341 }
270 } 342
271 } 343 /**
272 return this._value; 344 * @override
273 }, 345 * @param {string} value
274 346 */
275 /** 347 set(value) {
276 * @param {V} value 348 this.setAsArray([{pattern: value}]);
277 */ 349 }
278 set: function(value) 350
279 { 351 /**
280 this._value = value; 352 * @param {!Array.<{pattern: string, disabled: (boolean|undefined)}>} value
281 try { 353 */
282 var settingString = JSON.stringify(value); 354 setAsArray(value) {
283 try { 355 delete this._regex;
284 this._storage.set(this._name, settingString); 356 super.set(value);
285 } catch (e) { 357 }
286 this._printSettingsSavingError(e.message, this._name, settingStr ing); 358
287 } 359 /**
288 } catch (e) { 360 * @return {?RegExp}
289 WebInspector.console.error("Cannot stringify setting with name: " + this._name + ", error: " + e.message); 361 */
290 } 362 asRegExp() {
291 this._eventSupport.dispatchEventToListeners(this._name, value); 363 if (typeof this._regex !== 'undefined')
292 }, 364 return this._regex;
293 365 this._regex = null;
294 remove: function() 366 try {
295 { 367 var pattern = this.get();
296 this._settings._registry.delete(this._name); 368 if (pattern)
297 this._settings._moduleSettings.delete(this._name); 369 this._regex = new RegExp(pattern, this._regexFlags || '');
298 this._storage.remove(this._name); 370 } catch (e) {
299 }, 371 }
300 372 return this._regex;
301 /** 373 }
302 * @param {string} message
303 * @param {string} name
304 * @param {string} value
305 */
306 _printSettingsSavingError: function(message, name, value)
307 {
308 var errorMessage = "Error saving setting with name: " + this._name + ", value length: " + value.length + ". Error: " + message;
309 console.error(errorMessage);
310 WebInspector.console.error(errorMessage);
311 this._storage._dumpSizes();
312 }
313 }; 374 };
314 375
315 /** 376 /**
316 * @constructor 377 * @unrestricted
317 * @extends {WebInspector.Setting}
318 * @param {!WebInspector.Settings} settings
319 * @param {string} name
320 * @param {string} defaultValue
321 * @param {!WebInspector.Object} eventSupport
322 * @param {!WebInspector.SettingsStorage} storage
323 * @param {string=} regexFlags
324 */ 378 */
325 WebInspector.RegExpSetting = function(settings, name, defaultValue, eventSupport , storage, regexFlags) 379 WebInspector.VersionController = class {
326 { 380 updateVersion() {
327 WebInspector.Setting.call(this, settings, name, defaultValue ? [{ pattern: d efaultValue }] : [], eventSupport, storage); 381 var localStorageVersion =
328 this._regexFlags = regexFlags; 382 window.localStorage ? window.localStorage[WebInspector.VersionController ._currentVersionName] : 0;
383 var versionSetting = WebInspector.settings.createSetting(WebInspector.Versio nController._currentVersionName, 0);
384 var currentVersion = WebInspector.VersionController.currentVersion;
385 var oldVersion = versionSetting.get() || parseInt(localStorageVersion || '0' , 10);
386 if (oldVersion === 0) {
387 // First run, no need to do anything.
388 versionSetting.set(currentVersion);
389 return;
390 }
391 var methodsToRun = this._methodsToRunToUpdateVersion(oldVersion, currentVers ion);
392 for (var i = 0; i < methodsToRun.length; ++i)
393 this[methodsToRun[i]].call(this);
394 versionSetting.set(currentVersion);
395 }
396
397 /**
398 * @param {number} oldVersion
399 * @param {number} currentVersion
400 */
401 _methodsToRunToUpdateVersion(oldVersion, currentVersion) {
402 var result = [];
403 for (var i = oldVersion; i < currentVersion; ++i)
404 result.push('_updateVersionFrom' + i + 'To' + (i + 1));
405 return result;
406 }
407
408 _updateVersionFrom0To1() {
409 this._clearBreakpointsWhenTooMany(WebInspector.settings.createLocalSetting(' breakpoints', []), 500000);
410 }
411
412 _updateVersionFrom1To2() {
413 WebInspector.settings.createSetting('previouslyViewedFiles', []).set([]);
414 }
415
416 _updateVersionFrom2To3() {
417 WebInspector.settings.createSetting('fileSystemMapping', {}).set({});
418 WebInspector.settings.createSetting('fileMappingEntries', []).remove();
419 }
420
421 _updateVersionFrom3To4() {
422 var advancedMode = WebInspector.settings.createSetting('showHeaSnapshotObjec tsHiddenProperties', false);
423 WebInspector.moduleSetting('showAdvancedHeapSnapshotProperties').set(advance dMode.get());
424 advancedMode.remove();
425 }
426
427 _updateVersionFrom4To5() {
428 var settingNames = {
429 'FileSystemViewSidebarWidth': 'fileSystemViewSplitViewState',
430 'elementsSidebarWidth': 'elementsPanelSplitViewState',
431 'StylesPaneSplitRatio': 'stylesPaneSplitViewState',
432 'heapSnapshotRetainersViewSize': 'heapSnapshotSplitViewState',
433 'InspectorView.splitView': 'InspectorView.splitViewState',
434 'InspectorView.screencastSplitView': 'InspectorView.screencastSplitViewSta te',
435 'Inspector.drawerSplitView': 'Inspector.drawerSplitViewState',
436 'layerDetailsSplitView': 'layerDetailsSplitViewState',
437 'networkSidebarWidth': 'networkPanelSplitViewState',
438 'sourcesSidebarWidth': 'sourcesPanelSplitViewState',
439 'scriptsPanelNavigatorSidebarWidth': 'sourcesPanelNavigatorSplitViewState' ,
440 'sourcesPanelSplitSidebarRatio': 'sourcesPanelDebuggerSidebarSplitViewStat e',
441 'timeline-details': 'timelinePanelDetailsSplitViewState',
442 'timeline-split': 'timelinePanelRecorsSplitViewState',
443 'timeline-view': 'timelinePanelTimelineStackSplitViewState',
444 'auditsSidebarWidth': 'auditsPanelSplitViewState',
445 'layersSidebarWidth': 'layersPanelSplitViewState',
446 'profilesSidebarWidth': 'profilesPanelSplitViewState',
447 'resourcesSidebarWidth': 'resourcesPanelSplitViewState'
448 };
449 var empty = {};
450 for (var oldName in settingNames) {
451 var newName = settingNames[oldName];
452 var oldNameH = oldName + 'H';
453
454 var newValue = null;
455 var oldSetting = WebInspector.settings.createSetting(oldName, empty);
456 if (oldSetting.get() !== empty) {
457 newValue = newValue || {};
458 newValue.vertical = {};
459 newValue.vertical.size = oldSetting.get();
460 oldSetting.remove();
461 }
462 var oldSettingH = WebInspector.settings.createSetting(oldNameH, empty);
463 if (oldSettingH.get() !== empty) {
464 newValue = newValue || {};
465 newValue.horizontal = {};
466 newValue.horizontal.size = oldSettingH.get();
467 oldSettingH.remove();
468 }
469 if (newValue)
470 WebInspector.settings.createSetting(newName, {}).set(newValue);
471 }
472 }
473
474 _updateVersionFrom5To6() {
475 var settingNames = {
476 'debuggerSidebarHidden': 'sourcesPanelSplitViewState',
477 'navigatorHidden': 'sourcesPanelNavigatorSplitViewState',
478 'WebInspector.Drawer.showOnLoad': 'Inspector.drawerSplitViewState'
479 };
480
481 for (var oldName in settingNames) {
482 var oldSetting = WebInspector.settings.createSetting(oldName, null);
483 if (oldSetting.get() === null) {
484 oldSetting.remove();
485 continue;
486 }
487
488 var newName = settingNames[oldName];
489 var invert = oldName === 'WebInspector.Drawer.showOnLoad';
490 var hidden = oldSetting.get() !== invert;
491 oldSetting.remove();
492 var showMode = hidden ? 'OnlyMain' : 'Both';
493
494 var newSetting = WebInspector.settings.createSetting(newName, {});
495 var newValue = newSetting.get() || {};
496 newValue.vertical = newValue.vertical || {};
497 newValue.vertical.showMode = showMode;
498 newValue.horizontal = newValue.horizontal || {};
499 newValue.horizontal.showMode = showMode;
500 newSetting.set(newValue);
501 }
502 }
503
504 _updateVersionFrom6To7() {
505 var settingNames = {
506 'sourcesPanelNavigatorSplitViewState': 'sourcesPanelNavigatorSplitViewStat e',
507 'elementsPanelSplitViewState': 'elementsPanelSplitViewState',
508 'stylesPaneSplitViewState': 'stylesPaneSplitViewState',
509 'sourcesPanelDebuggerSidebarSplitViewState': 'sourcesPanelDebuggerSidebarS plitViewState'
510 };
511
512 var empty = {};
513 for (var name in settingNames) {
514 var setting = WebInspector.settings.createSetting(name, empty);
515 var value = setting.get();
516 if (value === empty)
517 continue;
518 // Zero out saved percentage sizes, and they will be restored to defaults.
519 if (value.vertical && value.vertical.size && value.vertical.size < 1)
520 value.vertical.size = 0;
521 if (value.horizontal && value.horizontal.size && value.horizontal.size < 1 )
522 value.horizontal.size = 0;
523 setting.set(value);
524 }
525 }
526
527 _updateVersionFrom7To8() {
528 }
529
530 _updateVersionFrom8To9() {
531 var settingNames = ['skipStackFramesPattern', 'workspaceFolderExcludePattern '];
532
533 for (var i = 0; i < settingNames.length; ++i) {
534 var setting = WebInspector.settings.createSetting(settingNames[i], '');
535 var value = setting.get();
536 if (!value)
537 return;
538 if (typeof value === 'string')
539 value = [value];
540 for (var j = 0; j < value.length; ++j) {
541 if (typeof value[j] === 'string')
542 value[j] = {pattern: value[j]};
543 }
544 setting.set(value);
545 }
546 }
547
548 _updateVersionFrom9To10() {
549 // This one is localStorage specific, which is fine.
550 if (!window.localStorage)
551 return;
552 for (var key in window.localStorage) {
553 if (key.startsWith('revision-history'))
554 window.localStorage.removeItem(key);
555 }
556 }
557
558 _updateVersionFrom10To11() {
559 var oldSettingName = 'customDevicePresets';
560 var newSettingName = 'customEmulatedDeviceList';
561 var oldSetting = WebInspector.settings.createSetting(oldSettingName, undefin ed);
562 var list = oldSetting.get();
563 if (!Array.isArray(list))
564 return;
565 var newList = [];
566 for (var i = 0; i < list.length; ++i) {
567 var value = list[i];
568 var device = {};
569 device['title'] = value['title'];
570 device['type'] = 'unknown';
571 device['user-agent'] = value['userAgent'];
572 device['capabilities'] = [];
573 if (value['touch'])
574 device['capabilities'].push('touch');
575 if (value['mobile'])
576 device['capabilities'].push('mobile');
577 device['screen'] = {};
578 device['screen']['vertical'] = {width: value['width'], height: value['heig ht']};
579 device['screen']['horizontal'] = {width: value['height'], height: value['w idth']};
580 device['screen']['device-pixel-ratio'] = value['deviceScaleFactor'];
581 device['modes'] = [];
582 device['show-by-default'] = true;
583 device['show'] = 'Default';
584 newList.push(device);
585 }
586 if (newList.length)
587 WebInspector.settings.createSetting(newSettingName, []).set(newList);
588 oldSetting.remove();
589 }
590
591 _updateVersionFrom11To12() {
592 this._migrateSettingsFromLocalStorage();
593 }
594
595 _updateVersionFrom12To13() {
596 this._migrateSettingsFromLocalStorage();
597 WebInspector.settings.createSetting('timelineOverviewMode', '').remove();
598 }
599
600 _updateVersionFrom13To14() {
601 var defaultValue = {'throughput': -1, 'latency': 0};
602 WebInspector.settings.createSetting('networkConditions', defaultValue).set(d efaultValue);
603 }
604
605 _updateVersionFrom14To15() {
606 var setting = WebInspector.settings.createLocalSetting('workspaceExcludedFol ders', {});
607 var oldValue = setting.get();
608 var newValue = {};
609 for (var fileSystemPath in oldValue) {
610 newValue[fileSystemPath] = [];
611 for (var entry of oldValue[fileSystemPath])
612 newValue[fileSystemPath].push(entry.path);
613 }
614 setting.set(newValue);
615 }
616
617 _updateVersionFrom15To16() {
618 var setting = WebInspector.settings.createSetting('InspectorView.panelOrder' , {});
619 var tabOrders = setting.get();
620 for (var key of Object.keys(tabOrders))
621 tabOrders[key] = (tabOrders[key] + 1) * 10;
622 setting.set(tabOrders);
623 }
624
625 _updateVersionFrom16To17() {
626 var setting = WebInspector.settings.createSetting('networkConditionsCustomPr ofiles', []);
627 var oldValue = setting.get();
628 var newValue = [];
629 if (Array.isArray(oldValue)) {
630 for (var preset of oldValue) {
631 if (typeof preset.title === 'string' && typeof preset.value === 'object' &&
632 typeof preset.value.throughput === 'number' && typeof preset.value.l atency === 'number')
633 newValue.push({
634 title: preset.title,
635 value:
636 {download: preset.value.throughput, upload: preset.value.through put, latency: preset.value.latency}
637 });
638 }
639 }
640 setting.set(newValue);
641 }
642
643 _updateVersionFrom17To18() {
644 var setting = WebInspector.settings.createLocalSetting('workspaceExcludedFol ders', {});
645 var oldValue = setting.get();
646 var newValue = {};
647 for (var oldKey in oldValue) {
648 var newKey = oldKey.replace(/\\/g, '/');
649 if (!newKey.startsWith('file://')) {
650 if (newKey.startsWith('/'))
651 newKey = 'file://' + newKey;
652 else
653 newKey = 'file:///' + newKey;
654 }
655 newValue[newKey] = oldValue[oldKey];
656 }
657 setting.set(newValue);
658 }
659
660 _updateVersionFrom18To19() {
661 var defaultColumns = {status: true, type: true, initiator: true, size: true, time: true};
662 var visibleColumnSettings = WebInspector.settings.createSetting('networkLogC olumnsVisibility', defaultColumns);
663 var visibleColumns = visibleColumnSettings.get();
664 visibleColumns.name = true;
665 visibleColumns.timeline = true;
666
667 var configs = {};
668 for (var columnId in visibleColumns) {
669 if (!visibleColumns.hasOwnProperty(columnId))
670 continue;
671 configs[columnId.toLowerCase()] = {visible: visibleColumns[columnId]};
672 }
673 var newSetting = WebInspector.settings.createSetting('networkLogColumns', {} );
674 newSetting.set(configs);
675 visibleColumnSettings.remove();
676 }
677
678 _updateVersionFrom19To20() {
679 var oldSetting = WebInspector.settings.createSetting('InspectorView.panelOrd er', {});
680 var newSetting = WebInspector.settings.createSetting('panel-tabOrder', {});
681 newSetting.set(oldSetting.get());
682 oldSetting.remove();
683 }
684
685 _migrateSettingsFromLocalStorage() {
686 // This step migrates all the settings except for the ones below into the br owser profile.
687 var localSettings = new Set([
688 'advancedSearchConfig', 'breakpoints', 'consoleHistory', 'domBreakpoints', 'eventListenerBreakpoints',
689 'fileSystemMapping', 'lastSelectedSourcesSidebarPaneTab', 'previouslyViewe dFiles', 'savedURLs',
690 'watchExpressions', 'workspaceExcludedFolders', 'xhrBreakpoints'
691 ]);
692 if (!window.localStorage)
693 return;
694
695 for (var key in window.localStorage) {
696 if (localSettings.has(key))
697 continue;
698 var value = window.localStorage[key];
699 window.localStorage.removeItem(key);
700 WebInspector.settings._settingsStorage[key] = value;
701 }
702 }
703
704 /**
705 * @param {!WebInspector.Setting} breakpointsSetting
706 * @param {number} maxBreakpointsCount
707 */
708 _clearBreakpointsWhenTooMany(breakpointsSetting, maxBreakpointsCount) {
709 // If there are too many breakpoints in a storage, it is likely due to a rec ent bug that caused
710 // periodical breakpoints duplication leading to inspector slowness.
711 if (breakpointsSetting.get().length > maxBreakpointsCount)
712 breakpointsSetting.set([]);
713 }
329 }; 714 };
330 715
331 WebInspector.RegExpSetting.prototype = { 716 WebInspector.VersionController._currentVersionName = 'inspectorVersion';
332 /**
333 * @override
334 * @return {string}
335 */
336 get: function()
337 {
338 var result = [];
339 var items = this.getAsArray();
340 for (var i = 0; i < items.length; ++i) {
341 var item = items[i];
342 if (item.pattern && !item.disabled)
343 result.push(item.pattern);
344 }
345 return result.join("|");
346 },
347
348 /**
349 * @return {!Array.<{pattern: string, disabled: (boolean|undefined)}>}
350 */
351 getAsArray: function()
352 {
353 return WebInspector.Setting.prototype.get.call(this);
354 },
355
356 /**
357 * @override
358 * @param {string} value
359 */
360 set: function(value)
361 {
362 this.setAsArray([{ pattern: value }]);
363 },
364
365 /**
366 * @param {!Array.<{pattern: string, disabled: (boolean|undefined)}>} value
367 */
368 setAsArray: function(value)
369 {
370 delete this._regex;
371 WebInspector.Setting.prototype.set.call(this, value);
372 },
373
374 /**
375 * @return {?RegExp}
376 */
377 asRegExp: function()
378 {
379 if (typeof this._regex !== "undefined")
380 return this._regex;
381 this._regex = null;
382 try {
383 var pattern = this.get();
384 if (pattern)
385 this._regex = new RegExp(pattern, this._regexFlags || "");
386 } catch (e) {
387 }
388 return this._regex;
389 },
390
391 __proto__: WebInspector.Setting.prototype
392 };
393
394 /**
395 * @constructor
396 */
397 WebInspector.VersionController = function()
398 {
399 };
400
401 WebInspector.VersionController._currentVersionName = "inspectorVersion";
402 WebInspector.VersionController.currentVersion = 20; 717 WebInspector.VersionController.currentVersion = 20;
403 718
404 WebInspector.VersionController.prototype = {
405 updateVersion: function()
406 {
407 var localStorageVersion = window.localStorage ? window.localStorage[WebI nspector.VersionController._currentVersionName] : 0;
408 var versionSetting = WebInspector.settings.createSetting(WebInspector.Ve rsionController._currentVersionName, 0);
409 var currentVersion = WebInspector.VersionController.currentVersion;
410 var oldVersion = versionSetting.get() || parseInt(localStorageVersion || "0", 10);
411 if (oldVersion === 0) {
412 // First run, no need to do anything.
413 versionSetting.set(currentVersion);
414 return;
415 }
416 var methodsToRun = this._methodsToRunToUpdateVersion(oldVersion, current Version);
417 for (var i = 0; i < methodsToRun.length; ++i)
418 this[methodsToRun[i]].call(this);
419 versionSetting.set(currentVersion);
420 },
421
422 /**
423 * @param {number} oldVersion
424 * @param {number} currentVersion
425 */
426 _methodsToRunToUpdateVersion: function(oldVersion, currentVersion)
427 {
428 var result = [];
429 for (var i = oldVersion; i < currentVersion; ++i)
430 result.push("_updateVersionFrom" + i + "To" + (i + 1));
431 return result;
432 },
433
434 _updateVersionFrom0To1: function()
435 {
436 this._clearBreakpointsWhenTooMany(WebInspector.settings.createLocalSetti ng("breakpoints", []), 500000);
437 },
438
439 _updateVersionFrom1To2: function()
440 {
441 WebInspector.settings.createSetting("previouslyViewedFiles", []).set([]) ;
442 },
443
444 _updateVersionFrom2To3: function()
445 {
446 WebInspector.settings.createSetting("fileSystemMapping", {}).set({});
447 WebInspector.settings.createSetting("fileMappingEntries", []).remove();
448 },
449
450 _updateVersionFrom3To4: function()
451 {
452 var advancedMode = WebInspector.settings.createSetting("showHeaSnapshotO bjectsHiddenProperties", false);
453 WebInspector.moduleSetting("showAdvancedHeapSnapshotProperties").set(adv ancedMode.get());
454 advancedMode.remove();
455 },
456
457 _updateVersionFrom4To5: function()
458 {
459 var settingNames = {
460 "FileSystemViewSidebarWidth": "fileSystemViewSplitViewState",
461 "elementsSidebarWidth": "elementsPanelSplitViewState",
462 "StylesPaneSplitRatio": "stylesPaneSplitViewState",
463 "heapSnapshotRetainersViewSize": "heapSnapshotSplitViewState",
464 "InspectorView.splitView": "InspectorView.splitViewState",
465 "InspectorView.screencastSplitView": "InspectorView.screencastSplitV iewState",
466 "Inspector.drawerSplitView": "Inspector.drawerSplitViewState",
467 "layerDetailsSplitView": "layerDetailsSplitViewState",
468 "networkSidebarWidth": "networkPanelSplitViewState",
469 "sourcesSidebarWidth": "sourcesPanelSplitViewState",
470 "scriptsPanelNavigatorSidebarWidth": "sourcesPanelNavigatorSplitView State",
471 "sourcesPanelSplitSidebarRatio": "sourcesPanelDebuggerSidebarSplitVi ewState",
472 "timeline-details": "timelinePanelDetailsSplitViewState",
473 "timeline-split": "timelinePanelRecorsSplitViewState",
474 "timeline-view": "timelinePanelTimelineStackSplitViewState",
475 "auditsSidebarWidth": "auditsPanelSplitViewState",
476 "layersSidebarWidth": "layersPanelSplitViewState",
477 "profilesSidebarWidth": "profilesPanelSplitViewState",
478 "resourcesSidebarWidth": "resourcesPanelSplitViewState"
479 };
480 var empty = {};
481 for (var oldName in settingNames) {
482 var newName = settingNames[oldName];
483 var oldNameH = oldName + "H";
484
485 var newValue = null;
486 var oldSetting = WebInspector.settings.createSetting(oldName, empty) ;
487 if (oldSetting.get() !== empty) {
488 newValue = newValue || {};
489 newValue.vertical = {};
490 newValue.vertical.size = oldSetting.get();
491 oldSetting.remove();
492 }
493 var oldSettingH = WebInspector.settings.createSetting(oldNameH, empt y);
494 if (oldSettingH.get() !== empty) {
495 newValue = newValue || {};
496 newValue.horizontal = {};
497 newValue.horizontal.size = oldSettingH.get();
498 oldSettingH.remove();
499 }
500 if (newValue)
501 WebInspector.settings.createSetting(newName, {}).set(newValue);
502 }
503 },
504
505 _updateVersionFrom5To6: function()
506 {
507 var settingNames = {
508 "debuggerSidebarHidden": "sourcesPanelSplitViewState",
509 "navigatorHidden": "sourcesPanelNavigatorSplitViewState",
510 "WebInspector.Drawer.showOnLoad": "Inspector.drawerSplitViewState"
511 };
512
513 for (var oldName in settingNames) {
514 var oldSetting = WebInspector.settings.createSetting(oldName, null);
515 if (oldSetting.get() === null) {
516 oldSetting.remove();
517 continue;
518 }
519
520 var newName = settingNames[oldName];
521 var invert = oldName === "WebInspector.Drawer.showOnLoad";
522 var hidden = oldSetting.get() !== invert;
523 oldSetting.remove();
524 var showMode = hidden ? "OnlyMain" : "Both";
525
526 var newSetting = WebInspector.settings.createSetting(newName, {});
527 var newValue = newSetting.get() || {};
528 newValue.vertical = newValue.vertical || {};
529 newValue.vertical.showMode = showMode;
530 newValue.horizontal = newValue.horizontal || {};
531 newValue.horizontal.showMode = showMode;
532 newSetting.set(newValue);
533 }
534 },
535
536 _updateVersionFrom6To7: function()
537 {
538 var settingNames = {
539 "sourcesPanelNavigatorSplitViewState": "sourcesPanelNavigatorSplitVi ewState",
540 "elementsPanelSplitViewState": "elementsPanelSplitViewState",
541 "stylesPaneSplitViewState": "stylesPaneSplitViewState",
542 "sourcesPanelDebuggerSidebarSplitViewState": "sourcesPanelDebuggerSi debarSplitViewState"
543 };
544
545 var empty = {};
546 for (var name in settingNames) {
547 var setting = WebInspector.settings.createSetting(name, empty);
548 var value = setting.get();
549 if (value === empty)
550 continue;
551 // Zero out saved percentage sizes, and they will be restored to def aults.
552 if (value.vertical && value.vertical.size && value.vertical.size < 1 )
553 value.vertical.size = 0;
554 if (value.horizontal && value.horizontal.size && value.horizontal.si ze < 1)
555 value.horizontal.size = 0;
556 setting.set(value);
557 }
558 },
559
560 _updateVersionFrom7To8: function()
561 {
562 },
563
564 _updateVersionFrom8To9: function()
565 {
566 var settingNames = [
567 "skipStackFramesPattern",
568 "workspaceFolderExcludePattern"
569 ];
570
571 for (var i = 0; i < settingNames.length; ++i) {
572 var setting = WebInspector.settings.createSetting(settingNames[i], " ");
573 var value = setting.get();
574 if (!value)
575 return;
576 if (typeof value === "string")
577 value = [value];
578 for (var j = 0; j < value.length; ++j) {
579 if (typeof value[j] === "string")
580 value[j] = { pattern: value[j] };
581 }
582 setting.set(value);
583 }
584 },
585
586 _updateVersionFrom9To10: function()
587 {
588 // This one is localStorage specific, which is fine.
589 if (!window.localStorage)
590 return;
591 for (var key in window.localStorage) {
592 if (key.startsWith("revision-history"))
593 window.localStorage.removeItem(key);
594 }
595 },
596
597 _updateVersionFrom10To11: function()
598 {
599 var oldSettingName = "customDevicePresets";
600 var newSettingName = "customEmulatedDeviceList";
601 var oldSetting = WebInspector.settings.createSetting(oldSettingName, und efined);
602 var list = oldSetting.get();
603 if (!Array.isArray(list))
604 return;
605 var newList = [];
606 for (var i = 0; i < list.length; ++i) {
607 var value = list[i];
608 var device = {};
609 device["title"] = value["title"];
610 device["type"] = "unknown";
611 device["user-agent"] = value["userAgent"];
612 device["capabilities"] = [];
613 if (value["touch"])
614 device["capabilities"].push("touch");
615 if (value["mobile"])
616 device["capabilities"].push("mobile");
617 device["screen"] = {};
618 device["screen"]["vertical"] = {width: value["width"], height: value ["height"]};
619 device["screen"]["horizontal"] = {width: value["height"], height: va lue["width"]};
620 device["screen"]["device-pixel-ratio"] = value["deviceScaleFactor"];
621 device["modes"] = [];
622 device["show-by-default"] = true;
623 device["show"] = "Default";
624 newList.push(device);
625 }
626 if (newList.length)
627 WebInspector.settings.createSetting(newSettingName, []).set(newList) ;
628 oldSetting.remove();
629 },
630
631 _updateVersionFrom11To12: function()
632 {
633 this._migrateSettingsFromLocalStorage();
634 },
635
636 _updateVersionFrom12To13: function()
637 {
638 this._migrateSettingsFromLocalStorage();
639 WebInspector.settings.createSetting("timelineOverviewMode", "").remove() ;
640 },
641
642 _updateVersionFrom13To14: function()
643 {
644 var defaultValue = { "throughput": -1, "latency": 0 };
645 WebInspector.settings.createSetting("networkConditions", defaultValue).s et(defaultValue);
646 },
647
648 _updateVersionFrom14To15: function()
649 {
650 var setting = WebInspector.settings.createLocalSetting("workspaceExclude dFolders", {});
651 var oldValue = setting.get();
652 var newValue = {};
653 for (var fileSystemPath in oldValue) {
654 newValue[fileSystemPath] = [];
655 for (var entry of oldValue[fileSystemPath])
656 newValue[fileSystemPath].push(entry.path);
657 }
658 setting.set(newValue);
659 },
660
661 _updateVersionFrom15To16: function()
662 {
663 var setting = WebInspector.settings.createSetting("InspectorView.panelOr der", {});
664 var tabOrders = setting.get();
665 for (var key of Object.keys(tabOrders))
666 tabOrders[key] = (tabOrders[key] + 1) * 10;
667 setting.set(tabOrders);
668 },
669
670 _updateVersionFrom16To17: function()
671 {
672 var setting = WebInspector.settings.createSetting("networkConditionsCust omProfiles", []);
673 var oldValue = setting.get();
674 var newValue = [];
675 if (Array.isArray(oldValue)) {
676 for (var preset of oldValue) {
677 if (typeof preset.title === "string" && typeof preset.value === "object" && typeof preset.value.throughput === "number" && typeof preset.value.l atency === "number")
678 newValue.push({title: preset.title, value: {download: preset .value.throughput, upload: preset.value.throughput, latency: preset.value.latenc y}});
679 }
680 }
681 setting.set(newValue);
682 },
683
684 _updateVersionFrom17To18: function()
685 {
686 var setting = WebInspector.settings.createLocalSetting("workspaceExclude dFolders", {});
687 var oldValue = setting.get();
688 var newValue = {};
689 for (var oldKey in oldValue) {
690 var newKey = oldKey.replace(/\\/g, "/");
691 if (!newKey.startsWith("file://")) {
692 if (newKey.startsWith("/"))
693 newKey = "file://" + newKey;
694 else
695 newKey = "file:///" + newKey;
696 }
697 newValue[newKey] = oldValue[oldKey];
698 }
699 setting.set(newValue);
700 },
701
702 _updateVersionFrom18To19: function()
703 {
704 var defaultColumns = {
705 status: true,
706 type: true,
707 initiator: true,
708 size: true,
709 time: true
710 };
711 var visibleColumnSettings = WebInspector.settings.createSetting("network LogColumnsVisibility", defaultColumns);
712 var visibleColumns = visibleColumnSettings.get();
713 visibleColumns.name = true;
714 visibleColumns.timeline = true;
715
716 var configs = {};
717 for (var columnId in visibleColumns) {
718 if (!visibleColumns.hasOwnProperty(columnId))
719 continue;
720 configs[columnId.toLowerCase()] = {
721 visible: visibleColumns[columnId]
722 };
723 }
724 var newSetting = WebInspector.settings.createSetting("networkLogColumns" , {});
725 newSetting.set(configs);
726 visibleColumnSettings.remove();
727 },
728
729 _updateVersionFrom19To20: function()
730 {
731 var oldSetting = WebInspector.settings.createSetting("InspectorView.pane lOrder", {});
732 var newSetting = WebInspector.settings.createSetting("panel-tabOrder", { });
733 newSetting.set(oldSetting.get());
734 oldSetting.remove();
735 },
736
737 _migrateSettingsFromLocalStorage: function()
738 {
739 // This step migrates all the settings except for the ones below into th e browser profile.
740 var localSettings = new Set([ "advancedSearchConfig", "breakpoints", "co nsoleHistory", "domBreakpoints", "eventListenerBreakpoints",
741 "fileSystemMapping", "lastSelectedSourcesSidebarPa neTab", "previouslyViewedFiles",
742 "savedURLs", "watchExpressions", "workspaceExclude dFolders", "xhrBreakpoints" ]);
743 if (!window.localStorage)
744 return;
745
746 for (var key in window.localStorage) {
747 if (localSettings.has(key))
748 continue;
749 var value = window.localStorage[key];
750 window.localStorage.removeItem(key);
751 WebInspector.settings._settingsStorage[key] = value;
752 }
753 },
754
755 /**
756 * @param {!WebInspector.Setting} breakpointsSetting
757 * @param {number} maxBreakpointsCount
758 */
759 _clearBreakpointsWhenTooMany: function(breakpointsSetting, maxBreakpointsCou nt)
760 {
761 // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused
762 // periodical breakpoints duplication leading to inspector slowness.
763 if (breakpointsSetting.get().length > maxBreakpointsCount)
764 breakpointsSetting.set([]);
765 }
766 };
767
768 /** 719 /**
769 * @type {!WebInspector.Settings} 720 * @type {!WebInspector.Settings}
770 */ 721 */
771 WebInspector.settings; 722 WebInspector.settings;
772 723
773 /** 724 /**
774 * @param {string} settingName 725 * @param {string} settingName
775 * @return {!WebInspector.Setting} 726 * @return {!WebInspector.Setting}
776 */ 727 */
777 WebInspector.moduleSetting = function(settingName) 728 WebInspector.moduleSetting = function(settingName) {
778 { 729 return WebInspector.settings.moduleSetting(settingName);
779 return WebInspector.settings.moduleSetting(settingName);
780 }; 730 };
781 731
782 /** 732 /**
783 * @param {string} settingName 733 * @param {string} settingName
784 * @return {!WebInspector.Setting} 734 * @return {!WebInspector.Setting}
785 */ 735 */
786 WebInspector.settingForTest = function(settingName) 736 WebInspector.settingForTest = function(settingName) {
787 { 737 return WebInspector.settings.settingForTest(settingName);
788 return WebInspector.settings.settingForTest(settingName);
789 }; 738 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698