security_SandboxStatus.py revision 669393837af4367f7f655d0b5bbf70915a6e1152
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 25669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou def _CheckAdequatelySandboxed(self): 26669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou '''Check that chrome:///sandbox shows "You are adequately sandboxed."''' 27669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou sandbox_good_js = "document.getElementsByTagName('p')[0].textContent" 28669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou sandbox_good = utils.poll_for_condition( 29669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou lambda: self._EvaluateJavaScript(sandbox_good_js), 3039d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes exception=error.TestError( 31437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar 'Failed to evaluate in chrome://sandbox "%s"' 32669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou % sandbox_good_js), 33437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar timeout=30) 34669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou if not re.match('You are adequately sandboxed.', sandbox_good): 35669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou raise error.TestFail('Could not find "You\'re adequately ' 36669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou 'sandboxed." in chrome://sandbox') 377f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 387f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def _CheckGPUCell(self, cell, content, error_msg): 397f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar '''Checks the content of the cells in the GPU sandbox row.''' 407f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 417f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar gpu_js = ("document.getElementsByTagName('table')" 427f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar "[1].rows[1].cells[%d].textContent" % cell) 437f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar try: 44437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar res = utils.poll_for_condition( 45437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar lambda: self._EvaluateJavaScript(gpu_js), 46437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar timeout=30) 47437b235360e63d2b94590e8bfb7ac0b4f29f4e4aAchuith Bhandarkar except utils.TimeoutError: 4839d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes raise error.TestError('Failed to evaluate in chrome://gpu "%s"' 4939d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes % gpu_js) 50132d1f71fbc53f15a50bb2e5b739614e05abf230Jorge Lucangeli Obes 517f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar if res.find(content) == -1: 5239d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes raise error.TestFail(error_msg) 537f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 547f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar def run_once(self): 55669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou '''Open various sandbox-related pages and test that we are sandboxed.''' 5657c75076df269ecd843ad246c7deb4f360db8532Achuith Bhandarkar with chrome.Chrome() as cr: 577f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab = cr.browser.tabs[0] 587f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab.Navigate('chrome://sandbox') 59669393837af4367f7f655d0b5bbf70915a6e1152Ricky Zhou self._CheckAdequatelySandboxed() 607f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar 617f2338c4c27f543d594d134aee7764cc49ccf88aAchuith Bhandarkar self._tab.Navigate('chrome://gpu') 6239d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes self._CheckGPUCell(0, 'Sandboxed', 6339d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes 'Could not locate "Sandboxed" row in table') 6439d873f13ddfefa607e3557b520514253a451d9dJorge Lucangeli Obes self._CheckGPUCell(1, 'true', 'GPU not sandboxed') 65