| <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN"> |
| <html> |
| <head> |
| <script src="../../resources/js-test.js"></script> |
| </head> |
| <body id="body"> |
| |
| <fieldset> |
| <div> |
| <input id="1"> |
| <label for="1">1</label> |
| </div> |
| <div> |
| <input id="2"> |
| <label for="2">2</label> |
| </div> |
| </fieldset> |
| |
| <p id="description"></p> |
| <div id="console"></div> |
| <div id="notifications"></div> |
| |
| <script> |
| |
| description("This tests that calling focus on a render object when it doesn't result in a selection change won't leave isSynchronizingSelection set to true."); |
| |
| var webArea = 0; |
| var axTextStateSyncOne = 0; |
| var axTextStateSyncTwo = 0; |
| var selectCount = 0; |
| var focusCount = 0; |
| |
| // Notification ordering: |
| // The first tab will result in a selection and focus notification pair selectCount=1, focusCount=1 |
| // takeFocus() will result in a focus notification selectCount=1, focusCount=2 |
| // The second tab will result in another selection and focus notification pair selectCount=2, focusCount=3 |
| function notificationCallback(notification, userInfo) { |
| if (notification == "AXSelectedTextChanged") { |
| selectCount++; |
| if (selectCount == 1) { |
| axTextStateSyncOne = userInfo["AXTextStateSync"]; |
| shouldBe("axTextStateSyncOne", "undefined"); |
| |
| shouldBe("accessibilityController.accessibleElementById(\"1\").isFocusable", "true"); |
| accessibilityController.accessibleElementById("1").takeFocus(); |
| } else if (selectCount == 2) { |
| axTextStateSyncTwo = userInfo["AXTextStateSync"]; |
| shouldBe("axTextStateSyncTwo", "undefined"); |
| } |
| } else if (notification == "AXFocusChanged") { |
| focusCount++; |
| if (focusCount == 2) { |
| eventSender.scheduleAsynchronousKeyDown("\t"); |
| } |
| } |
| if (selectCount == 2 && focusCount == 3) { |
| webArea.removeNotificationListener(); |
| finishJSTest(); |
| } |
| } |
| |
| if (window.accessibilityController) { |
| jsTestIsAsync = true; |
| testRunner.overridePreference("WebKitTabToLinksPreferenceKey", 1); |
| |
| accessibilityController.enableEnhancedAccessibility(true); |
| webArea = accessibilityController.rootElement.childAtIndex(0); |
| |
| var addedNotification = webArea.addNotificationListener(notificationCallback); |
| shouldBe("addedNotification", "true"); |
| |
| eventSender.keyDown("\t"); |
| shouldBe("accessibilityController.focusedElement.isEqual(accessibilityController.accessibleElementById(\"1\"))", "true"); |
| } |
| |
| </script> |
| </body> |
| </html> |