blob: 964bda22c164637f7b95354728f84a505faa40d0 [file] [log] [blame]
# Copyright 2019 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.
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.enterprise import enterprise_policy_base
from autotest_lib.client.cros.input_playback import keyboard
from telemetry.core import exceptions
class policy_DeveloperToolsAvailability(
enterprise_policy_base.EnterprisePolicyTest):
"""
Tests the DeveloperToolsAvailable policy in Chrome OS.
If the policy is set to Available then the user will be able to open
a new Developer Tools console. If the policy is Disabled then the user
should not be able to open a new Developer Tools console. Forced is
not being tested.
"""
version = 1
def initialize(self, **kwargs):
super(policy_DeveloperToolsAvailability, self).initialize(**kwargs)
self.keyboard = keyboard.Keyboard()
self.POLICY_NAME = 'DeveloperToolsAvailability'
self.POLICIES = {}
self.TEST_CASES = {
'NotSet': None,
'DisabledOnExtensions': 0,
'Available': 1,
'Disabled': 2}
def _check_developer_tools_availability(self, case):
"""
Opens a new chrome://user-actions page and then tries to open Developer
Tools console. To see if the new window actually opened the test checks
what was recorded in user actions.
@param case: policy description.
"""
page_scrape_cmd = (
'document.getElementById("user-actions-table").innerText;')
user_actions_tab = self.navigate_to_url('chrome://user-actions')
# The below shortcuts can be used to open Developer Tools, though in
# different tabs. The first one opens the Elements tab, the next two
# open the last used tab, and the final one opens the Console tab.
keys = ['ctrl+shift+c', 'ctrl+shift+i', 'f12', 'ctrl+shift+j']
for key in keys:
self.keyboard.press_key(key)
recorded_user_actions = (
user_actions_tab.EvaluateJavaScript(page_scrape_cmd))
if (case == 'Available' or case == 'DisabledOnExtensions'
or case == 'NotSet'):
if ('DevTools_ToggleWindow' not in recorded_user_actions and
'DevTools_ToggleConsole' not in recorded_user_actions):
raise error.TestFail("Developer Tools didn't open, but"
" should be allowed.")
elif case == 'Disabled':
if 'DevTools_ToggleWindow' in recorded_user_actions:
raise error.TestFail("Developer Tools opened and should "
"have been disabled.")
def run_once(self, case):
"""
Setup and run the test configured for the specified test case.
@param case: Name of the test case to run.
"""
case_value = self.TEST_CASES[case]
self.POLICIES[self.POLICY_NAME] = case_value
try:
self.setup_case(user_policies=self.POLICIES)
self._check_developer_tools_availability(case)
except exceptions.TimeoutException:
if case != 'Disabled':
raise error.TestFail("Unexpected Timeout Exception")