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);
}
}