blob: 9def1cbe3e0d31def32e211481b4e0d100afbbc1 [file] [log] [blame] [edit]
# 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()