1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/widget/android/AndroidJavaWrappers.h Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,732 @@ 1.4 +/* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- 1.5 + * This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +#ifndef AndroidJavaWrappers_h__ 1.10 +#define AndroidJavaWrappers_h__ 1.11 + 1.12 +#include <jni.h> 1.13 +#include <android/input.h> 1.14 +#include <android/log.h> 1.15 + 1.16 +#include "nsGeoPosition.h" 1.17 +#include "nsRect.h" 1.18 +#include "nsString.h" 1.19 +#include "nsTArray.h" 1.20 +#include "nsIObserver.h" 1.21 +#include "nsIAndroidBridge.h" 1.22 +#include "mozilla/gfx/Rect.h" 1.23 +#include "mozilla/dom/Touch.h" 1.24 +#include "mozilla/EventForwards.h" 1.25 +#include "InputData.h" 1.26 +#include "Units.h" 1.27 + 1.28 +//#define FORCE_ALOG 1 1.29 + 1.30 +class nsIAndroidDisplayport; 1.31 +class nsIAndroidViewport; 1.32 +class nsIWidget; 1.33 + 1.34 +namespace mozilla { 1.35 + 1.36 +class AutoLocalJNIFrame; 1.37 + 1.38 +void InitAndroidJavaWrappers(JNIEnv *jEnv); 1.39 + 1.40 +/* 1.41 + * Note: do not store global refs to any WrappedJavaObject; 1.42 + * these are live only during a particular JNI method, as 1.43 + * NewGlobalRef is -not- called on the jobject. 1.44 + * 1.45 + * If this is needed, WrappedJavaObject can be extended to 1.46 + * handle it. 1.47 + */ 1.48 + 1.49 +class RefCountedJavaObject { 1.50 +public: 1.51 + RefCountedJavaObject(JNIEnv* env, jobject obj) : mRefCnt(0), mObject(env->NewGlobalRef(obj)) {} 1.52 + 1.53 + ~RefCountedJavaObject(); 1.54 + 1.55 + int32_t AddRef() { return ++mRefCnt; } 1.56 + 1.57 + int32_t Release() { 1.58 + int32_t refcnt = --mRefCnt; 1.59 + if (refcnt == 0) 1.60 + delete this; 1.61 + return refcnt; 1.62 + } 1.63 + 1.64 + jobject GetObject() { return mObject; } 1.65 +private: 1.66 + int32_t mRefCnt; 1.67 + jobject mObject; 1.68 +}; 1.69 + 1.70 +class WrappedJavaObject { 1.71 +public: 1.72 + WrappedJavaObject() : 1.73 + wrapped_obj(nullptr) 1.74 + { } 1.75 + 1.76 + WrappedJavaObject(jobject jobj) : wrapped_obj(nullptr) { 1.77 + Init(jobj); 1.78 + } 1.79 + 1.80 + void Init(jobject jobj) { 1.81 + wrapped_obj = jobj; 1.82 + } 1.83 + 1.84 + bool isNull() const { 1.85 + return wrapped_obj == nullptr; 1.86 + } 1.87 + 1.88 + jobject wrappedObject() const { 1.89 + return wrapped_obj; 1.90 + } 1.91 + 1.92 +protected: 1.93 + jobject wrapped_obj; 1.94 +}; 1.95 + 1.96 +class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{ 1.97 +public: 1.98 + AutoGlobalWrappedJavaObject() : 1.99 + wrapped_obj(nullptr) 1.100 + { } 1.101 + 1.102 + AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(nullptr) { 1.103 + Init(jobj, env); 1.104 + } 1.105 + 1.106 + virtual ~AutoGlobalWrappedJavaObject(); 1.107 + void Dispose(); 1.108 + 1.109 + void Init(jobject jobj, JNIEnv* env) { 1.110 + if (!isNull()) { 1.111 + env->DeleteGlobalRef(wrapped_obj); 1.112 + } 1.113 + wrapped_obj = env->NewGlobalRef(jobj); 1.114 + } 1.115 + 1.116 + bool isNull() const { 1.117 + return wrapped_obj == nullptr; 1.118 + } 1.119 + 1.120 + jobject wrappedObject() const { 1.121 + return wrapped_obj; 1.122 + } 1.123 + 1.124 +protected: 1.125 + jobject wrapped_obj; 1.126 +}; 1.127 + 1.128 +class AndroidPoint : public WrappedJavaObject 1.129 +{ 1.130 +public: 1.131 + static void InitPointClass(JNIEnv *jEnv); 1.132 + 1.133 + AndroidPoint() { } 1.134 + AndroidPoint(JNIEnv *jenv, jobject jobj) { 1.135 + Init(jenv, jobj); 1.136 + } 1.137 + 1.138 + void Init(JNIEnv *jenv, jobject jobj); 1.139 + 1.140 + int X() { return mX; } 1.141 + int Y() { return mY; } 1.142 + 1.143 +protected: 1.144 + int mX; 1.145 + int mY; 1.146 + 1.147 + static jclass jPointClass; 1.148 + static jfieldID jXField; 1.149 + static jfieldID jYField; 1.150 +}; 1.151 + 1.152 +class AndroidRect : public WrappedJavaObject 1.153 +{ 1.154 +public: 1.155 + static void InitRectClass(JNIEnv *jEnv); 1.156 + 1.157 + AndroidRect() { } 1.158 + AndroidRect(JNIEnv *jenv, jobject jobj) { 1.159 + Init(jenv, jobj); 1.160 + } 1.161 + 1.162 + void Init(JNIEnv *jenv, jobject jobj); 1.163 + 1.164 + int Bottom() { return mBottom; } 1.165 + int Left() { return mLeft; } 1.166 + int Right() { return mRight; } 1.167 + int Top() { return mTop; } 1.168 + int Width() { return mRight - mLeft; } 1.169 + int Height() { return mBottom - mTop; } 1.170 + 1.171 +protected: 1.172 + int mBottom; 1.173 + int mLeft; 1.174 + int mRight; 1.175 + int mTop; 1.176 + 1.177 + static jclass jRectClass; 1.178 + static jfieldID jBottomField; 1.179 + static jfieldID jLeftField; 1.180 + static jfieldID jRightField; 1.181 + static jfieldID jTopField; 1.182 +}; 1.183 + 1.184 +class AndroidRectF : public WrappedJavaObject 1.185 +{ 1.186 +public: 1.187 + static void InitRectFClass(JNIEnv *jEnv); 1.188 + 1.189 + AndroidRectF() { } 1.190 + AndroidRectF(JNIEnv *jenv, jobject jobj) { 1.191 + Init(jenv, jobj); 1.192 + } 1.193 + 1.194 + void Init(JNIEnv *jenv, jobject jobj); 1.195 + 1.196 + float Bottom() { return mBottom; } 1.197 + float Left() { return mLeft; } 1.198 + float Right() { return mRight; } 1.199 + float Top() { return mTop; } 1.200 + float Width() { return mRight - mLeft; } 1.201 + float Height() { return mBottom - mTop; } 1.202 + 1.203 +protected: 1.204 + float mBottom; 1.205 + float mLeft; 1.206 + float mRight; 1.207 + float mTop; 1.208 + 1.209 + static jclass jRectClass; 1.210 + static jfieldID jBottomField; 1.211 + static jfieldID jLeftField; 1.212 + static jfieldID jRightField; 1.213 + static jfieldID jTopField; 1.214 +}; 1.215 + 1.216 +class AndroidLayerRendererFrame : public WrappedJavaObject { 1.217 +public: 1.218 + static void InitLayerRendererFrameClass(JNIEnv *jEnv); 1.219 + 1.220 + void Init(JNIEnv *env, jobject jobj); 1.221 + void Dispose(JNIEnv *env); 1.222 + 1.223 + bool BeginDrawing(AutoLocalJNIFrame *jniFrame); 1.224 + bool DrawBackground(AutoLocalJNIFrame *jniFrame); 1.225 + bool DrawForeground(AutoLocalJNIFrame *jniFrame); 1.226 + bool EndDrawing(AutoLocalJNIFrame *jniFrame); 1.227 + 1.228 +private: 1.229 + static jclass jLayerRendererFrameClass; 1.230 + static jmethodID jBeginDrawingMethod; 1.231 + static jmethodID jDrawBackgroundMethod; 1.232 + static jmethodID jDrawForegroundMethod; 1.233 + static jmethodID jEndDrawingMethod; 1.234 +}; 1.235 + 1.236 +enum { 1.237 + // These keycode masks are not defined in android/keycodes.h: 1.238 + AKEYCODE_ESCAPE = 111, 1.239 + AKEYCODE_FORWARD_DEL = 112, 1.240 + AKEYCODE_CTRL_LEFT = 113, 1.241 + AKEYCODE_CTRL_RIGHT = 114, 1.242 + AKEYCODE_CAPS_LOCK = 115, 1.243 + AKEYCODE_SCROLL_LOCK = 116, 1.244 + AKEYCODE_META_LEFT = 117, 1.245 + AKEYCODE_META_RIGHT = 118, 1.246 + AKEYCODE_FUNCTION = 119, 1.247 + AKEYCODE_SYSRQ = 120, 1.248 + AKEYCODE_BREAK = 121, 1.249 + AKEYCODE_MOVE_HOME = 122, 1.250 + AKEYCODE_MOVE_END = 123, 1.251 + AKEYCODE_INSERT = 124, 1.252 + AKEYCODE_FORWARD = 125, 1.253 + AKEYCODE_MEDIA_PLAY = 126, 1.254 + AKEYCODE_MEDIA_PAUSE = 127, 1.255 + AKEYCODE_MEDIA_CLOSE = 128, 1.256 + AKEYCODE_MEDIA_EJECT = 129, 1.257 + AKEYCODE_MEDIA_RECORD = 130, 1.258 + AKEYCODE_F1 = 131, 1.259 + AKEYCODE_F2 = 132, 1.260 + AKEYCODE_F3 = 133, 1.261 + AKEYCODE_F4 = 134, 1.262 + AKEYCODE_F5 = 135, 1.263 + AKEYCODE_F6 = 136, 1.264 + AKEYCODE_F7 = 137, 1.265 + AKEYCODE_F8 = 138, 1.266 + AKEYCODE_F9 = 139, 1.267 + AKEYCODE_F10 = 140, 1.268 + AKEYCODE_F11 = 141, 1.269 + AKEYCODE_F12 = 142, 1.270 + AKEYCODE_NUM_LOCK = 143, 1.271 + AKEYCODE_NUMPAD_0 = 144, 1.272 + AKEYCODE_NUMPAD_1 = 145, 1.273 + AKEYCODE_NUMPAD_2 = 146, 1.274 + AKEYCODE_NUMPAD_3 = 147, 1.275 + AKEYCODE_NUMPAD_4 = 148, 1.276 + AKEYCODE_NUMPAD_5 = 149, 1.277 + AKEYCODE_NUMPAD_6 = 150, 1.278 + AKEYCODE_NUMPAD_7 = 151, 1.279 + AKEYCODE_NUMPAD_8 = 152, 1.280 + AKEYCODE_NUMPAD_9 = 153, 1.281 + AKEYCODE_NUMPAD_DIVIDE = 154, 1.282 + AKEYCODE_NUMPAD_MULTIPLY = 155, 1.283 + AKEYCODE_NUMPAD_SUBTRACT = 156, 1.284 + AKEYCODE_NUMPAD_ADD = 157, 1.285 + AKEYCODE_NUMPAD_DOT = 158, 1.286 + AKEYCODE_NUMPAD_COMMA = 159, 1.287 + AKEYCODE_NUMPAD_ENTER = 160, 1.288 + AKEYCODE_NUMPAD_EQUALS = 161, 1.289 + AKEYCODE_NUMPAD_LEFT_PAREN = 162, 1.290 + AKEYCODE_NUMPAD_RIGHT_PAREN = 163, 1.291 + AKEYCODE_VOLUME_MUTE = 164, 1.292 + AKEYCODE_INFO = 165, 1.293 + AKEYCODE_CHANNEL_UP = 166, 1.294 + AKEYCODE_CHANNEL_DOWN = 167, 1.295 + AKEYCODE_ZOOM_IN = 168, 1.296 + AKEYCODE_ZOOM_OUT = 169, 1.297 + AKEYCODE_TV = 170, 1.298 + AKEYCODE_WINDOW = 171, 1.299 + AKEYCODE_GUIDE = 172, 1.300 + AKEYCODE_DVR = 173, 1.301 + AKEYCODE_BOOKMARK = 174, 1.302 + AKEYCODE_CAPTIONS = 175, 1.303 + AKEYCODE_SETTINGS = 176, 1.304 + AKEYCODE_TV_POWER = 177, 1.305 + AKEYCODE_TV_INPUT = 178, 1.306 + AKEYCODE_STB_POWER = 179, 1.307 + AKEYCODE_STB_INPUT = 180, 1.308 + AKEYCODE_AVR_POWER = 181, 1.309 + AKEYCODE_AVR_INPUT = 182, 1.310 + AKEYCODE_PROG_RED = 183, 1.311 + AKEYCODE_PROG_GREEN = 184, 1.312 + AKEYCODE_PROG_YELLOW = 185, 1.313 + AKEYCODE_PROG_BLUE = 186, 1.314 + AKEYCODE_APP_SWITCH = 187, 1.315 + AKEYCODE_BUTTON_1 = 188, 1.316 + AKEYCODE_BUTTON_2 = 189, 1.317 + AKEYCODE_BUTTON_3 = 190, 1.318 + AKEYCODE_BUTTON_4 = 191, 1.319 + AKEYCODE_BUTTON_5 = 192, 1.320 + AKEYCODE_BUTTON_6 = 193, 1.321 + AKEYCODE_BUTTON_7 = 194, 1.322 + AKEYCODE_BUTTON_8 = 195, 1.323 + AKEYCODE_BUTTON_9 = 196, 1.324 + AKEYCODE_BUTTON_10 = 197, 1.325 + AKEYCODE_BUTTON_11 = 198, 1.326 + AKEYCODE_BUTTON_12 = 199, 1.327 + AKEYCODE_BUTTON_13 = 200, 1.328 + AKEYCODE_BUTTON_14 = 201, 1.329 + AKEYCODE_BUTTON_15 = 202, 1.330 + AKEYCODE_BUTTON_16 = 203, 1.331 + AKEYCODE_LANGUAGE_SWITCH = 204, 1.332 + AKEYCODE_MANNER_MODE = 205, 1.333 + AKEYCODE_3D_MODE = 206, 1.334 + AKEYCODE_CONTACTS = 207, 1.335 + AKEYCODE_CALENDAR = 208, 1.336 + AKEYCODE_MUSIC = 209, 1.337 + AKEYCODE_CALCULATOR = 210, 1.338 + AKEYCODE_ZENKAKU_HANKAKU = 211, 1.339 + AKEYCODE_EISU = 212, 1.340 + AKEYCODE_MUHENKAN = 213, 1.341 + AKEYCODE_HENKAN = 214, 1.342 + AKEYCODE_KATAKANA_HIRAGANA = 215, 1.343 + AKEYCODE_YEN = 216, 1.344 + AKEYCODE_RO = 217, 1.345 + AKEYCODE_KANA = 218, 1.346 + AKEYCODE_ASSIST = 219, 1.347 + 1.348 + AMETA_FUNCTION_ON = 0x00000008, 1.349 + AMETA_CTRL_ON = 0x00001000, 1.350 + AMETA_CTRL_LEFT_ON = 0x00002000, 1.351 + AMETA_CTRL_RIGHT_ON = 0x00004000, 1.352 + AMETA_META_ON = 0x00010000, 1.353 + AMETA_META_LEFT_ON = 0x00020000, 1.354 + AMETA_META_RIGHT_ON = 0x00040000, 1.355 + AMETA_CAPS_LOCK_ON = 0x00100000, 1.356 + AMETA_NUM_LOCK_ON = 0x00200000, 1.357 + AMETA_SCROLL_LOCK_ON = 0x00400000, 1.358 + 1.359 + AMETA_ALT_MASK = AMETA_ALT_LEFT_ON | AMETA_ALT_RIGHT_ON | AMETA_ALT_ON, 1.360 + AMETA_CTRL_MASK = AMETA_CTRL_LEFT_ON | AMETA_CTRL_RIGHT_ON | AMETA_CTRL_ON, 1.361 + AMETA_META_MASK = AMETA_META_LEFT_ON | AMETA_META_RIGHT_ON | AMETA_META_ON, 1.362 + AMETA_SHIFT_MASK = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON, 1.363 +}; 1.364 + 1.365 +class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport 1.366 +{ 1.367 +public: 1.368 + NS_DECL_ISUPPORTS 1.369 + virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; } 1.370 + virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; } 1.371 + virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; } 1.372 + virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; } 1.373 + virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; } 1.374 + virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; } 1.375 + virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; } 1.376 + virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; } 1.377 + virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; } 1.378 + virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; } 1.379 + 1.380 + nsAndroidDisplayport(AndroidRectF aRect, float aResolution): 1.381 + mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {} 1.382 + 1.383 +private: 1.384 + ~nsAndroidDisplayport() {} 1.385 + float mLeft, mTop, mRight, mBottom, mResolution; 1.386 +}; 1.387 + 1.388 +class AndroidMotionEvent 1.389 +{ 1.390 +public: 1.391 + enum { 1.392 + ACTION_DOWN = 0, 1.393 + ACTION_UP = 1, 1.394 + ACTION_MOVE = 2, 1.395 + ACTION_CANCEL = 3, 1.396 + ACTION_OUTSIDE = 4, 1.397 + ACTION_POINTER_DOWN = 5, 1.398 + ACTION_POINTER_UP = 6, 1.399 + ACTION_HOVER_MOVE = 7, 1.400 + ACTION_HOVER_ENTER = 9, 1.401 + ACTION_HOVER_EXIT = 10, 1.402 + ACTION_MAGNIFY_START = 11, 1.403 + ACTION_MAGNIFY = 12, 1.404 + ACTION_MAGNIFY_END = 13, 1.405 + EDGE_TOP = 0x00000001, 1.406 + EDGE_BOTTOM = 0x00000002, 1.407 + EDGE_LEFT = 0x00000004, 1.408 + EDGE_RIGHT = 0x00000008, 1.409 + SAMPLE_X = 0, 1.410 + SAMPLE_Y = 1, 1.411 + SAMPLE_PRESSURE = 2, 1.412 + SAMPLE_SIZE = 3, 1.413 + NUM_SAMPLE_DATA = 4, 1.414 + dummy_java_enum_list_end 1.415 + }; 1.416 +}; 1.417 + 1.418 +class AndroidLocation : public WrappedJavaObject 1.419 +{ 1.420 +public: 1.421 + static void InitLocationClass(JNIEnv *jEnv); 1.422 + static nsGeoPosition* CreateGeoPosition(JNIEnv *jenv, jobject jobj); 1.423 + static jclass jLocationClass; 1.424 + static jmethodID jGetLatitudeMethod; 1.425 + static jmethodID jGetLongitudeMethod; 1.426 + static jmethodID jGetAltitudeMethod; 1.427 + static jmethodID jGetAccuracyMethod; 1.428 + static jmethodID jGetBearingMethod; 1.429 + static jmethodID jGetSpeedMethod; 1.430 + static jmethodID jGetTimeMethod; 1.431 +}; 1.432 + 1.433 +class AndroidGeckoEvent : public WrappedJavaObject 1.434 +{ 1.435 +private: 1.436 + AndroidGeckoEvent() { 1.437 + } 1.438 + 1.439 + void Init(JNIEnv *jenv, jobject jobj); 1.440 + void Init(int aType); 1.441 + void Init(AndroidGeckoEvent *aResizeEvent); 1.442 + 1.443 +public: 1.444 + static void InitGeckoEventClass(JNIEnv *jEnv); 1.445 + 1.446 + static AndroidGeckoEvent* MakeNativePoke() { 1.447 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.448 + event->Init(NATIVE_POKE); 1.449 + return event; 1.450 + } 1.451 + 1.452 + static AndroidGeckoEvent* MakeIMEEvent(int aAction) { 1.453 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.454 + event->Init(IME_EVENT); 1.455 + event->mAction = aAction; 1.456 + return event; 1.457 + } 1.458 + 1.459 + static AndroidGeckoEvent* MakeDrawEvent(const nsIntRect& aRect) { 1.460 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.461 + event->Init(DRAW); 1.462 + event->mRect = aRect; 1.463 + return event; 1.464 + } 1.465 + 1.466 + static AndroidGeckoEvent* MakeFromJavaObject(JNIEnv *jenv, jobject jobj) { 1.467 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.468 + event->Init(jenv, jobj); 1.469 + return event; 1.470 + } 1.471 + 1.472 + static AndroidGeckoEvent* CopyResizeEvent(AndroidGeckoEvent *aResizeEvent) { 1.473 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.474 + event->Init(aResizeEvent); 1.475 + return event; 1.476 + } 1.477 + 1.478 + static AndroidGeckoEvent* MakeBroadcastEvent(const nsCString& topic, const nsCString& data) { 1.479 + AndroidGeckoEvent* event = new AndroidGeckoEvent(); 1.480 + event->Init(BROADCAST); 1.481 + CopyUTF8toUTF16(topic, event->mCharacters); 1.482 + CopyUTF8toUTF16(data, event->mCharactersExtra); 1.483 + return event; 1.484 + } 1.485 + 1.486 + static AndroidGeckoEvent* MakeAddObserver(const nsAString &key, nsIObserver *observer) { 1.487 + AndroidGeckoEvent *event = new AndroidGeckoEvent(); 1.488 + event->Init(ADD_OBSERVER); 1.489 + event->mCharacters.Assign(key); 1.490 + event->mObserver = observer; 1.491 + return event; 1.492 + } 1.493 + 1.494 + int Action() { return mAction; } 1.495 + int Type() { return mType; } 1.496 + bool AckNeeded() { return mAckNeeded; } 1.497 + int64_t Time() { return mTime; } 1.498 + const nsTArray<nsIntPoint>& Points() { return mPoints; } 1.499 + const nsTArray<int>& PointIndicies() { return mPointIndicies; } 1.500 + const nsTArray<float>& Pressures() { return mPressures; } 1.501 + const nsTArray<float>& Orientations() { return mOrientations; } 1.502 + const nsTArray<nsIntPoint>& PointRadii() { return mPointRadii; } 1.503 + const nsTArray<nsString>& PrefNames() { return mPrefNames; } 1.504 + double X() { return mX; } 1.505 + double Y() { return mY; } 1.506 + double Z() { return mZ; } 1.507 + const nsIntRect& Rect() { return mRect; } 1.508 + nsAString& Characters() { return mCharacters; } 1.509 + nsAString& CharactersExtra() { return mCharactersExtra; } 1.510 + nsAString& Data() { return mData; } 1.511 + int KeyCode() { return mKeyCode; } 1.512 + int MetaState() { return mMetaState; } 1.513 + uint32_t DomKeyLocation() { return mDomKeyLocation; } 1.514 + Modifiers DOMModifiers() const; 1.515 + bool IsAltPressed() const { return (mMetaState & AMETA_ALT_MASK) != 0; } 1.516 + bool IsShiftPressed() const { return (mMetaState & AMETA_SHIFT_MASK) != 0; } 1.517 + bool IsCtrlPressed() const { return (mMetaState & AMETA_CTRL_MASK) != 0; } 1.518 + bool IsMetaPressed() const { return (mMetaState & AMETA_META_MASK) != 0; } 1.519 + int Flags() { return mFlags; } 1.520 + int UnicodeChar() { return mUnicodeChar; } 1.521 + int BaseUnicodeChar() { return mBaseUnicodeChar; } 1.522 + int DOMPrintableKeyValue() { return mDOMPrintableKeyValue; } 1.523 + int RepeatCount() const { return mRepeatCount; } 1.524 + int Count() { return mCount; } 1.525 + int Start() { return mStart; } 1.526 + int End() { return mEnd; } 1.527 + int PointerIndex() { return mPointerIndex; } 1.528 + int RangeType() { return mRangeType; } 1.529 + int RangeStyles() { return mRangeStyles; } 1.530 + int RangeLineStyle() { return mRangeLineStyle; } 1.531 + bool RangeBoldLine() { return mRangeBoldLine; } 1.532 + int RangeForeColor() { return mRangeForeColor; } 1.533 + int RangeBackColor() { return mRangeBackColor; } 1.534 + int RangeLineColor() { return mRangeLineColor; } 1.535 + nsGeoPosition* GeoPosition() { return mGeoPosition; } 1.536 + int ConnectionType() { return mConnectionType; } 1.537 + bool IsWifi() { return mIsWifi; } 1.538 + int DHCPGateway() { return mDHCPGateway; } 1.539 + short ScreenOrientation() { return mScreenOrientation; } 1.540 + RefCountedJavaObject* ByteBuffer() { return mByteBuffer; } 1.541 + int Width() { return mWidth; } 1.542 + int Height() { return mHeight; } 1.543 + int RequestId() { return mCount; } // for convenience 1.544 + WidgetTouchEvent MakeTouchEvent(nsIWidget* widget); 1.545 + MultiTouchInput MakeMultiTouchInput(nsIWidget* widget); 1.546 + WidgetMouseEvent MakeMouseEvent(nsIWidget* widget); 1.547 + void UnionRect(nsIntRect const& aRect); 1.548 + nsIObserver *Observer() { return mObserver; } 1.549 + 1.550 +protected: 1.551 + int mAction; 1.552 + int mType; 1.553 + bool mAckNeeded; 1.554 + int64_t mTime; 1.555 + nsTArray<nsIntPoint> mPoints; 1.556 + nsTArray<nsIntPoint> mPointRadii; 1.557 + nsTArray<int> mPointIndicies; 1.558 + nsTArray<float> mOrientations; 1.559 + nsTArray<float> mPressures; 1.560 + nsIntRect mRect; 1.561 + int mFlags, mMetaState; 1.562 + uint32_t mDomKeyLocation; 1.563 + int mKeyCode, mUnicodeChar, mBaseUnicodeChar, mDOMPrintableKeyValue; 1.564 + int mRepeatCount; 1.565 + int mCount; 1.566 + int mStart, mEnd; 1.567 + int mRangeType, mRangeStyles, mRangeLineStyle; 1.568 + bool mRangeBoldLine; 1.569 + int mRangeForeColor, mRangeBackColor, mRangeLineColor; 1.570 + double mX, mY, mZ; 1.571 + int mPointerIndex; 1.572 + nsString mCharacters, mCharactersExtra, mData; 1.573 + nsRefPtr<nsGeoPosition> mGeoPosition; 1.574 + int mConnectionType; 1.575 + bool mIsWifi; 1.576 + int mDHCPGateway; 1.577 + short mScreenOrientation; 1.578 + nsRefPtr<RefCountedJavaObject> mByteBuffer; 1.579 + int mWidth, mHeight; 1.580 + nsCOMPtr<nsIObserver> mObserver; 1.581 + nsTArray<nsString> mPrefNames; 1.582 + 1.583 + void ReadIntArray(nsTArray<int> &aVals, 1.584 + JNIEnv *jenv, 1.585 + jfieldID field, 1.586 + int32_t count); 1.587 + void ReadFloatArray(nsTArray<float> &aVals, 1.588 + JNIEnv *jenv, 1.589 + jfieldID field, 1.590 + int32_t count); 1.591 + void ReadPointArray(nsTArray<nsIntPoint> &mPoints, 1.592 + JNIEnv *jenv, 1.593 + jfieldID field, 1.594 + int32_t count); 1.595 + void ReadStringArray(nsTArray<nsString> &aStrings, 1.596 + JNIEnv *jenv, 1.597 + jfieldID field); 1.598 + void ReadRectField(JNIEnv *jenv); 1.599 + void ReadCharactersField(JNIEnv *jenv); 1.600 + void ReadCharactersExtraField(JNIEnv *jenv); 1.601 + void ReadDataField(JNIEnv *jenv); 1.602 + void ReadStringFromJString(nsString &aString, JNIEnv *jenv, jstring s); 1.603 + 1.604 + uint32_t ReadDomKeyLocation(JNIEnv* jenv, jobject jGeckoEventObj); 1.605 + 1.606 + static jclass jGeckoEventClass; 1.607 + static jfieldID jActionField; 1.608 + static jfieldID jTypeField; 1.609 + static jfieldID jAckNeededField; 1.610 + static jfieldID jTimeField; 1.611 + static jfieldID jPoints; 1.612 + static jfieldID jPointIndicies; 1.613 + static jfieldID jOrientations; 1.614 + static jfieldID jPressures; 1.615 + static jfieldID jPointRadii; 1.616 + static jfieldID jXField; 1.617 + static jfieldID jYField; 1.618 + static jfieldID jZField; 1.619 + static jfieldID jDistanceField; 1.620 + static jfieldID jRectField; 1.621 + static jfieldID jNativeWindowField; 1.622 + 1.623 + static jfieldID jCharactersField; 1.624 + static jfieldID jCharactersExtraField; 1.625 + static jfieldID jDataField; 1.626 + static jfieldID jDOMPrintableKeyValueField; 1.627 + static jfieldID jKeyCodeField; 1.628 + static jfieldID jMetaStateField; 1.629 + static jfieldID jDomKeyLocationField; 1.630 + static jfieldID jFlagsField; 1.631 + static jfieldID jCountField; 1.632 + static jfieldID jStartField; 1.633 + static jfieldID jEndField; 1.634 + static jfieldID jPointerIndexField; 1.635 + static jfieldID jUnicodeCharField; 1.636 + static jfieldID jBaseUnicodeCharField; 1.637 + static jfieldID jRepeatCountField; 1.638 + static jfieldID jRangeTypeField; 1.639 + static jfieldID jRangeStylesField; 1.640 + static jfieldID jRangeLineStyleField; 1.641 + static jfieldID jRangeBoldLineField; 1.642 + static jfieldID jRangeForeColorField; 1.643 + static jfieldID jRangeBackColorField; 1.644 + static jfieldID jRangeLineColorField; 1.645 + static jfieldID jLocationField; 1.646 + static jfieldID jPrefNamesField; 1.647 + 1.648 + static jfieldID jConnectionTypeField; 1.649 + static jfieldID jIsWifiField; 1.650 + static jfieldID jDHCPGatewayField; 1.651 + 1.652 + static jfieldID jScreenOrientationField; 1.653 + static jfieldID jByteBufferField; 1.654 + 1.655 + static jfieldID jWidthField; 1.656 + static jfieldID jHeightField; 1.657 + 1.658 + static jclass jDomKeyLocationClass; 1.659 + static jfieldID jDomKeyLocationValueField; 1.660 + 1.661 +public: 1.662 + enum { 1.663 + NATIVE_POKE = 0, 1.664 + KEY_EVENT = 1, 1.665 + MOTION_EVENT = 2, 1.666 + SENSOR_EVENT = 3, 1.667 + LOCATION_EVENT = 5, 1.668 + IME_EVENT = 6, 1.669 + DRAW = 7, 1.670 + SIZE_CHANGED = 8, 1.671 + APP_BACKGROUNDING = 9, 1.672 + APP_FOREGROUNDING = 10, 1.673 + LOAD_URI = 12, 1.674 + NOOP = 15, 1.675 + FORCED_RESIZE = 16, // used internally in nsAppShell/nsWindow 1.676 + BROADCAST = 19, 1.677 + VIEWPORT = 20, 1.678 + VISITED = 21, 1.679 + NETWORK_CHANGED = 22, 1.680 + THUMBNAIL = 25, 1.681 + SCREENORIENTATION_CHANGED = 27, 1.682 + COMPOSITOR_CREATE = 28, 1.683 + COMPOSITOR_PAUSE = 29, 1.684 + COMPOSITOR_RESUME = 30, 1.685 + NATIVE_GESTURE_EVENT = 31, 1.686 + IME_KEY_EVENT = 32, 1.687 + CALL_OBSERVER = 33, 1.688 + REMOVE_OBSERVER = 34, 1.689 + LOW_MEMORY = 35, 1.690 + NETWORK_LINK_CHANGE = 36, 1.691 + TELEMETRY_HISTOGRAM_ADD = 37, 1.692 + ADD_OBSERVER = 38, 1.693 + PREFERENCES_OBSERVE = 39, 1.694 + PREFERENCES_GET = 40, 1.695 + PREFERENCES_REMOVE_OBSERVERS = 41, 1.696 + TELEMETRY_UI_SESSION_START = 42, 1.697 + TELEMETRY_UI_SESSION_STOP = 43, 1.698 + TELEMETRY_UI_EVENT = 44, 1.699 + dummy_java_enum_list_end 1.700 + }; 1.701 + 1.702 + enum { 1.703 + // Memory pressure levels. Keep these in sync with those in MemoryMonitor.java. 1.704 + MEMORY_PRESSURE_NONE = 0, 1.705 + MEMORY_PRESSURE_CLEANUP = 1, 1.706 + MEMORY_PRESSURE_LOW = 2, 1.707 + MEMORY_PRESSURE_MEDIUM = 3, 1.708 + MEMORY_PRESSURE_HIGH = 4 1.709 + }; 1.710 + 1.711 + enum { 1.712 + // Internal Gecko events 1.713 + IME_FLUSH_CHANGES = -2, 1.714 + IME_UPDATE_CONTEXT = -1, 1.715 + // Events from Java to Gecko 1.716 + IME_SYNCHRONIZE = 0, 1.717 + IME_REPLACE_TEXT = 1, 1.718 + IME_SET_SELECTION = 2, 1.719 + IME_ADD_COMPOSITION_RANGE = 3, 1.720 + IME_UPDATE_COMPOSITION = 4, 1.721 + IME_REMOVE_COMPOSITION = 5, 1.722 + IME_ACKNOWLEDGE_FOCUS = 6, 1.723 + dummy_ime_enum_list_end 1.724 + }; 1.725 +}; 1.726 + 1.727 +class nsJNIString : public nsString 1.728 +{ 1.729 +public: 1.730 + nsJNIString(jstring jstr, JNIEnv *jenv); 1.731 +}; 1.732 + 1.733 +} 1.734 + 1.735 +#endif