~ubuntu-branches/ubuntu/quantal/lightning-extension/quantal

« back to all changes in this revision

Viewing changes to mozilla/build/mobile/robocop/FennecNativeActions.java.in

  • Committer: Package Import Robot
  • Author(s): Chris Coulson
  • Date: 2012-06-20 23:50:32 UTC
  • mfrom: (1.3.2)
  • Revision ID: package-import@ubuntu.com-20120620235032-fx5tuhrswvsju9z3
Tags: 1.6~b1+build1-0ubuntu1
New upstream release from the beta channel (CALENDAR_1_6b1_BUILD1)

Show diffs side-by-side

added added

removed removed

Lines of Context:
47
47
import java.lang.reflect.Proxy;
48
48
import java.lang.reflect.InvocationHandler;
49
49
import java.lang.Long;
 
50
import java.lang.NoSuchMethodException;
50
51
import java.util.concurrent.SynchronousQueue;
51
52
import java.util.ArrayList;
52
53
 
63
64
 
64
65
import com.jayway.android.robotium.solo.Solo;
65
66
 
 
67
import static @ANDROID_PACKAGE_NAME@.FennecNativeDriver.LogLevel;
 
68
 
66
69
public class FennecNativeActions implements Actions {
67
70
    private Solo mSolo;
68
71
    private Instrumentation mInstr;
100
103
            parameters[0] = mGe;
101
104
            mSendGE = mGas.getMethod("sendEventToGecko", parameters);
102
105
 
103
 
            mGetLayerClient = activity.getClass().getMethod("getSoftwareLayerClient");
104
 
            Class gslc = mClassLoader.loadClass("org.mozilla.gecko.gfx.GeckoSoftwareLayerClient");
105
 
            mDrawListener = mClassLoader.loadClass("org.mozilla.gecko.gfx.GeckoSoftwareLayerClient$DrawListener");
 
106
            mGetLayerClient = activity.getClass().getMethod("getLayerClient");
 
107
            Class gslc = mClassLoader.loadClass("org.mozilla.gecko.gfx.GeckoLayerClient");
 
108
            mDrawListener = mClassLoader.loadClass("org.mozilla.gecko.gfx.GeckoLayerClient$DrawListener");
106
109
            mSetDrawListener = gslc.getDeclaredMethod("setDrawListener", mDrawListener);
107
 
         } catch (ClassNotFoundException e) {
108
 
             e.printStackTrace();
109
 
         } catch (SecurityException e) {
110
 
             e.printStackTrace();
111
 
         } catch (NoSuchMethodException e) {
112
 
             e.printStackTrace();
113
 
         } catch (IllegalArgumentException e) {
114
 
             e.printStackTrace();
115
 
         }
 
110
        } catch (ClassNotFoundException e) {
 
111
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
112
        } catch (SecurityException e) {
 
113
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
114
        } catch (NoSuchMethodException e) {
 
115
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
116
        } catch (IllegalArgumentException e) {
 
117
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
118
        }
116
119
    }
117
120
 
118
121
    class wakeInvocationHandler implements InvocationHandler {
137
140
            if(methodName.equals("hashCode")) {
138
141
                return 314;
139
142
            }
140
 
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG, 
 
143
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG, 
141
144
                "Waking up on "+methodName);
142
145
            mEventExpecter.notifyOfEvent();
143
146
            return null;
159
162
                try {
160
163
                    this.wait();
161
164
                } catch (InterruptedException ie) {
162
 
                    ie.printStackTrace();
 
165
                    FennecNativeDriver.log(LogLevel.ERROR, ie);
163
166
                    break;
164
167
                }
165
168
            }
166
 
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
 
169
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
167
170
                "unblocked on expecter for " + mGeckoEvent);
168
171
        }
169
172
 
175
178
            try {
176
179
                mUnregisterGEL.invoke(null, mRegistrationParams);
177
180
            } catch (IllegalAccessException e) {
178
 
                e.printStackTrace();
 
181
                FennecNativeDriver.log(LogLevel.ERROR, e);
179
182
            } catch (InvocationTargetException e) {
180
 
                e.printStackTrace();
 
183
                FennecNativeDriver.log(LogLevel.ERROR, e);
181
184
            }
182
 
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
 
185
            FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
183
186
                "received event " + mGeckoEvent);
184
187
            synchronized (this) {
185
188
                mEventReceived = true;
189
192
    }
190
193
    
191
194
    public EventExpecter expectGeckoEvent(String geckoEvent) {
192
 
        FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
 
195
        FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
193
196
            "waiting for "+geckoEvent);
194
197
        try {
195
198
            Class [] interfaces = new Class[1];
205
208
            
206
209
            return expecter;
207
210
        } catch (IllegalAccessException e) {
208
 
            e.printStackTrace();
 
211
            FennecNativeDriver.log(LogLevel.ERROR, e);
209
212
        } catch (InvocationTargetException e) {
210
 
            e.printStackTrace();
 
213
            FennecNativeDriver.log(LogLevel.ERROR, e);
211
214
        }
212
215
        return null;
213
216
    }
214
217
 
 
218
    public void sendGeckoEvent(String geckoEvent, String data) {
 
219
        try {
 
220
            Method cbe = mGe.getMethod("createBroadcastEvent", String.class, String.class);
 
221
            Object event = cbe.invoke(null, geckoEvent, data);
 
222
            mSendGE.invoke(null, event);
 
223
        } catch (NoSuchMethodException e) {
 
224
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
225
        } catch (IllegalAccessException e) {
 
226
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
227
        } catch (InvocationTargetException e) {
 
228
            FennecNativeDriver.log(LogLevel.ERROR, e);
 
229
        }
 
230
    }
 
231
 
215
232
    class DrawListenerProxy implements InvocationHandler {
216
233
        private final PaintExpecter mPaintExpecter;
217
234
 
222
239
        public Object invoke(Object proxy, Method method, Object[] args) {
223
240
            String methodName = method.getName();
224
241
            if ("drawFinished".equals(methodName)) {
225
 
                FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
 
242
                FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
226
243
                    "Received drawFinished notification");
227
244
                mPaintExpecter.notifyOfEvent();
228
245
            } else if ("toString".equals(methodName)) {
257
274
                try {
258
275
                    this.wait();
259
276
                } catch (InterruptedException ie) {
260
 
                    ie.printStackTrace();
 
277
                    FennecNativeDriver.log(LogLevel.ERROR, ie);
261
278
                    break;
262
279
                }
263
280
            }
264
281
            try {
265
282
                mSetDrawListener.invoke(mLayerClient, (Object)null);
266
283
            } catch (Exception e) {
267
 
                e.printStackTrace();
 
284
                FennecNativeDriver.log(LogLevel.ERROR, e);
268
285
            }
269
286
        }
270
287
 
281
298
                try {
282
299
                    this.wait();
283
300
                } catch (InterruptedException ie) {
284
 
                    ie.printStackTrace();
 
301
                    FennecNativeDriver.log(LogLevel.ERROR, ie);
285
302
                    break;
286
303
                }
287
304
            }
291
308
                try {
292
309
                    this.wait(millis);
293
310
                } catch (InterruptedException ie) {
294
 
                    ie.printStackTrace();
 
311
                    FennecNativeDriver.log(LogLevel.ERROR, ie);
295
312
                    break;
296
313
                }
297
314
                long endTime = SystemClock.uptimeMillis();
305
322
            try {
306
323
                mSetDrawListener.invoke(mLayerClient, (Object)null);
307
324
            } catch (Exception e) {
308
 
                e.printStackTrace();
 
325
                FennecNativeDriver.log(LogLevel.ERROR, e);
309
326
            }
310
327
        }
311
328
    }
314
331
        try {
315
332
            return new PaintExpecter();
316
333
        } catch (Exception e) {
317
 
            e.printStackTrace();
 
334
            FennecNativeDriver.log(LogLevel.ERROR, e);
318
335
            return null;
319
336
        }
320
337
    }