Title: [122229] trunk/Source/WebCore
Revision
122229
Author
[email protected]
Date
2012-07-10 09:23:09 -0700 (Tue, 10 Jul 2012)

Log Message

Web Inspector: Refactor resource revisions before moving to UISourceCode.
https://bugs.webkit.org/show_bug.cgi?id=90855

Reviewed by Pavel Feldman.

Revisions are now persisted based on mainFrame.loaderId, not resource.loaderId which makes filtering out stale persisted revisions easier.
Restoring revisions from local storage is separated from filtering out stale persisted revisions.
Resource._clearRevisionHistory and Resource._restoreRevisions are not static anymore.
Renamed localStorage field for persisting revisions: "resource-history" -> "revision-history"

* inspector/front-end/Resource.js:
(WebInspector.Resource):
(WebInspector.Resource.prototype.addRevision):
(WebInspector.Resource.prototype._restoreRevisionHistory):
(WebInspector.Resource.prototype._clearRevisionHistory):
(WebInspector.Resource.prototype.revertAndClearHistory.clearHistory):
(WebInspector.Resource.prototype.revertAndClearHistory):
(WebInspector.Revision):
(WebInspector.Revision._revisionHistoryRegistry):
(WebInspector.Revision._ensureStaleRevisionsFileteredOut.persist):
(WebInspector.Revision._ensureStaleRevisionsFileteredOut):
(WebInspector.Revision.prototype._persist):
* inspector/front-end/ResourceTreeModel.js:
(WebInspector.ResourceTreeModel.prototype._processCachedResources):
(WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
* inspector/front-end/RevisionHistoryView.js:
* inspector/front-end/UISourceCode.js:
(WebInspector.UISourceCode.prototype._revisionAdded):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (122228 => 122229)


--- trunk/Source/WebCore/ChangeLog	2012-07-10 16:18:40 UTC (rev 122228)
+++ trunk/Source/WebCore/ChangeLog	2012-07-10 16:23:09 UTC (rev 122229)
@@ -1,3 +1,34 @@
+2012-07-10  Vsevolod Vlasov  <[email protected]>
+
+        Web Inspector: Refactor resource revisions before moving to UISourceCode.
+        https://bugs.webkit.org/show_bug.cgi?id=90855
+
+        Reviewed by Pavel Feldman.
+
+        Revisions are now persisted based on mainFrame.loaderId, not resource.loaderId which makes filtering out stale persisted revisions easier.
+        Restoring revisions from local storage is separated from filtering out stale persisted revisions.
+        Resource._clearRevisionHistory and Resource._restoreRevisions are not static anymore.
+        Renamed localStorage field for persisting revisions: "resource-history" -> "revision-history"
+
+        * inspector/front-end/Resource.js:
+        (WebInspector.Resource):
+        (WebInspector.Resource.prototype.addRevision):
+        (WebInspector.Resource.prototype._restoreRevisionHistory):
+        (WebInspector.Resource.prototype._clearRevisionHistory):
+        (WebInspector.Resource.prototype.revertAndClearHistory.clearHistory):
+        (WebInspector.Resource.prototype.revertAndClearHistory):
+        (WebInspector.Revision):
+        (WebInspector.Revision._revisionHistoryRegistry):
+        (WebInspector.Revision._ensureStaleRevisionsFileteredOut.persist):
+        (WebInspector.Revision._ensureStaleRevisionsFileteredOut):
+        (WebInspector.Revision.prototype._persist):
+        * inspector/front-end/ResourceTreeModel.js:
+        (WebInspector.ResourceTreeModel.prototype._processCachedResources):
+        (WebInspector.ResourceTreeModel.prototype._addFramesRecursively):
+        * inspector/front-end/RevisionHistoryView.js:
+        * inspector/front-end/UISourceCode.js:
+        (WebInspector.UISourceCode.prototype._revisionAdded):
+
 2012-07-10  Alice Cheng  <[email protected]>
 
         Editing: Reproducible crasher when pasting a 0x0 image into Mail

Modified: trunk/Source/WebCore/inspector/front-end/Resource.js (122228 => 122229)


--- trunk/Source/WebCore/inspector/front-end/Resource.js	2012-07-10 16:18:40 UTC (rev 122228)
+++ trunk/Source/WebCore/inspector/front-end/Resource.js	2012-07-10 16:23:09 UTC (rev 122229)
@@ -56,110 +56,10 @@
     this._pendingContentCallbacks = [];
     if (this._request && !this._request.finished)
         this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._requestFinished, this);
+    
+    this._restoreRevisionHistory();
 }
 
-WebInspector.Resource._resourceRevisionRegistry = function()
-{
-    if (!WebInspector.Resource._resourceRevisionRegistryObject) {
-        if (window.localStorage) {
-            var resourceHistory = window.localStorage["resource-history"];
-            try {
-                WebInspector.Resource._resourceRevisionRegistryObject = resourceHistory ? JSON.parse(resourceHistory) : {};
-            } catch (e) {
-                WebInspector.Resource._resourceRevisionRegistryObject = {};
-            }
-        } else
-            WebInspector.Resource._resourceRevisionRegistryObject = {};
-    }
-    return WebInspector.Resource._resourceRevisionRegistryObject;
-}
-
-WebInspector.Resource.restoreRevisions = function()
-{
-    var registry = WebInspector.Resource._resourceRevisionRegistry();
-    var filteredRegistry = {};
-    for (var url in registry) {
-        var historyItems = registry[url];
-        var resource = WebInspector.resourceForURL(url);
-
-        var filteredHistoryItems = [];
-        for (var i = 0; historyItems && i < historyItems.length; ++i) {
-            var historyItem = historyItems[i];
-            if (resource && historyItem.loaderId === resource.loaderId) {
-                resource.addRevision(window.localStorage[historyItem.key], new Date(historyItem.timestamp), true);
-                filteredHistoryItems.push(historyItem);
-                filteredRegistry[url] = filteredHistoryItems;
-            } else
-                delete window.localStorage[historyItem.key];
-        }
-    }
-    WebInspector.Resource._resourceRevisionRegistryObject = filteredRegistry;
-
-    function persist()
-    {
-        window.localStorage["resource-history"] = JSON.stringify(filteredRegistry);
-    }
-
-    // Schedule async storage.
-    setTimeout(persist, 0);
-}
-
-/**
- * @param {WebInspector.ResourceRevision} revision
- */
-WebInspector.Resource.persistRevision = function(revision)
-{
-    if (!window.localStorage)
-        return;
-
-    if (revision.resource.url.startsWith("inspector://"))
-        return;
-
-    var resource = revision.resource;
-    var url = ""
-    var loaderId = resource.loaderId;
-    var timestamp = revision.timestamp.getTime();
-    var key = "resource-history|" + url + "|" + loaderId + "|" + timestamp;
-    var content = revision._content;
-
-    var registry = WebInspector.Resource._resourceRevisionRegistry();
-
-    var historyItems = registry[resource.url];
-    if (!historyItems) {
-        historyItems = [];
-        registry[resource.url] = historyItems;
-    }
-    historyItems.push({url: url, loaderId: loaderId, timestamp: timestamp, key: key});
-
-    function persist()
-    {
-        window.localStorage[key] = content;
-        window.localStorage["resource-history"] = JSON.stringify(registry);
-    }
-
-    // Schedule async storage.
-    setTimeout(persist, 0);
-}
-
-/**
- * @param {WebInspector.Resource} resource
- */
-WebInspector.Resource._clearResourceHistory = function(resource)
-{
-    if (!window.localStorage)
-        return;
-
-    if (resource.url.startsWith("inspector://"))
-        return;
-
-    var registry = WebInspector.Resource._resourceRevisionRegistry();
-    var historyItems = registry[resource.url];
-    for (var i = 0; historyItems && i < historyItems.length; ++i)
-        delete window.localStorage[historyItems[i].key];
-    delete registry[resource.url];
-    window.localStorage["resource-history"] = JSON.stringify(registry);
-}
-
 WebInspector.Resource.Events = {
     RevisionAdded: "revision-added",
     MessageAdded: "message-added",
@@ -339,15 +239,40 @@
             if (lastRevision._content === content)
                 return;
         }
-        var revision = new WebInspector.ResourceRevision(this, content, timestamp || new Date());
+        var revision = new WebInspector.Revision(this, content, timestamp || new Date());
         this.history.push(revision);
 
         this.dispatchEventToListeners(WebInspector.Resource.Events.RevisionAdded, revision);
         if (!restoringHistory)
-            revision._persistRevision();
+            revision._persist();
         WebInspector.resourceTreeModel.dispatchEventToListeners(WebInspector.ResourceTreeModel.EventTypes.ResourceContentCommitted, { resource: this, content: content });
     },
 
+    _restoreRevisionHistory: function()
+    {
+        if (!window.localStorage)
+            return;
+
+        WebInspector.Revision._ensureStaleRevisionsFileteredOut();
+        var registry = WebInspector.Revision._revisionHistoryRegistry();
+        var historyItems = registry[this.url];
+        for (var i = 0; historyItems && i < historyItems.length; ++i)
+            this.addRevision(window.localStorage[historyItems[i].key], new Date(historyItems[i].timestamp), true);
+    },
+
+    _clearRevisionHistory: function()
+    {
+        if (!window.localStorage)
+            return;
+
+        var registry = WebInspector.Revision._revisionHistoryRegistry();
+        var historyItems = registry[this.url];
+        for (var i = 0; historyItems && i < historyItems.length; ++i)
+            delete window.localStorage[historyItems[i].key];
+        delete registry[this.url];
+        window.localStorage["revision-history"] = JSON.stringify(registry);
+    },
+   
     /**
      * @return {?string}
      */
@@ -484,7 +409,7 @@
 
         function clearHistory()
         {
-            WebInspector.Resource._clearResourceHistory(this);
+            this._clearRevisionHistory();
             this.history = [];
             callback();
         }
@@ -526,14 +451,64 @@
  * @param {?string|undefined} content
  * @param {Date} timestamp
  */
-WebInspector.ResourceRevision = function(resource, content, timestamp)
+WebInspector.Revision = function(resource, content, timestamp)
 {
     this._resource = resource;
     this._content = content;
     this._timestamp = timestamp;
 }
 
-WebInspector.ResourceRevision.prototype = {
+WebInspector.Revision._revisionHistoryRegistry = function()
+{
+    if (!WebInspector.Revision._revisionHistoryRegistryObject) {
+        if (window.localStorage) {
+            var revisionHistory = window.localStorage["revision-history"];
+            try {
+                WebInspector.Revision._revisionHistoryRegistryObject = revisionHistory ? JSON.parse(revisionHistory) : {};
+            } catch (e) {
+                WebInspector.Revision._revisionHistoryRegistryObject = {};
+            }
+        } else
+            WebInspector.Revision._revisionHistoryRegistryObject = {};
+    }
+    return WebInspector.Revision._revisionHistoryRegistryObject;
+}
+
+WebInspector.Revision._ensureStaleRevisionsFileteredOut = function()
+{
+    if (!window.localStorage)
+        return;
+
+    if (WebInspector.Revision._staleRevisionsFilteredOut)
+        return;
+    WebInspector.Revision._staleRevisionsFilteredOut = true;
+    
+    var registry = WebInspector.Revision._revisionHistoryRegistry();
+    var filteredRegistry = {};
+    for (var url in registry) {
+        var historyItems = registry[url];
+        var filteredHistoryItems = [];
+        for (var i = 0; historyItems && i < historyItems.length; ++i) {
+            var historyItem = historyItems[i];
+            if (historyItem.loaderId === WebInspector.resourceTreeModel.mainFrame.loaderId) {
+                filteredHistoryItems.push(historyItem);
+                filteredRegistry[url] = filteredHistoryItems;
+            } else
+                delete window.localStorage[historyItem.key];
+        }
+    }
+    WebInspector.Revision._revisionHistoryRegistryObject = filteredRegistry;
+
+    function persist()
+    {
+        window.localStorage["revision-history"] = JSON.stringify(filteredRegistry);
+    }
+
+    // Schedule async storage.
+    setTimeout(persist, 0);
+}
+
+WebInspector.Revision.prototype = {
     /**
      * @return {WebInspector.Resource}
      */
@@ -603,8 +578,35 @@
         callback([]);
     },
 
-    _persistRevision: function()
+    _persist: function()
     {
-        WebInspector.Resource.persistRevision(this);
+        if (!window.localStorage)
+            return;
+
+        var url = ""
+        if (url.startsWith("inspector://"))
+            return;
+
+        var loaderId = WebInspector.resourceTreeModel.mainFrame.loaderId;
+        var timestamp = this.timestamp.getTime();
+        var key = "revision-history|" + url + "|" + loaderId + "|" + timestamp;
+
+        var registry = WebInspector.Revision._revisionHistoryRegistry();
+
+        var historyItems = registry[url];
+        if (!historyItems) {
+            historyItems = [];
+            registry[url] = historyItems;
+        }
+        historyItems.push({url: url, loaderId: loaderId, timestamp: timestamp, key: key});
+
+        function persist()
+        {
+            window.localStorage[key] = this._content;
+            window.localStorage["revision-history"] = JSON.stringify(registry);
+        }
+
+        // Schedule async storage.
+        setTimeout(persist.bind(this), 0);
     }
 }

Modified: trunk/Source/WebCore/inspector/front-end/ResourceTreeModel.js (122228 => 122229)


--- trunk/Source/WebCore/inspector/front-end/ResourceTreeModel.js	2012-07-10 16:18:40 UTC (rev 122228)
+++ trunk/Source/WebCore/inspector/front-end/ResourceTreeModel.js	2012-07-10 16:23:09 UTC (rev 122229)
@@ -93,8 +93,6 @@
         this._addFramesRecursively(null, mainFramePayload);
         this._dispatchInspectedURLChanged();
         this.dispatchEventToListeners(WebInspector.ResourceTreeModel.EventTypes.CachedResourcesLoaded);
-        WebInspector.Resource.restoreRevisions();
-
         this._cachedResourcesProcessed = true;
     },
 
@@ -334,23 +332,16 @@
     {
         var framePayload = frameTreePayload.frame;
         var frame = new WebInspector.ResourceTreeFrame(this, parentFrame, framePayload);
+        this._addFrame(frame);
 
-        // Create frame resource.
         var frameResource = this._createResourceFromFramePayload(framePayload, framePayload.url, WebInspector.resourceTypes.Document, framePayload.mimeType);
-
         if (frame.isMainFrame())
             WebInspector.inspectedPageURL = frameResource.url;
-
-        this._addFrame(frame);
         frame.addResource(frameResource);
 
         for (var i = 0; frameTreePayload.childFrames && i < frameTreePayload.childFrames.length; ++i)
             this._addFramesRecursively(frame, frameTreePayload.childFrames[i]);
 
-        if (!frameTreePayload.resources)
-            return;
-
-        // Create frame subresources.
         for (var i = 0; i < frameTreePayload.resources.length; ++i) {
             var subresource = frameTreePayload.resources[i];
             var resource = this._createResourceFromFramePayload(framePayload, subresource.url, WebInspector.resourceTypes[subresource.type], subresource.mimeType);

Modified: trunk/Source/WebCore/inspector/front-end/RevisionHistoryView.js (122228 => 122229)


--- trunk/Source/WebCore/inspector/front-end/RevisionHistoryView.js	2012-07-10 16:18:40 UTC (rev 122228)
+++ trunk/Source/WebCore/inspector/front-end/RevisionHistoryView.js	2012-07-10 16:23:09 UTC (rev 122229)
@@ -174,8 +174,8 @@
 /**
  * @constructor
  * @extends {TreeElement}
- * @param {WebInspector.ResourceRevision} revision
- * @param {WebInspector.ResourceRevision} baseRevision
+ * @param {WebInspector.Revision} revision
+ * @param {WebInspector.Revision} baseRevision
  * @param {boolean} allowRevert
  */
 WebInspector.RevisionHistoryTreeElement = function(revision, baseRevision, allowRevert)

Modified: trunk/Source/WebCore/inspector/front-end/UISourceCode.js (122228 => 122229)


--- trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2012-07-10 16:18:40 UTC (rev 122228)
+++ trunk/Source/WebCore/inspector/front-end/UISourceCode.js	2012-07-10 16:23:09 UTC (rev 122229)
@@ -138,7 +138,7 @@
 
     _revisionAdded: function(event)
     {
-        var revision = /** @type {WebInspector.ResourceRevision} */ event.data;
+        var revision = /** @type {WebInspector.Revision} */ event.data;
         this.contentChanged(revision.content || "", this._resource.canonicalMimeType());
     },
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to