gecko-dev/dom/base/FuzzingFunctions.h
Masayuki Nakano 339308fcab Bug 1343955 - part 4: Implement static API to synthesize keyboard events into FuzzingFunctions r=smaug
Synthesizing keyboard events is dangerous and such API is requested only by
fuzzing test.  So, we should add it into FuzzingFunctions which is built
only when |ac_add_options --enable-fuzzing| is specified and enabled by
the pref.

This patch implements the API as synthesizing keyboard events in the focused
widget and the synthesized events are propagated as native key events except
APZ (because keyboard events are synthesized only in the process).  This
behavior allows to test including any default action handlers such as
EventStateManager and setting WidgetGUIEvent::mWidget since some C++ handler
checks if it's nullptr.

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

--HG--
extra : moz-landing-system : lando
2018-10-02 12:16:45 +00:00

79 lines
2.6 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/. */
#ifndef mozilla_dom_FuzzingFunctions
#define mozilla_dom_FuzzingFunctions
#include "mozilla/EventForwards.h"
class nsIWidget;
namespace mozilla {
class ErrorResult;
class TextInputProcessor;
namespace dom {
class GlobalObject;
struct KeyboardEventInit;
class FuzzingFunctions final
{
public:
static void
GarbageCollect(const GlobalObject&);
static void
CycleCollect(const GlobalObject&);
static void
EnableAccessibility(const GlobalObject&, ErrorResult& aRv);
static void
SynthesizeKeyboardEvents(const GlobalObject& aGlobalObject,
const nsAString& aKeyValue,
const KeyboardEventInit& aKeyboardEvent,
ErrorResult& aRv);
private:
/**
* ActivateModifiers() activates aModifiers in the TextInputProcessor.
*
* @param aTextInputProcessor The TIP whose modifier state you want to change.
* @param aModifiers Modifiers which you want to activate.
* @param aWidget The widget which should be set to
* WidgetKeyboardEvent.
* @param aRv Returns error if TextInputProcessor fails to
* dispatch a modifier key event.
* @return Modifiers which are activated by the call.
*/
static Modifiers
ActivateModifiers(TextInputProcessor* aTextInputProcessor,
Modifiers aModifiers, nsIWidget* aWidget, ErrorResult& aRv);
/**
* InactivateModifiers() inactivates aModifiers in the TextInputProcessor.
*
* @param aTextInputProcessor The TIP whose modifier state you want to change.
* @param aModifiers Modifiers which you want to inactivate.
* @param aWidget The widget which should be set to
* WidgetKeyboardEvent.
* @param aRv Returns error if TextInputProcessor fails to
* dispatch a modifier key event.
* @return Modifiers which are inactivated by the call.
*/
static Modifiers
InactivateModifiers(TextInputProcessor* aTextInputProcessor,
Modifiers aModifiers, nsIWidget* aWidget,
ErrorResult& aRv);
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_FuzzingFunctions