WebKit Bugzilla
Attachment 359080 Details for
Bug 192898
: [iOS] uiController.keyDown() does not translate Control modified key
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-192898-20190114143012.patch (text/plain), 20.98 KB, created by
Daniel Bates
on 2019-01-14 14:30:13 PST
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Daniel Bates
Created:
2019-01-14 14:30:13 PST
Size:
20.98 KB
patch
obsolete
>Subversion Revision: 239773 >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 7932e65d8d32370cd82a4e21818ace2bdbdde54b..8beec43ba48c635f44a0ca9484732bddd9f17fec 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,44 @@ >+2019-01-14 Daniel Bates <dabates@apple.com> >+ >+ [iOS] uiController.keyDown() does not translate Control modified key >+ https://bugs.webkit.org/show_bug.cgi?id=192898 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Implement uiController.keyDown() in terms of HIDEventGenerator so that UIKit performs >+ key translation, as applicable. Among other cases, key translation occurs when performing >+ a Control key modified key sequence. Writing uiController.keyDown() in terms of HIDEventGenerator >+ also makes the behavior of uiController.keyDown() more closely match the behavior of a >+ human pressing down and releasing key(s) using a hardware keyboard. >+ >+ * WebKitTestRunner/ios/HIDEventGenerator.h: >+ * WebKitTestRunner/ios/HIDEventGenerator.mm: >+ (-[HIDEventGenerator sendMarkerHIDEventWithCompletionBlock:]): Renamed; formerly named _sendMarkerHIDEventWithCompletionBlock. >+ >+ (-[HIDEventGenerator touchDown:touchCount:completionBlock:]): >+ (-[HIDEventGenerator liftUp:touchCount:completionBlock:]): >+ (-[HIDEventGenerator stylusDownAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]): >+ (-[HIDEventGenerator stylusMoveToPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]): >+ (-[HIDEventGenerator stylusUpAtPoint:completionBlock:]): >+ (-[HIDEventGenerator stylusTapAtPoint:azimuthAngle:altitudeAngle:pressure:completionBlock:]): >+ (-[HIDEventGenerator sendTaps:location:withNumberOfTouches:completionBlock:]): >+ (-[HIDEventGenerator longPress:completionBlock:]): >+ (-[HIDEventGenerator dragWithStartPoint:endPoint:duration:completionBlock:]): >+ Update code for above renaming. >+ >+ (hidUsageCodeForCharacter): Translate \b to a backspace and teach this function to recognize the >+ DumpRenderTree EventSender-compatible modifier key names (e.g. "metaKey"). >+ >+ (-[HIDEventGenerator keyDown:]): Added. >+ (-[HIDEventGenerator keyUp:]): Added. >+ (-[HIDEventGenerator keyPress:completionBlock:]): >+ (-[HIDEventGenerator eventDispatchThreadEntry:]): >+ (-[HIDEventGenerator _sendMarkerHIDEventWithCompletionBlock:]): Deleted; renamed to sendMarkerHIDEventWithCompletionBlock. >+ * WebKitTestRunner/ios/UIScriptControllerIOS.mm: >+ (WTR::parseModifierArray): Modified to return a vector of strings that represent the modifier keys to press. >+ (WTR::UIScriptController::keyDown): Write in terms of HIDEventGenerator. >+ (WTR::parseModifier): Deleted. >+ > 2019-01-11 Daniel Bates <dabates@apple.com> > > [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element >diff --git a/Tools/WebKitTestRunner/ios/HIDEventGenerator.h b/Tools/WebKitTestRunner/ios/HIDEventGenerator.h >index 475de4b6598ff21521bf1440dade1ed1f0210e4c..a523e3b18e1876004f6b1f5d671c797e1fb69cf3 100644 >--- a/Tools/WebKitTestRunner/ios/HIDEventGenerator.h >+++ b/Tools/WebKitTestRunner/ios/HIDEventGenerator.h >@@ -109,4 +109,9 @@ RetainPtr<IOHIDEventRef> createHIDKeyEvent(NSString *, uint64_t timestamp, bool > // Keyboard > - (void)keyPress:(NSString *)character completionBlock:(void (^)(void))completionBlock; > >+- (void)keyDown:(NSString *)character; >+- (void)keyUp:(NSString *)character; >+ >+- (BOOL)sendMarkerHIDEventWithCompletionBlock:(void (^)(void))completionBlock; >+ > @end >diff --git a/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm b/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm >index c3996a845878e2e553b9e0fa719a3b5dd995620f..caf76b73ae5c5a518cf156b1b83c991e95b0fd13 100644 >--- a/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm >+++ b/Tools/WebKitTestRunner/ios/HIDEventGenerator.mm >@@ -475,7 +475,7 @@ - (BOOL)_sendHIDEvent:(IOHIDEventRef)eventRef > return YES; > } > >-- (BOOL)_sendMarkerHIDEventWithCompletionBlock:(void (^)(void))completionBlock >+- (BOOL)sendMarkerHIDEventWithCompletionBlock:(void (^)(void))completionBlock > { > auto callbackID = [HIDEventGenerator nextEventCallbackID]; > [_eventCallbacks setObject:Block_copy(completionBlock) forKey:@(callbackID)]; >@@ -629,13 +629,13 @@ - (void)moveToPoints:(CGPoint*)newLocations touchCount:(NSUInteger)touchCount du > - (void)touchDown:(CGPoint)location touchCount:(NSUInteger)count completionBlock:(void (^)(void))completionBlock > { > [self touchDown:location touchCount:count]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)liftUp:(CGPoint)location touchCount:(NSUInteger)count completionBlock:(void (^)(void))completionBlock > { > [self liftUp:location touchCount:count]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)stylusDownAtPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle altitudeAngle:(CGFloat)altitudeAngle pressure:(CGFloat)pressure >@@ -686,19 +686,19 @@ - (void)stylusUpAtPoint:(CGPoint)location > - (void)stylusDownAtPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle altitudeAngle:(CGFloat)altitudeAngle pressure:(CGFloat)pressure completionBlock:(void (^)(void))completionBlock > { > [self stylusDownAtPoint:location azimuthAngle:azimuthAngle altitudeAngle:altitudeAngle pressure:pressure]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)stylusMoveToPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle altitudeAngle:(CGFloat)altitudeAngle pressure:(CGFloat)pressure completionBlock:(void (^)(void))completionBlock > { > [self stylusMoveToPoint:location azimuthAngle:azimuthAngle altitudeAngle:altitudeAngle pressure:pressure]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)stylusUpAtPoint:(CGPoint)location completionBlock:(void (^)(void))completionBlock > { > [self stylusUpAtPoint:location]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)stylusTapAtPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle altitudeAngle:(CGFloat)altitudeAngle pressure:(CGFloat)pressure completionBlock:(void (^)(void))completionBlock >@@ -709,7 +709,7 @@ - (void)stylusTapAtPoint:(CGPoint)location azimuthAngle:(CGFloat)azimuthAngle al > nanosleep(&pressDelay, 0); > [self stylusUpAtPoint:location]; > >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)sendTaps:(int)tapCount location:(CGPoint)location withNumberOfTouches:(int)touchCount completionBlock:(void (^)(void))completionBlock >@@ -725,7 +725,7 @@ - (void)sendTaps:(int)tapCount location:(CGPoint)location withNumberOfTouches:(i > nanosleep(&doubleDelay, 0); > } > >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)tap:(CGPoint)location completionBlock:(void (^)(void))completionBlock >@@ -750,7 +750,7 @@ - (void)longPress:(CGPoint)location completionBlock:(void (^)(void))completionBl > > dispatch_after(dispatch_time(DISPATCH_TIME_NOW, longPressHoldDelay * nanosecondsPerSecond), dispatch_get_main_queue(), ^ { > [self liftUp:location]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlockCopy.get()]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlockCopy.get()]; > }); > } > >@@ -759,7 +759,7 @@ - (void)dragWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation > [self touchDown:startLocation touchCount:1]; > [self moveToPoints:&endLocation touchCount:1 duration:seconds]; > [self liftUp:endLocation]; >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)pinchCloseWithStartPoint:(CGPoint)startLocation endPoint:(CGPoint)endLocation duration:(double)seconds completionBlock:(void (^)(void))completionBlock >@@ -888,6 +888,8 @@ static inline uint32_t hidUsageCodeForCharacter(NSString *key) > case '=': > case '+': > return kHIDUsage_KeyboardEqualSign; >+ case '\b': >+ return kHIDUsage_KeyboardDeleteOrBackspace; > case '\t': > return kHIDUsage_KeyboardTab; > case '[': >@@ -925,7 +927,7 @@ static inline uint32_t hidUsageCodeForCharacter(NSString *key) > if (auto keyCode = keyCodeForDOMFunctionKey(key)) > return *keyCode; > >- if ([key isEqualToString:@"capsLock"]) >+ if ([key isEqualToString:@"capsLock"] || [key isEqualToString:@"capsLockKey"]) > return kHIDUsage_KeyboardCapsLock; > if ([key isEqualToString:@"pageUp"]) > return kHIDUsage_KeyboardPageUp; >@@ -953,21 +955,21 @@ static inline uint32_t hidUsageCodeForCharacter(NSString *key) > return kHIDUsage_KeyboardDeleteOrBackspace; > if ([key isEqualToString:@"forwardDelete"]) > return kHIDUsage_KeyboardDeleteForward; >- if ([key isEqualToString:@"leftCommand"]) >+ if ([key isEqualToString:@"leftCommand"] || [key isEqualToString:@"metaKey"]) > return kHIDUsage_KeyboardLeftGUI; > if ([key isEqualToString:@"rightCommand"]) > return kHIDUsage_KeyboardRightGUI; > if ([key isEqualToString:@"clear"]) // Num Lock / Clear > return kHIDUsage_KeypadNumLock; >- if ([key isEqualToString:@"leftControl"]) >+ if ([key isEqualToString:@"leftControl"] || [key isEqualToString:@"ctrlKey"]) > return kHIDUsage_KeyboardLeftControl; > if ([key isEqualToString:@"rightControl"]) > return kHIDUsage_KeyboardRightControl; >- if ([key isEqualToString:@"leftShift"]) >+ if ([key isEqualToString:@"leftShift"] || [key isEqualToString:@"shiftKey"]) > return kHIDUsage_KeyboardLeftShift; > if ([key isEqualToString:@"rightShift"]) > return kHIDUsage_KeyboardRightShift; >- if ([key isEqualToString:@"leftAlt"]) >+ if ([key isEqualToString:@"leftAlt"] || [key isEqualToString:@"altKey"]) > return kHIDUsage_KeyboardLeftAlt; > if ([key isEqualToString:@"rightAlt"]) > return kHIDUsage_KeyboardRightAlt; >@@ -980,6 +982,16 @@ RetainPtr<IOHIDEventRef> createHIDKeyEvent(NSString *character, uint64_t timesta > return adoptCF(IOHIDEventCreateKeyboardEvent(kCFAllocatorDefault, timestamp, kHIDPage_KeyboardOrKeypad, hidUsageCodeForCharacter(character), isKeyDown, kIOHIDEventOptionNone)); > } > >+- (void)keyDown:(NSString *)character >+{ >+ [self _sendIOHIDKeyboardEvent:mach_absolute_time() usage:hidUsageCodeForCharacter(character) isKeyDown:true]; >+} >+ >+- (void)keyUp:(NSString *)character >+{ >+ [self _sendIOHIDKeyboardEvent:mach_absolute_time() usage:hidUsageCodeForCharacter(character) isKeyDown:false]; >+} >+ > - (void)keyPress:(NSString *)character completionBlock:(void (^)(void))completionBlock > { > bool shouldWrapWithShift = shouldWrapWithShiftKeyEventForCharacter(character); >@@ -995,7 +1007,7 @@ - (void)keyPress:(NSString *)character completionBlock:(void (^)(void))completio > if (shouldWrapWithShift) > [self _sendIOHIDKeyboardEvent:absoluteMachTime usage:kHIDUsage_KeyboardLeftShift isKeyDown:false]; > >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > } > > - (void)dispatchEventWithInfo:(NSDictionary *)eventInfo >@@ -1112,7 +1124,7 @@ - (void)eventDispatchThreadEntry:(NSDictionary *)threadData > } > > dispatch_async(dispatch_get_main_queue(), ^ { >- [self _sendMarkerHIDEventWithCompletionBlock:completionBlock]; >+ [self sendMarkerHIDEventWithCompletionBlock:completionBlock]; > }); > } > >diff --git a/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm b/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >index 9e20477b1e868267f49c4a0092b0ad58c3d49186..f7bfc4e749961dcc1c18c9241cdad50657d8d746 100644 >--- a/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >+++ b/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2015 Apple Inc. All rights reserved. >+ * Copyright (C) 2015-2019 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -43,6 +43,7 @@ > #import <WebKit/WKWebViewPrivate.h> > #import <WebKit/WebKit.h> > #import <wtf/SoftLinking.h> >+#import <wtf/Vector.h> > > SOFT_LINK_FRAMEWORK(UIKit) > SOFT_LINK_CLASS(UIKit, UIPhysicalKeyboardEvent) >@@ -356,37 +357,23 @@ static unsigned arrayLength(JSContextRef context, JSObjectRef array) > return 0; > } > >-static UIKeyModifierFlags parseModifier(JSStringRef modifier) >-{ >- if (JSStringIsEqualToUTF8CString(modifier, "altKey")) >- return UIKeyModifierAlternate; >- if (JSStringIsEqualToUTF8CString(modifier, "capsLockKey")) >- return UIKeyModifierAlphaShift; >- if (JSStringIsEqualToUTF8CString(modifier, "ctrlKey")) >- return UIKeyModifierControl; >- if (JSStringIsEqualToUTF8CString(modifier, "metaKey")) >- return UIKeyModifierCommand; >- if (JSStringIsEqualToUTF8CString(modifier, "shiftKey")) >- return UIKeyModifierShift; >- return 0; >-} >- >-static UIKeyModifierFlags parseModifierArray(JSContextRef context, JSValueRef arrayValue) >+static Vector<String> parseModifierArray(JSContextRef context, JSValueRef arrayValue) > { > if (!arrayValue) >- return 0; >+ return { }; > > // The value may either be a string with a single modifier or an array of modifiers. > if (JSValueIsString(context, arrayValue)) { >- auto string = adopt(JSValueToStringCopy(context, arrayValue, nullptr)); >- return parseModifier(string.get()); >+ auto string = toWTFString(toWK(adopt(JSValueToStringCopy(context, arrayValue, nullptr)))); >+ return { string }; > } > > if (!JSValueIsObject(context, arrayValue)) >- return 0; >+ return { }; > JSObjectRef array = const_cast<JSObjectRef>(arrayValue); > unsigned length = arrayLength(context, array); >- UIKeyModifierFlags modifiers = 0; >+ Vector<String> modifiers; >+ modifiers.reserveInitialCapacity(length); > for (unsigned i = 0; i < length; ++i) { > JSValueRef exception = nullptr; > JSValueRef value = JSObjectGetPropertyAtIndex(context, array, i, &exception); >@@ -395,7 +382,7 @@ static UIKeyModifierFlags parseModifierArray(JSContextRef context, JSValueRef ar > auto string = adopt(JSValueToStringCopy(context, value, &exception)); > if (exception) > continue; >- modifiers |= parseModifier(string.get()); >+ modifiers.append(toWTFString(toWK(string.get()))); > } > return modifiers; > } >@@ -412,27 +399,22 @@ static UIPhysicalKeyboardEvent *createUIPhysicalKeyboardEvent(NSString *hidInput > void UIScriptController::keyDown(JSStringRef character, JSValueRef modifierArray) > { > // Character can be either a single Unicode code point or the name of a special key (e.g. "downArrow"). >- // createHIDKeyEvent() knows how to map these special keys to the appropriate keycode. >- // >- // FIXME: The UIEvent input string for special keys (e.g. "downArrow") should either be a UIKeyInput* >- // string constant or an ASCII control character. In practice the input string for a special key is >- // ambiguious (e.g. F5 and F6 have the same string - the ASCII DLE character) and hence it is effectively >- // ignored in favor of key identification by keycode. So, we just take the empty string as the input string >- // for a special key. >+ // HIDEventGenerator knows how to map these special keys to the appropriate keycode. > String inputString = toWTFString(toWK(character)); >- String uiEventInputString = inputString.length() > 1 ? emptyString() : inputString; > auto modifierFlags = parseModifierArray(m_context->jsContext(), modifierArray); >- UIKeyboardInputFlags inputFlags = static_cast<UIKeyboardInputFlags>(0); > >- // Note that UIKit will call -release on the passed UIPhysicalKeyboardEvent. >+ for (auto& modifierFlag : modifierFlags) >+ [[HIDEventGenerator sharedHIDEventGenerator] keyDown:modifierFlag]; > >- // Key down >- auto* keyboardEvent = createUIPhysicalKeyboardEvent(inputString, uiEventInputString, modifierFlags, inputFlags, true /* isKeyDown */); >- [[UIApplication sharedApplication] handleKeyUIEvent:keyboardEvent]; >+ [[HIDEventGenerator sharedHIDEventGenerator] keyDown:inputString]; >+ [[HIDEventGenerator sharedHIDEventGenerator] keyUp:inputString]; > >- // Key up >- keyboardEvent = createUIPhysicalKeyboardEvent(inputString, uiEventInputString, modifierFlags, inputFlags, false /* isKeyDown */); >- [[UIApplication sharedApplication] handleKeyUIEvent:keyboardEvent]; >+ for (size_t i = modifierFlags.size(); i; ) { >+ --i; >+ [[HIDEventGenerator sharedHIDEventGenerator] keyUp:modifierFlags[i]]; >+ } >+ >+ [[HIDEventGenerator sharedHIDEventGenerator] sendMarkerHIDEventWithCompletionBlock:^{ /* Do nothing */ }]; > } > > void UIScriptController::dismissFormAccessoryView() >@@ -931,6 +913,8 @@ void UIScriptController::setKeyboardInputModeIdentifier(JSStringRef identifier) > TestController::singleton().setKeyboardInputModeIdentifier(toWTFString(toWK(identifier))); > } > >+// FIXME: Write this in terms of HIDEventGenerator once we know how to reset caps lock state >+// on test completion to avoid it effecting subsequent tests. > void UIScriptController::toggleCapsLock(JSValueRef callback) > { > m_capsLockOn = !m_capsLockOn; >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 44f0b2ae917bd1f07edae47ded11a3d2a042447e..508d61b6acab0644ddba1d8ac55047cd8ba8bf2c 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,20 @@ >+2019-01-14 Daniel Bates <dabates@apple.com> >+ >+ [iOS] uiController.keyDown() does not translate Control modified key >+ https://bugs.webkit.org/show_bug.cgi?id=192898 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Make tests more robusts. >+ >+ * fast/events/ios/key-command-italic-dispatches-keydown.html: Remove the need to special-case the test runner and >+ expect a single key event that represents Command + I. Now that uiController.keyDown() makes use of HIDEventGenerator >+ we emit separate key events for each key pressed in the sequence: keydown Command, keydown i, keyup i, keyup Command. >+ This matches how a human being would execute such a key sequence. >+ * fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible-expected.html: >+ Make the test less flaky by hiding the tap highlight. Depending on timing, the tap highlight may be snapshotted and thus >+ cause the reference test to mismatch the test. Mitigate this by hiding the tap highlight. >+ > 2019-01-11 Daniel Bates <dabates@apple.com> > > [iOS] Keyups for non-modifier keys identified as "Dead" when not focused in a content-editable element >diff --git a/LayoutTests/fast/events/ios/key-command-italic-dispatches-keydown.html b/LayoutTests/fast/events/ios/key-command-italic-dispatches-keydown.html >index 76bc63a446fb66cc291925d691bd6261948fa87c..0b3e111627eb0120cf683f073d56426aa878801b 100644 >--- a/LayoutTests/fast/events/ios/key-command-italic-dispatches-keydown.html >+++ b/LayoutTests/fast/events/ios/key-command-italic-dispatches-keydown.html >@@ -32,7 +32,7 @@ function shouldIgnoreKeyDownEvent(event) > // When performing the test manually a person is not fast enough to press Command + I simultaneously. > // We receive a key down for Command followed by a key down for Command + I. So, we ignore the first > // event to normalize the test result. >- if (window.testRunner || ignoredFirstKeyDownEvent) >+ if (ignoredFirstKeyDownEvent) > return false; > ignoredFirstKeyDownEvent = true; > console.assert(event.key == "Meta"); >diff --git a/LayoutTests/fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible-expected.html b/LayoutTests/fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible-expected.html >index e434ff23b99c155ebe79a469e86d17680995f7f2..e38d5df5d478b6398cebed96e7ff25f737a480d9 100644 >--- a/LayoutTests/fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible-expected.html >+++ b/LayoutTests/fast/forms/auto-fill-button/caps-lock-indicator-should-not-be-visible-when-auto-fill-strong-password-button-is-visible-expected.html >@@ -2,6 +2,13 @@ > <html> > <head> > <script src="../../../resources/ui-helper.js"></script> >+<style> >+input { >+ /* Hide the tap highlight to mitigate test differences due to when the snapshot >+ is taken with respect to tap highlight painting. */ >+ -webkit-tap-highlight-color: transparent; >+} >+</style> > <script> > if (window.testRunner) > testRunner.waitUntilDone();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192898
:
359080
|
359096
|
359178
|
359191
|
360024