Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3020)

Unified Diff: chrome/test/functional/tracing/tab_tracker.py

Issue 10736055: Smoke test for tracing infrastructure in PyAuto (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove unused unittest import. Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/test/functional/tracing/tab_tracker.py
diff --git a/chrome/test/functional/tracing/tab_tracker.py b/chrome/test/functional/tracing/tab_tracker.py
new file mode 100644
index 0000000000000000000000000000000000000000..96f68cb8a2e83b327818dfa20a8c333d0be9034b
--- /dev/null
+++ b/chrome/test/functional/tracing/tab_tracker.py
@@ -0,0 +1,82 @@
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+import uuid
+
+
+class TabTracker:
+ """Uniquely track tabs within a window.
+
+ This allows the creation of tabs whose indices can be
+ determined even after lower indexed tabs have been closed, therefore changing
+ that tab's index.
+
+ This is accomplished via a containing window which is created and tracked via
+ the window's index. As a result of this, all calls to open and close tabs in
+ this TabTracker's window must go through the appropriate instance of the
+ TabTracker. Also note that if a lower indexed window is closed after this
+ TabTracker is instantiated, this TabTracker will lose track of its window"""
Nirnimesh 2012/07/31 23:39:10 Move """ to next line
+
+ def __init__(self, browser, visible=False):
+ """
+ Args:
+ browser: an instance of PyUITest
+ visible: whether or not this TabTracker's window will be visible
+ """
+ # A binary search tree would be faster, but this is easier to write.
+ # If this needs to become faster, understand that the important operations
+ # here are append, arbitrary deletion and searching.
+ self._uuids = [None]
+ self._window_idx = browser.GetBrowserWindowCount()
+ self._browser = browser
+ browser.OpenNewBrowserWindow(visible)
+ # We leave the 0'th tab empty to have something to close on __del__
+
+ def __del__(self):
+ self._browser.CloseBrowserWindow(self._window_idx)
+
+ def CreateTab(self, url='about:blank'):
+ """Create a tracked tab and return its uuid.
+
+ Args:
+ url: a URL to navigate to
+
+ Returns:
+ a uuid uniquely identifying that tab within this TabTracker
+ """
+ self._browser.AppendTab(url, self._window_idx)
+ # We use uuids here rather than a monotonic integer to prevent confusion
+ # with the tab index.
+ tab_uuid = uuid.uuid4()
+ self._uuids.append(tab_uuid)
+ return tab_uuid
+
+ def ReleaseTab(self, tab_uuid):
+ """Release and close a tab tracked by this TabTracker.
+
+ Args:
+ tab_uuid: the uuid of the tab to close
+ """
+ idx = self.GetTabIndex(tab_uuid)
+ self._browser.GetBrowserWindow(self._window_idx).GetTab(idx).Close()
+ del self._uuids[idx]
+
+ def GetTabIndex(self, tab_uuid):
+ """Get the index of a tracked tab within this TabTracker's window.
+
+ Args:
+ tab_uuid: the uuid of the tab to close
+
+ Returns:
+ the index of the tab within this TabTracker's window
+ """
+ return self._uuids.index(tab_uuid)
+
+ def GetWindowIndex(self):
+ """Get the index of this TabTracker's window.
+
+ Returns:
+ the index of this TabTracker's window
+ """
+ return self._window_idx

Powered by Google App Engine
This is Rietveld 408576698