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. 4import re 5import urllib2 6 7from telemetry.core.backends.webdriver import webdriver_browser_backend 8 9 10class WebDriverIEBackend(webdriver_browser_backend.WebDriverBrowserBackend): 11 # For unsupported functions. pylint: disable=W0223 12 13 def __init__(self, platform_backend, driver_creator, browser_options): 14 super(WebDriverIEBackend, self).__init__( 15 driver_creator=driver_creator, 16 supports_extensions=False, 17 browser_options=browser_options) 18 self._platform_backend = platform_backend 19 20 def GetProcessName(self, cmd_line): 21 if re.search('SCODEF:\d+ CREDAT:\d+', cmd_line, re.IGNORECASE): 22 return 'Content' 23 else: 24 return 'Manager' 25 26 @property 27 def pid(self): 28 for pi in self._platform_backend.GetSystemProcessInfo(): 29 if (pi['ParentProcessId'] == self.driver.iedriver.process.pid and 30 pi['Name'].lower() == 'iexplore.exe'): 31 return pi['ProcessId'] 32 return None 33 34 def Close(self): 35 try: 36 super(WebDriverIEBackend, self).Close() 37 except urllib2.URLError: 38 # CTRL + C makes IEDriverServer exits while leaving IE still running. 39 for pi in self._platform_backend.GetSystemProcessInfo(): 40 if (pi['ParentProcessId'] == self.driver.iedriver.process.pid): 41 self._platform_backend.KillProcess(pi['ProcessId'], True) 42 43 def IsBrowserRunning(self): 44 return self.pid is not None 45