Bug 1452536 - Don't gesture activate documents on non-printable key events. r=masayuki draft
authorChris Pearce <cpearce@mozilla.com>
Mon, 23 Apr 2018 15:53:50 +1200
changeset 789574 8be949228b666a2ff54385f14b38b8f89459b1e2
parent 788701 93051649414dca637dc95a04bf304452e453090f
child 789575 66412c954983c6e2e0f30855ed2d2cc686dc1f87
child 789577 b2267f5ae2c9f0f6626f622bc98e3c5f18faf8bb
push id108287
push userbmo:cpearce@mozilla.com
push dateSun, 29 Apr 2018 22:59:13 +0000
reviewersmasayuki
bugs1452536
milestone61.0a1
Bug 1452536 - Don't gesture activate documents on non-printable key events. r=masayuki We don't want key presses of keys which are likely to be intended to be interaction with the browser or OS to gesture activate documents and unblock autoplay videos. So don't gesture activate for key events which are modifier keys, or which don't have a pseudo char code. MozReview-Commit-ID: 6uyPmlzbAvg
dom/events/EventStateManager.cpp
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -924,16 +924,26 @@ EventStateManager::NotifyTargetUserActiv
     return;
   }
 
   nsIDocument* doc = node->OwnerDoc();
   if (!doc || doc->HasBeenUserActivated()) {
     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 ||
              aEvent->mMessage == eTouchEnd);
   doc->NotifyUserActivation();
 }
 
 already_AddRefed<EventStateManager>