Index: chrome/test/pyautolib/chromoting.py |
=================================================================== |
--- chrome/test/pyautolib/chromoting.py (revision 150103) |
+++ chrome/test/pyautolib/chromoting.py (working copy) |
@@ -1,187 +0,0 @@ |
-# Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-import os |
- |
- |
-class ChromotingMixIn(object): |
- """MixIn for PyUITest that adds Chromoting-specific methods. |
- |
- Prepend it as a base class of a test to enable Chromoting functionality. |
- This is a separate class from PyUITest to avoid namespace collisions. |
- |
- Example usage: |
- class ChromotingExample(chromoting.ChromotingMixIn, pyauto.PyUITest): |
- def testShare(self): |
- app = self.InstallApp(self.GetWebappPath()) |
- self.LaunchApp(app) |
- self.Authenticate() |
- self.assertTrue(self.Share()) |
- """ |
- |
- def _ExecuteJavascript(self, command, tab_index, windex): |
- """Helper that returns immediately after running a Javascript command.""" |
- return self.ExecuteJavascript( |
- '%s; window.domAutomationController.send("done");' % command, |
- tab_index, windex) |
- |
- def _WaitForJavascriptCondition(self, condition, tab_index, windex): |
- """Waits until the Javascript condition is true. |
- |
- This is different from a naive self.WaitUntil(lambda: self.GetDOMValue()) |
- because it uses Javascript to check the condition instead of Python. |
- """ |
- return self.WaitUntil(lambda: self.GetDOMValue( |
- '(%s) ? "1" : ""' % condition, tab_index, windex)) |
- |
- def _ExecuteAndWaitForMode(self, command, mode, tab_index, windex): |
- self.assertTrue(self._ExecuteJavascript(command, tab_index, windex), |
- 'Javascript command did not return anything.') |
- return self._WaitForJavascriptCondition( |
- 'remoting.currentMode == remoting.AppMode.%s' % mode, |
- tab_index, windex) |
- |
- def _ExecuteAndWaitForMajorMode(self, command, mode, tab_index, windex): |
- self.assertTrue(self._ExecuteJavascript(command, tab_index, windex), |
- 'Javascript command did not return anything.') |
- return self._WaitForJavascriptCondition( |
- 'remoting.getMajorMode() == remoting.AppMode.%s' % mode, |
- tab_index, windex) |
- |
- def GetWebappPath(self): |
- """Returns the path to the webapp. |
- |
- Expects the webapp to be in the same place as the pyautolib binaries. |
- """ |
- return os.path.join(self.BrowserPath(), 'remoting', 'remoting.webapp') |
- |
- def Authenticate(self, email=None, password=None, otp=None, |
- tab_index=1, windex=0): |
- """Logs a user in for Chromoting and accepts permissions for the app. |
- |
- PyAuto tests start with a clean profile, so Chromoting tests should call |
- this for every run after launching the app. If email or password is omitted, |
- the user can type it into the browser window manually. |
- |
- Raises: |
- AssertionError if the authentication flow changes or |
- the credentials are incorrect. |
- """ |
- self.assertTrue( |
- self._WaitForJavascriptCondition('window.remoting && remoting.oauth2', |
- tab_index, windex), |
- msg='Timed out while waiting for remoting app to finish loading.') |
- self._ExecuteJavascript('remoting.oauth2.doAuthRedirect();', |
- tab_index, windex) |
- self.assertTrue( |
- self._WaitForJavascriptCondition('document.getElementById("signIn")', |
- tab_index, windex), |
- msg='Unable to redirect for authentication.') |
- |
- if email: |
- self._ExecuteJavascript('document.getElementById("Email").value = "%s";' |
- 'document.getElementById("Passwd").focus();' |
- % email, tab_index, windex) |
- |
- if password: |
- self._ExecuteJavascript('document.getElementById("Passwd").value = "%s";' |
- 'document.getElementById("signIn").click();' |
- % password, tab_index, windex) |
- |
- if otp: |
- self.assertTrue( |
- self._WaitForJavascriptCondition( |
- 'document.getElementById("smsVerifyPin")', |
- tab_index, windex), |
- msg='Invalid username or password.') |
- self._ExecuteJavascript('document.getElementById("smsUserPin").value = ' |
- '"%s";' |
- 'document.getElementById("smsVerifyPin").click();' |
- % otp, tab_index, windex) |
- |
- # If the account adder screen appears, then skip it. |
- self.assertTrue( |
- self._WaitForJavascriptCondition( |
- 'document.getElementById("skip") || ' |
- 'document.getElementById("submit_approve_access")', |
- tab_index, windex), |
- msg='No "skip adding account" or "approve access" link.') |
- self._ExecuteJavascript( |
- 'if (document.getElementById("skip")) ' |
- '{ document.getElementById("skip").click(); }', |
- tab_index, windex) |
- |
- # Approve access. |
- self.assertTrue( |
- self._WaitForJavascriptCondition( |
- 'document.getElementById("submit_approve_access")', |
- tab_index, windex), |
- msg='Authentication failed. The username, password, or otp is invalid.') |
- self._ExecuteJavascript( |
- 'document.getElementById("submit_approve_access").click();', |
- tab_index, windex) |
- |
- # Wait for some things to be ready. |
- self.assertTrue( |
- self._WaitForJavascriptCondition( |
- 'window.remoting && remoting.oauth2 && ' |
- 'remoting.oauth2.isAuthenticated()', |
- tab_index, windex), |
- msg='OAuth2 authentication failed.') |
- self.assertTrue( |
- self._WaitForJavascriptCondition( |
- 'window.localStorage.getItem("remoting-email")', |
- tab_index, windex), |
- msg='Chromoting app did not reload after authentication.') |
- |
- def Share(self, tab_index=1, windex=0): |
- """Generates an access code and waits for incoming connections. |
- |
- Returns: |
- The access code on success; None otherwise. |
- """ |
- self._ExecuteAndWaitForMode( |
- 'remoting.tryShare();', |
- 'HOST_WAITING_FOR_CONNECTION', tab_index, windex) |
- return self.GetDOMValue( |
- 'document.getElementById("access-code-display").innerText', |
- tab_index, windex) |
- |
- def Connect(self, access_code, wait_for_frame, tab_index=1, windex=0): |
- """Connects to a Chromoting host and starts the session. |
- |
- Returns: |
- True on success; False otherwise. |
- """ |
- if not self._ExecuteAndWaitForMode( |
- 'document.getElementById("access-code-entry").value = "%s";' |
- 'remoting.connectIt2Me();' % access_code, |
- 'IN_SESSION', tab_index, windex): |
- return False |
- |
- if wait_for_frame and not self._WaitForJavascriptCondition( |
- 'remoting.clientSession && remoting.clientSession.hasReceivedFrame()', |
- tab_index, windex): |
- return False |
- return True |
- |
- def CancelShare(self, tab_index=1, windex=0): |
- """Stops sharing the desktop on the host side. |
- |
- Returns: |
- True on success; False otherwise. |
- """ |
- return self._ExecuteAndWaitForMode( |
- 'remoting.cancelShare();', |
- 'HOST_SHARE_FINISHED', tab_index, windex) |
- |
- def Disconnect(self, tab_index=1, windex=0): |
- """Disconnects from the Chromoting session on the client side. |
- |
- Returns: |
- True on success; False otherwise. |
- """ |
- return self._ExecuteAndWaitForMode( |
- 'remoting.disconnect();', |
- 'CLIENT_SESSION_FINISHED_IT2ME', tab_index, windex) |