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