17f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 27f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# Use of this source code is governed by a BSD-style license that can be 37f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar# found in the LICENSE file. 47f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 5f6fcbb7405686dd0dc46884435a9ee3fa835f2abJorge Lucangeli Obesimport re 6132d1f71fbc53f15a50bb2e5b739614e05abf230Jorge Lucangeli Obes 7437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkarfrom autotest_lib.client.bin import test, utils 87f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom autotest_lib.client.common_lib import error 97f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom autotest_lib.client.common_lib.cros import chrome 107f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkarfrom telemetry.core import exceptions 117f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 1240f2187948887ad8e782fa4f28fba98b83f7818cAchuith Bhandarkarclass security_SandboxStatus(test.test): 137f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar """Verify sandbox status.""" 147f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar version = 1 157f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 167f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 17437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar def _EvaluateJavaScript(self, js): 18437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar '''Evaluates js, returns None if an exception was thrown.''' 19437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 20437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar try: 21437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar return self._tab.EvaluateJavaScript(js) 22437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar except exceptions.EvaluateException: 23437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar return None 24437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 25417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar def _CheckSandboxPage(self, url, js): 26417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar self._tab.Navigate(url) 27c59b652d3b5cd8793122c439964652fb04bb68aaJorge Lucangeli Obes 28417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar return utils.poll_for_condition( 29417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar lambda: self._EvaluateJavaScript(js), 30417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar exception=error.TestError('Failed to evaluate in %s "%s"' 31417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar % (url, js)), 32437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar timeout=30) 33132d1f71fbc53f15a50bb2e5b739614e05abf230Jorge Lucangeli Obes 34c59b652d3b5cd8793122c439964652fb04bb68aaJorge Lucangeli Obes 35417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar def _CheckAdequatelySandboxed(self): 36417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar '''Checks that chrome://sandbox shows "You are adequately sandboxed."''' 37417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar url = 'chrome://sandbox' 38417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar res = self._CheckSandboxPage(url, 39417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar "document.getElementsByTagName('p')[0].textContent") 40417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar 41417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar text = 'You are adequately sandboxed.' 42417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar if not re.match(text, res): 43417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar raise error.TestFail('Could not find "%s" in %s' % (text, url)) 44417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar 45417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar 46417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar def _CheckGPUSandboxed(self): 47417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar ''' 48417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar Checks that chrome://gpu has "Sandboxed" row, and "Sandboxed" is True. 49417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar ''' 50417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar url = 'chrome://gpu' 51417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar res = self._CheckSandboxPage(url, 52417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar "browserBridge.isSandboxedForTesting();") 53417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar if res is not True: 54417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar raise error.TestFail('"Sandboxed" not True in %s' % url) 557f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 567f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def run_once(self): 57669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou '''Open various sandbox-related pages and test that we are sandboxed.''' 5857c75076df269ecd843ad246c7deb4f360db8532Achuith Bhandarkar with chrome.Chrome() as cr: 597f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab = cr.browser.tabs[0] 60669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou self._CheckAdequatelySandboxed() 61417395925057cee65779f9663e261aaa22da35f4Achuith Bhandarkar self._CheckGPUSandboxed() 62