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