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

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

Issue 1085253003: Revert of Revert of DevTools: allow storing devtools preferences on the browser side. [blink] (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: 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 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
(...skipping 12 matching lines...) Expand all
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 30
31 /** 31 /**
32 * @constructor 32 * @constructor
33 * @param {!Object<string, string>} prefs
33 */ 34 */
34 WebInspector.Settings = function() 35 WebInspector.Settings = function(prefs)
35 { 36 {
37 this._settingsStorage = prefs;
36 this._eventSupport = new WebInspector.Object(); 38 this._eventSupport = new WebInspector.Object();
37 /** @type {!Map<string, !WebInspector.Setting>} */ 39 /** @type {!Map<string, !WebInspector.Setting>} */
38 this._registry = new Map(); 40 this._registry = new Map();
39 /** @type {!Map<string, !WebInspector.Setting>} */ 41 /** @type {!Map<string, !WebInspector.Setting>} */
40 this._moduleSettings = new Map(); 42 this._moduleSettings = new Map();
41 self.runtime.extensions("setting").forEach(this._registerModuleSetting.bind( this)); 43 self.runtime.extensions("setting").forEach(this._registerModuleSetting.bind( this));
42 } 44 }
43 45
44 WebInspector.Settings.prototype = { 46 WebInspector.Settings.prototype = {
45 /** 47 /**
46 * @param {!Runtime.Extension} extension 48 * @param {!Runtime.Extension} extension
47 */ 49 */
48 _registerModuleSetting: function(extension) 50 _registerModuleSetting: function(extension)
49 { 51 {
50 var descriptor = extension.descriptor(); 52 var descriptor = extension.descriptor();
51 var settingName = descriptor["settingName"]; 53 var settingName = descriptor["settingName"];
52 var settingType = descriptor["settingType"]; 54 var settingType = descriptor["settingType"];
53 var defaultValue = descriptor["defaultValue"]; 55 var defaultValue = descriptor["defaultValue"];
54 var setting = settingType === "regex" ? this.createRegExpSetting(setting Name, defaultValue) : this.createSetting(settingName, defaultValue); 56 var isLocal = !!descriptor["local"];
57 var setting = settingType === "regex" ? this.createRegExpSetting(setting Name, defaultValue, undefined, isLocal) : this.createSetting(settingName, defaul tValue, isLocal);
55 this._moduleSettings.set(settingName, setting); 58 this._moduleSettings.set(settingName, setting);
56 }, 59 },
57 60
58 /** 61 /**
59 * @param {string} settingName 62 * @param {string} settingName
60 * @return {!WebInspector.Setting} 63 * @return {!WebInspector.Setting}
61 */ 64 */
62 moduleSetting: function(settingName) 65 moduleSetting: function(settingName)
63 { 66 {
64 var setting = this._moduleSettings.get(settingName); 67 var setting = this._moduleSettings.get(settingName);
(...skipping 10 matching lines...) Expand all
75 { 78 {
76 var setting = this._registry.get(settingName); 79 var setting = this._registry.get(settingName);
77 if (!setting) 80 if (!setting)
78 throw new Error("No setting registered: " + settingName); 81 throw new Error("No setting registered: " + settingName);
79 return setting; 82 return setting;
80 }, 83 },
81 84
82 /** 85 /**
83 * @param {string} key 86 * @param {string} key
84 * @param {*} defaultValue 87 * @param {*} defaultValue
88 * @param {boolean=} isLocal
89 * @return {!WebInspector.Setting}
90 */
91 createSetting: function(key, defaultValue, isLocal)
92 {
93 if (!this._registry.get(key))
94 this._registry.set(key, new WebInspector.Setting(this, key, defaultV alue, this._eventSupport, isLocal ? (window.localStorage || {}) : this._settings Storage));
95 return /** @type {!WebInspector.Setting} */ (this._registry.get(key));
96 },
97
98 /**
99 * @param {string} key
100 * @param {*} defaultValue
85 * @return {!WebInspector.Setting} 101 * @return {!WebInspector.Setting}
86 */ 102 */
87 createSetting: function(key, defaultValue) 103 createLocalSetting: function(key, defaultValue)
88 { 104 {
89 if (!this._registry.get(key)) 105 return this.createSetting(key, defaultValue, true);
90 this._registry.set(key, new WebInspector.Setting(key, defaultValue, this._eventSupport, window.localStorage));
91 return /** @type {!WebInspector.Setting} */ (this._registry.get(key));
92 }, 106 },
93 107
94 /** 108 /**
95 * @param {string} key 109 * @param {string} key
96 * @param {string} defaultValue 110 * @param {string} defaultValue
97 * @param {string=} regexFlags 111 * @param {string=} regexFlags
112 * @param {boolean=} isLocal
98 * @return {!WebInspector.RegExpSetting} 113 * @return {!WebInspector.RegExpSetting}
99 */ 114 */
100 createRegExpSetting: function(key, defaultValue, regexFlags) 115 createRegExpSetting: function(key, defaultValue, regexFlags, isLocal)
101 { 116 {
102 if (!this._registry.get(key)) 117 if (!this._registry.get(key))
103 this._registry.set(key, new WebInspector.RegExpSetting(key, defaultV alue, this._eventSupport, window.localStorage, regexFlags)); 118 this._registry.set(key, new WebInspector.RegExpSetting(this, key, de faultValue, this._eventSupport, isLocal ? (window.localStorage || {}) : this._se ttingsStorage, regexFlags));
104 return /** @type {!WebInspector.RegExpSetting} */ (this._registry.get(ke y)); 119 return /** @type {!WebInspector.RegExpSetting} */ (this._registry.get(ke y));
120 },
121
122 clearAll: function()
123 {
124 if (window.localStorage)
125 window.localStorage.clear();
126 for (var key in this._settingsStorage)
127 delete this._settingsStorage[key];
128 var versionSetting = WebInspector.settings.createSetting(WebInspector.Ve rsionController._currentVersionName, 0);
129 versionSetting.set(WebInspector.VersionController.currentVersion);
105 } 130 }
106 } 131 }
107 132
108 /** 133 /**
109 * @constructor 134 * @constructor
135 * @param {!WebInspector.Settings} settings
110 * @param {string} name 136 * @param {string} name
111 * @param {V} defaultValue 137 * @param {V} defaultValue
112 * @param {!WebInspector.Object} eventSupport 138 * @param {!WebInspector.Object} eventSupport
113 * @param {?Storage} storage 139 * @param {!Object} storage
114 * @template V 140 * @template V
115 */ 141 */
116 WebInspector.Setting = function(name, defaultValue, eventSupport, storage) 142 WebInspector.Setting = function(settings, name, defaultValue, eventSupport, stor age)
117 { 143 {
144 this._settings = settings;
118 this._name = name; 145 this._name = name;
119 this._defaultValue = defaultValue; 146 this._defaultValue = defaultValue;
120 this._eventSupport = eventSupport; 147 this._eventSupport = eventSupport;
121 this._storage = storage; 148 this._storage = storage;
122 } 149 }
123 150
124 WebInspector.Setting.prototype = { 151 WebInspector.Setting.prototype = {
125 /** 152 /**
126 * @param {function(!WebInspector.Event)} listener 153 * @param {function(!WebInspector.Event)} listener
127 * @param {!Object=} thisObject 154 * @param {!Object=} thisObject
(...skipping 19 matching lines...) Expand all
147 174
148 /** 175 /**
149 * @return {V} 176 * @return {V}
150 */ 177 */
151 get: function() 178 get: function()
152 { 179 {
153 if (typeof this._value !== "undefined") 180 if (typeof this._value !== "undefined")
154 return this._value; 181 return this._value;
155 182
156 this._value = this._defaultValue; 183 this._value = this._defaultValue;
157 if (this._storage && this._name in this._storage) { 184 if (this._name in this._storage) {
158 try { 185 try {
159 this._value = JSON.parse(this._storage[this._name]); 186 this._value = JSON.parse(this._storage[this._name]);
160 } catch(e) { 187 } catch(e) {
161 delete this._storage[this._name]; 188 this.remove();
162 } 189 }
163 } 190 }
164 return this._value; 191 return this._value;
165 }, 192 },
166 193
167 /** 194 /**
168 * @param {V} value 195 * @param {V} value
169 */ 196 */
170 set: function(value) 197 set: function(value)
171 { 198 {
172 this._value = value; 199 this._value = value;
173 if (this._storage) { 200 try {
201 var settingString = JSON.stringify(value);
174 try { 202 try {
175 var settingString = JSON.stringify(value); 203 this._storage[this._name] = settingString;
176 try {
177 this._storage[this._name] = settingString;
178 } catch(e) {
179 this._printSettingsSavingError(e.message, this._name, settin gString);
180 }
181 } catch(e) { 204 } catch(e) {
182 WebInspector.console.error("Cannot stringify setting with name: " + this._name + ", error: " + e.message); 205 this._printSettingsSavingError(e.message, this._name, settingStr ing);
183 } 206 }
207 } catch(e) {
208 WebInspector.console.error("Cannot stringify setting with name: " + this._name + ", error: " + e.message);
184 } 209 }
185 this._eventSupport.dispatchEventToListeners(this._name, value); 210 this._eventSupport.dispatchEventToListeners(this._name, value);
186 }, 211 },
187 212
213 remove: function()
214 {
215 this._settings._registry.delete(this._name);
216 this._settings._moduleSettings.delete(this._name);
217 delete this._storage[this._name];
218 },
219
188 /** 220 /**
189 * @param {string} message 221 * @param {string} message
190 * @param {string} name 222 * @param {string} name
191 * @param {string} value 223 * @param {string} value
192 */ 224 */
193 _printSettingsSavingError: function(message, name, value) 225 _printSettingsSavingError: function(message, name, value)
194 { 226 {
195 var errorMessage = "Error saving setting with name: " + this._name + ", value length: " + value.length + ". Error: " + message; 227 var errorMessage = "Error saving setting with name: " + this._name + ", value length: " + value.length + ". Error: " + message;
196 console.error(errorMessage); 228 console.error(errorMessage);
197 WebInspector.console.error(errorMessage); 229 WebInspector.console.error(errorMessage);
198 WebInspector.console.log("Ten largest settings: "); 230 WebInspector.console.log("Ten largest settings: ");
199 231
200 var sizes = { __proto__: null }; 232 var sizes = { __proto__: null };
201 for (var key in this._storage) 233 for (var key in this._storage)
202 sizes[key] = this._storage.getItem(key).length; 234 sizes[key] = this._storage[key].length;
203 var keys = Object.keys(sizes); 235 var keys = Object.keys(sizes);
204 236
205 function comparator(key1, key2) 237 function comparator(key1, key2)
206 { 238 {
207 return sizes[key2] - sizes[key1]; 239 return sizes[key2] - sizes[key1];
208 } 240 }
209 241
210 keys.sort(comparator); 242 keys.sort(comparator);
211 243
212 for (var i = 0; i < 10 && i < keys.length; ++i) 244 for (var i = 0; i < 10 && i < keys.length; ++i)
213 WebInspector.console.log("Setting: '" + keys[i] + "', size: " + size s[keys[i]]); 245 WebInspector.console.log("Setting: '" + keys[i] + "', size: " + size s[keys[i]]);
214 }, 246 }
215 } 247 }
216 248
217 /** 249 /**
218 * @constructor 250 * @constructor
219 * @extends {WebInspector.Setting} 251 * @extends {WebInspector.Setting}
252 * @param {!WebInspector.Settings} settings
220 * @param {string} name 253 * @param {string} name
221 * @param {string} defaultValue 254 * @param {string} defaultValue
222 * @param {!WebInspector.Object} eventSupport 255 * @param {!WebInspector.Object} eventSupport
223 * @param {?Storage} storage 256 * @param {!Object<string, string>} storage
224 * @param {string=} regexFlags 257 * @param {string=} regexFlags
225 */ 258 */
226 WebInspector.RegExpSetting = function(name, defaultValue, eventSupport, storage, regexFlags) 259 WebInspector.RegExpSetting = function(settings, name, defaultValue, eventSupport , storage, regexFlags)
227 { 260 {
228 WebInspector.Setting.call(this, name, defaultValue ? [{ pattern: defaultValu e }] : [], eventSupport, storage); 261 WebInspector.Setting.call(this, settings, name, defaultValue ? [{ pattern: d efaultValue }] : [], eventSupport, storage);
229 this._regexFlags = regexFlags; 262 this._regexFlags = regexFlags;
230 } 263 }
231 264
232 WebInspector.RegExpSetting.prototype = { 265 WebInspector.RegExpSetting.prototype = {
233 /** 266 /**
234 * @override 267 * @override
235 * @return {string} 268 * @return {string}
236 */ 269 */
237 get: function() 270 get: function()
238 { 271 {
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 __proto__: WebInspector.Setting.prototype 325 __proto__: WebInspector.Setting.prototype
293 } 326 }
294 327
295 /** 328 /**
296 * @constructor 329 * @constructor
297 */ 330 */
298 WebInspector.VersionController = function() 331 WebInspector.VersionController = function()
299 { 332 {
300 } 333 }
301 334
302 WebInspector.VersionController.currentVersion = 11; 335 WebInspector.VersionController._currentVersionName = "inspectorVersion";
336 WebInspector.VersionController.currentVersion = 12;
303 337
304 WebInspector.VersionController.prototype = { 338 WebInspector.VersionController.prototype = {
305 updateVersion: function() 339 updateVersion: function()
306 { 340 {
307 var versionSetting = WebInspector.settings.createSetting("inspectorVersi on", 0); 341 var versionSetting = WebInspector.settings.createSetting(WebInspector.Ve rsionController._currentVersionName, 0);
308 var currentVersion = WebInspector.VersionController.currentVersion; 342 var currentVersion = WebInspector.VersionController.currentVersion;
309 var oldVersion = versionSetting.get(); 343 var oldVersion = versionSetting.get();
310 var methodsToRun = this._methodsToRunToUpdateVersion(oldVersion, current Version); 344 var methodsToRun = this._methodsToRunToUpdateVersion(oldVersion, current Version);
311 for (var i = 0; i < methodsToRun.length; ++i) 345 for (var i = 0; i < methodsToRun.length; ++i)
312 this[methodsToRun[i]].call(this); 346 this[methodsToRun[i]].call(this);
313 versionSetting.set(currentVersion); 347 versionSetting.set(currentVersion);
314 }, 348 },
315 349
316 /** 350 /**
317 * @param {number} oldVersion 351 * @param {number} oldVersion
318 * @param {number} currentVersion 352 * @param {number} currentVersion
319 */ 353 */
320 _methodsToRunToUpdateVersion: function(oldVersion, currentVersion) 354 _methodsToRunToUpdateVersion: function(oldVersion, currentVersion)
321 { 355 {
322 var result = []; 356 var result = [];
323 for (var i = oldVersion; i < currentVersion; ++i) 357 for (var i = oldVersion; i < currentVersion; ++i)
324 result.push("_updateVersionFrom" + i + "To" + (i + 1)); 358 result.push("_updateVersionFrom" + i + "To" + (i + 1));
325 return result; 359 return result;
326 }, 360 },
327 361
328 _updateVersionFrom0To1: function() 362 _updateVersionFrom0To1: function()
329 { 363 {
330 this._clearBreakpointsWhenTooMany(WebInspector.settings.createSetting("b reakpoints", []), 500000); 364 this._clearBreakpointsWhenTooMany(WebInspector.settings.createLocalSetti ng("breakpoints", []), 500000);
331 }, 365 },
332 366
333 _updateVersionFrom1To2: function() 367 _updateVersionFrom1To2: function()
334 { 368 {
335 var versionSetting = WebInspector.settings.createSetting("previouslyView edFiles", []); 369 WebInspector.settings.createSetting("previouslyViewedFiles", []).set([]) ;
336 versionSetting.set([]);
337 }, 370 },
338 371
339 _updateVersionFrom2To3: function() 372 _updateVersionFrom2To3: function()
340 { 373 {
341 var fileSystemMappingSetting = WebInspector.settings.createSetting("file SystemMapping", {}); 374 WebInspector.settings.createSetting("fileSystemMapping", {}).set({});
342 fileSystemMappingSetting.set({}); 375 WebInspector.settings.createSetting("fileMappingEntries", []).remove();
343 if (window.localStorage)
344 delete window.localStorage["fileMappingEntries"];
345 }, 376 },
346 377
347 _updateVersionFrom3To4: function() 378 _updateVersionFrom3To4: function()
348 { 379 {
349 var advancedMode = WebInspector.settings.createSetting("showHeaSnapshotO bjectsHiddenProperties", false).get(); 380 var advancedMode = WebInspector.settings.createSetting("showHeaSnapshotO bjectsHiddenProperties", false);
350 WebInspector.moduleSetting("showAdvancedHeapSnapshotProperties").set(adv ancedMode); 381 WebInspector.moduleSetting("showAdvancedHeapSnapshotProperties").set(adv ancedMode.get());
382 advancedMode.remove();
351 }, 383 },
352 384
353 _updateVersionFrom4To5: function() 385 _updateVersionFrom4To5: function()
354 { 386 {
355 if (!window.localStorage)
356 return;
357 var settingNames = { 387 var settingNames = {
358 "FileSystemViewSidebarWidth": "fileSystemViewSplitViewState", 388 "FileSystemViewSidebarWidth": "fileSystemViewSplitViewState",
359 "elementsSidebarWidth": "elementsPanelSplitViewState", 389 "elementsSidebarWidth": "elementsPanelSplitViewState",
360 "StylesPaneSplitRatio": "stylesPaneSplitViewState", 390 "StylesPaneSplitRatio": "stylesPaneSplitViewState",
361 "heapSnapshotRetainersViewSize": "heapSnapshotSplitViewState", 391 "heapSnapshotRetainersViewSize": "heapSnapshotSplitViewState",
362 "InspectorView.splitView": "InspectorView.splitViewState", 392 "InspectorView.splitView": "InspectorView.splitViewState",
363 "InspectorView.screencastSplitView": "InspectorView.screencastSplitV iewState", 393 "InspectorView.screencastSplitView": "InspectorView.screencastSplitV iewState",
364 "Inspector.drawerSplitView": "Inspector.drawerSplitViewState", 394 "Inspector.drawerSplitView": "Inspector.drawerSplitViewState",
365 "layerDetailsSplitView": "layerDetailsSplitViewState", 395 "layerDetailsSplitView": "layerDetailsSplitViewState",
366 "networkSidebarWidth": "networkPanelSplitViewState", 396 "networkSidebarWidth": "networkPanelSplitViewState",
367 "sourcesSidebarWidth": "sourcesPanelSplitViewState", 397 "sourcesSidebarWidth": "sourcesPanelSplitViewState",
368 "scriptsPanelNavigatorSidebarWidth": "sourcesPanelNavigatorSplitView State", 398 "scriptsPanelNavigatorSidebarWidth": "sourcesPanelNavigatorSplitView State",
369 "sourcesPanelSplitSidebarRatio": "sourcesPanelDebuggerSidebarSplitVi ewState", 399 "sourcesPanelSplitSidebarRatio": "sourcesPanelDebuggerSidebarSplitVi ewState",
370 "timeline-details": "timelinePanelDetailsSplitViewState", 400 "timeline-details": "timelinePanelDetailsSplitViewState",
371 "timeline-split": "timelinePanelRecorsSplitViewState", 401 "timeline-split": "timelinePanelRecorsSplitViewState",
372 "timeline-view": "timelinePanelTimelineStackSplitViewState", 402 "timeline-view": "timelinePanelTimelineStackSplitViewState",
373 "auditsSidebarWidth": "auditsPanelSplitViewState", 403 "auditsSidebarWidth": "auditsPanelSplitViewState",
374 "layersSidebarWidth": "layersPanelSplitViewState", 404 "layersSidebarWidth": "layersPanelSplitViewState",
375 "profilesSidebarWidth": "profilesPanelSplitViewState", 405 "profilesSidebarWidth": "profilesPanelSplitViewState",
376 "resourcesSidebarWidth": "resourcesPanelSplitViewState" 406 "resourcesSidebarWidth": "resourcesPanelSplitViewState"
377 }; 407 };
408 var empty = {};
378 for (var oldName in settingNames) { 409 for (var oldName in settingNames) {
379 var newName = settingNames[oldName]; 410 var newName = settingNames[oldName];
380 var oldNameH = oldName + "H"; 411 var oldNameH = oldName + "H";
381 412
382 var newValue = null; 413 var newValue = null;
383 var oldSetting = WebInspector.settings.createSetting(oldName, undefi ned).get(); 414 var oldSetting = WebInspector.settings.createSetting(oldName, empty) ;
384 if (oldSetting) { 415 if (oldSetting.get() !== empty) {
385 newValue = newValue || {}; 416 newValue = newValue || {};
386 newValue.vertical = {}; 417 newValue.vertical = {};
387 newValue.vertical.size = oldSetting; 418 newValue.vertical.size = oldSetting.get();
388 delete window.localStorage[oldName]; 419 oldSetting.remove();
389 } 420 }
390 var oldSettingH = WebInspector.settings.createSetting(oldNameH, unde fined).get(); 421 var oldSettingH = WebInspector.settings.createSetting(oldNameH, empt y);
391 if (oldSettingH) { 422 if (oldSettingH.get() !== empty) {
392 newValue = newValue || {}; 423 newValue = newValue || {};
393 newValue.horizontal = {}; 424 newValue.horizontal = {};
394 newValue.horizontal.size = oldSettingH; 425 newValue.horizontal.size = oldSettingH.get();
395 delete window.localStorage[oldNameH]; 426 oldSettingH.remove();
396 } 427 }
397 var newSetting = WebInspector.settings.createSetting(newName, {});
398 if (newValue) 428 if (newValue)
399 newSetting.set(newValue); 429 WebInspector.settings.createSetting(newName, {}).set(newValue);
400 } 430 }
401 }, 431 },
402 432
403 _updateVersionFrom5To6: function() 433 _updateVersionFrom5To6: function()
404 { 434 {
405 if (!window.localStorage)
406 return;
407
408 var settingNames = { 435 var settingNames = {
409 "debuggerSidebarHidden": "sourcesPanelSplitViewState", 436 "debuggerSidebarHidden": "sourcesPanelSplitViewState",
410 "navigatorHidden": "sourcesPanelNavigatorSplitViewState", 437 "navigatorHidden": "sourcesPanelNavigatorSplitViewState",
411 "WebInspector.Drawer.showOnLoad": "Inspector.drawerSplitViewState" 438 "WebInspector.Drawer.showOnLoad": "Inspector.drawerSplitViewState"
412 }; 439 };
413 440
441 var empty = {};
414 for (var oldName in settingNames) { 442 for (var oldName in settingNames) {
415 var newName = settingNames[oldName]; 443 var newName = settingNames[oldName];
416 444
417 var oldSetting = WebInspector.settings.createSetting(oldName, undefi ned).get(); 445 var oldSetting = WebInspector.settings.createSetting(oldName, empty) ;
418 var invert = "WebInspector.Drawer.showOnLoad" === oldName; 446 var invert = "WebInspector.Drawer.showOnLoad" === oldName;
419 var hidden = !!oldSetting !== invert; 447 var hidden = (oldSetting.get() !== empty) !== invert;
420 delete window.localStorage[oldName]; 448 oldSetting.remove();
421 var showMode = hidden ? "OnlyMain" : "Both"; 449 var showMode = hidden ? "OnlyMain" : "Both";
422 450
423 var newSetting = WebInspector.settings.createSetting(newName, null); 451 var newSetting = WebInspector.settings.createSetting(newName, empty) ;
424 var newValue = newSetting.get() || {}; 452 var newValue = newSetting.get() || {};
425 newValue.vertical = newValue.vertical || {}; 453 newValue.vertical = newValue.vertical || {};
426 newValue.vertical.showMode = showMode; 454 newValue.vertical.showMode = showMode;
427 newValue.horizontal = newValue.horizontal || {}; 455 newValue.horizontal = newValue.horizontal || {};
428 newValue.horizontal.showMode = showMode; 456 newValue.horizontal.showMode = showMode;
429 newSetting.set(newValue); 457 newSetting.set(newValue);
430 } 458 }
431 }, 459 },
432 460
433 _updateVersionFrom6To7: function() 461 _updateVersionFrom6To7: function()
434 { 462 {
435 if (!window.localStorage)
436 return;
437
438 var settingNames = { 463 var settingNames = {
439 "sourcesPanelNavigatorSplitViewState": "sourcesPanelNavigatorSplitVi ewState", 464 "sourcesPanelNavigatorSplitViewState": "sourcesPanelNavigatorSplitVi ewState",
440 "elementsPanelSplitViewState": "elementsPanelSplitViewState", 465 "elementsPanelSplitViewState": "elementsPanelSplitViewState",
441 "stylesPaneSplitViewState": "stylesPaneSplitViewState", 466 "stylesPaneSplitViewState": "stylesPaneSplitViewState",
442 "sourcesPanelDebuggerSidebarSplitViewState": "sourcesPanelDebuggerSi debarSplitViewState" 467 "sourcesPanelDebuggerSidebarSplitViewState": "sourcesPanelDebuggerSi debarSplitViewState"
443 }; 468 };
444 469
470 var empty = {};
445 for (var name in settingNames) { 471 for (var name in settingNames) {
446 if (!(name in window.localStorage)) 472 var setting = WebInspector.settings.createSetting(name, empty);
447 continue;
448 var setting = WebInspector.settings.createSetting(name, undefined);
449 var value = setting.get(); 473 var value = setting.get();
450 if (!value) 474 if (value === empty)
451 continue; 475 continue;
452 // Zero out saved percentage sizes, and they will be restored to def aults. 476 // Zero out saved percentage sizes, and they will be restored to def aults.
453 if (value.vertical && value.vertical.size && value.vertical.size < 1 ) 477 if (value.vertical && value.vertical.size && value.vertical.size < 1 )
454 value.vertical.size = 0; 478 value.vertical.size = 0;
455 if (value.horizontal && value.horizontal.size && value.horizontal.si ze < 1) 479 if (value.horizontal && value.horizontal.size && value.horizontal.si ze < 1)
456 value.horizontal.size = 0; 480 value.horizontal.size = 0;
457 setting.set(value); 481 setting.set(value);
458 } 482 }
459 }, 483 },
460 484
461 _updateVersionFrom7To8: function() 485 _updateVersionFrom7To8: function()
462 { 486 {
463 var settingName = "deviceMetrics";
464 if (!window.localStorage || !(settingName in window.localStorage))
465 return;
466 var setting = WebInspector.settings.createSetting(settingName, undefined );
467 var value = setting.get();
468 if (!value)
469 return;
470
471 var components = value.split("x");
472 if (components.length >= 3) {
473 var width = parseInt(components[0], 10);
474 var height = parseInt(components[1], 10);
475 var deviceScaleFactor = parseFloat(components[2]);
476 if (deviceScaleFactor) {
477 components[0] = "" + Math.round(width / deviceScaleFactor);
478 components[1] = "" + Math.round(height / deviceScaleFactor);
479 }
480 }
481 value = components.join("x");
482 setting.set(value);
483 }, 487 },
484 488
485 _updateVersionFrom8To9: function() 489 _updateVersionFrom8To9: function()
486 { 490 {
487 if (!window.localStorage)
488 return;
489
490 var settingNames = [ 491 var settingNames = [
491 "skipStackFramesPattern", 492 "skipStackFramesPattern",
492 "workspaceFolderExcludePattern" 493 "workspaceFolderExcludePattern"
493 ]; 494 ];
494 495
495 for (var i = 0; i < settingNames.length; ++i) { 496 for (var i = 0; i < settingNames.length; ++i) {
496 var settingName = settingNames[i]; 497 var setting = WebInspector.settings.createSetting(settingNames[i], " ");
497 if (!(settingName in window.localStorage)) 498 var value = setting.get();
498 continue; 499 if (!value)
499 try { 500 return;
500 var value = JSON.parse(window.localStorage[settingName]); 501 if (typeof value === "string")
501 if (!value) 502 value = [value];
502 continue; 503 for (var j = 0; j < value.length; ++j) {
503 if (typeof value === "string") 504 if (typeof value[j] === "string")
504 value = [value]; 505 value[j] = { pattern: value[j] };
505 for (var j = 0; j < value.length; ++j) {
506 if (typeof value[j] === "string")
507 value[j] = { pattern: value[j] };
508 }
509 window.localStorage[settingName] = JSON.stringify(value);
510 } catch(e) {
511 } 506 }
507 setting.set(value);
512 } 508 }
513 }, 509 },
514 510
515 _updateVersionFrom9To10: function() 511 _updateVersionFrom9To10: function()
516 { 512 {
513 // This one is localStorage specific, which is fine.
517 if (!window.localStorage) 514 if (!window.localStorage)
518 return; 515 return;
519
520 for (var key in window.localStorage) { 516 for (var key in window.localStorage) {
521 if (key.startsWith("revision-history")) 517 if (key.startsWith("revision-history"))
522 window.localStorage.removeItem(key); 518 window.localStorage.removeItem(key);
523 } 519 }
524 }, 520 },
525 521
526 _updateVersionFrom10To11: function() 522 _updateVersionFrom10To11: function()
527 { 523 {
528 var setting = "customDevicePresets"; 524 var oldSettingName = "customDevicePresets";
529 var newSetting = "customEmulatedDeviceList"; 525 var newSettingName = "customEmulatedDeviceList";
526 var oldSetting = WebInspector.settings.createSetting(oldSettingName, und efined);
527 var list = oldSetting.get();
528 if (!Array.isArray(list))
529 return;
530 var newList = [];
531 for (var i = 0; i < list.length; ++i) {
532 var value = list[i];
533 var device = {};
534 device["title"] = value["title"];
535 device["type"] = "unknown";
536 device["user-agent"] = value["userAgent"];
537 device["capabilities"] = [];
538 if (value["touch"])
539 device["capabilities"].push("touch");
540 if (value["mobile"])
541 device["capabilities"].push("mobile");
542 device["screen"] = {};
543 device["screen"]["vertical"] = {width: value["width"], height: value ["height"]};
544 device["screen"]["horizontal"] = {width: value["height"], height: va lue["width"]};
545 device["screen"]["device-pixel-ratio"] = value["deviceScaleFactor"];
546 device["modes"] = [];
547 device["show-by-default"] = true;
548 device["show"] = "Default";
549 newList.push(device);
550 }
551 if (newList.length)
552 WebInspector.settings.createSetting(newSettingName, []).set(newList) ;
553 oldSetting.remove();
554 },
555
556 _updateVersionFrom11To12: function()
557 {
558 // This step migrates all the settings except for the ones below into th e browser profile.
559 var localSettings = [ "advancedSearchConfig", "breakpoints", "consoleHis tory", "domBreakpoints", "eventListenerBreakpoints",
560 "fileSystemMapping", "lastSelectedSourcesSidebarPa neTab", "previouslyViewedFiles",
561 "savedURLs", "watchExpressions", "workspaceExclude dFolders", "xhrBreakpoints" ].keySet();
530 if (!window.localStorage) 562 if (!window.localStorage)
531 return; 563 return;
532 if (!(setting in window.localStorage)) 564
533 return; 565 for (var key in window.localStorage) {
534 try { 566 if (key in localSettings)
535 var list = JSON.parse(window.localStorage[setting]); 567 continue;
536 if (!Array.isArray(list)) 568 var value = window.localStorage[key];
537 return; 569 window.localStorage.removeItem(key);
538 var newList = []; 570 WebInspector.settings._settingsStorage[key] = value;
539 for (var i = 0; i < list.length; ++i) {
540 var value = list[i];
541 var device = {};
542 device["title"] = value["title"];
543 device["type"] = "unknown";
544 device["user-agent"] = value["userAgent"];
545 device["capabilities"] = [];
546 if (value["touch"])
547 device["capabilities"].push("touch");
548 if (value["mobile"])
549 device["capabilities"].push("mobile");
550 device["screen"] = {};
551 device["screen"]["vertical"] = {width: value["width"], height: v alue["height"]};
552 device["screen"]["horizontal"] = {width: value["height"], height : value["width"]};
553 device["screen"]["device-pixel-ratio"] = value["deviceScaleFacto r"];
554 device["modes"] = [];
555 device["show-by-default"] = true;
556 device["show"] = "Default";
557 newList.push(device);
558 }
559 window.localStorage[newSetting] = JSON.stringify(newList);
560 delete window.localStorage[setting];
561 } catch(e) {
562 } 571 }
563 }, 572 },
564 573
565 /** 574 /**
566 * @param {!WebInspector.Setting} breakpointsSetting 575 * @param {!WebInspector.Setting} breakpointsSetting
567 * @param {number} maxBreakpointsCount 576 * @param {number} maxBreakpointsCount
568 */ 577 */
569 _clearBreakpointsWhenTooMany: function(breakpointsSetting, maxBreakpointsCou nt) 578 _clearBreakpointsWhenTooMany: function(breakpointsSetting, maxBreakpointsCou nt)
570 { 579 {
571 // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused 580 // If there are too many breakpoints in a storage, it is likely due to a recent bug that caused
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
665 } 674 }
666 675
667 /** 676 /**
668 * @param {string} settingName 677 * @param {string} settingName
669 * @return {!WebInspector.Setting} 678 * @return {!WebInspector.Setting}
670 */ 679 */
671 WebInspector.settingForTest = function(settingName) 680 WebInspector.settingForTest = function(settingName)
672 { 681 {
673 return WebInspector.settings.settingForTest(settingName); 682 return WebInspector.settings.settingForTest(settingName);
674 } 683 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698