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;
100
103
parameters[0] = mGe;
101
104
mSendGE = mGas.getMethod("sendEventToGecko", parameters);
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) {
109
} catch (SecurityException e) {
111
} catch (NoSuchMethodException e) {
113
} catch (IllegalArgumentException e) {
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
121
class wakeInvocationHandler implements InvocationHandler {
137
140
if(methodName.equals("hashCode")) {
140
FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
143
FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
141
144
"Waking up on "+methodName);
142
145
mEventExpecter.notifyOfEvent();
161
164
} catch (InterruptedException ie) {
162
ie.printStackTrace();
165
FennecNativeDriver.log(LogLevel.ERROR, ie);
166
FennecNativeDriver.log(FennecNativeDriver.LogLevel.LOG_LEVEL_DEBUG,
169
FennecNativeDriver.log(FennecNativeDriver.LogLevel.DEBUG,
167
170
"unblocked on expecter for " + mGeckoEvent);
176
179
mUnregisterGEL.invoke(null, mRegistrationParams);
177
180
} catch (IllegalAccessException e) {
181
FennecNativeDriver.log(LogLevel.ERROR, e);
179
182
} catch (InvocationTargetException e) {
183
FennecNativeDriver.log(LogLevel.ERROR, e);
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;
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);
195
198
Class [] interfaces = new Class[1];
207
210
} catch (IllegalAccessException e) {
211
FennecNativeDriver.log(LogLevel.ERROR, e);
209
212
} catch (InvocationTargetException e) {
213
FennecNativeDriver.log(LogLevel.ERROR, e);
218
public void sendGeckoEvent(String geckoEvent, String data) {
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);
215
232
class DrawListenerProxy implements InvocationHandler {
216
233
private final PaintExpecter mPaintExpecter;
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)) {
259
276
} catch (InterruptedException ie) {
260
ie.printStackTrace();
277
FennecNativeDriver.log(LogLevel.ERROR, ie);
265
282
mSetDrawListener.invoke(mLayerClient, (Object)null);
266
283
} catch (Exception e) {
284
FennecNativeDriver.log(LogLevel.ERROR, e);