diff --git a/dom/base/test/useractivation/mochitest.ini b/dom/base/test/useractivation/mochitest.ini
index 9d2ec7daade5..fc1630e7174d 100644
--- a/dom/base/test/useractivation/mochitest.ini
+++ b/dom/base/test/useractivation/mochitest.ini
@@ -9,6 +9,7 @@ prefs =
apz.zoom-to-focused-input.enabled=false
[test_useractivation_has_been_activated.html]
+[test_useractivation_key_events.html]
[test_useractivation_transient.html]
[test_useractivation_transient_consuming.html]
[test_clipboard_editor.html]
diff --git a/dom/base/test/useractivation/test_useractivation_key_events.html b/dom/base/test/useractivation/test_useractivation_key_events.html
new file mode 100644
index 000000000000..d97906c22bcf
--- /dev/null
+++ b/dom/base/test/useractivation/test_useractivation_key_events.html
@@ -0,0 +1,91 @@
+
+
+
+ User activation test: key events
+
+
+
+
+
+
+
diff --git a/widget/TextEvents.h b/widget/TextEvents.h
index b4c4b9e95c39..4882bc2babd4 100644
--- a/widget/TextEvents.h
+++ b/widget/TextEvents.h
@@ -317,7 +317,16 @@ class WidgetKeyboardEvent : public WidgetInputEvent {
const bool isEnterOrSpaceKey =
mKeyNameIndex == KEY_NAME_INDEX_Enter || mKeyCode == NS_VK_SPACE;
return (PseudoCharCode() || isEnterOrSpaceKey) &&
- !isCombiningWithOperationKeys;
+ (!isCombiningWithOperationKeys ||
+ // ctrl-c/ctrl-x/ctrl-v is quite common shortcut for clipboard
+ // operation.
+ // XXXedgar, we have to find a better way to handle browser keyboard
+ // shortcut for user activation, instead of just ignoring all
+ // combinations, see bug 1641171.
+ ((mKeyCode == dom::KeyboardEvent_Binding::DOM_VK_C ||
+ mKeyCode == dom::KeyboardEvent_Binding::DOM_VK_V ||
+ mKeyCode == dom::KeyboardEvent_Binding::DOM_VK_X) &&
+ IsAccel()));
}
/**