WebKit Bugzilla
Attachment 342998 Details for
Bug 186791
: [WebKit on watchOS] Vend username text content type when using scribble in login fields
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-186791-20180618175725.patch (text/plain), 20.28 KB, created by
Wenson Hsieh
on 2018-06-18 17:57:25 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Wenson Hsieh
Created:
2018-06-18 17:57:25 PDT
Size:
20.28 KB
patch
obsolete
>Subversion Revision: 232942 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 83c86550b8780ad6a5216ef1359cc74cdf208d88..eca2cf0b5715df42886311810bbaf8ed22789d02 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,16 @@ >+2018-06-18 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [WebKit on watchOS] Vend username text content type when using scribble in login fields >+ https://bugs.webkit.org/show_bug.cgi?id=186791 >+ <rdar://problem/41226935> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Expose AutofillElements' autofillable username input element. See WebKit ChangeLog for more details. >+ >+ * editing/ios/AutofillElements.h: >+ (WebCore::AutofillElements::username const): >+ > 2018-06-18 Simon Fraser <simon.fraser@apple.com> > > SVGTransformListValues wastes 127KB of Vector capacity on nytimes.com >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 34429f3a236e2febcafd829521ed434841343c19..e6c0fe3ee100034d50961fdadad9537bd0cf43f7 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,41 @@ >+2018-06-18 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [WebKit on watchOS] Vend username text content type when using scribble in login fields >+ https://bugs.webkit.org/show_bug.cgi?id=186791 >+ <rdar://problem/41226935> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Vend additional context to Quickboard when focusing an element that is likely to be a username field. >+ >+ Test: fast/forms/watchos/username-text-content-type.html >+ >+ * Shared/AssistedNodeInformation.cpp: >+ (WebKit::AssistedNodeInformation::encode const): >+ (WebKit::AssistedNodeInformation::decode): >+ * Shared/AssistedNodeInformation.h: >+ >+ Add a new flag to tell the UI process when the currently focused element is an autofillable username input >+ field (using existing app autofill heuristics). >+ >+ * UIProcess/API/Cocoa/WKWebView.mm: >+ (-[WKWebView textContentTypeForTesting]): >+ * UIProcess/API/Cocoa/WKWebViewPrivate.h: >+ >+ Add new testing SPI to grab the computed text content type for the focused element. >+ >+ * UIProcess/ios/WKContentViewInteraction.h: >+ * UIProcess/ios/WKContentViewInteraction.mm: >+ (contentTypeFromFieldName): >+ >+ If `autocomplete="username"` is specified, return a username text content type. This was not originally added in >+ r197626 because UITextContentTypeUsername was only introduced later, in iOS 11. >+ >+ (-[WKContentView textContentTypeForListViewController:]): >+ (-[WKContentView textContentTypeForTesting]): >+ * WebProcess/WebPage/ios/WebPageIOS.mm: >+ (WebKit::WebPage::getAssistedNodeInformation): >+ > 2018-06-18 Jiewen Tan <jiewen_tan@apple.com> > > Add a graceful exit for AuthenticationManager::initializeConnection >diff --git a/Source/WebCore/editing/ios/AutofillElements.h b/Source/WebCore/editing/ios/AutofillElements.h >index d342901795413f397844e36b1d3f7059c62bc825..bce5e08274b154816069a231333f7ff2bb5b038b 100644 >--- a/Source/WebCore/editing/ios/AutofillElements.h >+++ b/Source/WebCore/editing/ios/AutofillElements.h >@@ -32,6 +32,8 @@ class AutofillElements { > public: > WEBCORE_EXPORT static std::optional<AutofillElements> computeAutofillElements(Ref<HTMLInputElement>); > WEBCORE_EXPORT void autofill(String, String); >+ >+ const HTMLInputElement* username() const { return m_username.get(); } > private: > AutofillElements(RefPtr<HTMLInputElement>&&, RefPtr<HTMLInputElement>&&); > RefPtr<HTMLInputElement> m_username; >diff --git a/Source/WebKit/Shared/AssistedNodeInformation.cpp b/Source/WebKit/Shared/AssistedNodeInformation.cpp >index 68e19483e670d78ab2c6fe45b8b7af85d97cf34d..1cd7ac8fc9f6676cc620a856620775cb0de057f8 100644 >--- a/Source/WebKit/Shared/AssistedNodeInformation.cpp >+++ b/Source/WebKit/Shared/AssistedNodeInformation.cpp >@@ -89,6 +89,7 @@ void AssistedNodeInformation::encode(IPC::Encoder& encoder) const > encoder << valueAsNumber; > encoder << title; > encoder << acceptsAutofilledLoginCredentials; >+ encoder << isAutofillableUsernameField; > encoder << representingPageURL; > encoder.encodeEnum(autofillFieldName); > encoder << placeholder; >@@ -177,6 +178,9 @@ bool AssistedNodeInformation::decode(IPC::Decoder& decoder, AssistedNodeInformat > if (!decoder.decode(result.acceptsAutofilledLoginCredentials)) > return false; > >+ if (!decoder.decode(result.isAutofillableUsernameField)) >+ return false; >+ > if (!decoder.decode(result.representingPageURL)) > return false; > >diff --git a/Source/WebKit/Shared/AssistedNodeInformation.h b/Source/WebKit/Shared/AssistedNodeInformation.h >index bcc46fb3808525d4cee4bccc8abcb8f91d0cfc5c..03fb6af565550961cb8da662fba950990c38ac65 100644 >--- a/Source/WebKit/Shared/AssistedNodeInformation.h >+++ b/Source/WebKit/Shared/AssistedNodeInformation.h >@@ -113,6 +113,7 @@ struct AssistedNodeInformation { > double valueAsNumber { 0 }; > String title; > bool acceptsAutofilledLoginCredentials { false }; >+ bool isAutofillableUsernameField { false }; > WebCore::URL representingPageURL; > WebCore::AutofillFieldName autofillFieldName { WebCore::AutofillFieldName::None }; > String placeholder; >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >index 33445e647853f107ea546ed947ea43bdf0977d65..51c0398a85890ae9cb1ea57f9084904db5743764 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm >@@ -5915,6 +5915,11 @@ static WebCore::UserInterfaceLayoutDirection toUserInterfaceLayoutDirection(UISe > return [_contentView selectFormPopoverTitle]; > } > >+- (NSString *)textContentTypeForTesting >+{ >+ return [_contentView textContentTypeForTesting]; >+} >+ > - (NSString *)formInputLabel > { > return [_contentView formInputLabel]; >diff --git a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >index 18ac6b861665b4716350cd2d979d41cd006e2b6e..e95a673290ae431842fdf18c87c9208deb433e28 100644 >--- a/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >+++ b/Source/WebKit/UIProcess/API/Cocoa/WKWebViewPrivate.h >@@ -374,6 +374,7 @@ typedef NS_OPTIONS(NSUInteger, _WKRectEdge) { > - (void)keyboardAccessoryBarPrevious WK_API_AVAILABLE(ios(10.0)); > - (void)dismissFormAccessoryView WK_API_AVAILABLE(ios(10.3)); > - (void)selectFormAccessoryPickerRow:(int)rowIndex WK_API_AVAILABLE(ios(10.3)); >+@property (nonatomic, readonly) NSString *textContentTypeForTesting WK_API_AVAILABLE(ios(WK_IOS_TBA)); > @property (nonatomic, readonly) NSString *selectFormPopoverTitle WK_API_AVAILABLE(ios(WK_IOS_TBA)); > @property (nonatomic, readonly) NSString *formInputLabel WK_API_AVAILABLE(ios(WK_IOS_TBA)); > - (void)setTimePickerValueToHour:(NSInteger)hour minute:(NSInteger)minute WK_API_AVAILABLE(ios(WK_IOS_TBA)); >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >index 928e81b736785264ddad5a0172bc9709812ba256..fa98bcf5c3062d5a1f9ccaaff92275e7d4c108fa 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.h >@@ -364,6 +364,7 @@ FOR_EACH_WKCONTENTVIEW_ACTION(DECLARE_WKCONTENTVIEW_ACTION_FOR_WEB_VIEW) > - (void)setTimePickerValueToHour:(NSInteger)hour minute:(NSInteger)minute; > - (NSDictionary *)_contentsOfUserInterfaceItem:(NSString *)userInterfaceItem; > >+@property (nonatomic, readonly) NSString *textContentTypeForTesting; > @property (nonatomic, readonly) NSString *selectFormPopoverTitle; > @property (nonatomic, readonly) NSString *formInputLabel; > >diff --git a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >index 9246146b4df86356f21cf2dd6acc334896137342..266926d0b0009658f2c6c21a5739aef530dae6a8 100644 >--- a/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >+++ b/Source/WebKit/UIProcess/ios/WKContentViewInteraction.mm >@@ -3412,8 +3412,9 @@ static NSString *contentTypeFromFieldName(WebCore::AutofillFieldName fieldName) > return UITextContentTypeEmailAddress; > case WebCore::AutofillFieldName::URL: > return UITextContentTypeURL; >- case WebCore::AutofillFieldName::None: > case WebCore::AutofillFieldName::Username: >+ return UITextContentTypeUsername; >+ case WebCore::AutofillFieldName::None: > case WebCore::AutofillFieldName::NewPassword: > case WebCore::AutofillFieldName::CurrentPassword: > case WebCore::AutofillFieldName::AddressLine3: >@@ -5616,7 +5617,13 @@ static NSArray<UIItemProvider *> *extractItemProvidersFromDropSession(id <UIDrop > return UITextContentTypeTelephoneNumber; > default: > // The element type alone is insufficient to infer content type; fall back to autofill data. >- return contentTypeFromFieldName(_assistedNodeInformation.autofillFieldName); >+ if (NSString *contentType = contentTypeFromFieldName(_assistedNodeInformation.autofillFieldName)) >+ return contentType; >+ >+ if (_assistedNodeInformation.isAutofillableUsernameField) >+ return UITextContentTypeUsername; >+ >+ return nil; > } > } > >@@ -5676,6 +5683,15 @@ static NSArray<UIItemProvider *> *extractItemProvidersFromDropSession(id <UIDrop > #endif > } > >+- (NSString *)textContentTypeForTesting >+{ >+#if PLATFORM(WATCHOS) >+ if ([_presentedFullScreenInputViewController isKindOfClass:[WKTextInputListViewController class]]) >+ return [self textContentTypeForListViewController:(WKTextInputListViewController *)_presentedFullScreenInputViewController.get()]; >+#endif >+ return self.textInputTraits.textContentType; >+} >+ > - (NSString *)selectFormPopoverTitle > { > if (![_inputPeripheral isKindOfClass:[WKFormSelectControl self]]) >diff --git a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >index 8b5d37c4268cf0522d12f7b5eaaafa41df8b7140..bc297a2f6086a141e81eb91fefbb0bd6ec6f6a9a 100644 >--- a/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >+++ b/Source/WebKit/WebProcess/WebPage/ios/WebPageIOS.mm >@@ -2390,7 +2390,10 @@ void WebPage::getAssistedNodeInformation(AssistedNodeInformation& information) > HTMLFormElement* form = element.form(); > if (form) > information.formAction = form->getURLAttribute(WebCore::HTMLNames::actionAttr); >- information.acceptsAutofilledLoginCredentials = !!WebCore::AutofillElements::computeAutofillElements(element); >+ if (auto autofillElements = WebCore::AutofillElements::computeAutofillElements(element)) { >+ information.acceptsAutofilledLoginCredentials = true; >+ information.isAutofillableUsernameField = autofillElements->username() == m_assistedNode; >+ } > information.representingPageURL = element.document().urlForBindings(); > information.autocapitalizeType = element.autocapitalizeType(); > information.isAutocorrect = element.shouldAutocorrect(); >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index c65cefb4ea40db1a17ede7ec78bb8a539d46280e..e98af092f92e44220810e474ce8340ee76855523 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,22 @@ >+2018-06-18 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [WebKit on watchOS] Vend username text content type when using scribble in login fields >+ https://bugs.webkit.org/show_bug.cgi?id=186791 >+ <rdar://problem/41226935> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add testing support for grabbing the current text content type of the focused element. >+ >+ * DumpRenderTree/ios/UIScriptControllerIOS.mm: >+ (WTR::UIScriptController::textContentType const): >+ * TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl: >+ * TestRunnerShared/UIScriptContext/UIScriptController.cpp: >+ (WTR::UIScriptController::textContentType const): >+ * TestRunnerShared/UIScriptContext/UIScriptController.h: >+ * WebKitTestRunner/ios/UIScriptControllerIOS.mm: >+ (WTR::UIScriptController::textContentType const): >+ > 2018-06-18 Zan Dobersek <zdobersek@igalia.com> > > [webkitpy] WPTRunner should remove any metadata content before (re)generating it >diff --git a/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm b/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm >index 72797b70e901ee7b89c0bae60c49081921eca28b..b94ca8d831e540ebd4ba441569c74097c15b1de5 100644 >--- a/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm >+++ b/Tools/DumpRenderTree/ios/UIScriptControllerIOS.mm >@@ -167,6 +167,11 @@ void UIScriptController::selectFormAccessoryPickerRow(long rowIndex) > { > } > >+JSRetainPtr<JSStringRef> UIScriptController::textContentType() const >+{ >+ return nullptr; >+} >+ > JSRetainPtr<JSStringRef> UIScriptController::selectFormPopoverTitle() const > { > return nullptr; >diff --git a/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl b/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl >index 23f2ba6a48f0f9c1708e25b4d624d67281602be8..582e4f8f43ef8cc0fc3ce4bdd6a2735cbc0af5e3 100644 >--- a/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl >+++ b/Tools/TestRunnerShared/UIScriptContext/Bindings/UIScriptController.idl >@@ -178,6 +178,8 @@ interface UIScriptController { > // Equivalent of pressing the Done button in the form accessory bar. > void dismissFormAccessoryView(); > >+ readonly attribute DOMString textContentType; >+ > // Form control handling > attribute object didStartFormControlInteractionCallback; > attribute object didEndFormControlInteractionCallback; >diff --git a/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp b/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp >index 619286ae1236994bff097868ef84fc8a499a1417..eb86fb85bc86b9b5227c45c01136a309d858c5f0 100644 >--- a/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp >+++ b/Tools/TestRunnerShared/UIScriptContext/UIScriptController.cpp >@@ -306,6 +306,11 @@ void UIScriptController::selectFormAccessoryPickerRow(long) > { > } > >+JSRetainPtr<JSStringRef> UIScriptController::textContentType() const >+{ >+ return nullptr; >+} >+ > JSRetainPtr<JSStringRef> UIScriptController::selectFormPopoverTitle() const > { > return nullptr; >diff --git a/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h b/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h >index d3a1d18c1889816551f4e36f0c0ec1ed9e014dd1..70b29ccb2161e5953213c5dc855a8f925aa48d33 100644 >--- a/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h >+++ b/Tools/TestRunnerShared/UIScriptContext/UIScriptController.h >@@ -98,6 +98,7 @@ public: > > void dismissFormAccessoryView(); > void selectFormAccessoryPickerRow(long); >+ JSRetainPtr<JSStringRef> textContentType() const; > JSRetainPtr<JSStringRef> selectFormPopoverTitle() const; > JSRetainPtr<JSStringRef> formInputLabel() const; > void setTimePickerValue(long hour, long minute); >diff --git a/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm b/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >index a7c739af9b1aed9e62ab0c2b40dc57569859cf0d..bd42d3aed4ed5a00ebd99d637342004126eed97c 100644 >--- a/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >+++ b/Tools/WebKitTestRunner/ios/UIScriptControllerIOS.mm >@@ -431,6 +431,12 @@ JSRetainPtr<JSStringRef> UIScriptController::selectFormPopoverTitle() const > return JSStringCreateWithCFString((CFStringRef)webView.selectFormPopoverTitle); > } > >+JSRetainPtr<JSStringRef> UIScriptController::textContentType() const >+{ >+ TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView(); >+ return JSStringCreateWithCFString((CFStringRef)(webView.textContentTypeForTesting ?: @"")); >+} >+ > JSRetainPtr<JSStringRef> UIScriptController::formInputLabel() const > { > TestRunnerWKWebView *webView = TestController::singleton().mainWebView()->platformView(); >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 5ce41036d34895fc5b1e9d090af3ad8e74d9a276..4ade6602199e5c10b0d94a588775ade518d2aec8 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,21 @@ >+2018-06-18 Wenson Hsieh <wenson_hsieh@apple.com> >+ >+ [WebKit on watchOS] Vend username text content type when using scribble in login fields >+ https://bugs.webkit.org/show_bug.cgi?id=186791 >+ <rdar://problem/41226935> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add a new layout test verifying that: >+ 1. There is no text content type for a lone plain text input. >+ 2. The text content type for a plain text input preceding a password field is "username". >+ 3. The text content type for a lone plain text input with `autocomplete="username"` is "username". >+ >+ * fast/forms/watchos/username-text-content-type-expected.txt: Added. >+ * fast/forms/watchos/username-text-content-type.html: Added. >+ * resources/ui-helper.js: >+ (window.UIHelper.textContentType): >+ > 2018-06-18 Said Abou-Hallawa <sabouhallawa@apple.com> > > Document should not be mutated under SMILTimeContainer::updateAnimations() >diff --git a/LayoutTests/fast/forms/watchos/username-text-content-type-expected.txt b/LayoutTests/fast/forms/watchos/username-text-content-type-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..da557f21f1b4e3915bd92f302d9910bfa5f9dac5 >--- /dev/null >+++ b/LayoutTests/fast/forms/watchos/username-text-content-type-expected.txt >@@ -0,0 +1,7 @@ >+PASS textContentTypeForLoneTextField is '' >+PASS textContentTypeForTextFieldBeforePassword is 'username' >+PASS textContentTypeForTextFieldWithAutocompleteUsername is 'username' >+PASS successfullyParsed is true >+ >+TEST COMPLETE >+ >diff --git a/LayoutTests/fast/forms/watchos/username-text-content-type.html b/LayoutTests/fast/forms/watchos/username-text-content-type.html >new file mode 100644 >index 0000000000000000000000000000000000000000..a1c4f7059c12b4ee13612129388a6c59be64d100 >--- /dev/null >+++ b/LayoutTests/fast/forms/watchos/username-text-content-type.html >@@ -0,0 +1,48 @@ >+<!DOCTYPE html> <!-- webkit-test-runner [ useFlexibleViewport=true ] --> >+<html> >+<meta name="viewport" content="width=device-width"> >+<head> >+<script src="../../../resources/js-test.js"></script> >+<script src="../../../resources/ui-helper.js"></script> >+<script> >+jsTestIsAsync = true; >+ >+function getTextContentTypeAfterFocusingInput() { >+ return new Promise(async (resolve) => { >+ await UIHelper.activateAndWaitForInputSessionAt(75, 75); >+ const textContentType = await UIHelper.textContentType(); >+ field.blur(); >+ await UIHelper.waitForKeyboardToHide(); >+ resolve(textContentType); >+ }); >+} >+ >+async function runTest() { >+ if (!window.testRunner) { >+ description(`This test requires WebKitTestRunner.`); >+ return; >+ } >+ >+ textContentTypeForLoneTextField = await getTextContentTypeAfterFocusingInput(); >+ shouldBe("textContentTypeForLoneTextField", "''"); >+ >+ let passwordField = document.createElement("input"); >+ passwordField.setAttribute("type", "password"); >+ document.body.appendChild(passwordField); >+ textContentTypeForTextFieldBeforePassword = await getTextContentTypeAfterFocusingInput(); >+ shouldBe("textContentTypeForTextFieldBeforePassword", "'username'"); >+ >+ passwordField.remove(); >+ field.setAttribute("autocomplete", "username"); >+ textContentTypeForTextFieldWithAutocompleteUsername = await getTextContentTypeAfterFocusingInput(); >+ shouldBe("textContentTypeForTextFieldWithAutocompleteUsername", "'username'"); >+ >+ finishJSTest(); >+} >+</script> >+</head> >+ >+<body onload="runTest()"> >+<input id="field" style="width: 320px; height: 568px;"></input> >+</body> >+</html> >\ No newline at end of file >diff --git a/LayoutTests/resources/ui-helper.js b/LayoutTests/resources/ui-helper.js >index ddc7d14cedb9b970faa1fe75becc527d937779e5..90e9640bf3f3df3871cccb926266f53d5343388d 100644 >--- a/LayoutTests/resources/ui-helper.js >+++ b/LayoutTests/resources/ui-helper.js >@@ -211,6 +211,15 @@ window.UIHelper = class UIHelper { > return new Promise(resolve => testRunner.runUIScript(setValueScript, resolve)); > } > >+ static textContentType() >+ { >+ return new Promise(resolve => { >+ testRunner.runUIScript(`(() => { >+ uiController.uiScriptComplete(uiController.textContentType); >+ })()`, resolve); >+ }); >+ } >+ > static formInputLabel() > { > return new Promise(resolve => {
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 186791
: 342998 |
343021