| 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"""
|
| +
|
| + 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
|
|
|