/work/obj-fuzz/dist/include/mozilla/layers/GeckoContentController.h
Line | Count | Source (jump to first uncovered line) |
1 | | /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ |
2 | | /* vim: set ts=8 sts=2 et sw=2 tw=80: */ |
3 | | /* This Source Code Form is subject to the terms of the Mozilla Public |
4 | | * License, v. 2.0. If a copy of the MPL was not distributed with this |
5 | | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
6 | | |
7 | | #ifndef mozilla_layers_GeckoContentController_h |
8 | | #define mozilla_layers_GeckoContentController_h |
9 | | |
10 | | #include "FrameMetrics.h" // for FrameMetrics, etc |
11 | | #include "InputData.h" // for PinchGestureInput |
12 | | #include "Units.h" // for CSSPoint, CSSRect, etc |
13 | | #include "mozilla/Assertions.h" // for MOZ_ASSERT_HELPER2 |
14 | | #include "mozilla/DefineEnum.h" // for MOZ_DEFINE_ENUM |
15 | | #include "mozilla/EventForwards.h" // for Modifiers |
16 | | #include "nsISupportsImpl.h" |
17 | | |
18 | | namespace mozilla { |
19 | | |
20 | | class Runnable; |
21 | | |
22 | | namespace layers { |
23 | | |
24 | | class GeckoContentController |
25 | | { |
26 | | public: |
27 | | NS_INLINE_DECL_THREADSAFE_REFCOUNTING(GeckoContentController) |
28 | | |
29 | | /** |
30 | | * Requests a paint of the given FrameMetrics |aFrameMetrics| from Gecko. |
31 | | * Implementations per-platform are responsible for actually handling this. |
32 | | * |
33 | | * This method must always be called on the repaint thread, which depends |
34 | | * on the GeckoContentController. For ChromeProcessController it is the |
35 | | * Gecko main thread, while for RemoteContentController it is the compositor |
36 | | * thread where it can send IPDL messages. |
37 | | */ |
38 | | virtual void RequestContentRepaint(const FrameMetrics& aFrameMetrics) = 0; |
39 | | |
40 | | /** |
41 | | * Different types of tap-related events that can be sent in |
42 | | * the HandleTap function. The names should be relatively self-explanatory. |
43 | | * Note that the eLongTapUp will always be preceded by an eLongTap, but not |
44 | | * all eLongTap notifications will be followed by an eLongTapUp (for instance, |
45 | | * if the user moves their finger after triggering the long-tap but before |
46 | | * lifting it). |
47 | | * The difference between eDoubleTap and eSecondTap is subtle - the eDoubleTap |
48 | | * is for an actual double-tap "gesture" while eSecondTap is for the same user |
49 | | * input but where a double-tap gesture is not allowed. This is used to fire |
50 | | * a click event with detail=2 to web content (similar to what a mouse double- |
51 | | * click would do). |
52 | | */ |
53 | | MOZ_DEFINE_ENUM_CLASS_AT_CLASS_SCOPE( |
54 | | TapType, ( |
55 | | eSingleTap, |
56 | | eDoubleTap, |
57 | | eSecondTap, |
58 | | eLongTap, |
59 | | eLongTapUp |
60 | | )); |
61 | | |
62 | | /** |
63 | | * Requests handling of a tap event. |aPoint| is in LD pixels, relative to the |
64 | | * current scroll offset. |
65 | | */ |
66 | | virtual void HandleTap(TapType aType, |
67 | | const LayoutDevicePoint& aPoint, |
68 | | Modifiers aModifiers, |
69 | | const ScrollableLayerGuid& aGuid, |
70 | | uint64_t aInputBlockId) = 0; |
71 | | |
72 | | /** |
73 | | * When the apz.allow_zooming pref is set to false, the APZ will not |
74 | | * translate pinch gestures to actual zooming. Instead, it will call this |
75 | | * method to notify gecko of the pinch gesture, and allow it to deal with it |
76 | | * however it wishes. Note that this function is not called if the pinch is |
77 | | * prevented by content calling preventDefault() on the touch events, or via |
78 | | * use of the touch-action property. |
79 | | * @param aType One of PINCHGESTURE_START, PINCHGESTURE_SCALE, or |
80 | | * PINCHGESTURE_END, indicating the phase of the pinch. |
81 | | * @param aGuid The guid of the APZ that is detecting the pinch. This is |
82 | | * generally the root APZC for the layers id. |
83 | | * @param aSpanChange For the START or END event, this is always 0. |
84 | | * For a SCALE event, this is the difference in span between the |
85 | | * previous state and the new state. |
86 | | * @param aModifiers The keyboard modifiers depressed during the pinch. |
87 | | */ |
88 | | virtual void NotifyPinchGesture(PinchGestureInput::PinchGestureType aType, |
89 | | const ScrollableLayerGuid& aGuid, |
90 | | LayoutDeviceCoord aSpanChange, |
91 | | Modifiers aModifiers) = 0; |
92 | | |
93 | | /** |
94 | | * Schedules a runnable to run on the controller/UI thread at some time |
95 | | * in the future. |
96 | | * This method must always be called on the controller thread. |
97 | | */ |
98 | | virtual void PostDelayedTask(already_AddRefed<Runnable> aRunnable, int aDelayMs) = 0; |
99 | | |
100 | | /** |
101 | | * Returns true if we are currently on the thread that can send repaint requests. |
102 | | */ |
103 | | virtual bool IsRepaintThread() = 0; |
104 | | |
105 | | /** |
106 | | * Runs the given task on the "repaint" thread. |
107 | | */ |
108 | | virtual void DispatchToRepaintThread(already_AddRefed<Runnable> aTask) = 0; |
109 | | |
110 | | MOZ_DEFINE_ENUM_CLASS_AT_CLASS_SCOPE( |
111 | | APZStateChange, ( |
112 | | /** |
113 | | * APZ started modifying the view (including panning, zooming, and fling). |
114 | | */ |
115 | | eTransformBegin, |
116 | | /** |
117 | | * APZ finished modifying the view. |
118 | | */ |
119 | | eTransformEnd, |
120 | | /** |
121 | | * APZ started a touch. |
122 | | * |aArg| is 1 if touch can be a pan, 0 otherwise. |
123 | | */ |
124 | | eStartTouch, |
125 | | /** |
126 | | * APZ started a pan. |
127 | | */ |
128 | | eStartPanning, |
129 | | /** |
130 | | * APZ finished processing a touch. |
131 | | * |aArg| is 1 if touch was a click, 0 otherwise. |
132 | | */ |
133 | | eEndTouch |
134 | | )); |
135 | | |
136 | | /** |
137 | | * General notices of APZ state changes for consumers. |
138 | | * |aGuid| identifies the APZC originating the state change. |
139 | | * |aChange| identifies the type of state change |
140 | | * |aArg| is used by some state changes to pass extra information (see |
141 | | * the documentation for each state change above) |
142 | | */ |
143 | | virtual void NotifyAPZStateChange(const ScrollableLayerGuid& aGuid, |
144 | | APZStateChange aChange, |
145 | 0 | int aArg = 0) {} |
146 | | |
147 | | /** |
148 | | * Notify content of a MozMouseScrollFailed event. |
149 | | */ |
150 | | virtual void NotifyMozMouseScrollEvent(const FrameMetrics::ViewID& aScrollId, const nsString& aEvent) |
151 | 0 | {} |
152 | | |
153 | | /** |
154 | | * Notify content that the repaint requests have been flushed. |
155 | | */ |
156 | | virtual void NotifyFlushComplete() = 0; |
157 | | |
158 | | virtual void NotifyAsyncScrollbarDragRejected(const FrameMetrics::ViewID& aScrollId) = 0; |
159 | | virtual void NotifyAsyncAutoscrollRejected(const FrameMetrics::ViewID& aScrollId) = 0; |
160 | | |
161 | | virtual void CancelAutoscroll(const ScrollableLayerGuid& aGuid) = 0; |
162 | | |
163 | 0 | virtual void UpdateOverscrollVelocity(float aX, float aY, bool aIsRootContent) {} |
164 | 0 | virtual void UpdateOverscrollOffset(float aX, float aY, bool aIsRootContent) {} |
165 | | |
166 | 0 | GeckoContentController() {} |
167 | | |
168 | | /** |
169 | | * Needs to be called on the main thread. |
170 | | */ |
171 | 0 | virtual void Destroy() {} |
172 | | |
173 | | protected: |
174 | | // Protected destructor, to discourage deletion outside of Release(): |
175 | 0 | virtual ~GeckoContentController() {} |
176 | | }; |
177 | | |
178 | | } // namespace layers |
179 | | } // namespace mozilla |
180 | | |
181 | | #endif // mozilla_layers_GeckoContentController_h |