Title: [105621] trunk/Source/WebCore
Revision
105621
Author
[email protected]
Date
2012-01-23 07:17:04 -0800 (Mon, 23 Jan 2012)

Log Message

Web Inspector: IndexedDBModel should keep track of requests sent to the backend.
https://bugs.webkit.org/show_bug.cgi?id=76705

Reviewed by Pavel Feldman.

* inspector/Inspector.json:
* inspector/InspectorIndexedDBAgent.cpp:
(WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
* inspector/InspectorIndexedDBAgent.h:
* inspector/front-end/IndexedDBModel.js:
(WebInspector.IndexedDBModel):
(WebInspector.IndexedDBModel.prototype._frameDetached):
(WebInspector.IndexedDBModel.prototype._reset):
(WebInspector.IndexedDBModel.prototype._loadDatabaseNamesForFrame):
(WebInspector.IndexedDBRequestManager):
(WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame.innerCallback):
(WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame):
(WebInspector.IndexedDBRequestManager.prototype._databaseNamesLoaded):
(WebInspector.IndexedDBRequestManager.prototype._requestId):
(WebInspector.IndexedDBRequestManager.prototype._frameDetached):
(WebInspector.IndexedDBRequestManager.prototype._reset):
(WebInspector.IndexedDBRequestManager.DatabasesForFrameRequest):
(WebInspector.IndexedDBDispatcher):
(WebInspector.IndexedDBDispatcher.prototype.databaseNamesLoaded):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (105620 => 105621)


--- trunk/Source/WebCore/ChangeLog	2012-01-23 15:10:01 UTC (rev 105620)
+++ trunk/Source/WebCore/ChangeLog	2012-01-23 15:17:04 UTC (rev 105621)
@@ -1,3 +1,30 @@
+2012-01-23  Vsevolod Vlasov  <[email protected]>
+
+        Web Inspector: IndexedDBModel should keep track of requests sent to the backend.
+        https://bugs.webkit.org/show_bug.cgi?id=76705
+
+        Reviewed by Pavel Feldman.
+
+        * inspector/Inspector.json:
+        * inspector/InspectorIndexedDBAgent.cpp:
+        (WebCore::InspectorIndexedDBAgent::requestDatabaseNamesForFrame):
+        * inspector/InspectorIndexedDBAgent.h:
+        * inspector/front-end/IndexedDBModel.js:
+        (WebInspector.IndexedDBModel):
+        (WebInspector.IndexedDBModel.prototype._frameDetached):
+        (WebInspector.IndexedDBModel.prototype._reset):
+        (WebInspector.IndexedDBModel.prototype._loadDatabaseNamesForFrame):
+        (WebInspector.IndexedDBRequestManager):
+        (WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame.innerCallback):
+        (WebInspector.IndexedDBRequestManager.prototype.requestDatabaseNamesForFrame):
+        (WebInspector.IndexedDBRequestManager.prototype._databaseNamesLoaded):
+        (WebInspector.IndexedDBRequestManager.prototype._requestId):
+        (WebInspector.IndexedDBRequestManager.prototype._frameDetached):
+        (WebInspector.IndexedDBRequestManager.prototype._reset):
+        (WebInspector.IndexedDBRequestManager.DatabasesForFrameRequest):
+        (WebInspector.IndexedDBDispatcher):
+        (WebInspector.IndexedDBDispatcher.prototype.databaseNamesLoaded):
+
 2012-01-23  Pavel Feldman  <[email protected]>
 
         Web Inspector: Inspecting an element inside an iframe no longer works

Modified: trunk/Source/WebCore/inspector/Inspector.json (105620 => 105621)


--- trunk/Source/WebCore/inspector/Inspector.json	2012-01-23 15:10:01 UTC (rev 105620)
+++ trunk/Source/WebCore/inspector/Inspector.json	2012-01-23 15:17:04 UTC (rev 105621)
@@ -933,11 +933,10 @@
         "hidden": true,
         "types": [
             {
-                "id": "FrameWithDatabaseNames",
+                "id": "SecurityOriginWithDatabaseNames",
                 "type": "object",
-                "description": "Origin with database names and frame ids.",
+                "description": "Security origin with database names.",
                 "properties": [
-                    { "name": "frameId", "$ref": "Network.FrameId", "description": "Frame id." },
                     { "name": "securityOrigin", "type": "string", "description": "Security origin." },
                     { "name": "databaseNames", "type": "array", "items": { "type": "string" }, "description": "Database names for this origin." }
                 ]
@@ -955,7 +954,8 @@
             {
                 "name": "requestDatabaseNamesForFrame",
                 "parameters": [
-                    { "name": "frameId", "$ref": "Network.FrameId" }
+                    { "name": "requestId", "type": "integer", "description": "Request id." },
+                    { "name": "frameId", "$ref": "Network.FrameId", "description": "Frame id." }
                 ],
                 "description": "Requests database names for given frame's security origin."
             }
@@ -964,7 +964,8 @@
             {
                 "name": "databaseNamesLoaded",
                 "parameters": [
-                    { "name": "frameWithDatabaseNames", "$ref": "FrameWithDatabaseNames", "description": "Frame with database names." }
+                    { "name": "requestId", "type": "number", "description": "Request id." },
+                    { "name": "securityOriginWithDatabaseNames", "$ref": "SecurityOriginWithDatabaseNames", "description": "Frame with database names." }
                 ]
             }
         ]

Modified: trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp (105620 => 105621)


--- trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp	2012-01-23 15:10:01 UTC (rev 105620)
+++ trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.cpp	2012-01-23 15:17:04 UTC (rev 105621)
@@ -52,7 +52,7 @@
 
 #include <wtf/Vector.h>
 
-using WebCore::TypeBuilder::IndexedDB::FrameWithDatabaseNames;
+using WebCore::TypeBuilder::IndexedDB::SecurityOriginWithDatabaseNames;
 
 namespace WebCore {
 
@@ -96,9 +96,9 @@
 
 class GetDatabaseNamesCallback : public InspectorIDBCallback {
 public:
-    static PassRefPtr<GetDatabaseNamesCallback> create(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, const String& frameId, const String& securityOrigin)
+    static PassRefPtr<GetDatabaseNamesCallback> create(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, int requestId, const String& securityOrigin)
     {
-        return adoptRef(new GetDatabaseNamesCallback(frontendProvider, frameId, securityOrigin));
+        return adoptRef(new GetDatabaseNamesCallback(frontendProvider, requestId, securityOrigin));
     }
 
     virtual ~GetDatabaseNamesCallback() { }
@@ -112,21 +112,20 @@
         for (size_t i = 0; i < databaseNamesList->length(); ++i)
             databaseNames->pushString(databaseNamesList->item(i));
 
-        RefPtr<FrameWithDatabaseNames> result = FrameWithDatabaseNames::create()
-            .setFrameId(m_frameId)
+        RefPtr<SecurityOriginWithDatabaseNames> result = SecurityOriginWithDatabaseNames::create()
             .setSecurityOrigin(m_securityOrigin)
             .setDatabaseNames(databaseNames);
 
-        m_frontendProvider->frontend()->databaseNamesLoaded(result);
+        m_frontendProvider->frontend()->databaseNamesLoaded(m_requestId, result);
     }
 
 private:
-    GetDatabaseNamesCallback(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, const String& frameId, const String& securityOrigin)
+    GetDatabaseNamesCallback(PassRefPtr<InspectorIndexedDBAgent::FrontendProvider> frontendProvider, int requestId, const String& securityOrigin)
         : m_frontendProvider(frontendProvider)
-        , m_frameId(frameId)
+        , m_requestId(requestId)
         , m_securityOrigin(securityOrigin) { }
     RefPtr<InspectorIndexedDBAgent::FrontendProvider> m_frontendProvider;
-    String m_frameId;
+    int m_requestId;
     String m_securityOrigin;
 };
 
@@ -172,7 +171,7 @@
     m_state->setBoolean(IndexedDBAgentState::indexedDBAgentEnabled, false);
 }
 
-void InspectorIndexedDBAgent::requestDatabaseNamesForFrame(ErrorString* error, const String& frameId)
+void InspectorIndexedDBAgent::requestDatabaseNamesForFrame(ErrorString* error, int requestId, const String& frameId)
 {
     Frame* frame = m_pageAgent->frameForId(frameId);
     Document* document = frame ? frame->document() : 0;
@@ -184,7 +183,7 @@
         return;
     }
 
-    RefPtr<GetDatabaseNamesCallback> callback = GetDatabaseNamesCallback::create(m_frontendProvider, frameId, document->securityOrigin()->toString());
+    RefPtr<GetDatabaseNamesCallback> callback = GetDatabaseNamesCallback::create(m_frontendProvider, requestId, document->securityOrigin()->toString());
     GroupSettings* groupSettings = document->page()->group().groupSettings();
     idbBackend->getDatabaseNames(callback.get(), document->securityOrigin(), document->frame(), groupSettings->indexedDBDatabasePath());
 }

Modified: trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.h (105620 => 105621)


--- trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.h	2012-01-23 15:10:01 UTC (rev 105620)
+++ trunk/Source/WebCore/inspector/InspectorIndexedDBAgent.h	2012-01-23 15:17:04 UTC (rev 105621)
@@ -60,7 +60,7 @@
     // Called from the front-end.
     void enable(ErrorString*);
     void disable(ErrorString*);
-    void requestDatabaseNamesForFrame(ErrorString*, const String& frameId);
+    void requestDatabaseNamesForFrame(ErrorString*, int requestId, const String& frameId);
 private:
     InspectorIndexedDBAgent(InstrumentingAgents*, InspectorState*, InspectorPageAgent*);
 

Modified: trunk/Source/WebCore/inspector/front-end/IndexedDBModel.js (105620 => 105621)


--- trunk/Source/WebCore/inspector/front-end/IndexedDBModel.js	2012-01-23 15:10:01 UTC (rev 105620)
+++ trunk/Source/WebCore/inspector/front-end/IndexedDBModel.js	2012-01-23 15:17:04 UTC (rev 105621)
@@ -34,8 +34,7 @@
  */
 WebInspector.IndexedDBModel = function()
 {
-    IndexedDBAgent.enable();
-    InspectorBackend.registerIndexedDBDispatcher(new WebInspector.IndexedDBDispatcher(this));
+    this._indexedDBAgent = new WebInspector.IndexedDBRequestManager();
     
     WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameNavigated, this._frameNavigated, this);
     WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.FrameDetached, this._frameDetached, this);
@@ -80,6 +79,7 @@
     {
         var resourceTreeFrame = /** @type {WebInspector.ResourceTreeFrame} */ event.data;
         this._originRemovedFromFrame(resourceTreeFrame.id);
+        this._indexedDBAgent._frameDetached(resourceTreeFrame.id);
     },
 
     _reset: function()
@@ -87,6 +87,7 @@
         this._securityOriginByFrameId = {};
         this._frameIdsBySecurityOrigin = {};
         this._databaseNamesBySecurityOrigin = {};
+        this._indexedDBAgent._reset();
         // FIXME: dispatch events?
     },
     
@@ -202,56 +203,130 @@
     },
 
     /**
-     * @param {IndexedDBAgent.FrameWithDatabaseNames} frameWithDatabaseNames
+     * @param {string} frameId
      */
-    _databaseNamesLoaded: function(frameWithDatabaseNames)
+    _loadDatabaseNamesForFrame: function(frameId)
     {
-        // FIXME: We should implement events order, so that we could not update databaseNames for a frame that was already detached.
-        
-        var databaseNames = frameWithDatabaseNames.databaseNames;
-        var oldSecurityOrigin = this._securityOriginByFrameId[frameWithDatabaseNames.frameId];
-        if (oldSecurityOrigin && oldSecurityOrigin === frameWithDatabaseNames.securityOrigin)
-            this._updateOriginDatabaseNames(frameWithDatabaseNames.securityOrigin, frameWithDatabaseNames.databaseNames);
-        else {
-            this._originRemovedFromFrame(frameWithDatabaseNames.frameId);
-            this._originAddedToFrame(frameWithDatabaseNames.frameId, frameWithDatabaseNames.securityOrigin);
-            this._updateOriginDatabaseNames(frameWithDatabaseNames.securityOrigin, frameWithDatabaseNames.databaseNames);
+        /**
+         * @param {IndexedDBAgent.SecurityOriginWithDatabaseNames} securityOriginWithDatabaseNames
+         */
+        function callback(securityOriginWithDatabaseNames)
+        {
+            var databaseNames = securityOriginWithDatabaseNames.databaseNames;
+            var oldSecurityOrigin = this._securityOriginByFrameId[frameId];
+            if (oldSecurityOrigin && oldSecurityOrigin === securityOriginWithDatabaseNames.securityOrigin)
+                this._updateOriginDatabaseNames(securityOriginWithDatabaseNames.securityOrigin, securityOriginWithDatabaseNames.databaseNames);
+            else {
+                this._originRemovedFromFrame(frameId);
+                this._originAddedToFrame(frameId, securityOriginWithDatabaseNames.securityOrigin);
+                this._updateOriginDatabaseNames(securityOriginWithDatabaseNames.securityOrigin, securityOriginWithDatabaseNames.databaseNames);
+            }
         }
-    },
 
-    _loadDatabaseNamesForFrame: function(frameId)
+        this._indexedDBAgent.requestDatabaseNamesForFrame(frameId, callback.bind(this));
+    }
+}
+
+WebInspector.IndexedDBModel.prototype.__proto__ = WebInspector.Object.prototype;
+
+/**
+ * @constructor
+ */
+WebInspector.IndexedDBRequestManager = function()
+{
+    this._lastRequestId = 0;
+    this._requestDatabaseNamesForFrameCallbacks = {};
+
+    IndexedDBAgent.enable();
+    InspectorBackend.registerIndexedDBDispatcher(new WebInspector.IndexedDBDispatcher(this));
+}
+
+WebInspector.IndexedDBRequestManager.prototype = {
+    /**
+     * @param {string} frameId
+     * @param {function(IndexedDBAgent.SecurityOriginWithDatabaseNames)} callback
+     */
+    requestDatabaseNamesForFrame: function(frameId, callback)
     {
-        function callback(error)
+        var requestId = this._requestId();
+        var request = new WebInspector.IndexedDBRequestManager.DatabasesForFrameRequest(frameId, callback);
+        this._requestDatabaseNamesForFrameCallbacks[requestId] = request; 
+
+        function innerCallback(error)
         {
             if (error) {
                 console.error("IndexedDBAgent error: " + error);
                 return;
             }
         }
+
+        IndexedDBAgent.requestDatabaseNamesForFrame(requestId, frameId, innerCallback);
+    },
+    
+    /**
+     * @param {number} requestId
+     * @param {IndexedDBAgent.SecurityOriginWithDatabaseNames} securityOriginWithDatabaseNames
+     */
+    _databaseNamesLoaded: function(requestId, securityOriginWithDatabaseNames)
+    {
+        var request = this._requestDatabaseNamesForFrameCallbacks[requestId];
+        if (!request.callback)
+            return;
         
-        IndexedDBAgent.requestDatabaseNamesForFrame(frameId, callback);
+        request.callback(securityOriginWithDatabaseNames);
+    },
+
+    /**
+     * @return {number}
+     */
+    _requestId: function()
+    {
+        return ++this._lastRequestId;
+    },
+
+    /**
+     * @param {string} frameId
+     */
+    _frameDetached: function(frameId)
+    {
+        for (var requestId in this._requestDatabaseNamesForFrameCallbacks) {
+            if (this._requestDatabaseNamesForFrameCallbacks[requestId].frameId === frameId)
+                delete this._requestDatabaseNamesForFrameCallbacks[requestId];
+        }
+    },
+
+    _reset: function()
+    {
+        this._requestDatabaseNamesForFrameCallbacks = {};
     }
 }
 
-WebInspector.IndexedDBModel.prototype.__proto__ = WebInspector.Object.prototype;
+/**
+ * @constructor
+ */
+WebInspector.IndexedDBRequestManager.DatabasesForFrameRequest = function(frameId, callback)
+{
+    this.frameId = frameId;
+    this.callback = callback;
+}
 
 /**
  * @constructor
  * @implements {IndexedDBAgent.Dispatcher}
+ * @param {WebInspector.IndexedDBRequestManager} indexedDBRequestManager
  */
-WebInspector.IndexedDBDispatcher = function(indexedDBModel)
+WebInspector.IndexedDBDispatcher = function(indexedDBRequestManager)
 {
-    this._indexedDBModel = indexedDBModel;
+    this._agentWrapper = indexedDBRequestManager;
 }
 
-WebInspector.IndexedDBDispatcher._callbacks = {};
-
 WebInspector.IndexedDBDispatcher.prototype = {
     /**
-     * @param {IndexedDBAgent.FrameWithDatabaseNames} frameWithDatabaseNames
+     * @param {number} requestId
+     * @param {IndexedDBAgent.SecurityOriginWithDatabaseNames} securityOriginWithDatabaseNames
      */
-    databaseNamesLoaded: function(frameWithDatabaseNames)
+    databaseNamesLoaded: function(requestId, securityOriginWithDatabaseNames)
     {
-        this._indexedDBModel._databaseNamesLoaded(frameWithDatabaseNames);
+        this._agentWrapper._databaseNamesLoaded(requestId, securityOriginWithDatabaseNames);
     }
 }
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to