widget/android/AndroidJavaWrappers.h

Thu, 22 Jan 2015 13:21:57 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 22 Jan 2015 13:21:57 +0100
branch
TOR_BUG_9701
changeset 15
b8a032363ba2
permissions
-rw-r--r--

Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6

     1 /* -*- Mode: c++; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
     2  * This Source Code Form is subject to the terms of the Mozilla Public
     3  * License, v. 2.0. If a copy of the MPL was not distributed with this
     4  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     6 #ifndef AndroidJavaWrappers_h__
     7 #define AndroidJavaWrappers_h__
     9 #include <jni.h>
    10 #include <android/input.h>
    11 #include <android/log.h>
    13 #include "nsGeoPosition.h"
    14 #include "nsRect.h"
    15 #include "nsString.h"
    16 #include "nsTArray.h"
    17 #include "nsIObserver.h"
    18 #include "nsIAndroidBridge.h"
    19 #include "mozilla/gfx/Rect.h"
    20 #include "mozilla/dom/Touch.h"
    21 #include "mozilla/EventForwards.h"
    22 #include "InputData.h"
    23 #include "Units.h"
    25 //#define FORCE_ALOG 1
    27 class nsIAndroidDisplayport;
    28 class nsIAndroidViewport;
    29 class nsIWidget;
    31 namespace mozilla {
    33 class AutoLocalJNIFrame;
    35 void InitAndroidJavaWrappers(JNIEnv *jEnv);
    37 /*
    38  * Note: do not store global refs to any WrappedJavaObject;
    39  * these are live only during a particular JNI method, as
    40  * NewGlobalRef is -not- called on the jobject.
    41  *
    42  * If this is needed, WrappedJavaObject can be extended to
    43  * handle it.
    44  */
    46 class RefCountedJavaObject {
    47 public:
    48     RefCountedJavaObject(JNIEnv* env, jobject obj) : mRefCnt(0), mObject(env->NewGlobalRef(obj)) {}
    50     ~RefCountedJavaObject();
    52     int32_t AddRef() { return ++mRefCnt; }
    54     int32_t Release() {
    55         int32_t refcnt = --mRefCnt;
    56         if (refcnt == 0)
    57             delete this;
    58         return refcnt;
    59     }
    61     jobject GetObject() { return mObject; }
    62 private:
    63     int32_t mRefCnt;
    64     jobject mObject;
    65 };
    67 class WrappedJavaObject {
    68 public:
    69     WrappedJavaObject() :
    70         wrapped_obj(nullptr)
    71     { }
    73     WrappedJavaObject(jobject jobj) : wrapped_obj(nullptr) {
    74         Init(jobj);
    75     }
    77     void Init(jobject jobj) {
    78         wrapped_obj = jobj;
    79     }
    81     bool isNull() const {
    82         return wrapped_obj == nullptr;
    83     }
    85     jobject wrappedObject() const {
    86         return wrapped_obj;
    87     }
    89 protected:
    90     jobject wrapped_obj;
    91 };
    93 class AutoGlobalWrappedJavaObject : protected WrappedJavaObject{
    94 public:
    95     AutoGlobalWrappedJavaObject() :
    96         wrapped_obj(nullptr)
    97     { }
    99     AutoGlobalWrappedJavaObject(jobject jobj, JNIEnv* env) : wrapped_obj(nullptr) {
   100         Init(jobj, env);
   101     }
   103     virtual ~AutoGlobalWrappedJavaObject();
   104     void Dispose();
   106     void Init(jobject jobj, JNIEnv* env) {
   107         if (!isNull()) {
   108             env->DeleteGlobalRef(wrapped_obj);
   109         }
   110         wrapped_obj = env->NewGlobalRef(jobj);
   111     }
   113     bool isNull() const {
   114         return wrapped_obj == nullptr;
   115     }
   117     jobject wrappedObject() const {
   118         return wrapped_obj;
   119     }
   121 protected:
   122     jobject wrapped_obj;
   123 };
   125 class AndroidPoint : public WrappedJavaObject
   126 {
   127 public:
   128     static void InitPointClass(JNIEnv *jEnv);
   130     AndroidPoint() { }
   131     AndroidPoint(JNIEnv *jenv, jobject jobj) {
   132         Init(jenv, jobj);
   133     }
   135     void Init(JNIEnv *jenv, jobject jobj);
   137     int X() { return mX; }
   138     int Y() { return mY; }
   140 protected:
   141     int mX;
   142     int mY;
   144     static jclass jPointClass;
   145     static jfieldID jXField;
   146     static jfieldID jYField;
   147 };
   149 class AndroidRect : public WrappedJavaObject
   150 {
   151 public:
   152     static void InitRectClass(JNIEnv *jEnv);
   154     AndroidRect() { }
   155     AndroidRect(JNIEnv *jenv, jobject jobj) {
   156         Init(jenv, jobj);
   157     }
   159     void Init(JNIEnv *jenv, jobject jobj);
   161     int Bottom() { return mBottom; }
   162     int Left() { return mLeft; }
   163     int Right() { return mRight; }
   164     int Top() { return mTop; }
   165     int Width() { return mRight - mLeft; }
   166     int Height() { return mBottom - mTop; }
   168 protected:
   169     int mBottom;
   170     int mLeft;
   171     int mRight;
   172     int mTop;
   174     static jclass jRectClass;
   175     static jfieldID jBottomField;
   176     static jfieldID jLeftField;
   177     static jfieldID jRightField;
   178     static jfieldID jTopField;
   179 };
   181 class AndroidRectF : public WrappedJavaObject
   182 {
   183 public:
   184     static void InitRectFClass(JNIEnv *jEnv);
   186     AndroidRectF() { }
   187     AndroidRectF(JNIEnv *jenv, jobject jobj) {
   188         Init(jenv, jobj);
   189     }
   191     void Init(JNIEnv *jenv, jobject jobj);
   193     float Bottom() { return mBottom; }
   194     float Left() { return mLeft; }
   195     float Right() { return mRight; }
   196     float Top() { return mTop; }
   197     float Width() { return mRight - mLeft; }
   198     float Height() { return mBottom - mTop; }
   200 protected:
   201     float mBottom;
   202     float mLeft;
   203     float mRight;
   204     float mTop;
   206     static jclass jRectClass;
   207     static jfieldID jBottomField;
   208     static jfieldID jLeftField;
   209     static jfieldID jRightField;
   210     static jfieldID jTopField;
   211 };
   213 class AndroidLayerRendererFrame : public WrappedJavaObject {
   214 public:
   215     static void InitLayerRendererFrameClass(JNIEnv *jEnv);
   217     void Init(JNIEnv *env, jobject jobj);
   218     void Dispose(JNIEnv *env);
   220     bool BeginDrawing(AutoLocalJNIFrame *jniFrame);
   221     bool DrawBackground(AutoLocalJNIFrame *jniFrame);
   222     bool DrawForeground(AutoLocalJNIFrame *jniFrame);
   223     bool EndDrawing(AutoLocalJNIFrame *jniFrame);
   225 private:
   226     static jclass jLayerRendererFrameClass;
   227     static jmethodID jBeginDrawingMethod;
   228     static jmethodID jDrawBackgroundMethod;
   229     static jmethodID jDrawForegroundMethod;
   230     static jmethodID jEndDrawingMethod;
   231 };
   233 enum {
   234     // These keycode masks are not defined in android/keycodes.h:
   235     AKEYCODE_ESCAPE             = 111,
   236     AKEYCODE_FORWARD_DEL        = 112,
   237     AKEYCODE_CTRL_LEFT          = 113,
   238     AKEYCODE_CTRL_RIGHT         = 114,
   239     AKEYCODE_CAPS_LOCK          = 115,
   240     AKEYCODE_SCROLL_LOCK        = 116,
   241     AKEYCODE_META_LEFT          = 117,
   242     AKEYCODE_META_RIGHT         = 118,
   243     AKEYCODE_FUNCTION           = 119,
   244     AKEYCODE_SYSRQ              = 120,
   245     AKEYCODE_BREAK              = 121,
   246     AKEYCODE_MOVE_HOME          = 122,
   247     AKEYCODE_MOVE_END           = 123,
   248     AKEYCODE_INSERT             = 124,
   249     AKEYCODE_FORWARD            = 125,
   250     AKEYCODE_MEDIA_PLAY         = 126,
   251     AKEYCODE_MEDIA_PAUSE        = 127,
   252     AKEYCODE_MEDIA_CLOSE        = 128,
   253     AKEYCODE_MEDIA_EJECT        = 129,
   254     AKEYCODE_MEDIA_RECORD       = 130,
   255     AKEYCODE_F1                 = 131,
   256     AKEYCODE_F2                 = 132,
   257     AKEYCODE_F3                 = 133,
   258     AKEYCODE_F4                 = 134,
   259     AKEYCODE_F5                 = 135,
   260     AKEYCODE_F6                 = 136,
   261     AKEYCODE_F7                 = 137,
   262     AKEYCODE_F8                 = 138,
   263     AKEYCODE_F9                 = 139,
   264     AKEYCODE_F10                = 140,
   265     AKEYCODE_F11                = 141,
   266     AKEYCODE_F12                = 142,
   267     AKEYCODE_NUM_LOCK           = 143,
   268     AKEYCODE_NUMPAD_0           = 144,
   269     AKEYCODE_NUMPAD_1           = 145,
   270     AKEYCODE_NUMPAD_2           = 146,
   271     AKEYCODE_NUMPAD_3           = 147,
   272     AKEYCODE_NUMPAD_4           = 148,
   273     AKEYCODE_NUMPAD_5           = 149,
   274     AKEYCODE_NUMPAD_6           = 150,
   275     AKEYCODE_NUMPAD_7           = 151,
   276     AKEYCODE_NUMPAD_8           = 152,
   277     AKEYCODE_NUMPAD_9           = 153,
   278     AKEYCODE_NUMPAD_DIVIDE      = 154,
   279     AKEYCODE_NUMPAD_MULTIPLY    = 155,
   280     AKEYCODE_NUMPAD_SUBTRACT    = 156,
   281     AKEYCODE_NUMPAD_ADD         = 157,
   282     AKEYCODE_NUMPAD_DOT         = 158,
   283     AKEYCODE_NUMPAD_COMMA       = 159,
   284     AKEYCODE_NUMPAD_ENTER       = 160,
   285     AKEYCODE_NUMPAD_EQUALS      = 161,
   286     AKEYCODE_NUMPAD_LEFT_PAREN  = 162,
   287     AKEYCODE_NUMPAD_RIGHT_PAREN = 163,
   288     AKEYCODE_VOLUME_MUTE        = 164,
   289     AKEYCODE_INFO               = 165,
   290     AKEYCODE_CHANNEL_UP         = 166,
   291     AKEYCODE_CHANNEL_DOWN       = 167,
   292     AKEYCODE_ZOOM_IN            = 168,
   293     AKEYCODE_ZOOM_OUT           = 169,
   294     AKEYCODE_TV                 = 170,
   295     AKEYCODE_WINDOW             = 171,
   296     AKEYCODE_GUIDE              = 172,
   297     AKEYCODE_DVR                = 173,
   298     AKEYCODE_BOOKMARK           = 174,
   299     AKEYCODE_CAPTIONS           = 175,
   300     AKEYCODE_SETTINGS           = 176,
   301     AKEYCODE_TV_POWER           = 177,
   302     AKEYCODE_TV_INPUT           = 178,
   303     AKEYCODE_STB_POWER          = 179,
   304     AKEYCODE_STB_INPUT          = 180,
   305     AKEYCODE_AVR_POWER          = 181,
   306     AKEYCODE_AVR_INPUT          = 182,
   307     AKEYCODE_PROG_RED           = 183,
   308     AKEYCODE_PROG_GREEN         = 184,
   309     AKEYCODE_PROG_YELLOW        = 185,
   310     AKEYCODE_PROG_BLUE          = 186,
   311     AKEYCODE_APP_SWITCH         = 187,
   312     AKEYCODE_BUTTON_1           = 188,
   313     AKEYCODE_BUTTON_2           = 189,
   314     AKEYCODE_BUTTON_3           = 190,
   315     AKEYCODE_BUTTON_4           = 191,
   316     AKEYCODE_BUTTON_5           = 192,
   317     AKEYCODE_BUTTON_6           = 193,
   318     AKEYCODE_BUTTON_7           = 194,
   319     AKEYCODE_BUTTON_8           = 195,
   320     AKEYCODE_BUTTON_9           = 196,
   321     AKEYCODE_BUTTON_10          = 197,
   322     AKEYCODE_BUTTON_11          = 198,
   323     AKEYCODE_BUTTON_12          = 199,
   324     AKEYCODE_BUTTON_13          = 200,
   325     AKEYCODE_BUTTON_14          = 201,
   326     AKEYCODE_BUTTON_15          = 202,
   327     AKEYCODE_BUTTON_16          = 203,
   328     AKEYCODE_LANGUAGE_SWITCH    = 204,
   329     AKEYCODE_MANNER_MODE        = 205,
   330     AKEYCODE_3D_MODE            = 206,
   331     AKEYCODE_CONTACTS           = 207,
   332     AKEYCODE_CALENDAR           = 208,
   333     AKEYCODE_MUSIC              = 209,
   334     AKEYCODE_CALCULATOR         = 210,
   335     AKEYCODE_ZENKAKU_HANKAKU    = 211,
   336     AKEYCODE_EISU               = 212,
   337     AKEYCODE_MUHENKAN           = 213,
   338     AKEYCODE_HENKAN             = 214,
   339     AKEYCODE_KATAKANA_HIRAGANA  = 215,
   340     AKEYCODE_YEN                = 216,
   341     AKEYCODE_RO                 = 217,
   342     AKEYCODE_KANA               = 218,
   343     AKEYCODE_ASSIST             = 219,
   345     AMETA_FUNCTION_ON           = 0x00000008,
   346     AMETA_CTRL_ON               = 0x00001000,
   347     AMETA_CTRL_LEFT_ON          = 0x00002000,
   348     AMETA_CTRL_RIGHT_ON         = 0x00004000,
   349     AMETA_META_ON               = 0x00010000,
   350     AMETA_META_LEFT_ON          = 0x00020000,
   351     AMETA_META_RIGHT_ON         = 0x00040000,
   352     AMETA_CAPS_LOCK_ON          = 0x00100000,
   353     AMETA_NUM_LOCK_ON           = 0x00200000,
   354     AMETA_SCROLL_LOCK_ON        = 0x00400000,
   356     AMETA_ALT_MASK              = AMETA_ALT_LEFT_ON   | AMETA_ALT_RIGHT_ON   | AMETA_ALT_ON,
   357     AMETA_CTRL_MASK             = AMETA_CTRL_LEFT_ON  | AMETA_CTRL_RIGHT_ON  | AMETA_CTRL_ON,
   358     AMETA_META_MASK             = AMETA_META_LEFT_ON  | AMETA_META_RIGHT_ON  | AMETA_META_ON,
   359     AMETA_SHIFT_MASK            = AMETA_SHIFT_LEFT_ON | AMETA_SHIFT_RIGHT_ON | AMETA_SHIFT_ON,
   360 };
   362 class nsAndroidDisplayport MOZ_FINAL : public nsIAndroidDisplayport
   363 {
   364 public:
   365     NS_DECL_ISUPPORTS
   366     virtual nsresult GetLeft(float *aLeft) { *aLeft = mLeft; return NS_OK; }
   367     virtual nsresult GetTop(float *aTop) { *aTop = mTop; return NS_OK; }
   368     virtual nsresult GetRight(float *aRight) { *aRight = mRight; return NS_OK; }
   369     virtual nsresult GetBottom(float *aBottom) { *aBottom = mBottom; return NS_OK; }
   370     virtual nsresult GetResolution(float *aResolution) { *aResolution = mResolution; return NS_OK; }
   371     virtual nsresult SetLeft(float aLeft) { mLeft = aLeft; return NS_OK; }
   372     virtual nsresult SetTop(float aTop) { mTop = aTop; return NS_OK; }
   373     virtual nsresult SetRight(float aRight) { mRight = aRight; return NS_OK; }
   374     virtual nsresult SetBottom(float aBottom) { mBottom = aBottom; return NS_OK; }
   375     virtual nsresult SetResolution(float aResolution) { mResolution = aResolution; return NS_OK; }
   377     nsAndroidDisplayport(AndroidRectF aRect, float aResolution):
   378         mLeft(aRect.Left()), mTop(aRect.Top()), mRight(aRect.Right()), mBottom(aRect.Bottom()), mResolution(aResolution) {}
   380 private:
   381     ~nsAndroidDisplayport() {}
   382     float mLeft, mTop, mRight, mBottom, mResolution;
   383 };
   385 class AndroidMotionEvent
   386 {
   387 public:
   388     enum {
   389         ACTION_DOWN = 0,
   390         ACTION_UP = 1,
   391         ACTION_MOVE = 2,
   392         ACTION_CANCEL = 3,
   393         ACTION_OUTSIDE = 4,
   394         ACTION_POINTER_DOWN = 5,
   395         ACTION_POINTER_UP = 6,
   396         ACTION_HOVER_MOVE = 7,
   397         ACTION_HOVER_ENTER = 9,
   398         ACTION_HOVER_EXIT = 10,
   399         ACTION_MAGNIFY_START = 11,
   400         ACTION_MAGNIFY = 12,
   401         ACTION_MAGNIFY_END = 13,
   402         EDGE_TOP = 0x00000001,
   403         EDGE_BOTTOM = 0x00000002,
   404         EDGE_LEFT = 0x00000004,
   405         EDGE_RIGHT = 0x00000008,
   406         SAMPLE_X = 0,
   407         SAMPLE_Y = 1,
   408         SAMPLE_PRESSURE = 2,
   409         SAMPLE_SIZE = 3,
   410         NUM_SAMPLE_DATA = 4,
   411         dummy_java_enum_list_end
   412     };
   413 };
   415 class AndroidLocation : public WrappedJavaObject
   416 {
   417 public:
   418     static void InitLocationClass(JNIEnv *jEnv);
   419     static nsGeoPosition* CreateGeoPosition(JNIEnv *jenv, jobject jobj);
   420     static jclass jLocationClass;
   421     static jmethodID jGetLatitudeMethod;
   422     static jmethodID jGetLongitudeMethod;
   423     static jmethodID jGetAltitudeMethod;
   424     static jmethodID jGetAccuracyMethod;
   425     static jmethodID jGetBearingMethod;
   426     static jmethodID jGetSpeedMethod;
   427     static jmethodID jGetTimeMethod;
   428 };
   430 class AndroidGeckoEvent : public WrappedJavaObject
   431 {
   432 private:
   433     AndroidGeckoEvent() {
   434     }
   436     void Init(JNIEnv *jenv, jobject jobj);
   437     void Init(int aType);
   438     void Init(AndroidGeckoEvent *aResizeEvent);
   440 public:
   441     static void InitGeckoEventClass(JNIEnv *jEnv);
   443     static AndroidGeckoEvent* MakeNativePoke() {
   444         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   445         event->Init(NATIVE_POKE);
   446         return event;
   447     }
   449     static AndroidGeckoEvent* MakeIMEEvent(int aAction) {
   450         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   451         event->Init(IME_EVENT);
   452         event->mAction = aAction;
   453         return event;
   454     }
   456     static AndroidGeckoEvent* MakeDrawEvent(const nsIntRect& aRect) {
   457         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   458         event->Init(DRAW);
   459         event->mRect = aRect;
   460         return event;
   461     }
   463     static AndroidGeckoEvent* MakeFromJavaObject(JNIEnv *jenv, jobject jobj) {
   464         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   465         event->Init(jenv, jobj);
   466         return event;
   467     }
   469     static AndroidGeckoEvent* CopyResizeEvent(AndroidGeckoEvent *aResizeEvent) {
   470         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   471         event->Init(aResizeEvent);
   472         return event;
   473     }
   475     static AndroidGeckoEvent* MakeBroadcastEvent(const nsCString& topic, const nsCString& data) {
   476         AndroidGeckoEvent* event = new AndroidGeckoEvent();
   477         event->Init(BROADCAST);
   478         CopyUTF8toUTF16(topic, event->mCharacters);
   479         CopyUTF8toUTF16(data, event->mCharactersExtra);
   480         return event;
   481     }
   483     static AndroidGeckoEvent* MakeAddObserver(const nsAString &key, nsIObserver *observer) {
   484         AndroidGeckoEvent *event = new AndroidGeckoEvent();
   485         event->Init(ADD_OBSERVER);
   486         event->mCharacters.Assign(key);
   487         event->mObserver = observer;
   488         return event;
   489     }
   491     int Action() { return mAction; }
   492     int Type() { return mType; }
   493     bool AckNeeded() { return mAckNeeded; }
   494     int64_t Time() { return mTime; }
   495     const nsTArray<nsIntPoint>& Points() { return mPoints; }
   496     const nsTArray<int>& PointIndicies() { return mPointIndicies; }
   497     const nsTArray<float>& Pressures() { return mPressures; }
   498     const nsTArray<float>& Orientations() { return mOrientations; }
   499     const nsTArray<nsIntPoint>& PointRadii() { return mPointRadii; }
   500     const nsTArray<nsString>& PrefNames() { return mPrefNames; }
   501     double X() { return mX; }
   502     double Y() { return mY; }
   503     double Z() { return mZ; }
   504     const nsIntRect& Rect() { return mRect; }
   505     nsAString& Characters() { return mCharacters; }
   506     nsAString& CharactersExtra() { return mCharactersExtra; }
   507     nsAString& Data() { return mData; }
   508     int KeyCode() { return mKeyCode; }
   509     int MetaState() { return mMetaState; }
   510     uint32_t DomKeyLocation() { return mDomKeyLocation; }
   511     Modifiers DOMModifiers() const;
   512     bool IsAltPressed() const { return (mMetaState & AMETA_ALT_MASK) != 0; }
   513     bool IsShiftPressed() const { return (mMetaState & AMETA_SHIFT_MASK) != 0; }
   514     bool IsCtrlPressed() const { return (mMetaState & AMETA_CTRL_MASK) != 0; }
   515     bool IsMetaPressed() const { return (mMetaState & AMETA_META_MASK) != 0; }
   516     int Flags() { return mFlags; }
   517     int UnicodeChar() { return mUnicodeChar; }
   518     int BaseUnicodeChar() { return mBaseUnicodeChar; }
   519     int DOMPrintableKeyValue() { return mDOMPrintableKeyValue; }
   520     int RepeatCount() const { return mRepeatCount; }
   521     int Count() { return mCount; }
   522     int Start() { return mStart; }
   523     int End() { return mEnd; }
   524     int PointerIndex() { return mPointerIndex; }
   525     int RangeType() { return mRangeType; }
   526     int RangeStyles() { return mRangeStyles; }
   527     int RangeLineStyle() { return mRangeLineStyle; }
   528     bool RangeBoldLine() { return mRangeBoldLine; }
   529     int RangeForeColor() { return mRangeForeColor; }
   530     int RangeBackColor() { return mRangeBackColor; }
   531     int RangeLineColor() { return mRangeLineColor; }
   532     nsGeoPosition* GeoPosition() { return mGeoPosition; }
   533     int ConnectionType() { return mConnectionType; }
   534     bool IsWifi() { return mIsWifi; }
   535     int DHCPGateway() { return mDHCPGateway; }
   536     short ScreenOrientation() { return mScreenOrientation; }
   537     RefCountedJavaObject* ByteBuffer() { return mByteBuffer; }
   538     int Width() { return mWidth; }
   539     int Height() { return mHeight; }
   540     int RequestId() { return mCount; } // for convenience
   541     WidgetTouchEvent MakeTouchEvent(nsIWidget* widget);
   542     MultiTouchInput MakeMultiTouchInput(nsIWidget* widget);
   543     WidgetMouseEvent MakeMouseEvent(nsIWidget* widget);
   544     void UnionRect(nsIntRect const& aRect);
   545     nsIObserver *Observer() { return mObserver; }
   547 protected:
   548     int mAction;
   549     int mType;
   550     bool mAckNeeded;
   551     int64_t mTime;
   552     nsTArray<nsIntPoint> mPoints;
   553     nsTArray<nsIntPoint> mPointRadii;
   554     nsTArray<int> mPointIndicies;
   555     nsTArray<float> mOrientations;
   556     nsTArray<float> mPressures;
   557     nsIntRect mRect;
   558     int mFlags, mMetaState;
   559     uint32_t mDomKeyLocation;
   560     int mKeyCode, mUnicodeChar, mBaseUnicodeChar, mDOMPrintableKeyValue;
   561     int mRepeatCount;
   562     int mCount;
   563     int mStart, mEnd;
   564     int mRangeType, mRangeStyles, mRangeLineStyle;
   565     bool mRangeBoldLine;
   566     int mRangeForeColor, mRangeBackColor, mRangeLineColor;
   567     double mX, mY, mZ;
   568     int mPointerIndex;
   569     nsString mCharacters, mCharactersExtra, mData;
   570     nsRefPtr<nsGeoPosition> mGeoPosition;
   571     int mConnectionType;
   572     bool mIsWifi;
   573     int mDHCPGateway;
   574     short mScreenOrientation;
   575     nsRefPtr<RefCountedJavaObject> mByteBuffer;
   576     int mWidth, mHeight;
   577     nsCOMPtr<nsIObserver> mObserver;
   578     nsTArray<nsString> mPrefNames;
   580     void ReadIntArray(nsTArray<int> &aVals,
   581                       JNIEnv *jenv,
   582                       jfieldID field,
   583                       int32_t count);
   584     void ReadFloatArray(nsTArray<float> &aVals,
   585                         JNIEnv *jenv,
   586                         jfieldID field,
   587                         int32_t count);
   588     void ReadPointArray(nsTArray<nsIntPoint> &mPoints,
   589                         JNIEnv *jenv,
   590                         jfieldID field,
   591                         int32_t count);
   592     void ReadStringArray(nsTArray<nsString> &aStrings,
   593                          JNIEnv *jenv,
   594                          jfieldID field);
   595     void ReadRectField(JNIEnv *jenv);
   596     void ReadCharactersField(JNIEnv *jenv);
   597     void ReadCharactersExtraField(JNIEnv *jenv);
   598     void ReadDataField(JNIEnv *jenv);
   599     void ReadStringFromJString(nsString &aString, JNIEnv *jenv, jstring s);
   601     uint32_t ReadDomKeyLocation(JNIEnv* jenv, jobject jGeckoEventObj);
   603     static jclass jGeckoEventClass;
   604     static jfieldID jActionField;
   605     static jfieldID jTypeField;
   606     static jfieldID jAckNeededField;
   607     static jfieldID jTimeField;
   608     static jfieldID jPoints;
   609     static jfieldID jPointIndicies;
   610     static jfieldID jOrientations;
   611     static jfieldID jPressures;
   612     static jfieldID jPointRadii;
   613     static jfieldID jXField;
   614     static jfieldID jYField;
   615     static jfieldID jZField;
   616     static jfieldID jDistanceField;
   617     static jfieldID jRectField;
   618     static jfieldID jNativeWindowField;
   620     static jfieldID jCharactersField;
   621     static jfieldID jCharactersExtraField;
   622     static jfieldID jDataField;
   623     static jfieldID jDOMPrintableKeyValueField;
   624     static jfieldID jKeyCodeField;
   625     static jfieldID jMetaStateField;
   626     static jfieldID jDomKeyLocationField;
   627     static jfieldID jFlagsField;
   628     static jfieldID jCountField;
   629     static jfieldID jStartField;
   630     static jfieldID jEndField;
   631     static jfieldID jPointerIndexField;
   632     static jfieldID jUnicodeCharField;
   633     static jfieldID jBaseUnicodeCharField;
   634     static jfieldID jRepeatCountField;
   635     static jfieldID jRangeTypeField;
   636     static jfieldID jRangeStylesField;
   637     static jfieldID jRangeLineStyleField;
   638     static jfieldID jRangeBoldLineField;
   639     static jfieldID jRangeForeColorField;
   640     static jfieldID jRangeBackColorField;
   641     static jfieldID jRangeLineColorField;
   642     static jfieldID jLocationField;
   643     static jfieldID jPrefNamesField;
   645     static jfieldID jConnectionTypeField;
   646     static jfieldID jIsWifiField;
   647     static jfieldID jDHCPGatewayField;
   649     static jfieldID jScreenOrientationField;
   650     static jfieldID jByteBufferField;
   652     static jfieldID jWidthField;
   653     static jfieldID jHeightField;
   655     static jclass jDomKeyLocationClass;
   656     static jfieldID jDomKeyLocationValueField;
   658 public:
   659     enum {
   660         NATIVE_POKE = 0,
   661         KEY_EVENT = 1,
   662         MOTION_EVENT = 2,
   663         SENSOR_EVENT = 3,
   664         LOCATION_EVENT = 5,
   665         IME_EVENT = 6,
   666         DRAW = 7,
   667         SIZE_CHANGED = 8,
   668         APP_BACKGROUNDING = 9,
   669         APP_FOREGROUNDING = 10,
   670         LOAD_URI = 12,
   671         NOOP = 15,
   672         FORCED_RESIZE = 16, // used internally in nsAppShell/nsWindow
   673         BROADCAST = 19,
   674         VIEWPORT = 20,
   675         VISITED = 21,
   676         NETWORK_CHANGED = 22,
   677         THUMBNAIL = 25,
   678         SCREENORIENTATION_CHANGED = 27,
   679         COMPOSITOR_CREATE = 28,
   680         COMPOSITOR_PAUSE = 29,
   681         COMPOSITOR_RESUME = 30,
   682         NATIVE_GESTURE_EVENT = 31,
   683         IME_KEY_EVENT = 32,
   684         CALL_OBSERVER = 33,
   685         REMOVE_OBSERVER = 34,
   686         LOW_MEMORY = 35,
   687         NETWORK_LINK_CHANGE = 36,
   688         TELEMETRY_HISTOGRAM_ADD = 37,
   689         ADD_OBSERVER = 38,
   690         PREFERENCES_OBSERVE = 39,
   691         PREFERENCES_GET = 40,
   692         PREFERENCES_REMOVE_OBSERVERS = 41,
   693         TELEMETRY_UI_SESSION_START = 42,
   694         TELEMETRY_UI_SESSION_STOP = 43,
   695         TELEMETRY_UI_EVENT = 44,
   696         dummy_java_enum_list_end
   697     };
   699     enum {
   700         // Memory pressure levels. Keep these in sync with those in MemoryMonitor.java.
   701         MEMORY_PRESSURE_NONE = 0,
   702         MEMORY_PRESSURE_CLEANUP = 1,
   703         MEMORY_PRESSURE_LOW = 2,
   704         MEMORY_PRESSURE_MEDIUM = 3,
   705         MEMORY_PRESSURE_HIGH = 4
   706     };
   708     enum {
   709         // Internal Gecko events
   710         IME_FLUSH_CHANGES = -2,
   711         IME_UPDATE_CONTEXT = -1,
   712         // Events from Java to Gecko
   713         IME_SYNCHRONIZE = 0,
   714         IME_REPLACE_TEXT = 1,
   715         IME_SET_SELECTION = 2,
   716         IME_ADD_COMPOSITION_RANGE = 3,
   717         IME_UPDATE_COMPOSITION = 4,
   718         IME_REMOVE_COMPOSITION = 5,
   719         IME_ACKNOWLEDGE_FOCUS = 6,
   720         dummy_ime_enum_list_end
   721     };
   722 };
   724 class nsJNIString : public nsString
   725 {
   726 public:
   727     nsJNIString(jstring jstr, JNIEnv *jenv);
   728 };
   730 }
   732 #endif

mercurial