blob: bfad1cc3102d28a45af6f19b6953a8194420ad5b [file] [log] [blame]
# Copyright 2019 The Chromium 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 os
import sys
ALL_RUNTIMES = frozenset(['OculusVR', 'OpenVR', 'WindowsMixedReality'])
SANDBOX_FEATURE = 'XRSandbox'
class DesktopRuntimeBase(object):
"""Interface for all desktop VR runtimes."""
def __init__(self, finder_options, possible_browser):
self._finder_options = finder_options
self._possible_browser = possible_browser
self._finder_options.browser_options.AppendExtraBrowserArgs(
'--enable-features=%s' % self.GetFeatureName())
# Disable all other runtimes other than the current one.
for feature in ALL_RUNTIMES - set([self.GetFeatureName()]):
self._finder_options.browser_options.AppendExtraBrowserArgs(
'--disable-features=%s' % feature)
if self.GetSandboxSupported():
self._finder_options.browser_options.AppendExtraBrowserArgs(
'--enable-features=%s' % SANDBOX_FEATURE)
self.SetupSandboxAcls(os.path.abspath(possible_browser.browser_directory))
else:
self._finder_options.browser_options.AppendExtraBrowserArgs(
'--disable-features=%s' % SANDBOX_FEATURE)
def Setup(self):
"""Called once before any stories are run."""
raise NotImplementedError(
'No runtime setup defined for %s' % self.__class__.__name__)
def WillRunStory(self):
"""Called before each story is run."""
raise NotImplementedError(
'No runtime pre-story defined for %s' % self.__class__.__name__)
def TearDown(self):
"""Called once after all stories are run."""
raise NotImplementedError(
'No runtime tear down defined for %s' % self.__class__.__name__)
def GetFeatureName(self):
raise NotImplementedError(
'No feature defined for %s' % self.__class__.__name__)
def GetSandboxSupported(self):
# The majority of runtimes don't support being run in the sandboxed process
# yet, so default to disabling it.
return False
def SetupSandboxAcls(self, directory):
"""Sets up ACLs on a directory for sandbox support.
No-op of the ACLs are already set.
Args:
directory: A path pointing to the directory to set the ACLs on.
"""
# Import here instead of at the top of the file to prevent issues with
# Telemetry unittests not properly including all dependencies for stuff
# it's testing.
# //chrome/browser/vr/test/
import_dir = os.path.join(
os.path.dirname(__file__), '..', '..', '..', '..', '..',
'chrome', 'browser', 'vr', 'test')
if import_dir not in sys.path:
sys.path.append(import_dir)
# pylint: disable=import-error, wrong-import-position
import run_xr_browser_tests
run_xr_browser_tests.SetupWindowsACLs(directory)