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:
Cosmin Sabou 2018-05-04 20:56:41 +03:00
parent dc4e10c449
commit 603420de74
4 changed files with 0 additions and 246 deletions

View File

@ -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 ||

View File

@ -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>

View File

@ -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]

View File

@ -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>