Home | History | Annotate | Download | only in multimedia
      1 # Copyright 2016 The Chromium OS 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.
      4 
      5 """Facade to access the CFM functionality."""
      6 
      7 import time
      8 
      9 from autotest_lib.client.common_lib import error
     10 from autotest_lib.client.common_lib.cros import enrollment, cfm_util
     11 
     12 
     13 class TimeoutException(Exception):
     14     """Timeout Exception class."""
     15     pass
     16 
     17 
     18 class CFMFacadeNative(object):
     19     """Facade to access the CFM functionality.
     20 
     21     The methods inside this class only accept Python native types.
     22     """
     23     _USER_ID = 'cfmtest (at] croste.tv'
     24     _PWD = 'test0000'
     25     _EXT_ID = 'ikfcpmgefdpheiiomgmhlmmkihchmdlj'
     26     _ENROLLMENT_DELAY = 15
     27 
     28 
     29     def __init__(self, resource):
     30         """Initializes a CFMFacadeNative.
     31 
     32         @param resource: A FacadeResource object.
     33         """
     34         self._resource = resource
     35 
     36 
     37     def enroll_device(self):
     38         """Enroll device into CFM."""
     39         self._resource.start_custom_chrome({"auto_login": False,
     40                                             "disable_gaia_services": False})
     41         enrollment.RemoraEnrollment(self._resource._browser, self._USER_ID,
     42                 self._PWD)
     43         # Timeout to allow for the device to stablize and go back to the
     44         # login screen before proceeding.
     45         time.sleep(self._ENROLLMENT_DELAY)
     46         self.restart_chrome_for_cfm()
     47         self.check_hangout_extension_context()
     48 
     49 
     50     def restart_chrome_for_cfm(self):
     51         """Restart chrome with custom values for CFM."""
     52         custom_chrome_setup = {"clear_enterprise_policy": False,
     53                                "dont_override_profile": True,
     54                                "disable_gaia_services": False,
     55                                "disable_default_apps": False,
     56                                "auto_login": False}
     57         self._resource.start_custom_chrome(custom_chrome_setup)
     58 
     59 
     60     def check_hangout_extension_context(self):
     61         """Check to make sure hangout app launched.
     62 
     63         @raises error.TestFail if the URL checks fails.
     64         """
     65         ext_contexts = cfm_util.wait_for_kiosk_ext(
     66                 self._resource._browser, self._EXT_ID)
     67         ext_urls = set([context.EvaluateJavaScript('location.href;')
     68                         for context in ext_contexts])
     69         expected_urls = set(
     70                 ['chrome-extension://' + self._EXT_ID + '/' + path
     71                  for path in ['hangoutswindow.html?windowid=0',
     72                               '_generated_background_page.html']])
     73         if expected_urls != ext_urls:
     74             raise error.TestFail(
     75                     'Unexpected extension context urls, expected %s, got %s'
     76                     % (expected_urls, ext_urls))
     77 
     78     @property
     79     def _webview_context(self):
     80         """Get webview context object."""
     81         return cfm_util.get_cfm_webview_context(self._resource._browser,
     82                 self._EXT_ID)
     83 
     84 
     85     def wait_for_telemetry_commands(self):
     86         """Wait for telemetry commands."""
     87         cfm_util.wait_for_telemetry_commands(self._webview_context)
     88 
     89 
     90     # UI commands/functions
     91     def wait_for_oobe_start_page(self):
     92         """Wait for oobe start screen to launch."""
     93         cfm_util.wait_for_oobe_start_page(self._webview_context)
     94 
     95 
     96     def skip_oobe_screen(self):
     97         """Skip Chromebox for Meetings oobe screen."""
     98         cfm_util.skip_oobe_screen(self._webview_context)
     99 
    100 
    101     def is_oobe_start_page(self):
    102         """Check if device is on CFM oobe start screen.
    103 
    104         @return a boolean, based on oobe start page status.
    105         """
    106         return cfm_util.is_oobe_start_page(self._webview_context)
    107 
    108 
    109     # Hangouts commands/functions
    110     def start_new_hangout_session(self, session_name):
    111         """Start a new hangout session.
    112 
    113         @param session_name: Name of the hangout session.
    114         """
    115         cfm_util.start_new_hangout_session(self._webview_context, session_name)
    116 
    117 
    118     def end_hangout_session(self):
    119         """End current hangout session."""
    120         cfm_util.end_hangout_session(self._webview_context)
    121 
    122 
    123     def is_in_hangout_session(self):
    124         """Check if device is in hangout session.
    125 
    126         @return a boolean, for hangout session state.
    127         """
    128         return cfm_util.is_in_hangout_session(self._webview_context)
    129 
    130 
    131     def is_ready_to_start_hangout_session(self):
    132         """Check if device is ready to start a new hangout session.
    133 
    134         @return a boolean for hangout session ready state.
    135         """
    136         return cfm_util.is_ready_to_start_hangout_session(
    137                 self._webview_context)
    138 
    139 
    140     # Diagnostics commands/functions
    141     def is_diagnostic_run_in_progress(self):
    142         """Check if hotrod diagnostics is running.
    143 
    144         @return a boolean for diagnostic run state.
    145         """
    146         return cfm_util.is_diagnostic_run_in_progress(self._webview_context)
    147 
    148 
    149     def wait_for_diagnostic_run_to_complete(self):
    150         """Wait for hotrod diagnostics to complete."""
    151         cfm_util.wait_for_diagnostic_run_to_complete(self._webview_context)
    152 
    153 
    154     def run_diagnostics(self):
    155         """Run hotrod diagnostics."""
    156         cfm_util.run_diagnostics(self._webview_context)
    157 
    158 
    159     def get_last_diagnostics_results(self):
    160         """Get latest hotrod diagnostics results.
    161 
    162         @return a dict with diagnostic test results.
    163         """
    164         return cfm_util.get_last_diagnostics_results(self._webview_context)
    165 
    166 
    167     # Mic audio commands/functions
    168     def is_mic_muted(self):
    169         """Check if mic is muted.
    170 
    171         @return a boolean for mic mute state.
    172         """
    173         return cfm_util.is_mic_muted(self._webview_context)
    174 
    175 
    176     def mute_mic(self):
    177         """Local mic mute from toolbar."""
    178         cfm_util.mute_mic(self._webview_context)
    179 
    180 
    181     def unmute_mic(self):
    182         """Local mic unmute from toolbar."""
    183         cfm_util.unmute_mic(self._webview_context)
    184 
    185 
    186     def remote_mute_mic(self):
    187         """Remote mic mute request from cPanel."""
    188         cfm_util.remote_mute_mic(self._webview_context)
    189 
    190 
    191     def remote_unmute_mic(self):
    192         """Remote mic unmute request from cPanel."""
    193         cfm_util.remote_unmute_mic(self._webview_context)
    194 
    195 
    196     def get_mic_devices(self):
    197         """Get all mic devices detected by hotrod.
    198 
    199         @return a list of mic devices.
    200         """
    201         return cfm_util.get_mic_devices(self._webview_context)
    202 
    203 
    204     def get_preferred_mic(self):
    205         """Get mic preferred for hotrod.
    206 
    207         @return a str with preferred mic name.
    208         """
    209         return cfm_util.get_preferred_mic(self._webview_context)
    210 
    211 
    212     def set_preferred_mic(self, mic):
    213         """Set preferred mic for hotrod.
    214 
    215         @param mic: String with mic name.
    216         """
    217         cfm_util.set_preferred_mic(self._webview_context, mic)
    218 
    219 
    220     # Speaker commands/functions
    221     def get_speaker_devices(self):
    222         """Get all speaker devices detected by hotrod.
    223 
    224         @return a list of speaker devices.
    225         """
    226         return cfm_util.get_speaker_devices(self._webview_context)
    227 
    228 
    229     def get_preferred_speaker(self):
    230         """Get speaker preferred for hotrod.
    231 
    232         @return a str with preferred speaker name.
    233         """
    234         return cfm_util.get_preferred_speaker(self._webview_context)
    235 
    236 
    237     def set_preferred_speaker(self, speaker):
    238         """Set preferred speaker for hotrod.
    239 
    240         @param speaker: String with speaker name.
    241         """
    242         cfm_util.set_preferred_speaker(self._webview_context, speaker)
    243 
    244 
    245     def set_speaker_volume(self, volume_level):
    246         """Set speaker volume.
    247 
    248         @param volume_level: String value ranging from 0-100 to set volume to.
    249         """
    250         cfm_util.set_speaker_volume(self._webview_context, volume_level)
    251 
    252 
    253     def get_speaker_volume(self):
    254         """Get current speaker volume.
    255 
    256         @return a str value with speaker volume level 0-100.
    257         """
    258         return cfm_util.get_speaker_volume(self._webview_context)
    259 
    260 
    261     def play_test_sound(self):
    262         """Play test sound."""
    263         cfm_util.play_test_sound(self._webview_context)
    264 
    265 
    266     # Camera commands/functions
    267     def get_camera_devices(self):
    268         """Get all camera devices detected by hotrod.
    269 
    270         @return a list of camera devices.
    271         """
    272         return cfm_util.get_camera_devices(self._webview_context)
    273 
    274 
    275     def get_preferred_camera(self):
    276         """Get camera preferred for hotrod.
    277 
    278         @return a str with preferred camera name.
    279         """
    280         return cfm_util.get_preferred_camera(self._webview_context)
    281 
    282 
    283     def set_preferred_camera(self, camera):
    284         """Set preferred camera for hotrod.
    285 
    286         @param camera: String with camera name.
    287         """
    288         cfm_util.set_preferred_camera(self._webview_context, camera)
    289 
    290 
    291     def is_camera_muted(self):
    292         """Check if camera is muted (turned off).
    293 
    294         @return a boolean for camera muted state.
    295         """
    296         return cfm_util.is_camera_muted(self._webview_context)
    297 
    298 
    299     def mute_camera(self):
    300         """Turned camera off."""
    301         cfm_util.mute_camera(self._webview_context)
    302 
    303 
    304     def unmute_camera(self):
    305         """Turned camera on."""
    306         cfm_util.unmute_camera(self._webview_context)
    307