summaryrefslogtreecommitdiffstats
path: root/webkit/glue/devtools
diff options
context:
space:
mode:
authorpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-26 11:12:53 +0000
committerpfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-26 11:12:53 +0000
commit63a5c2a2b231a3dca148360d3acf3b6903de0363 (patch)
treedb4f8905b686de879f422c4c42704c5a4ee016b5 /webkit/glue/devtools
parent5fcb32a48c26bbced1dc5989a7196dab39b7d675 (diff)
downloadchromium_src-63a5c2a2b231a3dca148360d3acf3b6903de0363.zip
chromium_src-63a5c2a2b231a3dca148360d3acf3b6903de0363.tar.gz
chromium_src-63a5c2a2b231a3dca148360d3acf3b6903de0363.tar.bz2
Make DevTools client survive 'refresh' of the inspectable tab.
Review URL: http://codereview.chromium.org/54002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@12541 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'webkit/glue/devtools')
-rw-r--r--webkit/glue/devtools/js/devtools.js100
-rw-r--r--webkit/glue/devtools/js/devtools_host_stub.js11
-rw-r--r--webkit/glue/devtools/js/dom_agent.js53
-rw-r--r--webkit/glue/devtools/js/inspector_controller_impl.js11
-rw-r--r--webkit/glue/devtools/tools_agent.h11
5 files changed, 138 insertions, 48 deletions
diff --git a/webkit/glue/devtools/js/devtools.js b/webkit/glue/devtools/js/devtools.js
index 3c3b41a..7456bd9 100644
--- a/webkit/glue/devtools/js/devtools.js
+++ b/webkit/glue/devtools/js/devtools.js
@@ -15,63 +15,114 @@ goog.require('devtools.NetAgent');
devtools.ToolsAgent = function() {
RemoteToolsAgent.UpdateFocusedNode =
goog.bind(this.updateFocusedNode, this);
+ RemoteToolsAgent.FrameNavigate =
+ goog.bind(this.frameNavigate, this);
+ this.domAgent_ = new devtools.DomAgent();
+ this.netAgent_ = new devtools.NetAgent();
+ this.reset();
};
-// ToolsAgent implementation.
-devtools.ToolsAgent.prototype.updateFocusedNode = function(node_id) {
- var node = domAgent.getNodeForId(node_id);
+/**
+ * Rests tools agent to its initial state.
+ */
+devtools.ToolsAgent.prototype.reset = function() {
+ this.setEnabled(true);
+ this.domAgent_.reset();
+ this.domAgent_.getDocumentElementAsync();
+};
+
+
+/**
+ * DomAgent accessor.
+ * @return {devtools.DomAgent} Dom agent instance.
+ */
+devtools.ToolsAgent.prototype.getDomAgent = function() {
+ return this.domAgent_;
+};
+
+
+/**
+ * NetAgent accessor.
+ * @return {devtools.NetAgent} Net agent instance.
+ */
+devtools.ToolsAgent.prototype.getNetAgent = function() {
+ return this.netAgent_;
+};
+
+
+/**
+ * @see tools_agent.h
+ */
+devtools.ToolsAgent.prototype.updateFocusedNode = function(nodeId) {
+ var node = this.domAgent_.getNodeForId(nodeId);
WebInspector.updateFocusedNode(node);
};
-devtools.ToolsAgent.prototype.setDomAgentEnabled = function(enabled) {
- RemoteToolsAgent.SetDomAgentEnabled(enabled);
+/**
+ * @see tools_agent.h
+ */
+devtools.ToolsAgent.prototype.frameNavigate = function(url, topLevel) {
+ this.reset();
+ WebInspector.reset();
};
-devtools.ToolsAgent.prototype.setNetAgentEnabled = function(enabled) {
- RemoteToolsAgent.SetNetAgentEnabled(enabled);
+/**
+ * @see tools_agent.h
+ */
+devtools.ToolsAgent.prototype.setEnabled = function(enabled) {
+ RemoteToolsAgent.SetEnabled(enabled);
+};
+
+
+
+/**
+ * Evaluates js expression.
+ * @param {string} expr
+ */
+devtools.ToolsAgent.prototype.evaluate = function(expr) {
+ RemoteToolsAgent.evaluate(expr);
};
// Frontend global objects.
-var domAgent;
-var netAgent;
-var toolsAgent;
+var devtools.tools;
var context = {}; // Used by WebCore's inspector routines.
-// Overrides for existing WebInspector methods.
+///////////////////////////////////////////////////////////////////////////////
+// Here and below are overrides to existing WebInspector methods only.
// TODO(pfeldman): Patch WebCore and upstream changes.
var oldLoaded = WebInspector.loaded;
WebInspector.loaded = function() {
- domAgent = new devtools.DomAgent();
- netAgent = new devtools.NetAgent();
- toolsAgent = new devtools.ToolsAgent();
+ devtools.tools = new devtools.ToolsAgent();
Preferences.ignoreWhitespace = false;
- toolsAgent.setDomAgentEnabled(true);
- toolsAgent.setNetAgentEnabled(true);
oldLoaded.call(this);
- domAgent.getDocumentElementAsync();
+
+ DevToolsHost.loaded();
};
var webkitUpdateChildren =
WebInspector.ElementsTreeElement.prototype.updateChildren;
+
WebInspector.ElementsTreeElement.prototype.updateChildren = function() {
var self = this;
- domAgent.getChildNodesAsync(this.representedObject.id, function() {
- webkitUpdateChildren.call(self);
- });
+ devtools.tools.getDomAgent().getChildNodesAsync(this.representedObject.id,
+ function() {
+ webkitUpdateChildren.call(self);
+ });
};
+
WebInspector.ElementsPanel.prototype.performSearch = function(query) {
this.searchCanceled();
var self = this;
- domAgent.performSearch(query, function(node) {
+ devtools.tools.getDomAgent().performSearch(query, function(node) {
var treeElement = self.treeOutline.findTreeElement(node);
if (treeElement)
treeElement.highlighted = true;
@@ -81,7 +132,7 @@ WebInspector.ElementsPanel.prototype.performSearch = function(query) {
WebInspector.ElementsPanel.prototype.searchCanceled = function() {
var self = this;
- domAgent.searchCanceled(function(node) {
+ devtools.tools.getDomAgent().searchCanceled(function(node) {
var treeElement = self.treeOutline.findTreeElement(node);
if (treeElement)
treeElement.highlighted = false;
@@ -95,3 +146,8 @@ WebInspector.ElementsPanel.prototype.jumpToNextSearchResult = function() {
WebInspector.ElementsPanel.prototype.jumpToPreviousSearchResult = function() {
};
+
+
+WebInspector.Console.prototype._evalInInspectedWindow = function(expr) {
+ return devtools.tools.evaluate(expr);
+};
diff --git a/webkit/glue/devtools/js/devtools_host_stub.js b/webkit/glue/devtools/js/devtools_host_stub.js
index 8eebe54..a0a696b 100644
--- a/webkit/glue/devtools/js/devtools_host_stub.js
+++ b/webkit/glue/devtools/js/devtools_host_stub.js
@@ -95,6 +95,10 @@ RemoteDomAgentStub.prototype.PerformSearch = function(callId, query) {
};
+RemoteDomAgentStub.prototype.DiscardBindings = function() {
+};
+
+
/**
* @constructor
*/
@@ -110,11 +114,12 @@ RemoteToolsAgentStub.prototype.HighlightDOMNode = function() {
};
-RemoteToolsAgentStub.prototype.SetDomAgentEnabled = function() {
+RemoteToolsAgentStub.prototype.SetEnabled = function() {
};
-RemoteToolsAgentStub.prototype.SetNetAgentEnabled = function() {
+RemoteToolsAgentStub.prototype.evaluate = function(expr) {
+ window.eval(expr);
};
@@ -136,7 +141,7 @@ DevToolsHostStub.prototype.loaded = function() {
RemoteDomAgentStub.sendDocumentElement_();
RemoteDomAgentStub.sendChildNodes_(1);
RemoteDomAgentStub.sendChildNodes_(2);
- toolsAgent.updateFocusedNode(4);
+ devtools.tools.updateFocusedNode(4);
};
diff --git a/webkit/glue/devtools/js/dom_agent.js b/webkit/glue/devtools/js/dom_agent.js
index 0eb642a..0590e6b 100644
--- a/webkit/glue/devtools/js/dom_agent.js
+++ b/webkit/glue/devtools/js/dom_agent.js
@@ -252,8 +252,6 @@ devtools.DomDocument.prototype.fireDomEvent_ = function(name, event) {
* @constructor
*/
devtools.DomAgent = function() {
- this.document = new devtools.DomDocument();
- this.idToDomNode_ = { 0 : this.document };
RemoteDomAgent.DidGetChildNodes =
devtools.Callback.processCallback;
RemoteDomAgent.DidPerformSearch =
@@ -270,18 +268,55 @@ devtools.DomAgent = function() {
goog.bind(this.childNodeInserted, this);
RemoteDomAgent.ChildNodeRemoved =
goog.bind(this.childNodeRemoved, this);
+
+ /**
+ * Top-level (and the only) document.
+ * @type {devtools.DomDocument}
+ * @private
+ */
+ this.document_ = null;
+
+ /**
+ * Id to node mapping.
+ * @type {Object}
+ * @private
+ */
+ this.idToDomNode_ = null;
+
/**
* @type {Array.<number>} Node ids for search results.
+ * @private
*/
+ this.searchResults_ = null;
+
+ this.reset();
+};
+
+
+/**
+ * Rests dom agent to its initial state.
+ */
+devtools.DomAgent.prototype.reset = function() {
+ RemoteDomAgent.DiscardBindings();
+ this.document_ = new devtools.DomDocument();
+ this.idToDomNode_ = { 0 : this.document_ };
this.searchResults_ = [];
};
/**
+ * @return {devtools.DomDocument} Top level (and the only) document.
+ */
+devtools.DomAgent.prototype.getDocument = function() {
+ return this.document_;
+};
+
+
+/**
* Requests that the document element is sent from the agent.
*/
devtools.DomAgent.prototype.getDocumentElementAsync = function() {
- if (this.document.documentElement) {
+ if (this.document_.documentElement) {
return;
}
RemoteDomAgent.GetDocumentElement();
@@ -337,13 +372,13 @@ devtools.DomAgent.prototype.getNodeForId = function(nodeId) {
* {@inheritDoc}.
*/
devtools.DomAgent.prototype.setDocumentElement = function(payload) {
- if (this.document.documentElement) {
+ if (this.document_.documentElement) {
return;
}
this.setChildNodes(0, [payload]);
- this.document.documentElement = this.document.firstChild;
- this.document.documentElement.ownerDocument = this.document;
- this.document.fireDomEvent_("DOMContentLoaded");
+ this.document_.documentElement = this.document_.firstChild;
+ this.document_.documentElement.ownerDocument = this.document_;
+ this.document_.fireDomEvent_("DOMContentLoaded");
};
@@ -395,7 +430,7 @@ devtools.DomAgent.prototype.childNodeInserted = function(
var node = parent.insertChild_(prev, payload);
this.idToDomNode_[node.id] = node;
var event = { target : node, relatedNode : parent };
- this.document.fireDomEvent_("DOMNodeInserted", event);
+ this.document_.fireDomEvent_("DOMNodeInserted", event);
};
@@ -409,7 +444,7 @@ devtools.DomAgent.prototype.childNodeRemoved = function(
var node = this.idToDomNode_[nodeId];
parent.removeChild_(node);
var event = { target : node, relatedNode : parent };
- this.document.fireDomEvent_("DOMNodeRemoved", event);
+ this.document_.fireDomEvent_("DOMNodeRemoved", event);
delete this.idToDomNode_[nodeId];
};
diff --git a/webkit/glue/devtools/js/inspector_controller_impl.js b/webkit/glue/devtools/js/inspector_controller_impl.js
index 5045a7c..9c6028c 100644
--- a/webkit/glue/devtools/js/inspector_controller_impl.js
+++ b/webkit/glue/devtools/js/inspector_controller_impl.js
@@ -15,7 +15,7 @@ devtools.InspectorControllerImpl = function() {
this.window_ = {
get document() {
- return domAgent.document;
+ return devtools.tools.getDomAgent().getDocument();
},
get Node() {
return devtools.DomNode;
@@ -56,7 +56,7 @@ devtools.InspectorControllerImpl.prototype.addSourceToFrame =
devtools.InspectorController.prototype.addResourceSourceToFrame =
function(identifier, element) {
var self = this;
- netAgent.getResourceContentAsync(identifier, function(source) {
+ tools.getNetAgent().getResourceContentAsync(identifier, function(source) {
var resource = netAgent.getResource(identifier);
self.addSourceToFrame(resource.mimeType, source, element);
});
@@ -89,11 +89,4 @@ devtools.InspectorControllerImpl.prototype.inspectedWindow = function() {
};
-/**
- * {@inheritDoc}.
- */
-devtools.InspectorController.prototype.loaded = function() {
- DevToolsHost.loaded();
-};
-
var InspectorController = new devtools.InspectorControllerImpl();
diff --git a/webkit/glue/devtools/tools_agent.h b/webkit/glue/devtools/tools_agent.h
index 0d1bde9..cc905bc 100644
--- a/webkit/glue/devtools/tools_agent.h
+++ b/webkit/glue/devtools/tools_agent.h
@@ -10,11 +10,8 @@
// Tools agent provides API for enabling / disabling other agents as well as
// API for auxiliary UI functions such as dom elements highlighting.
#define TOOLS_AGENT_STRUCT(METHOD0, METHOD1, METHOD2, METHOD3) \
- /* Enables / disables Dom agent. */ \
- METHOD1(SetDomAgentEnabled, bool /* enabled */) \
- \
- /* Enables / disables Net agent */ \
- METHOD1(SetNetAgentEnabled, bool /* enabled */) \
+ /* Enables / disables the agent */ \
+ METHOD1(SetEnabled, bool /* enabled */) \
\
/* Highlights Dom node with given ID */ \
METHOD1(HighlightDOMNode, int /* node_id */) \
@@ -25,7 +22,11 @@
DEFINE_RPC_CLASS(ToolsAgent, TOOLS_AGENT_STRUCT)
#define TOOLS_AGENT_DELEGATE_STRUCT(METHOD0, METHOD1, METHOD2, METHOD3) \
+ /* Updates focused node on the client. */ \
METHOD1(UpdateFocusedNode, int /* node_id */) \
+ \
+ /* Updates focused node on the client. */ \
+ METHOD2(FrameNavigate, std::string /* url */, bool /* top_level */)
DEFINE_RPC_CLASS(ToolsAgentDelegate, TOOLS_AGENT_DELEGATE_STRUCT)