CallbackProxy.java revision ad45686d727c8c9a602ba0534d3b052fdaf6c8d6
1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.dumprendertree;
18
19import android.os.Bundle;
20import android.os.Handler;
21import android.os.Message;
22import android.webkit.MockGeolocation;
23import android.webkit.WebStorage;
24
25import java.util.HashMap;
26
27public class CallbackProxy extends Handler implements EventSender, LayoutTestController {
28
29    private EventSender mEventSender;
30    private LayoutTestController mLayoutTestController;
31
32    private static final int EVENT_DOM_LOG = 1;
33    private static final int EVENT_FIRE_KBD = 2;
34    private static final int EVENT_KEY_DOWN_1 = 3;
35    private static final int EVENT_KEY_DOWN_2 = 4;
36    private static final int EVENT_LEAP = 5;
37    private static final int EVENT_MOUSE_CLICK = 6;
38    private static final int EVENT_MOUSE_DOWN = 7;
39    private static final int EVENT_MOUSE_MOVE = 8;
40    private static final int EVENT_MOUSE_UP = 9;
41    private static final int EVENT_TOUCH_START = 10;
42    private static final int EVENT_TOUCH_MOVE = 11;
43    private static final int EVENT_TOUCH_END = 12;
44    private static final int EVENT_TOUCH_CANCEL = 13;
45    private static final int EVENT_ADD_TOUCH_POINT = 14;
46    private static final int EVENT_UPDATE_TOUCH_POINT = 15;
47    private static final int EVENT_RELEASE_TOUCH_POINT = 16;
48    private static final int EVENT_CLEAR_TOUCH_POINTS = 17;
49    private static final int EVENT_CANCEL_TOUCH_POINT = 18;
50    private static final int EVENT_SET_TOUCH_MODIFIER = 19;
51
52    private static final int LAYOUT_CLEAR_LIST = 20;
53    private static final int LAYOUT_DISPLAY = 21;
54    private static final int LAYOUT_DUMP_TEXT = 22;
55    private static final int LAYOUT_DUMP_HISTORY = 23;
56    private static final int LAYOUT_DUMP_CHILD_SCROLL = 24;
57    private static final int LAYOUT_DUMP_EDIT_CB = 25;
58    private static final int LAYOUT_DUMP_SEL_RECT = 26;
59    private static final int LAYOUT_DUMP_TITLE_CHANGES = 27;
60    private static final int LAYOUT_KEEP_WEB_HISTORY = 28;
61    private static final int LAYOUT_NOTIFY_DONE = 29;
62    private static final int LAYOUT_QUEUE_BACK_NAV = 30;
63    private static final int LAYOUT_QUEUE_FWD_NAV = 31;
64    private static final int LAYOUT_QUEUE_LOAD = 32;
65    private static final int LAYOUT_QUEUE_RELOAD = 33;
66    private static final int LAYOUT_QUEUE_SCRIPT = 34;
67    private static final int LAYOUT_REPAINT_HORZ = 35;
68    private static final int LAYOUT_SET_ACCEPT_EDIT = 36;
69    private static final int LAYOUT_MAIN_FIRST_RESP = 37;
70    private static final int LAYOUT_SET_WINDOW_KEY = 38;
71    private static final int LAYOUT_TEST_REPAINT = 39;
72    private static final int LAYOUT_WAIT_UNTIL_DONE = 40;
73    private static final int LAYOUT_DUMP_DATABASE_CALLBACKS = 41;
74    private static final int LAYOUT_SET_CAN_OPEN_WINDOWS = 42;
75    private static final int SET_GEOLOCATION_PERMISSION = 43;
76    private static final int OVERRIDE_PREFERENCE = 44;
77    private static final int LAYOUT_DUMP_CHILD_FRAMES_TEXT = 45;
78
79    CallbackProxy(EventSender eventSender,
80            LayoutTestController layoutTestController) {
81        mEventSender = eventSender;
82        mLayoutTestController = layoutTestController;
83    }
84
85    public void handleMessage(Message msg) {
86        switch (msg.what) {
87        case EVENT_DOM_LOG:
88            mEventSender.enableDOMUIEventLogging(msg.arg1);
89            break;
90        case EVENT_FIRE_KBD:
91            mEventSender.fireKeyboardEventsToElement(msg.arg1);
92            break;
93        case EVENT_KEY_DOWN_1:
94            HashMap map = (HashMap) msg.obj;
95            mEventSender.keyDown((String) map.get("character"),
96                    (String[]) map.get("withModifiers"));
97            break;
98
99        case EVENT_KEY_DOWN_2:
100            mEventSender.keyDown((String)msg.obj);
101            break;
102
103        case EVENT_LEAP:
104            mEventSender.leapForward(msg.arg1);
105            break;
106
107        case EVENT_MOUSE_CLICK:
108            mEventSender.mouseClick();
109            break;
110
111        case EVENT_MOUSE_DOWN:
112            mEventSender.mouseDown();
113            break;
114
115        case EVENT_MOUSE_MOVE:
116            mEventSender.mouseMoveTo(msg.arg1, msg.arg2);
117            break;
118
119        case EVENT_MOUSE_UP:
120            mEventSender.mouseUp();
121            break;
122
123        case EVENT_TOUCH_START:
124            mEventSender.touchStart();
125            break;
126
127        case EVENT_TOUCH_MOVE:
128            mEventSender.touchMove();
129            break;
130
131        case EVENT_TOUCH_END:
132            mEventSender.touchEnd();
133            break;
134
135        case EVENT_TOUCH_CANCEL:
136            mEventSender.touchCancel();
137            break;
138
139        case EVENT_ADD_TOUCH_POINT:
140            mEventSender.addTouchPoint(msg.arg1, msg.arg2);
141            break;
142
143        case EVENT_UPDATE_TOUCH_POINT:
144            Bundle args = (Bundle) msg.obj;
145            int x = args.getInt("x");
146            int y = args.getInt("y");
147            int id = args.getInt("id");
148            mEventSender.updateTouchPoint(id, x, y);
149            break;
150
151        case EVENT_SET_TOUCH_MODIFIER:
152            Bundle modifierArgs = (Bundle) msg.obj;
153            String modifier = modifierArgs.getString("modifier");
154            boolean enabled = modifierArgs.getBoolean("enabled");
155            mEventSender.setTouchModifier(modifier, enabled);
156            break;
157
158        case EVENT_RELEASE_TOUCH_POINT:
159            mEventSender.releaseTouchPoint(msg.arg1);
160            break;
161
162        case EVENT_CLEAR_TOUCH_POINTS:
163            mEventSender.clearTouchPoints();
164            break;
165
166        case EVENT_CANCEL_TOUCH_POINT:
167            mEventSender.cancelTouchPoint(msg.arg1);
168            break;
169
170        case LAYOUT_CLEAR_LIST:
171            mLayoutTestController.clearBackForwardList();
172            break;
173
174        case LAYOUT_DISPLAY:
175            mLayoutTestController.display();
176            break;
177
178        case LAYOUT_DUMP_TEXT:
179            mLayoutTestController.dumpAsText();
180            break;
181
182        case LAYOUT_DUMP_CHILD_FRAMES_TEXT:
183            mLayoutTestController.dumpChildFramesAsText();
184            break;
185
186        case LAYOUT_DUMP_HISTORY:
187            mLayoutTestController.dumpBackForwardList();
188            break;
189
190        case LAYOUT_DUMP_CHILD_SCROLL:
191            mLayoutTestController.dumpChildFrameScrollPositions();
192            break;
193
194        case LAYOUT_DUMP_EDIT_CB:
195            mLayoutTestController.dumpEditingCallbacks();
196            break;
197
198        case LAYOUT_DUMP_SEL_RECT:
199            mLayoutTestController.dumpSelectionRect();
200            break;
201
202        case LAYOUT_DUMP_TITLE_CHANGES:
203            mLayoutTestController.dumpTitleChanges();
204            break;
205
206        case LAYOUT_KEEP_WEB_HISTORY:
207            mLayoutTestController.keepWebHistory();
208            break;
209
210        case LAYOUT_NOTIFY_DONE:
211            mLayoutTestController.notifyDone();
212            break;
213
214        case LAYOUT_QUEUE_BACK_NAV:
215            mLayoutTestController.queueBackNavigation(msg.arg1);
216            break;
217
218        case LAYOUT_QUEUE_FWD_NAV:
219            mLayoutTestController.queueForwardNavigation(msg.arg1);
220            break;
221
222        case LAYOUT_QUEUE_LOAD:
223            HashMap<String, String> loadMap =
224                (HashMap<String, String>) msg.obj;
225            mLayoutTestController.queueLoad(loadMap.get("Url"),
226                    loadMap.get("frameTarget"));
227            break;
228
229        case LAYOUT_QUEUE_RELOAD:
230            mLayoutTestController.queueReload();
231            break;
232
233        case LAYOUT_QUEUE_SCRIPT:
234            mLayoutTestController.queueScript((String)msg.obj);
235            break;
236
237        case LAYOUT_REPAINT_HORZ:
238            mLayoutTestController.repaintSweepHorizontally();
239            break;
240
241        case LAYOUT_SET_ACCEPT_EDIT:
242            mLayoutTestController.setAcceptsEditing(
243                    msg.arg1 == 1 ? true : false);
244            break;
245        case LAYOUT_MAIN_FIRST_RESP:
246            mLayoutTestController.setMainFrameIsFirstResponder(
247                    msg.arg1 == 1 ? true : false);
248            break;
249
250        case LAYOUT_SET_WINDOW_KEY:
251            mLayoutTestController.setWindowIsKey(
252                    msg.arg1 == 1 ? true : false);
253            break;
254
255        case LAYOUT_TEST_REPAINT:
256            mLayoutTestController.testRepaint();
257            break;
258
259        case LAYOUT_WAIT_UNTIL_DONE:
260            mLayoutTestController.waitUntilDone();
261            break;
262
263        case LAYOUT_DUMP_DATABASE_CALLBACKS:
264            mLayoutTestController.dumpDatabaseCallbacks();
265            break;
266
267        case LAYOUT_SET_CAN_OPEN_WINDOWS:
268            mLayoutTestController.setCanOpenWindows();
269            break;
270
271        case SET_GEOLOCATION_PERMISSION:
272            mLayoutTestController.setGeolocationPermission(
273                    msg.arg1 == 1 ? true : false);
274            break;
275
276        case OVERRIDE_PREFERENCE:
277            String key = msg.getData().getString("key");
278            boolean value = msg.getData().getBoolean("value");
279            mLayoutTestController.overridePreference(key, value);
280            break;
281        }
282    }
283
284    // EventSender Methods
285
286    public void enableDOMUIEventLogging(int DOMNode) {
287        obtainMessage(EVENT_DOM_LOG, DOMNode, 0).sendToTarget();
288    }
289
290    public void fireKeyboardEventsToElement(int DOMNode) {
291        obtainMessage(EVENT_FIRE_KBD, DOMNode, 0).sendToTarget();
292    }
293
294    public void keyDown(String character, String[] withModifiers) {
295        // TODO Auto-generated method stub
296        HashMap map = new HashMap();
297        map.put("character", character);
298        map.put("withModifiers", withModifiers);
299        obtainMessage(EVENT_KEY_DOWN_1, map).sendToTarget();
300    }
301
302    public void keyDown(String character) {
303        obtainMessage(EVENT_KEY_DOWN_2, character).sendToTarget();
304    }
305
306    public void leapForward(int milliseconds) {
307        obtainMessage(EVENT_LEAP, milliseconds, 0).sendToTarget();
308    }
309
310    public void mouseClick() {
311        obtainMessage(EVENT_MOUSE_CLICK).sendToTarget();
312    }
313
314    public void mouseDown() {
315        obtainMessage(EVENT_MOUSE_DOWN).sendToTarget();
316    }
317
318    public void mouseMoveTo(int X, int Y) {
319        obtainMessage(EVENT_MOUSE_MOVE, X, Y).sendToTarget();
320    }
321
322    public void mouseUp() {
323        obtainMessage(EVENT_MOUSE_UP).sendToTarget();
324    }
325
326    public void touchStart() {
327        obtainMessage(EVENT_TOUCH_START).sendToTarget();
328    }
329
330    public void addTouchPoint(int x, int y) {
331        obtainMessage(EVENT_ADD_TOUCH_POINT, x, y).sendToTarget();
332    }
333
334    public void updateTouchPoint(int id, int x, int y) {
335        Bundle map = new Bundle();
336        map.putInt("x", x);
337        map.putInt("y", y);
338        map.putInt("id", id);
339        obtainMessage(EVENT_UPDATE_TOUCH_POINT, map).sendToTarget();
340    }
341
342    public void setTouchModifier(String modifier, boolean enabled) {
343        Bundle map = new Bundle();
344        map.putString("modifier", modifier);
345        map.putBoolean("enabled", enabled);
346        obtainMessage(EVENT_SET_TOUCH_MODIFIER, map).sendToTarget();
347    }
348
349    public void touchMove() {
350        obtainMessage(EVENT_TOUCH_MOVE).sendToTarget();
351    }
352
353    public void releaseTouchPoint(int id) {
354        obtainMessage(EVENT_RELEASE_TOUCH_POINT, id, 0).sendToTarget();
355    }
356
357    public void touchEnd() {
358        obtainMessage(EVENT_TOUCH_END).sendToTarget();
359    }
360
361    public void touchCancel() {
362        obtainMessage(EVENT_TOUCH_CANCEL).sendToTarget();
363    }
364
365
366    public void clearTouchPoints() {
367        obtainMessage(EVENT_CLEAR_TOUCH_POINTS).sendToTarget();
368    }
369
370    public void cancelTouchPoint(int id) {
371        obtainMessage(EVENT_CANCEL_TOUCH_POINT, id, 0).sendToTarget();
372    }
373
374    // LayoutTestController Methods
375
376    public void clearBackForwardList() {
377        obtainMessage(LAYOUT_CLEAR_LIST).sendToTarget();
378    }
379
380    public void display() {
381        obtainMessage(LAYOUT_DISPLAY).sendToTarget();
382    }
383
384    public void dumpAsText() {
385        obtainMessage(LAYOUT_DUMP_TEXT).sendToTarget();
386    }
387
388    public void dumpChildFramesAsText() {
389        obtainMessage(LAYOUT_DUMP_CHILD_FRAMES_TEXT).sendToTarget();
390    }
391
392    public void dumpBackForwardList() {
393        obtainMessage(LAYOUT_DUMP_HISTORY).sendToTarget();
394    }
395
396    public void dumpChildFrameScrollPositions() {
397        obtainMessage(LAYOUT_DUMP_CHILD_SCROLL).sendToTarget();
398    }
399
400    public void dumpEditingCallbacks() {
401        obtainMessage(LAYOUT_DUMP_EDIT_CB).sendToTarget();
402    }
403
404    public void dumpSelectionRect() {
405        obtainMessage(LAYOUT_DUMP_SEL_RECT).sendToTarget();
406    }
407
408    public void dumpTitleChanges() {
409        obtainMessage(LAYOUT_DUMP_TITLE_CHANGES).sendToTarget();
410    }
411
412    public void keepWebHistory() {
413        obtainMessage(LAYOUT_KEEP_WEB_HISTORY).sendToTarget();
414    }
415
416    public void notifyDone() {
417        obtainMessage(LAYOUT_NOTIFY_DONE).sendToTarget();
418    }
419
420    public void queueBackNavigation(int howfar) {
421        obtainMessage(LAYOUT_QUEUE_BACK_NAV, howfar, 0).sendToTarget();
422    }
423
424    public void queueForwardNavigation(int howfar) {
425        obtainMessage(LAYOUT_QUEUE_FWD_NAV, howfar, 0).sendToTarget();
426    }
427
428    public void queueLoad(String Url, String frameTarget) {
429        HashMap <String, String>map = new HashMap<String, String>();
430        map.put("Url", Url);
431        map.put("frameTarget", frameTarget);
432        obtainMessage(LAYOUT_QUEUE_LOAD, map).sendToTarget();
433    }
434
435    public void queueReload() {
436        obtainMessage(LAYOUT_QUEUE_RELOAD).sendToTarget();
437    }
438
439    public void queueScript(String scriptToRunInCurrentContext) {
440        obtainMessage(LAYOUT_QUEUE_SCRIPT,
441                scriptToRunInCurrentContext).sendToTarget();
442    }
443
444    public void repaintSweepHorizontally() {
445        obtainMessage(LAYOUT_REPAINT_HORZ).sendToTarget();
446    }
447
448    public void setAcceptsEditing(boolean b) {
449        obtainMessage(LAYOUT_SET_ACCEPT_EDIT, b ? 1 : 0, 0).sendToTarget();
450    }
451
452    public void setMainFrameIsFirstResponder(boolean b) {
453        obtainMessage(LAYOUT_MAIN_FIRST_RESP, b ? 1 : 0, 0).sendToTarget();
454    }
455
456    public void setWindowIsKey(boolean b) {
457        obtainMessage(LAYOUT_SET_WINDOW_KEY, b ? 1 : 0, 0).sendToTarget();
458    }
459
460    public void testRepaint() {
461        obtainMessage(LAYOUT_TEST_REPAINT).sendToTarget();
462    }
463
464    public void waitUntilDone() {
465        obtainMessage(LAYOUT_WAIT_UNTIL_DONE).sendToTarget();
466    }
467
468    public void dumpDatabaseCallbacks() {
469        obtainMessage(LAYOUT_DUMP_DATABASE_CALLBACKS).sendToTarget();
470    }
471
472    public void clearAllDatabases() {
473        WebStorage.getInstance().deleteAllData();
474    }
475
476    public void setDatabaseQuota(long quota) {
477        WebStorage.getInstance().setQuotaForOrigin("file://", quota);
478    }
479
480    public void setAppCacheMaximumSize(long size) {
481        WebStorage.getInstance().setAppCacheMaximumSize(size);
482    }
483
484    public void setCanOpenWindows() {
485        obtainMessage(LAYOUT_SET_CAN_OPEN_WINDOWS).sendToTarget();
486    }
487
488    public void setMockGeolocationPosition(double latitude,
489                                           double longitude,
490                                           double accuracy) {
491        MockGeolocation.getInstance().setPosition(latitude,
492                                                  longitude,
493                                                  accuracy);
494    }
495
496    public void setMockGeolocationError(int code, String message) {
497        MockGeolocation.getInstance().setError(code, message);
498    }
499
500    public void setGeolocationPermission(boolean allow) {
501        obtainMessage(SET_GEOLOCATION_PERMISSION, allow ? 1 : 0, 0).sendToTarget();
502    }
503
504    public void overridePreference(String key, boolean value) {
505        Message message = obtainMessage(OVERRIDE_PREFERENCE);
506        message.getData().putString("key", key);
507        message.getData().putBoolean("value", value);
508        message.sendToTarget();
509    }
510}
511