- add sources.
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / webdriver / webdriver_tab_list_backend.py
1 # Copyright 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from telemetry.core.backends.webdriver import webdriver_tab_backend
6
7 class WebDriverTabListBackend(object):
8   def __init__(self, browser_backend):
9     self._browser_backend = browser_backend
10     # Stores the window handles.
11     self._tab_list = []
12
13   def Init(self):
14     self._UpdateTabList()
15
16   def New(self, timeout=None):
17     # Webdriver API doesn't support tab controlling.
18     raise NotImplementedError()
19
20   def __iter__(self):
21     self._UpdateTabList()
22     return self._tab_list.__iter__()
23
24   def __len__(self):
25     self._UpdateTabList()
26     return len(self._tab_list)
27
28   def __getitem__(self, index):
29     self._UpdateTabList()
30     if len(self._tab_list) <= index:
31       raise IndexError('list index out of range')
32     return self._tab_list[index]
33
34   def _UpdateTabList(self):
35     window_handles = self._browser_backend.driver.window_handles
36     old_tab_list = self._tab_list
37     self._tab_list = []
38     for window_handle in window_handles:
39       tab = None
40       for old_tab in old_tab_list:
41         if old_tab.window_handle == window_handle:
42           tab = old_tab
43           break
44       else:
45         tab = webdriver_tab_backend.WebDriverTabBackend(
46             self._browser_backend, window_handle)
47       self._tab_list.append(tab)