1cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved.
2cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be
3cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)# found in the LICENSE file.
4cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
5cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)_check_webgl_supported_script = """
6cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)(function () {
7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  var c = document.createElement('canvas');
8cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  var gl = c.getContext('webgl');
9cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  if (gl == null) {
10cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    gl = c.getContext("experimental-webgl");
11cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if (gl == null) {
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      return false;
13cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    }
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  }
15cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  return true;
16cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)})();
17cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)"""
18cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
19cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)class BrowserInfo(object):
20cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  """A wrapper around browser object that allows looking up infos of the
21cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  browser.
22cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  """
23cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def __init__(self, browser):
24cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    self._browser = browser
25cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)
26cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  def HasWebGLSupport(self):
27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    result = False
28cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    # If no tab is opened, open one and close it after evaluate
29cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    # _check_webgl_supported_script
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    if len(self._browser.tabs) == 0 and self._browser.supports_tab_control:
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      self._browser.tabs.New()
32cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      tab = self._browser.tabs[0]
33cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      result = tab.EvaluateJavaScript(_check_webgl_supported_script)
34cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      tab.Close()
35cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    elif len(self._browser.tabs) > 0:
36cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      tab = self._browser.tabs[0]
37cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      result = tab.EvaluateJavaScript(_check_webgl_supported_script)
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)    return result
39