CallbackProxy.java revision e6f3e45dc4d8a2b482183c57c61dd9ea22505c85
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.Handler;
20import android.os.Message;
21import android.webkit.WebStorage;
22
23import java.util.HashMap;
24
25public class CallbackProxy extends Handler implements EventSender, LayoutTestController {
26
27    private EventSender mEventSender;
28    private LayoutTestController mLayoutTestController;
29
30    private static final int EVENT_DOM_LOG = 1;
31    private static final int EVENT_FIRE_KBD = 2;
32    private static final int EVENT_KEY_DOWN_1 = 3;
33    private static final int EVENT_KEY_DOWN_2 = 4;
34    private static final int EVENT_LEAP = 5;
35    private static final int EVENT_MOUSE_CLICK = 6;
36    private static final int EVENT_MOUSE_DOWN = 7;
37    private static final int EVENT_MOUSE_MOVE = 8;
38    private static final int EVENT_MOUSE_UP = 9;
39
40    private static final int LAYOUT_CLEAR_LIST = 20;
41    private static final int LAYOUT_DISPLAY = 21;
42    private static final int LAYOUT_DUMP_TEXT = 22;
43    private static final int LAYOUT_DUMP_HISTORY = 23;
44    private static final int LAYOUT_DUMP_CHILD_SCROLL = 24;
45    private static final int LAYOUT_DUMP_EDIT_CB = 25;
46    private static final int LAYOUT_DUMP_SEL_RECT = 26;
47    private static final int LAYOUT_DUMP_TITLE_CHANGES = 27;
48    private static final int LAYOUT_KEEP_WEB_HISTORY = 28;
49    private static final int LAYOUT_NOTIFY_DONE = 29;
50    private static final int LAYOUT_QUEUE_BACK_NAV = 30;
51    private static final int LAYOUT_QUEUE_FWD_NAV = 31;
52    private static final int LAYOUT_QUEUE_LOAD = 32;
53    private static final int LAYOUT_QUEUE_RELOAD = 33;
54    private static final int LAYOUT_QUEUE_SCRIPT = 34;
55    private static final int LAYOUT_REPAINT_HORZ = 35;
56    private static final int LAYOUT_SET_ACCEPT_EDIT = 36;
57    private static final int LAYOUT_MAIN_FIRST_RESP = 37;
58    private static final int LAYOUT_SET_WINDOW_KEY = 38;
59    private static final int LAYOUT_TEST_REPAINT = 39;
60    private static final int LAYOUT_WAIT_UNTIL_DONE = 40;
61    private static final int LAYOUT_DUMP_DATABASE_CALLBACKS = 41;
62    private static final int LAYOUT_SET_CAN_OPEN_WINDOWS = 42;
63
64    CallbackProxy(EventSender eventSender,
65            LayoutTestController layoutTestController) {
66        mEventSender = eventSender;
67        mLayoutTestController = layoutTestController;
68    }
69
70    public void handleMessage(Message msg) {
71        switch (msg.what) {
72        case EVENT_DOM_LOG:
73            mEventSender.enableDOMUIEventLogging(msg.arg1);
74            break;
75        case EVENT_FIRE_KBD:
76            mEventSender.fireKeyboardEventsToElement(msg.arg1);
77            break;
78        case EVENT_KEY_DOWN_1:
79            HashMap map = (HashMap) msg.obj;
80            mEventSender.keyDown((String) map.get("character"),
81                    (String[]) map.get("withModifiers"));
82            break;
83
84        case EVENT_KEY_DOWN_2:
85            mEventSender.keyDown((String)msg.obj);
86            break;
87
88        case EVENT_LEAP:
89            mEventSender.leapForward(msg.arg1);
90            break;
91
92        case EVENT_MOUSE_CLICK:
93            mEventSender.mouseClick();
94            break;
95
96        case EVENT_MOUSE_DOWN:
97            mEventSender.mouseDown();
98            break;
99
100        case EVENT_MOUSE_MOVE:
101            mEventSender.mouseMoveTo(msg.arg1, msg.arg2);
102            break;
103
104        case EVENT_MOUSE_UP:
105            mEventSender.mouseUp();
106            break;
107
108        case LAYOUT_CLEAR_LIST:
109            mLayoutTestController.clearBackForwardList();
110            break;
111
112        case LAYOUT_DISPLAY:
113            mLayoutTestController.display();
114            break;
115
116        case LAYOUT_DUMP_TEXT:
117            mLayoutTestController.dumpAsText();
118            break;
119
120        case LAYOUT_DUMP_HISTORY:
121            mLayoutTestController.dumpBackForwardList();
122            break;
123
124        case LAYOUT_DUMP_CHILD_SCROLL:
125            mLayoutTestController.dumpChildFrameScrollPositions();
126            break;
127
128        case LAYOUT_DUMP_EDIT_CB:
129            mLayoutTestController.dumpEditingCallbacks();
130            break;
131
132        case LAYOUT_DUMP_SEL_RECT:
133            mLayoutTestController.dumpSelectionRect();
134            break;
135
136        case LAYOUT_DUMP_TITLE_CHANGES:
137            mLayoutTestController.dumpTitleChanges();
138            break;
139
140        case LAYOUT_KEEP_WEB_HISTORY:
141            mLayoutTestController.keepWebHistory();
142            break;
143
144        case LAYOUT_NOTIFY_DONE:
145            mLayoutTestController.notifyDone();
146            break;
147
148        case LAYOUT_QUEUE_BACK_NAV:
149            mLayoutTestController.queueBackNavigation(msg.arg1);
150            break;
151
152        case LAYOUT_QUEUE_FWD_NAV:
153            mLayoutTestController.queueForwardNavigation(msg.arg1);
154            break;
155
156        case LAYOUT_QUEUE_LOAD:
157            HashMap<String, String> loadMap =
158                (HashMap<String, String>) msg.obj;
159            mLayoutTestController.queueLoad(loadMap.get("Url"),
160                    loadMap.get("frameTarget"));
161            break;
162
163        case LAYOUT_QUEUE_RELOAD:
164            mLayoutTestController.queueReload();
165            break;
166
167        case LAYOUT_QUEUE_SCRIPT:
168            mLayoutTestController.queueScript((String)msg.obj);
169            break;
170
171        case LAYOUT_REPAINT_HORZ:
172            mLayoutTestController.repaintSweepHorizontally();
173            break;
174
175        case LAYOUT_SET_ACCEPT_EDIT:
176            mLayoutTestController.setAcceptsEditing(
177                    msg.arg1 == 1 ? true : false);
178            break;
179        case LAYOUT_MAIN_FIRST_RESP:
180            mLayoutTestController.setMainFrameIsFirstResponder(
181                    msg.arg1 == 1 ? true : false);
182            break;
183
184        case LAYOUT_SET_WINDOW_KEY:
185            mLayoutTestController.setWindowIsKey(
186                    msg.arg1 == 1 ? true : false);
187            break;
188
189        case LAYOUT_TEST_REPAINT:
190            mLayoutTestController.testRepaint();
191            break;
192
193        case LAYOUT_WAIT_UNTIL_DONE:
194            mLayoutTestController.waitUntilDone();
195            break;
196
197        case LAYOUT_DUMP_DATABASE_CALLBACKS:
198            mLayoutTestController.dumpDatabaseCallbacks();
199            break;
200
201        case LAYOUT_SET_CAN_OPEN_WINDOWS:
202            mLayoutTestController.setCanOpenWindows();
203            break;
204        }
205    }
206
207    // EventSender Methods
208
209    public void enableDOMUIEventLogging(int DOMNode) {
210        obtainMessage(EVENT_DOM_LOG, DOMNode, 0).sendToTarget();
211    }
212
213    public void fireKeyboardEventsToElement(int DOMNode) {
214        obtainMessage(EVENT_FIRE_KBD, DOMNode, 0).sendToTarget();
215    }
216
217    public void keyDown(String character, String[] withModifiers) {
218        // TODO Auto-generated method stub
219        HashMap map = new HashMap();
220        map.put("character", character);
221        map.put("withModifiers", withModifiers);
222        obtainMessage(EVENT_KEY_DOWN_1, map).sendToTarget();
223    }
224
225    public void keyDown(String character) {
226        obtainMessage(EVENT_KEY_DOWN_2, character).sendToTarget();
227    }
228
229    public void leapForward(int milliseconds) {
230        obtainMessage(EVENT_LEAP, milliseconds, 0).sendToTarget();
231    }
232
233    public void mouseClick() {
234        obtainMessage(EVENT_MOUSE_CLICK).sendToTarget();
235    }
236
237    public void mouseDown() {
238        obtainMessage(EVENT_MOUSE_DOWN).sendToTarget();
239    }
240
241    public void mouseMoveTo(int X, int Y) {
242        obtainMessage(EVENT_MOUSE_MOVE, X, Y).sendToTarget();
243    }
244
245    public void mouseUp() {
246        obtainMessage(EVENT_MOUSE_UP).sendToTarget();
247    }
248
249    // LayoutTestController Methods
250
251    public void clearBackForwardList() {
252        obtainMessage(LAYOUT_CLEAR_LIST).sendToTarget();
253    }
254
255    public void display() {
256        obtainMessage(LAYOUT_DISPLAY).sendToTarget();
257    }
258
259    public void dumpAsText() {
260        obtainMessage(LAYOUT_DUMP_TEXT).sendToTarget();
261    }
262
263    public void dumpBackForwardList() {
264        obtainMessage(LAYOUT_DUMP_HISTORY).sendToTarget();
265    }
266
267    public void dumpChildFrameScrollPositions() {
268        obtainMessage(LAYOUT_DUMP_CHILD_SCROLL).sendToTarget();
269    }
270
271    public void dumpEditingCallbacks() {
272        obtainMessage(LAYOUT_DUMP_EDIT_CB).sendToTarget();
273    }
274
275    public void dumpSelectionRect() {
276        obtainMessage(LAYOUT_DUMP_SEL_RECT).sendToTarget();
277    }
278
279    public void dumpTitleChanges() {
280        obtainMessage(LAYOUT_DUMP_TITLE_CHANGES).sendToTarget();
281    }
282
283    public void keepWebHistory() {
284        obtainMessage(LAYOUT_KEEP_WEB_HISTORY).sendToTarget();
285    }
286
287    public void notifyDone() {
288        obtainMessage(LAYOUT_NOTIFY_DONE).sendToTarget();
289    }
290
291    public void queueBackNavigation(int howfar) {
292        obtainMessage(LAYOUT_QUEUE_BACK_NAV, howfar, 0).sendToTarget();
293    }
294
295    public void queueForwardNavigation(int howfar) {
296        obtainMessage(LAYOUT_QUEUE_FWD_NAV, howfar, 0).sendToTarget();
297    }
298
299    public void queueLoad(String Url, String frameTarget) {
300        HashMap <String, String>map = new HashMap<String, String>();
301        map.put("Url", Url);
302        map.put("frameTarget", frameTarget);
303        obtainMessage(LAYOUT_QUEUE_LOAD, map).sendToTarget();
304    }
305
306    public void queueReload() {
307        obtainMessage(LAYOUT_QUEUE_RELOAD).sendToTarget();
308    }
309
310    public void queueScript(String scriptToRunInCurrentContext) {
311        obtainMessage(LAYOUT_QUEUE_SCRIPT,
312                scriptToRunInCurrentContext).sendToTarget();
313    }
314
315    public void repaintSweepHorizontally() {
316        obtainMessage(LAYOUT_REPAINT_HORZ).sendToTarget();
317    }
318
319    public void setAcceptsEditing(boolean b) {
320        obtainMessage(LAYOUT_SET_ACCEPT_EDIT, b ? 1 : 0, 0).sendToTarget();
321    }
322
323    public void setMainFrameIsFirstResponder(boolean b) {
324        obtainMessage(LAYOUT_MAIN_FIRST_RESP, b ? 1 : 0, 0).sendToTarget();
325    }
326
327    public void setWindowIsKey(boolean b) {
328        obtainMessage(LAYOUT_SET_WINDOW_KEY,b ? 1 : 0, 0).sendToTarget();
329    }
330
331    public void testRepaint() {
332        obtainMessage(LAYOUT_TEST_REPAINT).sendToTarget();
333    }
334
335    public void waitUntilDone() {
336        obtainMessage(LAYOUT_WAIT_UNTIL_DONE).sendToTarget();
337    }
338
339    public void dumpDatabaseCallbacks() {
340        obtainMessage(LAYOUT_DUMP_DATABASE_CALLBACKS).sendToTarget();
341    }
342
343    public void clearAllDatabases() {
344        WebStorage.getInstance().deleteAllDatabases();
345    }
346
347    public void setDatabaseQuota(long quota) {
348        WebStorage.getInstance().setQuotaForOrigin("file://", quota);
349    }
350
351    public void setCanOpenWindows() {
352        obtainMessage(LAYOUT_SET_CAN_OPEN_WINDOWS).sendToTarget();
353    }
354
355}
356