Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / tools / telemetry / telemetry / core / backends / chrome / cros_browser_backend.py
index 5cf8abe..5bd8f8a 100644 (file)
@@ -6,7 +6,6 @@ import logging
 import os
 
 from telemetry import decorators
-
 from telemetry.core import exceptions
 from telemetry.core import forwarders
 from telemetry.core import util
@@ -16,15 +15,15 @@ from telemetry.core.forwarders import cros_forwarder
 
 
 class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
-  def __init__(self, browser_type, browser_options, cri, is_guest,
+  def __init__(self, cros_platform_backend, browser_options, cri, is_guest,
                extensions_to_load):
     super(CrOSBrowserBackend, self).__init__(
-        is_content_shell=False, supports_extensions=not is_guest,
+        cros_platform_backend, supports_tab_control=True,
+        supports_extensions=not is_guest,
         browser_options=browser_options,
         output_profile_path=None, extensions_to_load=extensions_to_load)
 
     # Initialize fields so that an explosion during init doesn't break in Close.
-    self._browser_type = browser_type
     self._cri = cri
     self._is_guest = is_guest
     self._forwarder = None
@@ -35,9 +34,11 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
 
     self.wpr_port_pairs = forwarders.PortPairs(
         http=forwarders.PortPair(self.wpr_port_pairs.http.local_port,
-                                 self._cri.GetRemotePort()),
+                                 self.GetRemotePort(
+                                     self.wpr_port_pairs.http.local_port)),
         https=forwarders.PortPair(self.wpr_port_pairs.https.local_port,
-                                  self._cri.GetRemotePort()),
+                                  self.GetRemotePort(
+                                      self.wpr_port_pairs.http.local_port)),
         dns=None)
     self._remote_debugging_port = self._cri.GetRemotePort()
     self._port = self._remote_debugging_port
@@ -46,8 +47,8 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
     # Note that we also perform this copy locally to ensure that
     # the owner of the extensions is set to chronos.
     for e in extensions_to_load:
-      output = cri.RunCmdOnDevice(['mktemp', '-d', '/tmp/extension_XXXXX'])
-      extension_dir = output[0].rstrip()
+      extension_dir = cri.RunCmdOnDevice(
+          ['mktemp', '-d', '/tmp/extension_XXXXX'])[0].rstrip()
       cri.PushFile(e.path, extension_dir)
       cri.Chown(extension_dir)
       e.local_path = os.path.join(extension_dir, os.path.basename(e.path))
@@ -65,35 +66,38 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
                    self.profile_directory)
       cri.Chown(self.profile_directory)
 
-    self._SetBranchNumber(self._GetChromeVersion())
-
   def GetBrowserStartupArgs(self):
     args = super(CrOSBrowserBackend, self).GetBrowserStartupArgs()
     args.extend([
             '--enable-smooth-scrolling',
             '--enable-threaded-compositing',
             '--enable-per-tile-painting',
-            '--force-compositing-mode',
-            # Disables the start page, as well as other external apps that can
-            # steal focus or make measurements inconsistent.
-            '--disable-default-apps',
-            # Skip user image selection screen, and post login screens.
-            '--oobe-skip-postlogin',
             # Allow devtools to connect to chrome.
             '--remote-debugging-port=%i' % self._remote_debugging_port,
             # Open a maximized window.
             '--start-maximized',
+            # Skip user image selection screen, and post login screens.
+            '--oobe-skip-postlogin',
             # Debug logging.
             '--vmodule=*/chromeos/net/*=2,*/chromeos/login/*=2'])
 
+    # Disables the start page, as well as other external apps that can
+    # steal focus or make measurements inconsistent.
+    if self.browser_options.disable_default_apps:
+      args.append('--disable-default-apps')
+
+    # Disable GAIA services unless we're using GAIA login, or if there's an
+    # explicit request for it.
+    if (self.browser_options.disable_gaia_services and
+        not self.browser_options.gaia_login):
+      args.append('--disable-gaia-services')
+
     return args
 
-  def _GetChromeVersion(self):
-    result = util.WaitFor(self._cri.GetChromeProcess, timeout=30)
-    assert result and result['path']
-    (version, _) = self._cri.RunCmdOnDevice([result['path'], '--version'])
-    assert version
-    return version
+  @property
+  def _use_host_resolver_rules(self):
+    """Always use the --host-resolver-rules Chrome flag; even for netsim."""
+    return True
 
   @property
   def pid(self):
@@ -141,33 +145,26 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
               https=None,
               dns=None), forwarding_flag='L')
 
-    try:
-      self._WaitForBrowserToComeUp(wait_for_extensions=False)
-      self._PostBrowserStartupInitialization()
-    except:
-      import traceback
-      traceback.print_exc()
-      self.Close()
-      raise
-
+    # Wait for oobe.
+    self._WaitForBrowserToComeUp(wait_for_extensions=False)
     util.WaitFor(lambda: self.oobe_exists, 10)
 
     if self.browser_options.auto_login:
-      if self._is_guest:
-        pid = self.pid
-        self.oobe.NavigateGuestLogin()
-        # Guest browsing shuts down the current browser and launches an
-        # incognito browser in a separate process, which we need to wait for.
-        util.WaitFor(lambda: pid != self.pid, 10)
-      elif self.browser_options.gaia_login:
-        try:
+      try:
+        if self._is_guest:
+          pid = self.pid
+          self.oobe.NavigateGuestLogin()
+          # Guest browsing shuts down the current browser and launches an
+          # incognito browser in a separate process, which we need to wait for.
+          util.WaitFor(lambda: pid != self.pid, 10)
+        elif self.browser_options.gaia_login:
           self.oobe.NavigateGaiaLogin(self._username, self._password)
-        except util.TimeoutException:
-          self._cri.TakeScreenShot('gaia-login')
-          raise
-      else:
-        self.oobe.NavigateFakeLogin(self._username, self._password)
-      self._WaitForLogin()
+        else:
+          self.oobe.NavigateFakeLogin(self._username, self._password)
+        self._WaitForLogin()
+      except util.TimeoutException:
+        self._cri.TakeScreenShot('login-screen')
+        raise exceptions.LoginException('Timed out going through login screen')
 
     logging.info('Browser is up!')
 
@@ -176,6 +173,7 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
 
     if self._cri:
       self._cri.RestartUI(False) # Logs out.
+      self._cri.CloseConnection()
 
     util.WaitFor(lambda: not self._IsCryptohomeMounted(), 30)
 
@@ -237,38 +235,8 @@ class CrOSBrowserBackend(chrome_browser_backend.ChromeBrowserBackend):
             not self.oobe_exists)
 
   def _WaitForLogin(self):
-    if self._is_guest:
-      self._WaitForBrowserToComeUp()
-      util.WaitFor(self._IsCryptohomeMounted, 30)
-      return
-
-    try:
-      util.WaitFor(self._IsLoggedIn, 60)
-    except util.TimeoutException:
-      self._cri.TakeScreenShot('login-screen')
-      raise exceptions.LoginException('Timed out going through login screen')
+    # Wait for cryptohome to mount.
+    util.WaitFor(self._IsLoggedIn, 60)
 
     # Wait for extensions to load.
-    try:
-      self._WaitForBrowserToComeUp()
-    except util.TimeoutException:
-      logging.error('Chrome args: %s' % self._cri.GetChromeProcess()['args'])
-      self._cri.TakeScreenShot('extension-timeout')
-      raise
-
-    # Workaround for crbug.com/329271, crbug.com/334726.
-    retries = 3
-    while True:
-      try:
-        # Open a new window/tab.
-        tab = self.tab_list_backend.New(timeout=30)
-        tab.Navigate('about:blank', timeout=10)
-        break
-      except (exceptions.TabCrashException, util.TimeoutException,
-              IndexError):
-        retries -= 1
-        logging.warn('TabCrashException/TimeoutException in '
-                     'new tab creation/navigation, '
-                     'remaining retries %d' % retries)
-        if not retries:
-          raise
+    self._WaitForBrowserToComeUp()