diff options
author | yurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-31 08:42:21 +0000 |
---|---|---|
committer | yurys@google.com <yurys@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-10-31 08:42:21 +0000 |
commit | 13a6abf8b496b855d14b281cd2af1095b179be1c (patch) | |
tree | 9df30608a7b79bd7af5f81fc341150e17b63fd0c | |
parent | ef4d0aed4a2702fbd6478b9903f745cc555d930f (diff) | |
download | chromium_src-13a6abf8b496b855d14b281cd2af1095b179be1c.zip chromium_src-13a6abf8b496b855d14b281cd2af1095b179be1c.tar.gz chromium_src-13a6abf8b496b855d14b281cd2af1095b179be1c.tar.bz2 |
DevTools: add all scripts from afterCompile events when scripts panel is shown for the first timeBUG=26312
TEST=DevToolsSanityTest.TestScriptsTabIsPopulatedOnInspectedPageRefresh
Review URL: http://codereview.chromium.org/341057
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@30664 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/debugger/devtools_sanity_unittest.cc | 21 | ||||
-rw-r--r-- | webkit/glue/devtools/js/debugger_agent.js | 18 | ||||
-rw-r--r-- | webkit/glue/devtools/js/tests.js | 47 |
3 files changed, 79 insertions, 7 deletions
diff --git a/chrome/browser/debugger/devtools_sanity_unittest.cc b/chrome/browser/debugger/devtools_sanity_unittest.cc index a3fb609..8329273 100644 --- a/chrome/browser/debugger/devtools_sanity_unittest.cc +++ b/chrome/browser/debugger/devtools_sanity_unittest.cc @@ -108,8 +108,7 @@ class DevToolsSanityTest : public InProcessBrowserTest { GURL url = server->TestServerPageW(test_page); ui_test_utils::NavigateToURL(browser(), url); - TabContents* tab = browser()->GetTabContentsAt(0); - inspected_rvh_ = tab->render_view_host(); + inspected_rvh_ = GetInspectedTab()->render_view_host(); DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); devtools_manager->OpenDevToolsWindow(inspected_rvh_); @@ -121,6 +120,10 @@ class DevToolsSanityTest : public InProcessBrowserTest { ui_test_utils::WaitForNavigation(&client_contents_->controller()); } + TabContents* GetInspectedTab() { + return browser()->GetTabContentsAt(0); + } + void CloseDevToolsWindow() { DevToolsManager* devtools_manager = DevToolsManager::GetInstance(); // UnregisterDevToolsClientHostFor may destroy window_ so store the browser @@ -282,6 +285,20 @@ IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, TestShowScriptsTab) { RunTest("testShowScriptsTab", kDebuggerTestPage); } +// Tests that scripts tab is populated with inspected scripts even if it +// hadn't been shown by the moment inspected paged refreshed. +// @see http://crbug.com/26312 +IN_PROC_BROWSER_TEST_F(DevToolsSanityTest, + TestScriptsTabIsPopulatedOnInspectedPageRefresh) { + // Reset inspector settings to defaults to ensure that Elements will be + // current panel when DevTools window is open. + GetInspectedTab()->render_view_host()->delegate()->UpdateInspectorSettings( + WebPreferences().inspector_settings); + RunTest("testScriptsTabIsPopulatedOnInspectedPageRefresh", + kDebuggerTestPage); +} + + // Tests that a content script is in the scripts list. IN_PROC_BROWSER_TEST_F(DevToolsExtensionDebugTest, TestContentScriptIsPresent) { diff --git a/webkit/glue/devtools/js/debugger_agent.js b/webkit/glue/devtools/js/debugger_agent.js index 4d89176..41020d6 100644 --- a/webkit/glue/devtools/js/debugger_agent.js +++ b/webkit/glue/devtools/js/debugger_agent.js @@ -62,10 +62,10 @@ devtools.DebuggerAgent = function() { this.requestSeqToCallback_ = null; /** - * Whether the scripts list has been requested. + * Whether the scripts panel has been shown and initialilzed. * @type {boolean} */ - this.scriptsCacheInitialized_ = false; + this.scriptsPanelInitialized_ = false; /** * Whether the scripts list should be requested next time when context id is @@ -155,14 +155,22 @@ devtools.DebuggerAgent.prototype.reset = function() { */ devtools.DebuggerAgent.prototype.initUI = function() { // Initialize scripts cache when Scripts panel is shown first time. - if (this.scriptsCacheInitialized_) { + if (this.scriptsPanelInitialized_) { return; } - this.scriptsCacheInitialized_ = true; + this.scriptsPanelInitialized_ = true; if (this.contextId_) { // We already have context id. This means that we are here from the // very beginning of the page load cycle and hence will get all scripts // via after-compile events. No need to request scripts for this session. + // + // There can be a number of scripts from after-compile events that are + // pending addition into the UI. + for (var scriptId in this.parsedScripts_) { + var script = this.parsedScripts_[scriptId]; + WebInspector.parsedScriptSource(scriptId, script.getUrl(), + undefined /* script source */, script.getLineOffset()); + } return; } // Script list should be requested only when current context id is known. @@ -1033,7 +1041,7 @@ devtools.DebuggerAgent.prototype.addScriptInfo_ = function(script, msg) { var contextType = context.data.type; this.parsedScripts_[script.id] = new devtools.ScriptInfo( script.id, script.name, script.lineOffset, contextType); - if (WebInspector.panels.scripts.element.parentElement) { + if (this.scriptsPanelInitialized_) { // Only report script as parsed after scripts panel has been shown. WebInspector.parsedScriptSource( script.id, script.name, script.source, script.lineOffset); diff --git a/webkit/glue/devtools/js/tests.js b/webkit/glue/devtools/js/tests.js index 91d8b2f..4b42cc3 100644 --- a/webkit/glue/devtools/js/tests.js +++ b/webkit/glue/devtools/js/tests.js @@ -395,6 +395,53 @@ TestSuite.prototype.testShowScriptsTab = function() { /** + * Tests that scripts tab is populated with inspected scripts even if it + * hadn't been shown by the moment inspected paged refreshed. + * @see http://crbug.com/26312 + */ +TestSuite.prototype.testScriptsTabIsPopulatedOnInspectedPageRefresh = + function() { + var test = this; + this.assertEquals(WebInspector.panels.elements, + WebInspector.currentPanel, 'Elements panel should be current one.'); + + this.addSniffer(devtools.DebuggerAgent.prototype, 'reset', + waitUntilScriptIsParsed); + + // Reload inspected page. It will reset the debugger agent. + test.evaluateInConsole_( + 'window.location.reload(true);', + function(resultText) { + test.assertEquals('undefined', resultText, + 'Unexpected result of reload().'); + }); + + function waitUntilScriptIsParsed() { + var parsed = devtools.tools.getDebuggerAgent().parsedScripts_; + for (var id in parsed) { + var url = parsed[id].getUrl(); + if (url && url.search('debugger_test_page.html$') != -1) { + checkScriptsPanel(); + return; + } + } + test.addSniffer(devtools.DebuggerAgent.prototype, 'addScriptInfo_', + waitUntilScriptIsParsed); + } + + function checkScriptsPanel() { + test.showPanel('scripts'); + test.assertTrue(test._scriptsAreParsed(['debugger_test_page.html$']), + 'Inspected script not found in the scripts list'); + test.releaseControl(); + } + + // Wait until all scripts are added to the debugger. + this.takeControl(); +}; + + +/** * Tests that scripts list contains content scripts. */ TestSuite.prototype.testContentScriptIsPresent = function() { |