CallbackProxy.java revision 427efcca1988e3f424e363808e8fd0978f4e78d1
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 77 CallbackProxy(EventSender eventSender, 78 LayoutTestController layoutTestController) { 79 mEventSender = eventSender; 80 mLayoutTestController = layoutTestController; 81 } 82 83 public void handleMessage(Message msg) { 84 switch (msg.what) { 85 case EVENT_DOM_LOG: 86 mEventSender.enableDOMUIEventLogging(msg.arg1); 87 break; 88 case EVENT_FIRE_KBD: 89 mEventSender.fireKeyboardEventsToElement(msg.arg1); 90 break; 91 case EVENT_KEY_DOWN_1: 92 HashMap map = (HashMap) msg.obj; 93 mEventSender.keyDown((String) map.get("character"), 94 (String[]) map.get("withModifiers")); 95 break; 96 97 case EVENT_KEY_DOWN_2: 98 mEventSender.keyDown((String)msg.obj); 99 break; 100 101 case EVENT_LEAP: 102 mEventSender.leapForward(msg.arg1); 103 break; 104 105 case EVENT_MOUSE_CLICK: 106 mEventSender.mouseClick(); 107 break; 108 109 case EVENT_MOUSE_DOWN: 110 mEventSender.mouseDown(); 111 break; 112 113 case EVENT_MOUSE_MOVE: 114 mEventSender.mouseMoveTo(msg.arg1, msg.arg2); 115 break; 116 117 case EVENT_MOUSE_UP: 118 mEventSender.mouseUp(); 119 break; 120 121 case EVENT_TOUCH_START: 122 mEventSender.touchStart(); 123 break; 124 125 case EVENT_TOUCH_MOVE: 126 mEventSender.touchMove(); 127 break; 128 129 case EVENT_TOUCH_END: 130 mEventSender.touchEnd(); 131 break; 132 133 case EVENT_TOUCH_CANCEL: 134 mEventSender.touchCancel(); 135 break; 136 137 case EVENT_ADD_TOUCH_POINT: 138 mEventSender.addTouchPoint(msg.arg1, msg.arg2); 139 break; 140 141 case EVENT_UPDATE_TOUCH_POINT: 142 Bundle args = (Bundle) msg.obj; 143 int x = args.getInt("x"); 144 int y = args.getInt("y"); 145 int id = args.getInt("id"); 146 mEventSender.updateTouchPoint(id, x, y); 147 break; 148 149 case EVENT_SET_TOUCH_MODIFIER: 150 Bundle modifierArgs = (Bundle) msg.obj; 151 String modifier = modifierArgs.getString("modifier"); 152 boolean enabled = modifierArgs.getBoolean("enabled"); 153 mEventSender.setTouchModifier(modifier, enabled); 154 break; 155 156 case EVENT_RELEASE_TOUCH_POINT: 157 mEventSender.releaseTouchPoint(msg.arg1); 158 break; 159 160 case EVENT_CLEAR_TOUCH_POINTS: 161 mEventSender.clearTouchPoints(); 162 break; 163 164 case EVENT_CANCEL_TOUCH_POINT: 165 mEventSender.cancelTouchPoint(msg.arg1); 166 break; 167 168 case LAYOUT_CLEAR_LIST: 169 mLayoutTestController.clearBackForwardList(); 170 break; 171 172 case LAYOUT_DISPLAY: 173 mLayoutTestController.display(); 174 break; 175 176 case LAYOUT_DUMP_TEXT: 177 mLayoutTestController.dumpAsText(); 178 break; 179 180 case LAYOUT_DUMP_HISTORY: 181 mLayoutTestController.dumpBackForwardList(); 182 break; 183 184 case LAYOUT_DUMP_CHILD_SCROLL: 185 mLayoutTestController.dumpChildFrameScrollPositions(); 186 break; 187 188 case LAYOUT_DUMP_EDIT_CB: 189 mLayoutTestController.dumpEditingCallbacks(); 190 break; 191 192 case LAYOUT_DUMP_SEL_RECT: 193 mLayoutTestController.dumpSelectionRect(); 194 break; 195 196 case LAYOUT_DUMP_TITLE_CHANGES: 197 mLayoutTestController.dumpTitleChanges(); 198 break; 199 200 case LAYOUT_KEEP_WEB_HISTORY: 201 mLayoutTestController.keepWebHistory(); 202 break; 203 204 case LAYOUT_NOTIFY_DONE: 205 mLayoutTestController.notifyDone(); 206 break; 207 208 case LAYOUT_QUEUE_BACK_NAV: 209 mLayoutTestController.queueBackNavigation(msg.arg1); 210 break; 211 212 case LAYOUT_QUEUE_FWD_NAV: 213 mLayoutTestController.queueForwardNavigation(msg.arg1); 214 break; 215 216 case LAYOUT_QUEUE_LOAD: 217 HashMap<String, String> loadMap = 218 (HashMap<String, String>) msg.obj; 219 mLayoutTestController.queueLoad(loadMap.get("Url"), 220 loadMap.get("frameTarget")); 221 break; 222 223 case LAYOUT_QUEUE_RELOAD: 224 mLayoutTestController.queueReload(); 225 break; 226 227 case LAYOUT_QUEUE_SCRIPT: 228 mLayoutTestController.queueScript((String)msg.obj); 229 break; 230 231 case LAYOUT_REPAINT_HORZ: 232 mLayoutTestController.repaintSweepHorizontally(); 233 break; 234 235 case LAYOUT_SET_ACCEPT_EDIT: 236 mLayoutTestController.setAcceptsEditing( 237 msg.arg1 == 1 ? true : false); 238 break; 239 case LAYOUT_MAIN_FIRST_RESP: 240 mLayoutTestController.setMainFrameIsFirstResponder( 241 msg.arg1 == 1 ? true : false); 242 break; 243 244 case LAYOUT_SET_WINDOW_KEY: 245 mLayoutTestController.setWindowIsKey( 246 msg.arg1 == 1 ? true : false); 247 break; 248 249 case LAYOUT_TEST_REPAINT: 250 mLayoutTestController.testRepaint(); 251 break; 252 253 case LAYOUT_WAIT_UNTIL_DONE: 254 mLayoutTestController.waitUntilDone(); 255 break; 256 257 case LAYOUT_DUMP_DATABASE_CALLBACKS: 258 mLayoutTestController.dumpDatabaseCallbacks(); 259 break; 260 261 case LAYOUT_SET_CAN_OPEN_WINDOWS: 262 mLayoutTestController.setCanOpenWindows(); 263 break; 264 265 case SET_GEOLOCATION_PERMISSION: 266 mLayoutTestController.setGeolocationPermission( 267 msg.arg1 == 1 ? true : false); 268 break; 269 } 270 } 271 272 // EventSender Methods 273 274 public void enableDOMUIEventLogging(int DOMNode) { 275 obtainMessage(EVENT_DOM_LOG, DOMNode, 0).sendToTarget(); 276 } 277 278 public void fireKeyboardEventsToElement(int DOMNode) { 279 obtainMessage(EVENT_FIRE_KBD, DOMNode, 0).sendToTarget(); 280 } 281 282 public void keyDown(String character, String[] withModifiers) { 283 // TODO Auto-generated method stub 284 HashMap map = new HashMap(); 285 map.put("character", character); 286 map.put("withModifiers", withModifiers); 287 obtainMessage(EVENT_KEY_DOWN_1, map).sendToTarget(); 288 } 289 290 public void keyDown(String character) { 291 obtainMessage(EVENT_KEY_DOWN_2, character).sendToTarget(); 292 } 293 294 public void leapForward(int milliseconds) { 295 obtainMessage(EVENT_LEAP, milliseconds, 0).sendToTarget(); 296 } 297 298 public void mouseClick() { 299 obtainMessage(EVENT_MOUSE_CLICK).sendToTarget(); 300 } 301 302 public void mouseDown() { 303 obtainMessage(EVENT_MOUSE_DOWN).sendToTarget(); 304 } 305 306 public void mouseMoveTo(int X, int Y) { 307 obtainMessage(EVENT_MOUSE_MOVE, X, Y).sendToTarget(); 308 } 309 310 public void mouseUp() { 311 obtainMessage(EVENT_MOUSE_UP).sendToTarget(); 312 } 313 314 public void touchStart() { 315 obtainMessage(EVENT_TOUCH_START).sendToTarget(); 316 } 317 318 public void addTouchPoint(int x, int y) { 319 obtainMessage(EVENT_ADD_TOUCH_POINT, x, y).sendToTarget(); 320 } 321 322 public void updateTouchPoint(int id, int x, int y) { 323 Bundle map = new Bundle(); 324 map.putInt("x", x); 325 map.putInt("y", y); 326 map.putInt("id", id); 327 obtainMessage(EVENT_UPDATE_TOUCH_POINT, map).sendToTarget(); 328 } 329 330 public void setTouchModifier(String modifier, boolean enabled) { 331 Bundle map = new Bundle(); 332 map.putString("modifier", modifier); 333 map.putBoolean("enabled", enabled); 334 obtainMessage(EVENT_SET_TOUCH_MODIFIER, map).sendToTarget(); 335 } 336 337 public void touchMove() { 338 obtainMessage(EVENT_TOUCH_MOVE).sendToTarget(); 339 } 340 341 public void releaseTouchPoint(int id) { 342 obtainMessage(EVENT_RELEASE_TOUCH_POINT, id, 0).sendToTarget(); 343 } 344 345 public void touchEnd() { 346 obtainMessage(EVENT_TOUCH_END).sendToTarget(); 347 } 348 349 public void touchCancel() { 350 obtainMessage(EVENT_TOUCH_CANCEL).sendToTarget(); 351 } 352 353 354 public void clearTouchPoints() { 355 obtainMessage(EVENT_CLEAR_TOUCH_POINTS).sendToTarget(); 356 } 357 358 public void cancelTouchPoint(int id) { 359 obtainMessage(EVENT_CANCEL_TOUCH_POINT, id, 0).sendToTarget(); 360 } 361 362 // LayoutTestController Methods 363 364 public void clearBackForwardList() { 365 obtainMessage(LAYOUT_CLEAR_LIST).sendToTarget(); 366 } 367 368 public void display() { 369 obtainMessage(LAYOUT_DISPLAY).sendToTarget(); 370 } 371 372 public void dumpAsText() { 373 obtainMessage(LAYOUT_DUMP_TEXT).sendToTarget(); 374 } 375 376 public void dumpBackForwardList() { 377 obtainMessage(LAYOUT_DUMP_HISTORY).sendToTarget(); 378 } 379 380 public void dumpChildFrameScrollPositions() { 381 obtainMessage(LAYOUT_DUMP_CHILD_SCROLL).sendToTarget(); 382 } 383 384 public void dumpEditingCallbacks() { 385 obtainMessage(LAYOUT_DUMP_EDIT_CB).sendToTarget(); 386 } 387 388 public void dumpSelectionRect() { 389 obtainMessage(LAYOUT_DUMP_SEL_RECT).sendToTarget(); 390 } 391 392 public void dumpTitleChanges() { 393 obtainMessage(LAYOUT_DUMP_TITLE_CHANGES).sendToTarget(); 394 } 395 396 public void keepWebHistory() { 397 obtainMessage(LAYOUT_KEEP_WEB_HISTORY).sendToTarget(); 398 } 399 400 public void notifyDone() { 401 obtainMessage(LAYOUT_NOTIFY_DONE).sendToTarget(); 402 } 403 404 public void queueBackNavigation(int howfar) { 405 obtainMessage(LAYOUT_QUEUE_BACK_NAV, howfar, 0).sendToTarget(); 406 } 407 408 public void queueForwardNavigation(int howfar) { 409 obtainMessage(LAYOUT_QUEUE_FWD_NAV, howfar, 0).sendToTarget(); 410 } 411 412 public void queueLoad(String Url, String frameTarget) { 413 HashMap <String, String>map = new HashMap<String, String>(); 414 map.put("Url", Url); 415 map.put("frameTarget", frameTarget); 416 obtainMessage(LAYOUT_QUEUE_LOAD, map).sendToTarget(); 417 } 418 419 public void queueReload() { 420 obtainMessage(LAYOUT_QUEUE_RELOAD).sendToTarget(); 421 } 422 423 public void queueScript(String scriptToRunInCurrentContext) { 424 obtainMessage(LAYOUT_QUEUE_SCRIPT, 425 scriptToRunInCurrentContext).sendToTarget(); 426 } 427 428 public void repaintSweepHorizontally() { 429 obtainMessage(LAYOUT_REPAINT_HORZ).sendToTarget(); 430 } 431 432 public void setAcceptsEditing(boolean b) { 433 obtainMessage(LAYOUT_SET_ACCEPT_EDIT, b ? 1 : 0, 0).sendToTarget(); 434 } 435 436 public void setMainFrameIsFirstResponder(boolean b) { 437 obtainMessage(LAYOUT_MAIN_FIRST_RESP, b ? 1 : 0, 0).sendToTarget(); 438 } 439 440 public void setWindowIsKey(boolean b) { 441 obtainMessage(LAYOUT_SET_WINDOW_KEY, b ? 1 : 0, 0).sendToTarget(); 442 } 443 444 public void testRepaint() { 445 obtainMessage(LAYOUT_TEST_REPAINT).sendToTarget(); 446 } 447 448 public void waitUntilDone() { 449 obtainMessage(LAYOUT_WAIT_UNTIL_DONE).sendToTarget(); 450 } 451 452 public void dumpDatabaseCallbacks() { 453 obtainMessage(LAYOUT_DUMP_DATABASE_CALLBACKS).sendToTarget(); 454 } 455 456 public void clearAllDatabases() { 457 WebStorage.getInstance().deleteAllData(); 458 } 459 460 public void setDatabaseQuota(long quota) { 461 WebStorage.getInstance().setQuotaForOrigin("file://", quota); 462 } 463 464 public void setAppCacheMaximumSize(long size) { 465 WebStorage.getInstance().setAppCacheMaximumSize(size); 466 } 467 468 public void setCanOpenWindows() { 469 obtainMessage(LAYOUT_SET_CAN_OPEN_WINDOWS).sendToTarget(); 470 } 471 472 public void setMockGeolocationPosition(double latitude, 473 double longitude, 474 double accuracy) { 475 MockGeolocation.getInstance().setPosition(latitude, 476 longitude, 477 accuracy); 478 } 479 480 public void setMockGeolocationError(int code, String message) { 481 MockGeolocation.getInstance().setError(code, message); 482 } 483 484 public void setGeolocationPermission(boolean allow) { 485 obtainMessage(SET_GEOLOCATION_PERMISSION, allow ? 1 : 0, 0).sendToTarget(); 486 } 487} 488