Commit d3e7339e authored by lalitm@google.com's avatar lalitm@google.com

Refactor webmidi tests to get rid of flakiness

These tests were likely flaky because of a race between setPermission and
the subsequent request.

Utilize the new helper function for setting permissions to rewrite the
tests in terms of promises and remove the races.

BUG=519007

Review URL: https://codereview.chromium.org/1309873002

git-svn-id: svn://svn.chromium.org/blink/trunk@201063 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 609695f0
...@@ -123,7 +123,6 @@ crbug.com/519001 storage/indexeddb/pending-version-change-stuck-works-with-termi ...@@ -123,7 +123,6 @@ crbug.com/519001 storage/indexeddb/pending-version-change-stuck-works-with-termi
crbug.com/519002 storage/indexeddb/pending-version-change-stuck.html [ Pass Timeout ] crbug.com/519002 storage/indexeddb/pending-version-change-stuck.html [ Pass Timeout ]
crbug.com/519003 [ Mac ] svg/batik/text/xmlSpace.svg [ Failure Pass ] crbug.com/519003 [ Mac ] svg/batik/text/xmlSpace.svg [ Failure Pass ]
crbug.com/519005 webaudio/stereopannernode-no-glitch.html [ Pass Timeout ] crbug.com/519005 webaudio/stereopannernode-no-glitch.html [ Pass Timeout ]
crbug.com/519007 webmidi/permission.html [ Failure Pass ]
crbug.com/519008 webmidi/send-messages.html [ Pass Timeout ] crbug.com/519008 webmidi/send-messages.html [ Pass Timeout ]
crbug.com/410949 http/tests/security/local-image-from-remote-whitelisted.html [ Failure Pass ] crbug.com/410949 http/tests/security/local-image-from-remote-whitelisted.html [ Failure Pass ]
crbug.com/463358 [ Linux Mac Debug ] transforms/2d/hindi-rotated.html [ ImageOnlyFailure ] crbug.com/463358 [ Linux Mac Debug ] transforms/2d/hindi-rotated.html [ ImageOnlyFailure ]
......
...@@ -5,6 +5,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE ...@@ -5,6 +5,7 @@ On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE
PASS testRunner.setPermission is defined. PASS testRunner.setPermission is defined.
PASS navigator.requestMIDIAccess is defined. PASS navigator.requestMIDIAccess is defined.
PASS PermissionsHelper.setPermission is defined.
PASS promise is defined. PASS promise is defined.
PASS promise.then is defined. PASS promise.then is defined.
PASS sysex permission request is successfully rejected. PASS sysex permission request is successfully rejected.
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
<html> <html>
<head> <head>
<script src="../resources/js-test.js"></script> <script src="../resources/js-test.js"></script>
<script src="../resources/permissions-helper.js"></script>
</head> </head>
<body> <body>
<script> <script>
...@@ -10,6 +11,7 @@ description("Test if sysex permission request is handled."); ...@@ -10,6 +11,7 @@ description("Test if sysex permission request is handled.");
shouldBeDefined("testRunner.setPermission"); shouldBeDefined("testRunner.setPermission");
shouldBeDefined("navigator.requestMIDIAccess"); shouldBeDefined("navigator.requestMIDIAccess");
shouldBeDefined("PermissionsHelper.setPermission");
window.jsTestIsAsync = true; window.jsTestIsAsync = true;
...@@ -19,40 +21,42 @@ var finishSuccessfully = function () { ...@@ -19,40 +21,42 @@ var finishSuccessfully = function () {
} }
var rejectSysex = function (next) { var rejectSysex = function (next) {
testRunner.setPermission('midi-sysex', 'denied', location.origin, location.origin); PermissionsHelper.setPermission('midi-sysex', 'denied').then(function() {
promise = navigator.requestMIDIAccess({sysex: true}); promise = navigator.requestMIDIAccess({sysex: true});
shouldBeDefined("promise"); shouldBeDefined("promise");
shouldBeDefined("promise.then"); shouldBeDefined("promise.then");
promise.then(function(access) { promise.then(function(access) {
testFailed("sysex permission request should be rejected."); testFailed("sysex permission request should be rejected.");
finishJSTest(); finishJSTest();
}, function (error) { }, function (error) {
testPassed("sysex permission request is successfully rejected."); testPassed("sysex permission request is successfully rejected.");
if (next) if (next)
next(); next();
else else
finishSuccessfully(); finishSuccessfully();
});
}); });
} }
var acceptSysex = function (next) { var acceptSysex = function (next) {
testRunner.setPermission('midi-sysex', 'granted', location.origin, location.origin); PermissionsHelper.setPermission('midi-sysex', 'granted').then(function() {
promise = navigator.requestMIDIAccess({sysex: true}); promise = navigator.requestMIDIAccess({sysex: true});
shouldBeDefined("promise"); shouldBeDefined("promise");
shouldBeDefined("promise.then"); shouldBeDefined("promise.then");
promise.then(function(obtainedAccess) { promise.then(function(obtainedAccess) {
testPassed("sysex permission request is successfully accepted."); testPassed("sysex permission request is successfully accepted.");
access = obtainedAccess; access = obtainedAccess;
shouldBeDefined("access"); shouldBeDefined("access");
shouldBeDefined("access.sysexEnabled"); shouldBeDefined("access.sysexEnabled");
shouldBeTrue("access.sysexEnabled"); shouldBeTrue("access.sysexEnabled");
if (next) if (next)
next(); next();
else else
finishSuccessfully(); finishSuccessfully();
}, function (error) { }, function (error) {
testFailed("sysex permission request should be accepted."); testFailed("sysex permission request should be accepted.");
finishJSTest(); finishJSTest();
});
}); });
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment