Changeset 244279 in webkit


Ignore:
Timestamp:
Apr 15, 2019 12:17:14 PM (5 years ago)
Author:
Devin Rousso
Message:

Web Inspector: DOMDebugger: move breakpoint storage to use WI.ObjectStore
https://bugs.webkit.org/show_bug.cgi?id=196231
<rdar://problem/49236864>

Reviewed by Joseph Pecoraro.

  • UserInterface/Controllers/DOMDebuggerManager.js:

(WI.DOMDebuggerManager):
(WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
(WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
(WI.DOMDebuggerManager.prototype.removeDOMBreakpointsForNode):
(WI.DOMDebuggerManager.prototype.addEventBreakpoint):
(WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
(WI.DOMDebuggerManager.prototype.addURLBreakpoint):
(WI.DOMDebuggerManager.prototype.removeURLBreakpoint):
(WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
(WI.DOMDebuggerManager.prototype._saveDOMBreakpoints): Deleted.
(WI.DOMDebuggerManager.prototype._saveEventBreakpoints): Deleted.
(WI.DOMDebuggerManager.prototype._saveURLBreakpoints): Deleted.

  • UserInterface/Models/DOMBreakpoint.js:

(WI.DOMBreakpoint.prototype.saveIdentityToCookie):
(WI.DOMBreakpoint.prototype.toJSON): Added.
(WI.DOMBreakpoint.prototype.get serializableInfo): Deleted.

  • UserInterface/Models/EventBreakpoint.js:

(WI.EventBreakpoint.prototype.saveIdentityToCookie):
(WI.EventBreakpoint.prototype.toJSON): Added.
(WI.EventBreakpoint.prototype.get serializableInfo): Deleted.

  • UserInterface/Models/URLBreakpoint.js:

(WI.URLBreakpoint.prototype.saveIdentityToCookie):
(WI.URLBreakpoint.prototype.toJSON): Added.
(WI.URLBreakpoint.prototype.get serializableInfo): Deleted.
Replace get serializableInfo with toJSON as required by WI.ObjectStore.

  • UserInterface/Base/ObjectStore.js:

(WI.ObjectStore._open):
Increment version.

Location:
trunk/Source/WebInspectorUI
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebInspectorUI/ChangeLog

    r244278 r244279  
     12019-04-15  Devin Rousso  <drousso@apple.com>
     2
     3        Web Inspector: DOMDebugger: move breakpoint storage to use `WI.ObjectStore`
     4        https://bugs.webkit.org/show_bug.cgi?id=196231
     5        <rdar://problem/49236864>
     6
     7        Reviewed by Joseph Pecoraro.
     8
     9        * UserInterface/Controllers/DOMDebuggerManager.js:
     10        (WI.DOMDebuggerManager):
     11        (WI.DOMDebuggerManager.prototype.addDOMBreakpoint):
     12        (WI.DOMDebuggerManager.prototype.removeDOMBreakpoint):
     13        (WI.DOMDebuggerManager.prototype.removeDOMBreakpointsForNode):
     14        (WI.DOMDebuggerManager.prototype.addEventBreakpoint):
     15        (WI.DOMDebuggerManager.prototype.removeEventBreakpoint):
     16        (WI.DOMDebuggerManager.prototype.addURLBreakpoint):
     17        (WI.DOMDebuggerManager.prototype.removeURLBreakpoint):
     18        (WI.DOMDebuggerManager.prototype._handleDOMBreakpointDisabledStateChanged):
     19        (WI.DOMDebuggerManager.prototype._handleEventBreakpointDisabledStateChanged):
     20        (WI.DOMDebuggerManager.prototype._handleURLBreakpointDisabledStateChanged):
     21        (WI.DOMDebuggerManager.prototype._saveDOMBreakpoints): Deleted.
     22        (WI.DOMDebuggerManager.prototype._saveEventBreakpoints): Deleted.
     23        (WI.DOMDebuggerManager.prototype._saveURLBreakpoints): Deleted.
     24
     25        * UserInterface/Models/DOMBreakpoint.js:
     26        (WI.DOMBreakpoint.prototype.saveIdentityToCookie):
     27        (WI.DOMBreakpoint.prototype.toJSON): Added.
     28        (WI.DOMBreakpoint.prototype.get serializableInfo): Deleted.
     29        * UserInterface/Models/EventBreakpoint.js:
     30        (WI.EventBreakpoint.prototype.saveIdentityToCookie):
     31        (WI.EventBreakpoint.prototype.toJSON): Added.
     32        (WI.EventBreakpoint.prototype.get serializableInfo): Deleted.
     33        * UserInterface/Models/URLBreakpoint.js:
     34        (WI.URLBreakpoint.prototype.saveIdentityToCookie):
     35        (WI.URLBreakpoint.prototype.toJSON): Added.
     36        (WI.URLBreakpoint.prototype.get serializableInfo): Deleted.
     37        Replace `get serializableInfo` with `toJSON` as required by `WI.ObjectStore`.
     38
     39        * UserInterface/Base/ObjectStore.js:
     40        (WI.ObjectStore._open):
     41        Increment version.
     42
    1432019-04-15  Devin Rousso  <drousso@apple.com>
    244
  • trunk/Source/WebInspectorUI/UserInterface/Base/ObjectStore.js

    r243226 r244279  
    6868        WI.ObjectStore._databaseCallbacks = [callback];
    6969
    70         const version = 2; // Increment this for every edit to `WI.objectStores`.
     70        const version = 3; // Increment this for every edit to `WI.objectStores`.
    7171
    7272        let databaseRequest = window.indexedDB.open(WI.ObjectStore._databaseName, version);
     
    243243    audits: new WI.ObjectStore("audit-manager-tests", {keyPath: "__id", autoIncrement: true}),
    244244    breakpoints: new WI.ObjectStore("debugger-breakpoints", {keyPath: "__id"}),
     245    domBreakpoints: new WI.ObjectStore("dom-debugger-dom-breakpoints", {keyPath: "__id"}),
     246    eventBreakpoints: new WI.ObjectStore("dom-debugger-event-breakpoints", {keyPath: "__id"}),
     247    urlBreakpoints: new WI.ObjectStore("dom-debugger-url-breakpoints", {keyPath: "__id"}),
    245248};
  • trunk/Source/WebInspectorUI/UserInterface/Controllers/DOMDebuggerManager.js

    r243722 r244279  
    3030        super();
    3131
    32         this._domBreakpointsSetting = new WI.Setting("dom-breakpoints", []);
    3332        this._domBreakpointURLMap = new Multimap;
    3433        this._domBreakpointFrameIdentifierMap = new Map;
    3534
    36         this._eventBreakpointSetting = new WI.Setting("event-breakpoints", []);
    3735        this._eventBreakpoints = [];
    3836
    39         this._urlBreakpointsSetting = new WI.Setting("url-breakpoints", WI.Setting.migrateValue("xhr-breakpoints") || []);
    4037        this._urlBreakpoints = [];
    4138        this._allRequestsBreakpointEnabledSetting = new WI.Setting("break-on-all-requests", false);
     
    5754        WI.Frame.addEventListener(WI.Frame.Event.MainResourceDidChange, this._mainResourceDidChange, this);
    5855
     56        let loadBreakpoints = async (constructor, objectStore, oldSettings, callback) => {
     57            for (let key of oldSettings) {
     58                let existingSerializedBreakpoints = WI.Setting.migrateValue(key);
     59                if (existingSerializedBreakpoints) {
     60                    for (let existingSerializedBreakpoint of existingSerializedBreakpoints)
     61                        await objectStore.putObject(constructor.deserialize(existingSerializedBreakpoint));
     62                }
     63            }
     64
     65            let serializedBreakpoints = await objectStore.getAll();
     66
     67            this._restoringBreakpoints = true;
     68            for (let serializedBreakpoint of serializedBreakpoints) {
     69                let breakpoint = constructor.deserialize(serializedBreakpoint);
     70
     71                const key = null;
     72                objectStore.associateObject(breakpoint, key, serializedBreakpoint);
     73
     74                callback(breakpoint);
     75            }
     76            this._restoringBreakpoints = false;
     77        };
     78
    5979        if (this.supported) {
    60             this._restoringBreakpoints = true;
    61 
    62             for (let serializedInfo of this._domBreakpointsSetting.value)
    63                 this.addDOMBreakpoint(WI.DOMBreakpoint.deserialize(serializedInfo));
    64 
    65             for (let serializedInfo of this._eventBreakpointSetting.value)
    66                 this.addEventBreakpoint(WI.EventBreakpoint.deserialize(serializedInfo));
    67 
    68             for (let serializedInfo of this._urlBreakpointsSetting.value)
    69                 this.addURLBreakpoint(WI.URLBreakpoint.deserialize(serializedInfo));
    70 
    71             this._restoringBreakpoints = false;
     80            loadBreakpoints(WI.DOMBreakpoint, WI.objectStores.domBreakpoints, ["dom-breakpoints"], (breakpoint) => {
     81                this.addDOMBreakpoint(breakpoint);
     82            });
     83
     84            loadBreakpoints(WI.EventBreakpoint, WI.objectStores.eventBreakpoints, ["event-breakpoints"], (breakpoint) => {
     85                this.addEventBreakpoint(breakpoint);
     86            });
     87
     88            loadBreakpoints(WI.URLBreakpoint, WI.objectStores.urlBreakpoints, ["xhr-breakpoints", "url-breakpoints"], (breakpoint) => {
     89                this.addURLBreakpoint(breakpoint);
     90            });
    7291        }
    7392    }
     
    181200        this.dispatchEventToListeners(WI.DOMDebuggerManager.Event.DOMBreakpointAdded, {breakpoint});
    182201
    183         this._saveDOMBreakpoints();
     202        if (!this._restoringBreakpoints)
     203            WI.objectStores.domBreakpoints.putObject(breakpoint);
    184204    }
    185205
     
    215235        breakpoint.domNodeIdentifier = null;
    216236
    217         this._saveDOMBreakpoints();
     237        if (!this._restoringBreakpoints)
     238            WI.objectStores.domBreakpoints.deleteObject(breakpoint);
    218239    }
    219240
    220241    removeDOMBreakpointsForNode(node)
    221242    {
    222         this._restoringBreakpoints = true;
    223 
    224243        this.domBreakpointsForNode(node).forEach(this.removeDOMBreakpoint, this);
    225 
    226         this._restoringBreakpoints = false;
    227         this._saveDOMBreakpoints();
    228244    }
    229245
     
    258274        }
    259275
    260         this._saveEventBreakpoints();
     276        if (!this._restoringBreakpoints)
     277            WI.objectStores.eventBreakpoints.putObject(breakpoint);
    261278    }
    262279
     
    278295        this._eventBreakpoints.remove(breakpoint);
    279296
    280         this._saveEventBreakpoints();
     297        if (!this._restoringBreakpoints)
     298            WI.objectStores.eventBreakpoints.deleteObject(breakpoint);
     299
    281300        this.dispatchEventToListeners(WI.DOMDebuggerManager.Event.EventBreakpointRemoved, {breakpoint});
    282301
     
    332351        }
    333352
    334         this._saveURLBreakpoints();
     353        if (!this._restoringBreakpoints)
     354            WI.objectStores.urlBreakpoints.putObject(breakpoint);
    335355    }
    336356
     
    352372        this._urlBreakpoints.remove(breakpoint, true);
    353373
    354         this._saveURLBreakpoints();
     374        if (!this._restoringBreakpoints)
     375            WI.objectStores.urlBreakpoints.deleteObject(breakpoint);
     376
    355377        this.dispatchEventToListeners(WI.DOMDebuggerManager.Event.URLBreakpointRemoved, {breakpoint});
    356378
     
    518540    }
    519541
    520     _saveDOMBreakpoints()
    521     {
    522         if (this._restoringBreakpoints)
    523             return;
    524 
    525         this._domBreakpointsSetting.value = Array.from(this._domBreakpointURLMap.values()).map((breakpoint) => breakpoint.serializableInfo);
    526     }
    527 
    528     _saveEventBreakpoints()
    529     {
    530         if (this._restoringBreakpoints)
    531             return;
    532 
    533         this._eventBreakpointSetting.value = this._eventBreakpoints.map((breakpoint) => breakpoint.serializableInfo);
    534     }
    535 
    536     _saveURLBreakpoints()
    537     {
    538         if (this._restoringBreakpoints)
    539             return;
    540 
    541         this._urlBreakpointsSetting.value = this._urlBreakpoints.map((breakpoint) => breakpoint.serializableInfo);
    542     }
    543 
    544542    _handleDOMBreakpointDisabledStateChanged(event)
    545543    {
     
    549547            this._updateDOMBreakpoint(breakpoint, target);
    550548
    551         this._saveDOMBreakpoints();
     549        if (!this._restoringBreakpoints)
     550            WI.objectStores.domBreakpoints.putObject(breakpoint);
    552551    }
    553552
     
    564563                this._updateEventBreakpoint(breakpoint, target);
    565564        }
    566         this._saveEventBreakpoints();
     565
     566        if (!this._restoringBreakpoints)
     567            WI.objectStores.eventBreakpoints.putObject(breakpoint);
    567568    }
    568569
     
    578579                this._updateURLBreakpoint(breakpoint, target);
    579580        }
    580         this._saveURLBreakpoints();
     581
     582        if (!this._restoringBreakpoints)
     583            WI.objectStores.urlBreakpoints.putObject(breakpoint);
    581584    }
    582585
  • trunk/Source/WebInspectorUI/UserInterface/Models/DOMBreakpoint.js

    r242318 r244279  
    9797    }
    9898
    99     get serializableInfo()
     99    saveIdentityToCookie(cookie)
    100100    {
    101         let info = {url: this._url, path: this._path, type: this._type};
    102         if (this._disabled)
    103             info.disabled = true;
    104 
    105         return info;
     101        cookie["dom-breakpoint-url"] = this._url;
     102        cookie["dom-breakpoint-path"] = this._path;
     103        cookie["dom-breakpoint-type"] = this._type;
    106104    }
    107105
    108     saveIdentityToCookie(cookie)
     106    toJSON(key)
    109107    {
    110         cookie[WI.DOMBreakpoint.DocumentURLCookieKey] = this.url;
    111         cookie[WI.DOMBreakpoint.NodePathCookieKey] = this.path;
    112         cookie[WI.DOMBreakpoint.TypeCookieKey] = this.type;
     108        let json = {
     109            url: this._url,
     110            path: this._path,
     111            type: this._type,
     112        };
     113        if (this._disabled)
     114            json.disabled = true;
     115        if (key === WI.ObjectStore.toJSONSymbol)
     116            json[WI.objectStores.domBreakpoints.keyPath] = this._url + ":" + this._path + ":" + this._type;
     117        return json;
    113118    }
    114119};
    115 
    116 WI.DOMBreakpoint.DocumentURLCookieKey = "dom-breakpoint-document-url";
    117 WI.DOMBreakpoint.NodePathCookieKey = "dom-breakpoint-node-path";
    118 WI.DOMBreakpoint.TypeCookieKey = "dom-breakpoint-type";
    119120
    120121WI.DOMBreakpoint.Type = {
  • trunk/Source/WebInspectorUI/UserInterface/Models/EventBreakpoint.js

    r242318 r244279  
    6969    }
    7070
    71     get serializableInfo()
     71    saveIdentityToCookie(cookie)
    7272    {
    73         let info = {
     73        cookie["event-breakpoint-type"] = this._type;
     74        cookie["event-breakpoint-event-name"] = this._eventName;
     75    }
     76
     77    toJSON(key)
     78    {
     79        let json = {
    7480            type: this._type,
    7581            eventName: this._eventName,
    7682        };
    7783        if (this._disabled)
    78             info.disabled = true;
    79 
    80         return info;
    81     }
    82 
    83     saveIdentityToCookie(cookie)
    84     {
    85         cookie[WI.EventBreakpoint.TypeCookieKey] = this._type;
    86         cookie[WI.EventBreakpoint.EventNameCookieKey] = this._eventName;
     84            json.disabled = true;
     85        if (key === WI.ObjectStore.toJSONSymbol)
     86            json[WI.objectStores.eventBreakpoints.keyPath] = this._type + ":" + this._eventName;
     87        return json;
    8788    }
    8889};
     
    9495};
    9596
    96 WI.EventBreakpoint.TypeCookieKey = "event-breakpoint-type";
    97 WI.EventBreakpoint.EventNameCookieKey = "event-breakpoint-event-name";
    98 
    9997WI.EventBreakpoint.Event = {
    10098    DisabledStateChanged: "event-breakpoint-disabled-state-changed",
  • trunk/Source/WebInspectorUI/UserInterface/Models/URLBreakpoint.js

    r242318 r244279  
    6767    }
    6868
    69     get serializableInfo()
     69    saveIdentityToCookie(cookie)
    7070    {
    71         let info = {type: this._type, url: this._url};
    72         if (this._disabled)
    73             info.disabled = true;
    74 
    75         return info;
     71        cookie["url-breakpoint-type"] = this._type;
     72        cookie["url-breakpoint-url"] = this._url;
    7673    }
    7774
    78     saveIdentityToCookie(cookie)
     75    toJSON(key)
    7976    {
    80         cookie["url-breakpoint-url"] = this._url;
     77        let json = {
     78            type: this._type,
     79            url: this._url,
     80        };
     81        if (this._disabled)
     82            json.disabled = true;
     83        if (key === WI.ObjectStore.toJSONSymbol)
     84            json[WI.objectStores.urlBreakpoints.keyPath] = this._type + ":" + this._url;
     85        return json;
    8186    }
    8287};
Note: See TracChangeset for help on using the changeset viewer.