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