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