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