diff options
author | dtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-13 23:55:30 +0000 |
---|---|---|
committer | dtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-02-13 23:55:30 +0000 |
commit | 394ac55d6c4ca398e3958d664614f4e97dcb163a (patch) | |
tree | 464dc6b44043d6ad8f8e4c017a6aecb0bac1e93f /tools/telemetry | |
parent | 16f55a204244e5125cd53a34531caee8a499f78e (diff) | |
download | chromium_src-394ac55d6c4ca398e3958d664614f4e97dcb163a.zip chromium_src-394ac55d6c4ca398e3958d664614f4e97dcb163a.tar.gz chromium_src-394ac55d6c4ca398e3958d664614f4e97dcb163a.tar.bz2 |
[Telemetry] Fix tab list updating with connected tabs.
When you connect to a tab's websocket, Chrome no longer reports a websocketDebuggerUrl. TabListBackend wasn't treating this case correctly, causing its tab list to have "None" tabs, which led to all sorts of fun corruption.
BUG=166243,174922
TEST=Unit test included. ./run_tests testMultipleTabs
Review URL: https://codereview.chromium.org/12260020
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@182341 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'tools/telemetry')
-rw-r--r-- | tools/telemetry/telemetry/browser_unittest.py | 18 | ||||
-rw-r--r-- | tools/telemetry/telemetry/tab_list_backend.py | 11 |
2 files changed, 26 insertions, 3 deletions
diff --git a/tools/telemetry/telemetry/browser_unittest.py b/tools/telemetry/telemetry/browser_unittest.py index ca28dd5..f26d280 100644 --- a/tools/telemetry/telemetry/browser_unittest.py +++ b/tools/telemetry/telemetry/browser_unittest.py @@ -67,3 +67,21 @@ class BrowserTest(unittest.TestCase): with browser_to_create.Create() as b: b.tabs[0].Navigate('http://www.google.com/') b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter() + + def testTabCallByReference(self): + options = options_for_unittests.GetCopy() + browser_to_create = browser_finder.FindBrowser(options) + with browser_to_create.Create() as b: + tab = b.tabs[0] + tab.Navigate('http://www.google.com/') + b.tabs[0].WaitForDocumentReadyStateToBeInteractiveOrBetter() + + def testCloseReferencedTab(self): + options = options_for_unittests.GetCopy() + browser_to_create = browser_finder.FindBrowser(options) + with browser_to_create.Create() as b: + b.tabs.New() + tab = b.tabs[0] + tab.Navigate('http://www.google.com/') + tab.Close() + self.assertEquals(1, len(b.tabs)) diff --git a/tools/telemetry/telemetry/tab_list_backend.py b/tools/telemetry/telemetry/tab_list_backend.py index a6ed8f8..ef2f13a 100644 --- a/tools/telemetry/telemetry/tab_list_backend.py +++ b/tools/telemetry/telemetry/tab_list_backend.py @@ -61,6 +61,9 @@ class TabListBackend(object): assert response == 'Target is closing' util.WaitFor(lambda: not self._FindTabInfo(debugger_url), timeout=5) + + if debugger_url in self._tab_dict: + del self._tab_dict[debugger_url] self._UpdateTabList() def ActivateTab(self, debugger_url, timeout=None): @@ -133,9 +136,11 @@ class TabListBackend(object): if 'webSocketDebuggerUrl' not in tab_info: return None return tab_info['webSocketDebuggerUrl'] - newtab_list = map(GetDebuggerUrl, self._ListTabs()) - self._tab_list = [t for t in self._tab_list if t in newtab_list] - self._tab_list += [t for t in newtab_list if t not in self._tab_list] + new_tab_list = map(GetDebuggerUrl, self._ListTabs()) + self._tab_list = [t for t in self._tab_list + if t in self._tab_dict or t in new_tab_list] + self._tab_list += [t for t in new_tab_list + if t is not None and t not in self._tab_list] def _FindTabInfo(self, debugger_url): for tab_info in self._ListTabs(): |