| # Copyright (c) 2013 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. |
| |
| import re |
| |
| from autotest_lib.client.bin import test, utils |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.common_lib.cros import chrome |
| from telemetry.core import exceptions |
| |
| class security_SandboxStatus(test.test): |
| """Verify sandbox status.""" |
| version = 1 |
| |
| |
| def _EvaluateJavaScript(self, js): |
| '''Evaluates js, returns None if an exception was thrown.''' |
| |
| try: |
| return self._tab.EvaluateJavaScript(js) |
| except exceptions.EvaluateException: |
| return None |
| |
| def _CheckSandboxPage(self, url, js): |
| self._tab.Navigate(url) |
| |
| return utils.poll_for_condition( |
| lambda: self._EvaluateJavaScript(js), |
| exception=error.TestError('Failed to evaluate in %s "%s"' |
| % (url, js)), |
| timeout=30) |
| |
| |
| def _CheckAdequatelySandboxed(self): |
| '''Checks that chrome://sandbox shows "You are adequately sandboxed."''' |
| url = 'chrome://sandbox' |
| res = self._CheckSandboxPage(url, |
| "document.getElementsByTagName('p')[0].textContent") |
| |
| text = 'You are adequately sandboxed.' |
| if not re.match(text, res): |
| raise error.TestFail('Could not find "%s" in %s' % (text, url)) |
| |
| |
| def _CheckGPUSandboxed(self): |
| ''' |
| Checks that chrome://gpu has "Sandboxed" row, and "Sandboxed" is True. |
| ''' |
| url = 'chrome://gpu' |
| res = self._CheckSandboxPage(url, |
| "browserBridge.isSandboxedForTesting();") |
| if res is not True: |
| raise error.TestFail('"Sandboxed" not True in %s' % url) |
| |
| def run_once(self): |
| '''Open various sandbox-related pages and test that we are sandboxed.''' |
| with chrome.Chrome() as cr: |
| self._tab = cr.browser.tabs[0] |
| self._CheckAdequatelySandboxed() |
| self._CheckGPUSandboxed() |