Bug 1332699 - Don't check handler of legacy version if the event is not trusted. r=smaug

MozReview-Commit-ID: A7G4bkyNsOe

--HG--
extra : rebase_source : b5831d05588fa5ca98430d606591ea05e42fd672
This commit is contained in:
Xidorn Quan 2017-01-23 16:08:41 +11:00
parent eacdb7c6e3
commit 70377f6cf6
3 changed files with 42 additions and 3 deletions

View File

@ -1314,9 +1314,10 @@ EventListenerManager::HandleEventInternal(nsPresContext* aPresContext,
// If we didn't find any matching listeners, and our event has a legacy
// version, we'll now switch to looking for that legacy version and we'll
// recheck our listeners.
if (hasListenerForCurrentGroup || usingLegacyMessage) {
// (No need to recheck listeners, because we already found a match, or we
// already rechecked them.)
if (hasListenerForCurrentGroup ||
usingLegacyMessage || !aEvent->IsTrusted()) {
// No need to recheck listeners, because we already found a match, we
// already rechecked them, or it is not a trusted event.
break;
}
EventMessage legacyEventMessage = GetLegacyEventMessage(eventMessage);

View File

@ -173,3 +173,4 @@ skip-if = toolkit == 'android' #CRASH_DUMP, RANDOM
[test_bug1305458.html]
[test_bug1298970.html]
[test_bug1304044.html]
[test_bug1332699.html]

View File

@ -0,0 +1,37 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>Test for bug 1332699</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<script src="/tests/SimpleTest/EventUtils.js"></script>
<link rel="stylesheet" href="/tests/SimpleTest/test.css">
<style>
#test {
color: red;
transition: color 100ms;
}
#test.changed {
color: green;
}
</style>
<div id="test"></div>
<script>
SimpleTest.waitForExplicitFinish();
window.onload = function () {
let $test = document.getElementById('test');
is(getComputedStyle($test).color, 'rgb(255, 0, 0)',
'color should be red before transition');
let numEvents = 0;
$test.addEventListener('webkittransitionend', function() {
++numEvents;
if (numEvents == 1) {
is(getComputedStyle($test).color, 'rgb(0, 128, 0)',
'color should be green after transition');
$test.dispatchEvent(new TransitionEvent('transitionend'));
is(numEvents, 1, "Shouldn't receive the prefixed event again");
SimpleTest.finish();
}
});
$test.className = 'changed';
};
</script>