mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-23 21:01:08 +00:00
Backed out 3 changesets (bug 1452536) for causing crashes bug 1458166. a=backout
Backed out changeset 1259c5bc20a7 (bug 1452536) Backed out changeset c454505cc025 (bug 1452536) Backed out changeset 006f976d7963 (bug 1452536)
This commit is contained in:
parent
dc4e10c449
commit
603420de74
@ -13,7 +13,6 @@
|
||||
#include "mozilla/MathAlgorithms.h"
|
||||
#include "mozilla/MouseEvents.h"
|
||||
#include "mozilla/TextComposition.h"
|
||||
#include "mozilla/TextEditor.h"
|
||||
#include "mozilla/TextEvents.h"
|
||||
#include "mozilla/TouchEvents.h"
|
||||
#include "mozilla/dom/ContentChild.h"
|
||||
@ -907,18 +906,6 @@ EventStateManager::PreHandleEvent(nsPresContext* aPresContext,
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
static bool
|
||||
IsTextInput(nsIContent* aContent)
|
||||
{
|
||||
MOZ_ASSERT(aContent);
|
||||
if (!aContent->IsElement()) {
|
||||
return false;
|
||||
}
|
||||
TextEditor* textEditor =
|
||||
aContent->AsElement()->GetTextEditorInternal();
|
||||
return textEditor && !textEditor->IsReadonly();
|
||||
}
|
||||
|
||||
void
|
||||
EventStateManager::NotifyTargetUserActivation(WidgetEvent* aEvent,
|
||||
nsIContent* aTargetContent)
|
||||
@ -942,24 +929,6 @@ EventStateManager::NotifyTargetUserActivation(WidgetEvent* aEvent,
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't activate if the target content of the event is contentEditable or
|
||||
// is inside an editable document, or is a text input control. Activating
|
||||
// due to typing/clicking on a text input would be surprising user experience.
|
||||
if (aTargetContent->IsEditable() ||
|
||||
IsTextInput(aTargetContent)) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Don't gesture activate for key events for keys which are likely
|
||||
// to be interaction with the browser, OS, or likely to be scrolling.
|
||||
WidgetKeyboardEvent* keyEvent = aEvent->AsKeyboardEvent();
|
||||
if (keyEvent && (!keyEvent->PseudoCharCode() ||
|
||||
(keyEvent->IsControl() && !keyEvent->IsAltGraph()) ||
|
||||
(keyEvent->IsAlt() && !keyEvent->IsAltGraph()) ||
|
||||
keyEvent->IsMeta() || keyEvent->IsOS())) {
|
||||
return;
|
||||
}
|
||||
|
||||
MOZ_ASSERT(aEvent->mMessage == eKeyDown ||
|
||||
aEvent->mMessage == eMouseDown ||
|
||||
aEvent->mMessage == ePointerDown ||
|
||||
|
@ -1,165 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Autoplay policy window</title>
|
||||
<style>
|
||||
video {
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
}
|
||||
:focus {
|
||||
background-color: blue;
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/EventUtils.js"></script>
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="text/javascript" src="AutoplayTestUtils.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="x">This is a div with id=x.</div>
|
||||
<pre id="test">
|
||||
<input type="text" id="text-input"/>
|
||||
<script>
|
||||
|
||||
window.ok = window.opener.ok;
|
||||
window.is = window.opener.is;
|
||||
window.info = window.opener.info;
|
||||
|
||||
// Keys that are expected to be not considered interaction with the page, and
|
||||
// so not gesture activate the document.
|
||||
let blacklistKeyPresses = [
|
||||
"Tab",
|
||||
"CapsLock",
|
||||
"NumLock",
|
||||
"ScrollLock",
|
||||
"FnLock",
|
||||
"Meta",
|
||||
"OS",
|
||||
"Hyper",
|
||||
"Super",
|
||||
"ContextMenu",
|
||||
"ArrowUp",
|
||||
"ArrowDown",
|
||||
"ArrowLeft",
|
||||
"ArrowRight",
|
||||
"PageUp",
|
||||
"PageDown",
|
||||
"Home",
|
||||
"End",
|
||||
"Backspace",
|
||||
"Fn",
|
||||
"Alt",
|
||||
"AltGraph",
|
||||
"Control",
|
||||
"Shift",
|
||||
"Escape",
|
||||
];
|
||||
|
||||
let modifiedKeys = [
|
||||
{ key: "c", modifiers: { ctrlKey: true } },
|
||||
{ key: "V", modifiers: { ctrlKey: true, shiftKey: true } },
|
||||
{ key: "a", modifiers: { altKey: true } },
|
||||
{ key: "KEY_ArrowRight", modifiers: { metaKey: true } },
|
||||
{ key: "KEY_ArrowRight", modifiers: { altKey: true } },
|
||||
];
|
||||
|
||||
async function sendInput(element, name, input) {
|
||||
synthesizeMouseAtCenter(input, {});
|
||||
let played = await element.play().then(() => true, () => false);
|
||||
ok(!played, "Clicking " + name + " should not activate document and should not unblock play");
|
||||
|
||||
synthesizeCompositionChange({
|
||||
composition: {
|
||||
string: "\u30E9\u30FC\u30E1\u30F3",
|
||||
clauses: [
|
||||
{ length: 4, attr: COMPOSITION_ATTR_RAW_CLAUSE }
|
||||
]
|
||||
},
|
||||
caret: { start: 4, length: 0 }
|
||||
});
|
||||
synthesizeComposition({ type: "compositioncommitasis" });
|
||||
played = await element.play().then(() => true, () => false);
|
||||
ok(!played, "Entering text to " + name + " via IME should not activate document and should not unblock play");
|
||||
|
||||
input.focus();
|
||||
sendString("ascii text");
|
||||
played = await element.play().then(() => true, () => false);
|
||||
ok(!played, "Entering ASCII text into " + name + " should not activate document and should not unblock play");
|
||||
|
||||
input.blur();
|
||||
}
|
||||
|
||||
async function testAutoplayKeyBlacklist(testCase, parent_window) {
|
||||
let element = document.createElement("video");
|
||||
element.preload = "auto";
|
||||
element.src = "short.mp4";
|
||||
document.body.appendChild(element);
|
||||
|
||||
await once(element, "loadedmetadata");
|
||||
|
||||
let played = await element.play().then(() => true, () => false);
|
||||
is(played, false, "Document should start out not activated, with playback blocked.");
|
||||
|
||||
// Try pressing all the keys in the blacklist, then playing.
|
||||
// Document should not be activated, so play should fail.
|
||||
|
||||
for (let key of blacklistKeyPresses) {
|
||||
document.body.focus();
|
||||
synthesizeKey("KEY_" + key);
|
||||
played = await element.play().then(() => true, () => false);
|
||||
is(played, false, "Key " + key + " should not activate document and should not unblock play");
|
||||
}
|
||||
|
||||
// Try pressing some keys with modifiers.
|
||||
let keyNames = (m) => Object.keys(m).join("+");
|
||||
for (let x of modifiedKeys) {
|
||||
document.body.focus();
|
||||
synthesizeKey(x.key, x.modifiers);
|
||||
played = await element.play().then(() => true, () => false);
|
||||
is(played, false, "Key (" + x.key + "+" + keyNames(x.modifiers) + ") should not activate document and should not unblock play");
|
||||
}
|
||||
|
||||
// Test that clicking/typing into an input element doesn't activate.
|
||||
let input = document.getElementById("text-input");
|
||||
await sendInput(element, "input", input);
|
||||
|
||||
// Test that clicking/typing into a contentEditable div element doesn't activate.
|
||||
let div = document.getElementById("x");
|
||||
div.contentEditable = "true";
|
||||
await sendInput(element, "contentEditable div", div);
|
||||
div.contentEditable = "false";
|
||||
|
||||
// Test that clicking/typing into a div inside a designMode document doesn't activate.
|
||||
document.designMode = "on";
|
||||
await sendInput(element, "div in designMode=on", div);
|
||||
document.designMode = "off";
|
||||
|
||||
// Try pressing a key not in the blacklist, then playing.
|
||||
// Document should be activated, and media should play.
|
||||
|
||||
is(document.activeElement, document.body, "Focus needs to be the document, not an editable or text control.");
|
||||
synthesizeKey(" ");
|
||||
played = await element.play().then(() => true, () => false);
|
||||
is(played, true, "Space key should activate document and should unblock play");
|
||||
|
||||
removeNodeAndSource(element);
|
||||
}
|
||||
|
||||
nextWindowMessage().then(
|
||||
async (event) => {
|
||||
try {
|
||||
await testAutoplayKeyBlacklist(event.data, event.source);
|
||||
} catch (e) {
|
||||
ok(false, "Caught exception " + e + " " + e.message + " " + e.stackTrace);
|
||||
}
|
||||
event.source.postMessage("done", "*");
|
||||
});
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
</html>
|
@ -438,7 +438,6 @@ support-files =
|
||||
eme.js
|
||||
file_access_controls.html
|
||||
file_autoplay_policy_eventdown_activation.html
|
||||
file_autoplay_policy_key_blacklist.html
|
||||
file_autoplay_policy_unmute_pauses.html
|
||||
file_autoplay_policy_activation_window.html
|
||||
file_autoplay_policy_activation_frame.html
|
||||
@ -698,8 +697,6 @@ skip-if = android_version == '23' # bug 1424903
|
||||
skip-if = android_version == '23' # bug 1424903
|
||||
[test_autoplay_policy_eventdown_activation.html]
|
||||
skip-if = android_version == '23' # bug 1424903
|
||||
[test_autoplay_policy_key_blacklist.html]
|
||||
skip-if = android_version == '23' # bug 1424903
|
||||
[test_autoplay_policy_unmute_pauses.html]
|
||||
skip-if = android_version == '23' # bug 1424903
|
||||
[test_autoplay_policy_play_before_loadedmetadata.html]
|
||||
|
@ -1,47 +0,0 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Autoplay policy test</title>
|
||||
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
||||
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
||||
<script type="text/javascript" src="manifest.js"></script>
|
||||
<script type="text/javascript" src="AutoplayTestUtils.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<pre id="test">
|
||||
<script>
|
||||
|
||||
// Tests that keypresses for non-printable characters,
|
||||
// and mouse/keyboard interaction with editable elements,
|
||||
// don't gesture activate documents, and don't unblock
|
||||
// audible autoplay.
|
||||
|
||||
gTestPrefs.push(["media.autoplay.enabled", false],
|
||||
["media.autoplay.enabled.user-gestures-needed", true]);
|
||||
|
||||
SpecialPowers.pushPrefEnv({ 'set': gTestPrefs }, () => {
|
||||
runTest();
|
||||
});
|
||||
|
||||
let child_url = "file_autoplay_policy_key_blacklist.html";
|
||||
|
||||
async function runTest() {
|
||||
// Run test in a new window, to ensure its user gesture
|
||||
// activation state isn't tainted by preceeding tests.
|
||||
let child = window.open(child_url, "", "width=500,height=500");
|
||||
await once(child, "load");
|
||||
child.postMessage("run test", window.origin);
|
||||
let result = await nextWindowMessage();
|
||||
child.close();
|
||||
SimpleTest.finish();
|
||||
}
|
||||
|
||||
SimpleTest.waitForExplicitFinish();
|
||||
|
||||
</script>
|
||||
</pre>
|
||||
</body>
|
||||
|
||||
</html>
|
Loading…
Reference in New Issue
Block a user