commit 62ad9e1b780579ad459823253bcb8b47fefdd414 Author: Arthur Edelstein arthuredelstein@gmail.com Date: Mon Sep 7 22:49:25 2015 -0700
fixup! Bug 15646: Prevent keyboard layout fingerprinting in KeyboardEvent --- dom/events/KeyboardEvent.cpp | 12 +++++++----- dom/events/KeyboardEvent.h | 11 +++++++++++ 2 files changed, 18 insertions(+), 5 deletions(-)
diff --git a/dom/events/KeyboardEvent.cpp b/dom/events/KeyboardEvent.cpp index 19d4e73..3977da8 100644 --- a/dom/events/KeyboardEvent.cpp +++ b/dom/events/KeyboardEvent.cpp @@ -12,11 +12,6 @@ namespace mozilla { namespace dom {
-static bool ResistFingerprinting() { - return nsContentUtils::ResistFingerprinting() && - !nsContentUtils::ThreadsafeIsCallerChrome(); -} - KeyboardEvent::KeyboardEvent(EventTarget* aOwner, nsPresContext* aPresContext, WidgetKeyboardEvent* aEvent) @@ -44,6 +39,13 @@ NS_INTERFACE_MAP_BEGIN(KeyboardEvent) NS_INTERFACE_MAP_END_INHERITING(UIEvent)
bool +KeyboardEvent::ResistFingerprinting() { + return nsContentUtils::ResistFingerprinting() && + nsContentUtils::GetCurrentJSContextForThread() && + !nsContentUtils::ThreadsafeIsCallerChrome(); +} + +bool KeyboardEvent::AltKey() { bool altState = mEvent->AsKeyboardEvent()->IsAlt(); diff --git a/dom/events/KeyboardEvent.h b/dom/events/KeyboardEvent.h index d5b5ae1..af95e84 100644 --- a/dom/events/KeyboardEvent.h +++ b/dom/events/KeyboardEvent.h @@ -53,6 +53,15 @@ public:
bool GetModifierState(const nsAString& aKey) { + if (ResistFingerprinting()) { + if (aKey.Equals(NS_LITERAL_STRING("Alt")) || + aKey.Equals(NS_LITERAL_STRING("AltGraph"))) { + return AltKey(); + } + if (aKey.Equals(NS_LITERAL_STRING("Shift"))) { + return ShiftKey(); + } + } return GetModifierStateInternal(aKey); }
@@ -85,6 +94,8 @@ protected: ErrorResult& aRv);
private: + bool ResistFingerprinting(); + // True, if the instance is created with Constructor(). bool mInitializedByCtor;