13551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Copyright 2013 The Chromium Authors. All rights reserved. 23551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 33551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)# found in the LICENSE file. 43551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 53551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)from telemetry.core.backends.webdriver import webdriver_tab_backend 63551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 76e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class WebDriverTabListBackend(object): 93551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def __init__(self, browser_backend): 103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._browser_backend = browser_backend 113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) # Stores the window handles. 123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._tab_list = [] 133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._UpdateTabList() 143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def New(self, timeout=None): 163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) # Webdriver API doesn't support tab controlling. 173551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) raise NotImplementedError() 183551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def __iter__(self): 203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._UpdateTabList() 213551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return self._tab_list.__iter__() 223551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 233551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def __len__(self): 243551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._UpdateTabList() 253551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return len(self._tab_list) 263551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 273551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def __getitem__(self, index): 283551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._UpdateTabList() 293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if len(self._tab_list) <= index: 303551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) raise IndexError('list index out of range') 313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return self._tab_list[index] 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 333551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) def _UpdateTabList(self): 343551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) window_handles = self._browser_backend.driver.window_handles 353551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) old_tab_list = self._tab_list 363551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._tab_list = [] 373551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for window_handle in window_handles: 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) tab = None 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) for old_tab in old_tab_list: 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) if old_tab.window_handle == window_handle: 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) tab = old_tab 423551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) break 433551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) else: 443551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) tab = webdriver_tab_backend.WebDriverTabBackend( 453551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._browser_backend, window_handle) 463551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) self._tab_list.append(tab) 47