diff options
author | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-26 11:12:53 +0000 |
---|---|---|
committer | pfeldman@chromium.org <pfeldman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-26 11:12:53 +0000 |
commit | 63a5c2a2b231a3dca148360d3acf3b6903de0363 (patch) | |
tree | db4f8905b686de879f422c4c42704c5a4ee016b5 /webkit/glue/devtools | |
parent | 5fcb32a48c26bbced1dc5989a7196dab39b7d675 (diff) | |
download | chromium_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.js | 100 | ||||
-rw-r--r-- | webkit/glue/devtools/js/devtools_host_stub.js | 11 | ||||
-rw-r--r-- | webkit/glue/devtools/js/dom_agent.js | 53 | ||||
-rw-r--r-- | webkit/glue/devtools/js/inspector_controller_impl.js | 11 | ||||
-rw-r--r-- | webkit/glue/devtools/tools_agent.h | 11 |
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) |