author Tim Huang <>
Thu, 31 Aug 2017 11:14:14 +0800
changeset 453921 b2f55468b241f28678dc5e35e19eb3b5781a1c5c
parent 402149 ff349ab587f8f1c66a8aab20ae85ff1db831892e
child 508163 6f3709b3878117466168c40affa7bca0b60cf75b
permissions -rw-r--r--
Bug 1222285 - Part 2: Making the keyboard events of modifier keys been suppressed when 'privacy.resistFingerprinting' is true. r=arthuredelstein,masayuki This patch makes 'Shift', 'Alt', 'Contorl' and 'AltGraph' been suppressed for content when fingerprinting resistance is enabled. Chrome can still get these events. The reason behind this is that websites can still observe key combinations to tell which keyboard layout is using even we spoof the keyboardEvent.code, keyboardEvent.keyCode and modifier states. For example, the AZERTY France keyboard, the digit keys of it requires the user press the Shift key. So, it is easy to differentiate AZERTY and QWERTY keyboard by observing whether a Shift key generates its own before the digit keys. There are similar issues for 'Alt' and 'AltGraph' as well. MozReview-Commit-ID: 3CwCgvey4lK

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=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 */

// Original author:

#ifndef logging_h__
#define logging_h__

#include <sstream>
#include "mozilla/Logging.h"


#define ML_ERROR            mozilla::LogLevel::Error
#define ML_WARNING          mozilla::LogLevel::Warning
#define ML_NOTICE           mozilla::LogLevel::Info
#define ML_INFO             mozilla::LogLevel::Debug
#define ML_DEBUG            mozilla::LogLevel::Verbose

#define MOZ_MTLOG_MODULE(n) \
  static mozilla::LogModule* getLogModule() {   \
    static mozilla::LazyLogModule log(n);       \
    return static_cast<mozilla::LogModule*>(log);      \

#define MOZ_MTLOG(level, b)                                       \
  do {                                                            \
    if (MOZ_LOG_TEST(getLogModule(), level)) {                    \
      std::stringstream str;                                      \
      str << b;                                                   \
      MOZ_LOG(getLogModule(), level, ("%s", str.str().c_str()));  \
    }                                                             \
  } while(0)
// When building mtransport outside of XUL, for example in stand-alone gtests,
// PR_Logging needs to be used instead of mozilla logging.

#include "prlog.h"

#define ML_ERROR            PR_LOG_ERROR
#define ML_WARNING          PR_LOG_WARNING
#define ML_NOTICE           PR_LOG_INFO
#define ML_INFO             PR_LOG_DEBUG
#define ML_DEBUG            PR_LOG_VERBOSE

#define MOZ_MTLOG_MODULE(n) \
  static PRLogModuleInfo* getLogModule() {      \
    static PRLogModuleInfo* log;                \
    if (!log)                                   \
      log = PR_NewLogModule(n);                 \
    return log;                                 \

#define MOZ_MTLOG(level, b)                                                         \
  do {                                                                              \
    if (PR_LOG_TEST(getLogModule(), level)) {                                       \
      std::stringstream str;                                                        \
      str << b;                                                                     \
      PR_LOG(getLogModule(), level, ("%s", str.str().c_str()));                     \
    }                                                                               \
  } while(0)
#endif // logging_h__