普通文本  |  307行  |  8.93 KB

# Copyright 2016 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Facade to access the CFM functionality."""

import time

from autotest_lib.client.common_lib import error
from autotest_lib.client.common_lib.cros import enrollment, cfm_util


class TimeoutException(Exception):
    """Timeout Exception class."""
    pass


class CFMFacadeNative(object):
    """Facade to access the CFM functionality.

    The methods inside this class only accept Python native types.
    """
    _USER_ID = 'cfmtest@croste.tv'
    _PWD = 'test0000'
    _EXT_ID = 'ikfcpmgefdpheiiomgmhlmmkihchmdlj'
    _ENROLLMENT_DELAY = 15


    def __init__(self, resource):
        """Initializes a CFMFacadeNative.

        @param resource: A FacadeResource object.
        """
        self._resource = resource


    def enroll_device(self):
        """Enroll device into CFM."""
        self._resource.start_custom_chrome({"auto_login": False,
                                            "disable_gaia_services": False})
        enrollment.RemoraEnrollment(self._resource._browser, self._USER_ID,
                self._PWD)
        # Timeout to allow for the device to stablize and go back to the
        # login screen before proceeding.
        time.sleep(self._ENROLLMENT_DELAY)
        self.restart_chrome_for_cfm()
        self.check_hangout_extension_context()


    def restart_chrome_for_cfm(self):
        """Restart chrome with custom values for CFM."""
        custom_chrome_setup = {"clear_enterprise_policy": False,
                               "dont_override_profile": True,
                               "disable_gaia_services": False,
                               "disable_default_apps": False,
                               "auto_login": False}
        self._resource.start_custom_chrome(custom_chrome_setup)


    def check_hangout_extension_context(self):
        """Check to make sure hangout app launched.

        @raises error.TestFail if the URL checks fails.
        """
        ext_contexts = cfm_util.wait_for_kiosk_ext(
                self._resource._browser, self._EXT_ID)
        ext_urls = set([context.EvaluateJavaScript('location.href;')
                        for context in ext_contexts])
        expected_urls = set(
                ['chrome-extension://' + self._EXT_ID + '/' + path
                 for path in ['hangoutswindow.html?windowid=0',
                              '_generated_background_page.html']])
        if expected_urls != ext_urls:
            raise error.TestFail(
                    'Unexpected extension context urls, expected %s, got %s'
                    % (expected_urls, ext_urls))

    @property
    def _webview_context(self):
        """Get webview context object."""
        return cfm_util.get_cfm_webview_context(self._resource._browser,
                self._EXT_ID)


    def wait_for_telemetry_commands(self):
        """Wait for telemetry commands."""
        cfm_util.wait_for_telemetry_commands(self._webview_context)


    # UI commands/functions
    def wait_for_oobe_start_page(self):
        """Wait for oobe start screen to launch."""
        cfm_util.wait_for_oobe_start_page(self._webview_context)


    def skip_oobe_screen(self):
        """Skip Chromebox for Meetings oobe screen."""
        cfm_util.skip_oobe_screen(self._webview_context)


    def is_oobe_start_page(self):
        """Check if device is on CFM oobe start screen.

        @return a boolean, based on oobe start page status.
        """
        return cfm_util.is_oobe_start_page(self._webview_context)


    # Hangouts commands/functions
    def start_new_hangout_session(self, session_name):
        """Start a new hangout session.

        @param session_name: Name of the hangout session.
        """
        cfm_util.start_new_hangout_session(self._webview_context, session_name)


    def end_hangout_session(self):
        """End current hangout session."""
        cfm_util.end_hangout_session(self._webview_context)


    def is_in_hangout_session(self):
        """Check if device is in hangout session.

        @return a boolean, for hangout session state.
        """
        return cfm_util.is_in_hangout_session(self._webview_context)


    def is_ready_to_start_hangout_session(self):
        """Check if device is ready to start a new hangout session.

        @return a boolean for hangout session ready state.
        """
        return cfm_util.is_ready_to_start_hangout_session(
                self._webview_context)


    # Diagnostics commands/functions
    def is_diagnostic_run_in_progress(self):
        """Check if hotrod diagnostics is running.

        @return a boolean for diagnostic run state.
        """
        return cfm_util.is_diagnostic_run_in_progress(self._webview_context)


    def wait_for_diagnostic_run_to_complete(self):
        """Wait for hotrod diagnostics to complete."""
        cfm_util.wait_for_diagnostic_run_to_complete(self._webview_context)


    def run_diagnostics(self):
        """Run hotrod diagnostics."""
        cfm_util.run_diagnostics(self._webview_context)


    def get_last_diagnostics_results(self):
        """Get latest hotrod diagnostics results.

        @return a dict with diagnostic test results.
        """
        return cfm_util.get_last_diagnostics_results(self._webview_context)


    # Mic audio commands/functions
    def is_mic_muted(self):
        """Check if mic is muted.

        @return a boolean for mic mute state.
        """
        return cfm_util.is_mic_muted(self._webview_context)


    def mute_mic(self):
        """Local mic mute from toolbar."""
        cfm_util.mute_mic(self._webview_context)


    def unmute_mic(self):
        """Local mic unmute from toolbar."""
        cfm_util.unmute_mic(self._webview_context)


    def remote_mute_mic(self):
        """Remote mic mute request from cPanel."""
        cfm_util.remote_mute_mic(self._webview_context)


    def remote_unmute_mic(self):
        """Remote mic unmute request from cPanel."""
        cfm_util.remote_unmute_mic(self._webview_context)


    def get_mic_devices(self):
        """Get all mic devices detected by hotrod.

        @return a list of mic devices.
        """
        return cfm_util.get_mic_devices(self._webview_context)


    def get_preferred_mic(self):
        """Get mic preferred for hotrod.

        @return a str with preferred mic name.
        """
        return cfm_util.get_preferred_mic(self._webview_context)


    def set_preferred_mic(self, mic):
        """Set preferred mic for hotrod.

        @param mic: String with mic name.
        """
        cfm_util.set_preferred_mic(self._webview_context, mic)


    # Speaker commands/functions
    def get_speaker_devices(self):
        """Get all speaker devices detected by hotrod.

        @return a list of speaker devices.
        """
        return cfm_util.get_speaker_devices(self._webview_context)


    def get_preferred_speaker(self):
        """Get speaker preferred for hotrod.

        @return a str with preferred speaker name.
        """
        return cfm_util.get_preferred_speaker(self._webview_context)


    def set_preferred_speaker(self, speaker):
        """Set preferred speaker for hotrod.

        @param speaker: String with speaker name.
        """
        cfm_util.set_preferred_speaker(self._webview_context, speaker)


    def set_speaker_volume(self, volume_level):
        """Set speaker volume.

        @param volume_level: String value ranging from 0-100 to set volume to.
        """
        cfm_util.set_speaker_volume(self._webview_context, volume_level)


    def get_speaker_volume(self):
        """Get current speaker volume.

        @return a str value with speaker volume level 0-100.
        """
        return cfm_util.get_speaker_volume(self._webview_context)


    def play_test_sound(self):
        """Play test sound."""
        cfm_util.play_test_sound(self._webview_context)


    # Camera commands/functions
    def get_camera_devices(self):
        """Get all camera devices detected by hotrod.

        @return a list of camera devices.
        """
        return cfm_util.get_camera_devices(self._webview_context)


    def get_preferred_camera(self):
        """Get camera preferred for hotrod.

        @return a str with preferred camera name.
        """
        return cfm_util.get_preferred_camera(self._webview_context)


    def set_preferred_camera(self, camera):
        """Set preferred camera for hotrod.

        @param camera: String with camera name.
        """
        cfm_util.set_preferred_camera(self._webview_context, camera)


    def is_camera_muted(self):
        """Check if camera is muted (turned off).

        @return a boolean for camera muted state.
        """
        return cfm_util.is_camera_muted(self._webview_context)


    def mute_camera(self):
        """Turned camera off."""
        cfm_util.mute_camera(self._webview_context)


    def unmute_camera(self):
        """Turned camera on."""
        cfm_util.unmute_camera(self._webview_context)