summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/test/gpu/gpu_tests/context_lost.js32
-rw-r--r--content/test/gpu/gpu_tests/context_lost.py30
-rw-r--r--content/test/gpu/gpu_tests/gpu_process.js13
-rw-r--r--content/test/gpu/gpu_tests/gpu_process.py21
-rw-r--r--content/test/gpu/gpu_tests/hardware_accelerated_feature.py6
-rw-r--r--content/test/gpu/gpu_tests/memory.js50
-rw-r--r--content/test/gpu/gpu_tests/memory.py65
-rw-r--r--content/test/gpu/gpu_tests/pixel.js27
-rw-r--r--content/test/gpu/gpu_tests/pixel.py29
-rw-r--r--content/test/gpu/gpu_tests/webgl_conformance.js41
-rw-r--r--content/test/gpu/gpu_tests/webgl_conformance.py38
-rw-r--r--content/test/gpu/gpu_tests/webgl_robustness.js40
-rw-r--r--content/test/gpu/gpu_tests/webgl_robustness.py44
13 files changed, 242 insertions, 194 deletions
diff --git a/content/test/gpu/gpu_tests/context_lost.js b/content/test/gpu/gpu_tests/context_lost.js
new file mode 100644
index 0000000..eb23433
--- /dev/null
+++ b/content/test/gpu/gpu_tests/context_lost.js
@@ -0,0 +1,32 @@
+// Copyright 2013 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.
+
+(function() {
+ if (window.parent != window) // Ignore subframes.
+ return;
+
+ var domAutomationController = {};
+
+ domAutomationController._loaded = false;
+ domAutomationController._succeeded = false;
+ domAutomationController._finished = false;
+
+ domAutomationController.setAutomationId = function(id) {};
+
+ domAutomationController.send = function(msg) {
+ msg = msg.toLowerCase();
+ if (msg == "loaded") {
+ domAutomationController._loaded = true;
+ } else if (msg == "success") {
+ domAutomationController._succeeded = true;
+ domAutomationController._finished = true;
+ } else {
+ domAutomationController._succeeded = false;
+ domAutomationController._finished = true;
+ }
+ };
+
+ window.domAutomationController = domAutomationController;
+ console.log("Harness injected.");
+})();
diff --git a/content/test/gpu/gpu_tests/context_lost.py b/content/test/gpu/gpu_tests/context_lost.py
index ad56385..fdb774d 100644
--- a/content/test/gpu/gpu_tests/context_lost.py
+++ b/content/test/gpu/gpu_tests/context_lost.py
@@ -13,31 +13,6 @@ data_path = os.path.join(
wait_timeout = 20 # seconds
-harness_script = r"""
- var domAutomationController = {};
-
- domAutomationController._loaded = false;
- domAutomationController._succeeded = false;
- domAutomationController._finished = false;
-
- domAutomationController.setAutomationId = function(id) {}
-
- domAutomationController.send = function(msg) {
- msg = msg.toLowerCase()
- if (msg == "loaded") {
- domAutomationController._loaded = true;
- } else if (msg == "success") {
- domAutomationController._succeeded = true;
- domAutomationController._finished = true;
- } else {
- domAutomationController._succeeded = false;
- domAutomationController._finished = true;
- }
- }
-
- window.domAutomationController = domAutomationController;
- console.log("Harness injected.");
-"""
class _ContextLostValidator(page_test.PageTest):
def __init__(self):
@@ -53,6 +28,9 @@ class _ContextLostValidator(page_test.PageTest):
# Required for about:gpucrash handling from Telemetry.
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
+ def InjectJavascript(self):
+ return [os.path.join(os.path.dirname(__file__), 'context_lost.js')]
+
def ValidatePage(self, page, tab, results):
if page.kill_gpu_process:
if not tab.browser.supports_tab_control:
@@ -91,7 +69,6 @@ class ContextLost(test_module.Test):
{
'name': 'ContextLost.WebGLContextLostFromGPUProcessExit',
'url': 'file://webgl.html?query=kill_after_notification',
- 'script_to_evaluate_on_commit': harness_script,
'navigate_steps': [
{ 'action': 'navigate' },
{ 'action': 'wait',
@@ -102,7 +79,6 @@ class ContextLost(test_module.Test):
{
'name': 'ContextLost.WebGLContextLostFromLoseContextExtension',
'url': 'file://webgl.html?query=WEBGL_lose_context',
- 'script_to_evaluate_on_commit': harness_script,
'navigate_steps': [
{ 'action': 'navigate' },
{ 'action': 'wait',
diff --git a/content/test/gpu/gpu_tests/gpu_process.js b/content/test/gpu/gpu_tests/gpu_process.js
new file mode 100644
index 0000000..573c1e8
--- /dev/null
+++ b/content/test/gpu/gpu_tests/gpu_process.js
@@ -0,0 +1,13 @@
+// Copyright 2013 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.
+
+(function() {
+ var domAutomationController = {};
+ domAutomationController._finished = false;
+ domAutomationController.setAutomationId = function(id) {};
+ domAutomationController.send = function(msg) {
+ domAutomationController._finished = true;
+ };
+ window.domAutomationController = domAutomationController;
+})();
diff --git a/content/test/gpu/gpu_tests/gpu_process.py b/content/test/gpu/gpu_tests/gpu_process.py
index 3143e42..2aa2665 100644
--- a/content/test/gpu/gpu_tests/gpu_process.py
+++ b/content/test/gpu/gpu_tests/gpu_process.py
@@ -3,20 +3,12 @@
# found in the LICENSE file.
import gpu_process_expectations as expectations
+import os
+
from telemetry import test
from telemetry.page import page_set
from telemetry.page import page_test
-test_harness_script = r"""
- var domAutomationController = {};
- domAutomationController._finished = false;
- domAutomationController.setAutomationId = function(id) {}
- domAutomationController.send = function(msg) {
- domAutomationController._finished = true;
- }
-
- window.domAutomationController = domAutomationController;
-"""
class GpuProcessValidator(page_test.PageTest):
def __init__(self):
@@ -26,6 +18,9 @@ class GpuProcessValidator(page_test.PageTest):
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
+ def InjectJavascript(self):
+ return [os.path.join(os.path.dirname(__file__), 'gpu_process.js')]
+
def ValidatePage(self, page, tab, results):
has_gpu_process_js = 'chrome.gpuBenchmarking.hasGpuProcess()'
has_gpu_process = tab.EvaluateJavaScript(has_gpu_process_js)
@@ -39,9 +34,3 @@ class GpuProcess(test.Test):
def CreateExpectations(self, page_set):
return expectations.GpuProcessExpectations()
-
- def CreatePageSet(self, options):
- page_set = super(GpuProcess, self).CreatePageSet(options)
- for page in page_set.pages:
- page.script_to_evaluate_on_commit = test_harness_script
- return page_set
diff --git a/content/test/gpu/gpu_tests/hardware_accelerated_feature.py b/content/test/gpu/gpu_tests/hardware_accelerated_feature.py
index a584fa9..0b83852 100644
--- a/content/test/gpu/gpu_tests/hardware_accelerated_feature.py
+++ b/content/test/gpu/gpu_tests/hardware_accelerated_feature.py
@@ -60,10 +60,10 @@ class HardwareAcceleratedFeature(test.Test):
safe_feature_name(feature),
'url': 'chrome://gpu',
'navigate_steps': [
- { "action": 'navigate' }
+ { 'action': 'navigate' },
+ { 'action': 'javascript', 'expression': test_harness_script}
],
- 'script_to_evaluate_on_commit': test_harness_script,
'feature': feature
})
- return page_set.PageSet.FromDict(page_set_dict, '') \ No newline at end of file
+ return page_set.PageSet.FromDict(page_set_dict, '')
diff --git a/content/test/gpu/gpu_tests/memory.js b/content/test/gpu/gpu_tests/memory.js
new file mode 100644
index 0000000..1503f71
--- /dev/null
+++ b/content/test/gpu/gpu_tests/memory.js
@@ -0,0 +1,50 @@
+// Copyright 2013 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.
+
+(function() {
+ if (window.parent != window) // Ignore subframes.
+ return;
+
+ // If changed, make sure the value can still be queried in memory.py.
+ var MEMORY_LIMIT_MB = 256;
+
+ var domAutomationController = {};
+ domAutomationController._finished = false;
+
+ domAutomationController.send = function(msg) {
+ // This should wait until all effects of memory management complete.
+ // We will need to wait until all
+ // 1. pending commits from the main thread to the impl thread in the
+ // compositor complete (for visible compositors).
+ // 2. allocations that the renderer's impl thread will make due to the
+ // compositor and WebGL are completed.
+ // 3. pending GpuMemoryManager::Manage() calls to manage are made.
+ // 4. renderers' OnMemoryAllocationChanged callbacks in response to
+ // manager are made.
+ // Each step in this sequence can cause trigger the next (as a 1-2-3-4-1
+ // cycle), so we will need to pump this cycle until it stabilizes.
+
+ // Pump the cycle 8 times (in principle it could take an infinite number
+ // of iterations to settle).
+
+ var rafCount = 0;
+ var totalRafCount = 8;
+
+ function pumpRAF() {
+ if (rafCount == totalRafCount) {
+ domAutomationController._finished = true;
+ return;
+ }
+ ++rafCount;
+ window.requestAnimationFrame(pumpRAF);
+ }
+ pumpRAF();
+ };
+
+ window.domAutomationController = domAutomationController;
+
+ window.addEventListener("load", function() {
+ useGpuMemory(MEMORY_LIMIT_MB);
+ }, false);
+})();
diff --git a/content/test/gpu/gpu_tests/memory.py b/content/test/gpu/gpu_tests/memory.py
index c83d7b7..528d64d 100644
--- a/content/test/gpu/gpu_tests/memory.py
+++ b/content/test/gpu/gpu_tests/memory.py
@@ -1,57 +1,30 @@
# Copyright (c) 2012 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 re
+
from telemetry import test
from telemetry.page import page_test
-MEMORY_LIMIT_MB = 256
SINGLE_TAB_LIMIT_MB = 128
WIGGLE_ROOM_MB = 4
-test_harness_script = r"""
- var domAutomationController = {};
- domAutomationController._finished = false;
-
- domAutomationController.send = function(msg) {
- // This should wait until all effects of memory management complete.
- // We will need to wait until all
- // 1. pending commits from the main thread to the impl thread in the
- // compositor complete (for visible compositors).
- // 2. allocations that the renderer's impl thread will make due to the
- // compositor and WebGL are completed.
- // 3. pending GpuMemoryManager::Manage() calls to manage are made.
- // 4. renderers' OnMemoryAllocationChanged callbacks in response to
- // manager are made.
- // Each step in this sequence can cause trigger the next (as a 1-2-3-4-1
- // cycle), so we will need to pump this cycle until it stabilizes.
-
- // Pump the cycle 8 times (in principle it could take an infinite number
- // of iterations to settle).
-
- var rafCount = 0;
- var totalRafCount = 8;
-
- function pumpRAF() {
- if (rafCount == totalRafCount) {
- domAutomationController._finished = true;
- return;
- }
- ++rafCount;
- window.requestAnimationFrame(pumpRAF);
- }
- pumpRAF();
- }
-
- window.domAutomationController = domAutomationController;
-
- window.addEventListener("load", function() {
- useGpuMemory(%d);
- }, false);
-""" % MEMORY_LIMIT_MB
class MemoryValidator(page_test.PageTest):
def __init__(self):
super(MemoryValidator, self).__init__('ValidatePage')
+ with open(os.path.join(os.path.dirname(__file__), 'memory.js'), 'r') as f:
+ script = f.read()
+ m = re.search('var MEMORY_LIMIT_MB = (\d+);', script)
+ if not m:
+ raise page_test.Failure('Fail to query MEMORY_LIMIT_MB from memory.js')
+ self.MEMORY_LIMIT_MB = int(m.group(1))
+
+
+ def InjectJavascript(self):
+ return [os.path.join(os.path.dirname(__file__), 'memory.js')]
def ValidatePage(self, page, tab, results):
mb_used = MemoryValidator.GpuMemoryUsageMbytes(tab)
@@ -59,7 +32,7 @@ class MemoryValidator(page_test.PageTest):
if mb_used + WIGGLE_ROOM_MB < SINGLE_TAB_LIMIT_MB:
raise page_test.Failure('Memory allocation too low')
- if mb_used - WIGGLE_ROOM_MB > MEMORY_LIMIT_MB:
+ if mb_used - WIGGLE_ROOM_MB > self.MEMORY_LIMIT_MB:
raise page_test.Failure('Memory allocation too high')
@staticmethod
@@ -71,16 +44,10 @@ class MemoryValidator(page_test.PageTest):
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-logging')
options.AppendExtraBrowserArgs(
- '--force-gpu-mem-available-mb=%s' % MEMORY_LIMIT_MB)
+ '--force-gpu-mem-available-mb=%s' % self.MEMORY_LIMIT_MB)
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
class Memory(test.Test):
"""Tests GPU memory limits"""
test = MemoryValidator
page_set = 'page_sets/memory_tests.json'
-
- def CreatePageSet(self, options):
- page_set = super(Memory, self).CreatePageSet(options)
- for page in page_set.pages:
- page.script_to_evaluate_on_commit = test_harness_script
- return page_set \ No newline at end of file
diff --git a/content/test/gpu/gpu_tests/pixel.js b/content/test/gpu/gpu_tests/pixel.js
new file mode 100644
index 0000000..c17ab4a
--- /dev/null
+++ b/content/test/gpu/gpu_tests/pixel.js
@@ -0,0 +1,27 @@
+// Copyright 2013 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.
+
+(function() {
+ if (window.parent != window) // Ignore subframes.
+ return;
+
+ var domAutomationController = {};
+
+ domAutomationController._succeeded = false;
+ domAutomationController._finished = false;
+
+ domAutomationController.setAutomationId = function(id) {};
+
+ domAutomationController.send = function(msg) {
+ domAutomationController._finished = true;
+
+ if(msg.toLowerCase() == "success") {
+ domAutomationController._succeeded = true;
+ } else {
+ domAutomationController._succeeded = false;
+ }
+ };
+
+ window.domAutomationController = domAutomationController;
+})();
diff --git a/content/test/gpu/gpu_tests/pixel.py b/content/test/gpu/gpu_tests/pixel.py
index 4df18f1..64df734 100644
--- a/content/test/gpu/gpu_tests/pixel.py
+++ b/content/test/gpu/gpu_tests/pixel.py
@@ -17,26 +17,6 @@ test_data_dir = os.path.abspath(os.path.join(
default_generated_data_dir = os.path.join(test_data_dir, 'generated')
default_reference_image_dir = os.path.join(test_data_dir, 'gpu_reference')
-test_harness_script = r"""
- var domAutomationController = {};
-
- domAutomationController._succeeded = false;
- domAutomationController._finished = false;
-
- domAutomationController.setAutomationId = function(id) {}
-
- domAutomationController.send = function(msg) {
- domAutomationController._finished = true;
-
- if(msg.toLowerCase() == "success") {
- domAutomationController._succeeded = true;
- } else {
- domAutomationController._succeeded = false;
- }
- }
-
- window.domAutomationController = domAutomationController;
-"""
class PixelTestFailure(Exception):
pass
@@ -51,6 +31,9 @@ class PixelValidator(page_test.PageTest):
def CustomizeBrowserOptions(self, options):
options.AppendExtraBrowserArgs('--enable-gpu-benchmarking')
+ def InjectJavascript(self):
+ return [os.path.join(os.path.dirname(__file__), 'pixel.js')]
+
def ValidatePage(self, page, tab, results):
if not _DidTestSucceed(tab):
raise page_test.Failure('Page indicated a failure')
@@ -165,9 +148,3 @@ class Pixel(test.Test):
help='Chrome revision being tested.',
default="unknownrev")
parser.add_option_group(group)
-
- def CreatePageSet(self, options):
- page_set = super(Pixel, self).CreatePageSet(options)
- for page in page_set.pages:
- page.script_to_evaluate_on_commit = test_harness_script
- return page_set
diff --git a/content/test/gpu/gpu_tests/webgl_conformance.js b/content/test/gpu/gpu_tests/webgl_conformance.js
new file mode 100644
index 0000000..cfa084f
--- /dev/null
+++ b/content/test/gpu/gpu_tests/webgl_conformance.js
@@ -0,0 +1,41 @@
+// Copyright 2013 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.
+
+(function(){
+ if (window.parent != window) // Ignore subframes.
+ return;
+
+ var testHarness = {};
+ testHarness._allTestSucceeded = true;
+ testHarness._messages = '';
+ testHarness._failures = 0;
+ testHarness._finished = false;
+ testHarness._originalLog = window.console.log;
+
+ testHarness.log = function(msg) {
+ testHarness._messages += msg + "\n";
+ testHarness._originalLog.apply(window.console, [msg]);
+ };
+
+ testHarness.reportResults = function(success, msg) {
+ testHarness._allTestSucceeded = testHarness._allTestSucceeded && !!success;
+ if(!success) {
+ testHarness._failures++;
+ if(msg) {
+ testHarness.log(msg);
+ }
+ }
+ };
+ testHarness.notifyFinished = function() {
+ testHarness._finished = true;
+ };
+ testHarness.navigateToPage = function(src) {
+ var testFrame = document.getElementById("test-frame");
+ testFrame.src = src;
+ };
+
+ window.webglTestHarness = testHarness;
+ window.parent.webglTestHarness = testHarness;
+ window.console.log = testHarness.log;
+})();
diff --git a/content/test/gpu/gpu_tests/webgl_conformance.py b/content/test/gpu/gpu_tests/webgl_conformance.py
index 3ac7dca..be19d1d 100644
--- a/content/test/gpu/gpu_tests/webgl_conformance.py
+++ b/content/test/gpu/gpu_tests/webgl_conformance.py
@@ -16,40 +16,6 @@ from telemetry.page import page_test
conformance_path = os.path.join(
util.GetChromiumSrcDir(), 'third_party', 'webgl_conformance')
-conformance_harness_script = r"""
- var testHarness = {};
- testHarness._allTestSucceeded = true;
- testHarness._messages = '';
- testHarness._failures = 0;
- testHarness._finished = false;
- testHarness._originalLog = window.console.log;
-
- testHarness.log = function(msg) {
- testHarness._messages += msg + "\n";
- testHarness._originalLog.apply(window.console, [msg]);
- }
-
- testHarness.reportResults = function(success, msg) {
- testHarness._allTestSucceeded = testHarness._allTestSucceeded && !!success;
- if(!success) {
- testHarness._failures++;
- if(msg) {
- testHarness.log(msg);
- }
- }
- };
- testHarness.notifyFinished = function() {
- testHarness._finished = true;
- };
- testHarness.navigateToPage = function(src) {
- var testFrame = document.getElementById("test-frame");
- testFrame.src = src;
- };
-
- window.webglTestHarness = testHarness;
- window.parent.webglTestHarness = testHarness;
- window.console.log = testHarness.log;
-"""
def _DidWebGLTestSucceed(tab):
return tab.EvaluateJavaScript('webglTestHarness._allTestSucceeded')
@@ -101,7 +67,9 @@ class WebglConformance(test_module.Test):
test.replace('/', '_').replace('-', '_').
replace('\\', '_').rpartition('.')[0].replace('.', '_'),
'url': 'file://' + test,
- 'script_to_evaluate_on_commit': conformance_harness_script,
+ 'inject_scripts': [
+ os.path.join(os.path.dirname(__file__), 'webgl_conformance.js')
+ ],
'navigate_steps': [
{'action': 'navigate'},
{
diff --git a/content/test/gpu/gpu_tests/webgl_robustness.js b/content/test/gpu/gpu_tests/webgl_robustness.js
new file mode 100644
index 0000000..111b400
--- /dev/null
+++ b/content/test/gpu/gpu_tests/webgl_robustness.js
@@ -0,0 +1,40 @@
+// Copyright 2013 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.
+(function() {
+ if (window.parent != window) // Ignore subframes.
+ return;
+
+ var robustnessTestHarness = {};
+ robustnessTestHarness._contextLost = false;
+ robustnessTestHarness.initialize = function() {
+ var canvas = document.getElementById('example');
+ canvas.addEventListener('webglcontextlost', function() {
+ robustnessTestHarness._contextLost = true;
+ });
+ };
+ robustnessTestHarness.runTestLoop = function() {
+ // Run the test in a loop until the context is lost.
+ main();
+ if (!robustnessTestHarness._contextLost)
+ window.requestAnimationFrame(robustnessTestHarness.runTestLoop);
+ else
+ robustnessTestHarness.notifyFinished();
+ };
+ robustnessTestHarness.notifyFinished = function() {
+ // The test may fail in unpredictable ways depending on when the context is
+ // lost. We ignore such errors and only require that the browser doesn't
+ // crash.
+ webglTestHarness._allTestSucceeded = true;
+ // Notify test completion after a delay to make sure the browser is able to
+ // recover from the lost context.
+ setTimeout(webglTestHarness.notifyFinished, 3000);
+ };
+
+ window.confirm = function() {
+ robustnessTestHarness.initialize();
+ robustnessTestHarness.runTestLoop();
+ return false;
+ };
+ window.webglRobustnessTestHarness = robustnessTestHarness;
+})();
diff --git a/content/test/gpu/gpu_tests/webgl_robustness.py b/content/test/gpu/gpu_tests/webgl_robustness.py
index 7e4a302..69b7d1a 100644
--- a/content/test/gpu/gpu_tests/webgl_robustness.py
+++ b/content/test/gpu/gpu_tests/webgl_robustness.py
@@ -1,49 +1,14 @@
# Copyright 2013 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
+
from telemetry import test
from telemetry.page import page_set
from webgl_conformance import WebglConformanceValidator
-from webgl_conformance import conformance_harness_script
from webgl_conformance import conformance_path
-robustness_harness_script = conformance_harness_script + r"""
- var robustnessTestHarness = {};
- robustnessTestHarness._contextLost = false;
- robustnessTestHarness.initialize = function() {
- var canvas = document.getElementById('example');
- canvas.addEventListener('webglcontextlost', function() {
- robustnessTestHarness._contextLost = true;
- });
- }
- robustnessTestHarness.runTestLoop = function() {
- // Run the test in a loop until the context is lost.
- main();
- if (!robustnessTestHarness._contextLost)
- window.requestAnimationFrame(robustnessTestHarness.runTestLoop);
- else
- robustnessTestHarness.notifyFinished();
- }
- robustnessTestHarness.notifyFinished = function() {
- // The test may fail in unpredictable ways depending on when the context is
- // lost. We ignore such errors and only require that the browser doesn't
- // crash.
- webglTestHarness._allTestSucceeded = true;
- // Notify test completion after a delay to make sure the browser is able to
- // recover from the lost context.
- setTimeout(webglTestHarness.notifyFinished, 3000);
- }
-
- window.confirm = function() {
- robustnessTestHarness.initialize();
- robustnessTestHarness.runTestLoop();
- return false;
- }
- window.webglRobustnessTestHarness = robustnessTestHarness;
-"""
-
-
class WebglRobustness(test.Test):
test = WebglConformanceValidator
@@ -55,7 +20,10 @@ class WebglRobustness(test.Test):
'pages': [
{
'url': 'file://extra/lots-of-polys-example.html',
- 'script_to_evaluate_on_commit': robustness_harness_script,
+ 'inject_scripts': [
+ os.path.join(os.path.dirname(__file__), 'webgl_conformance.js'),
+ os.path.join(os.path.dirname(__file__), 'webgl_robustness.js')
+ ],
'navigate_steps': [
{ 'action': 'navigate' },
{ 'action': 'wait', 'javascript': 'webglTestHarness._finished' }