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 5from telemetry.core.backends.webdriver import webdriver_tab_backend 6 7 8class WebDriverTabListBackend(object): 9 def __init__(self, browser_backend): 10 self._browser_backend = browser_backend 11 # Stores the window handles. 12 self._tab_list = [] 13 self._UpdateTabList() 14 15 def New(self, timeout=None): 16 # Webdriver API doesn't support tab controlling. 17 raise NotImplementedError() 18 19 def __iter__(self): 20 self._UpdateTabList() 21 return self._tab_list.__iter__() 22 23 def __len__(self): 24 self._UpdateTabList() 25 return len(self._tab_list) 26 27 def __getitem__(self, index): 28 self._UpdateTabList() 29 if len(self._tab_list) <= index: 30 raise IndexError('list index out of range') 31 return self._tab_list[index] 32 33 def _UpdateTabList(self): 34 window_handles = self._browser_backend.driver.window_handles 35 old_tab_list = self._tab_list 36 self._tab_list = [] 37 for window_handle in window_handles: 38 tab = None 39 for old_tab in old_tab_list: 40 if old_tab.window_handle == window_handle: 41 tab = old_tab 42 break 43 else: 44 tab = webdriver_tab_backend.WebDriverTabBackend( 45 self._browser_backend, window_handle) 46 self._tab_list.append(tab) 47