gecko-dev/dom/events/PointerEvent.h
Tim Huang 0a30f56cd5 Bug 1363508 - Part 1: Spoofing pen/touch pointer events into mouse pointer events when fingerprinting resistance is on r=arthuredelstein,masayuki,smaug
The pointerType field in the pointer event will reveal the details of
users' hardware; this is a fingerprinting vector. So, we would spoof all
types of pointer events into mouse type pointer events for protecting
users from browser fingerprinting when fingerprinting resistance is on.

In this patch, we would spoof the pointerType as well as other fields
that mouse pointer events don't support, like pressure, tiltX/Y and so
on when fingerprinting resistance is on.

Differential Revision: https://phabricator.services.mozilla.com/D6003

--HG--
extra : moz-landing-system : lando
2018-10-09 11:55:43 +00:00

81 lines
2.5 KiB
C++

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* Portions Copyright 2013 Microsoft Open Technologies, Inc. */
#ifndef mozilla_dom_PointerEvent_h_
#define mozilla_dom_PointerEvent_h_
#include "mozilla/dom/MouseEvent.h"
#include "mozilla/dom/PointerEventBinding.h"
class nsPresContext;
namespace mozilla {
namespace dom {
struct PointerEventInit;
class PointerEvent : public MouseEvent
{
public:
PointerEvent(EventTarget* aOwner,
nsPresContext* aPresContext,
WidgetPointerEvent* aEvent);
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(PointerEvent, MouseEvent)
virtual JSObject* WrapObjectInternal(
JSContext* aCx,
JS::Handle<JSObject*> aGivenProto) override;
static already_AddRefed<PointerEvent>
Constructor(const GlobalObject& aGlobal,
const nsAString& aType,
const PointerEventInit& aParam,
ErrorResult& aRv);
static already_AddRefed<PointerEvent>
Constructor(EventTarget* aOwner,
const nsAString& aType,
const PointerEventInit& aParam);
int32_t PointerId();
int32_t Width(CallerType aCallerType);
int32_t Height(CallerType aCallerType);
float Pressure(CallerType aCallerType);
float TangentialPressure(CallerType aCallerType);
int32_t TiltX(CallerType aCallerType);
int32_t TiltY(CallerType aCallerType);
int32_t Twist(CallerType aCallerType);
bool IsPrimary();
void GetPointerType(nsAString& aPointerType, CallerType aCallerType);
void GetCoalescedEvents(nsTArray<RefPtr<PointerEvent>>& aPointerEvents);
protected:
~PointerEvent() {}
private:
// This method returns the boolean to indicate whether spoofing pointer
// event for fingerprinting resistance.
bool ShouldResistFingerprinting(CallerType aCallerType);
nsTArray<RefPtr<PointerEvent>> mCoalescedEvents;
};
void ConvertPointerTypeToString(uint16_t aPointerTypeSrc, nsAString& aPointerTypeDest);
} // namespace dom
} // namespace mozilla
already_AddRefed<mozilla::dom::PointerEvent>
NS_NewDOMPointerEvent(mozilla::dom::EventTarget* aOwner,
nsPresContext* aPresContext,
mozilla::WidgetPointerEvent* aEvent);
#endif // mozilla_dom_PointerEvent_h_