summaryrefslogtreecommitdiffstats
path: root/tools/telemetry
diff options
context:
space:
mode:
authordtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-13 23:55:30 +0000
committerdtu@chromium.org <dtu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-13 23:55:30 +0000
commit394ac55d6c4ca398e3958d664614f4e97dcb163a (patch)
tree464dc6b44043d6ad8f8e4c017a6aecb0bac1e93f /tools/telemetry
parent16f55a204244e5125cd53a34531caee8a499f78e (diff)
downloadchromium_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.py18
-rw-r--r--tools/telemetry/telemetry/tab_list_backend.py11
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():