90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Python
		
	
	
	
| # 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")
 | |
| 
 |