WebKit Bugzilla
Attachment 347171 Details for
Bug 187741
: [Datalist] Add button to TextFieldInputs with a datalist
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
bug-187741-20180815095215.patch (text/plain), 57.83 KB, created by
Aditya Keerthi
on 2018-08-15 09:52:16 PDT
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Aditya Keerthi
Created:
2018-08-15 09:52:16 PDT
Size:
57.83 KB
patch
obsolete
>Subversion Revision: 234888 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index c052c632521fffed7f6a1b9181d118bdd56bcd27..d2b68f010fbbaeed23e913fa94fd2bd3b1d66af8 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,66 @@ >+2018-08-15 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by Tim Horton. >+ >+ TextFieldInputs that have an associated datalist element should be drawn as >+ combo boxes. However, we cannot use NSComboBox for this control, as NSComboBox >+ is not height-resizable. Furthermore, the input should also be able to contain >+ additional elements, such as the stepper for type=number and the cancel button >+ for type=search. For these reasons, we draw a button at the end of the input, >+ mimicking appearance of a combo box. >+ >+ The list-button -webkit-appearance value was added to display the new button. >+ >+ Tests: fast/forms/datalist/datalist-searchinput-appearance.html >+ fast/forms/datalist/datalist-textinput-appearance.html >+ >+ * Resources/ListButtonArrow.png: Added. >+ * Resources/ListButtonArrow@2x.png: Added. >+ * WebCore.xcodeproj/project.pbxproj: >+ * css/CSSPrimitiveValueMappings.h: >+ (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): >+ * css/CSSProperties.json: >+ * css/CSSValueKeywords.in: >+ * css/html.css: >+ (input::-webkit-list-button): >+ * html/HTMLInputElement.cpp: >+ (WebCore::HTMLInputElement::dataListButtonElement const): >+ * html/HTMLInputElement.h: >+ * html/InputType.h: >+ (WebCore::InputType::dataListButtonElement const): >+ * html/TextFieldInputType.cpp: >+ (WebCore::TextFieldInputType::needsContainer const): >+ (WebCore::TextFieldInputType::createShadowSubtree): >+ (WebCore::TextFieldInputType::destroyShadowSubtree): >+ (WebCore::TextFieldInputType::listAttributeTargetChanged): >+ (WebCore::TextFieldInputType::dataListButtonElement const): >+ (WebCore::TextFieldInputType::dataListButtonElementWasClicked): >+ (WebCore::TextFieldInputType::didCloseSuggestions): >+ * html/TextFieldInputType.h: >+ * html/shadow/DataListButtonElement.cpp: Added. >+ (WebCore::DataListButtonElement::create): >+ (WebCore::DataListButtonElement::DataListButtonElement): >+ (WebCore::DataListButtonElement::~DataListButtonElement): >+ (WebCore::DataListButtonElement::defaultEventHandler): >+ * html/shadow/DataListButtonElement.h: Added. >+ * platform/ThemeTypes.h: >+ * rendering/RenderTheme.cpp: >+ (WebCore::RenderTheme::adjustStyle): >+ (WebCore::RenderTheme::adjustListButtonStyle const): >+ * rendering/RenderTheme.h: >+ * rendering/RenderThemeMac.h: >+ * rendering/RenderThemeMac.mm: >+ (-[WebListButtonCell drawWithFrame:inView:]): >+ (WebCore::RenderThemeMac::paintListButtonForInput): >+ (WebCore::RenderThemeMac::adjustListButtonStyle const): >+ (WebCore::RenderThemeMac::paintTextField): >+ (WebCore::RenderThemeMac::paintSearchField): >+ (WebCore::RenderThemeMac::paintSearchFieldCancelButton): >+ (WebCore::RenderThemeMac::listButton const): >+ > 2018-08-15 Wenson Hsieh <wenson_hsieh@apple.com> > > [Attachment SPI] Remove attachment display mode options >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 5268cbccff1434bf5017549ea543307c20bffeb9..89ddbff77ce14a62f67dfbae407551bf6a08cc09 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,12 @@ >+2018-08-15 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by Tim Horton. >+ >+ * pal/spi/cocoa/NSColorSPI.h: Added NSColorGetUserAccentColor(). >+ > 2018-08-14 Ansh Shukla <ansh_shukla@apple.com> > > NSURLAuthenticationMethodOAuth challenges are surfaced to clients in -didReceiveAuthenticationChallenge as NSURLAuthenticationMethodDefault >diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index bf68df253e9a8e66a33396dfcb8f2c8b31c3060f..d2c3d7e13df39dbbacaee44f5a7fd1d2a5b814e9 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,15 @@ >+2018-08-15 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by Tim Horton. >+ >+ Add keyword completion for 'list-button'. >+ >+ * UserInterface/External/CodeMirror/css.js: >+ * UserInterface/Models/CSSKeywordCompletions.js: >+ > 2018-08-14 Matt Baker <mattbaker@apple.com> > > Web Inspector: Table should not center rows when scrolling them into view >diff --git a/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h b/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >index b43a018339e29baefdad9828905ab8aa2ab9b85b..81616522bb248a4443b0f3e2f48edc583ddd3864 100644 >--- a/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >+++ b/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >@@ -29,6 +29,10 @@ > > #import <AppKit/NSColor_Private.h> > >+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >+#import <AppKit/NSColor_UserAccent.h> >+#endif >+ > #else > > @interface NSColor () >@@ -46,4 +50,20 @@ > + (NSColor *)placeholderTextColor; > @end > >+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >+typedef NS_ENUM(NSInteger, NSUserAccentColor) { >+ NSUserAccentColorRed = 0, >+ NSUserAccentColorOrange, >+ NSUserAccentColorYellow, >+ NSUserAccentColorGreen, >+ NSUserAccentColorBlue, >+ NSUserAccentColorPurple, >+ NSUserAccentColorPink, >+ >+ NSUserAccentColorNoColor = -1, >+}; >+ >+extern "C" NSUserAccentColor NSColorGetUserAccentColor(void); >+#endif >+ > #endif >diff --git a/Source/WebCore/Resources/ListButtonArrow.png b/Source/WebCore/Resources/ListButtonArrow.png >new file mode 100644 >index 0000000000000000000000000000000000000000..c01e778533ab828886087e265a323ee785511a26 >GIT binary patch >literal 713 >zcmeAS@N?(olHy`uVBq!ia0vp^>_E)I!3HFqj;YpyIO&eQjtmSN`?>!lvI6-E$sR$z >z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$Ysfq{uTGbExU!q>+tIX_n~ >zF(p4KRj(qq0H}k3!KT6r$jnVGNmQuF&B-gas<2f8tFQvHLBje<3ScEA*|tg%z5xo( >z`9-M;rg|oN21<5Z3JMA~MJZ`kK`w4k?LeNbQbtKhft9{~d3m{Bxv^e;QM$gNrKP35 >zfswwEkuFe$ZgFK^Nn(X=Ua>O75STeGsl~}fnFS@8`FRQ;a}$&DOG|8(lt3220mPjp >znP~`{@`|C}0(wv%B%^PrXP^%^8>rO=Bx)6uTAZI#3Nk)4FSEqX$Ofz!T^L~-M3-}Z >zZb4CMaWPPvogq{UvKYF0|Dw!Pp#MPDz||v*p{ozb$S=tUhILV9vS(gNY7x*fsBV}8 >zajSruWup%YE~Mat#0^*!7&&%aHu~_0w&UV=)tU^9ds|Nz#}E$L<RAb4|JPTzccy{G >zp=N>w^Mn;lkM29{5mez{wD6DChAM^Sk{$mUKQe3FZAuY{aOVzSN@0p&VleyR9R9vg >R`ZFjMdAj<!taD0e0sseJ+av%0 > >literal 0 >HcmV?d00001 > >diff --git a/Source/WebCore/Resources/ListButtonArrow@2x.png b/Source/WebCore/Resources/ListButtonArrow@2x.png >new file mode 100644 >index 0000000000000000000000000000000000000000..c66e2ea80efb1c2f89e416495837e21569f5b481 >GIT binary patch >literal 649 >zcmeAS@N?(olHy`uVBq!ia0vp^d_c^}!3HFmd}T9%6id3JuOkD)#(wTUiL5}rLb6AY >zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=IjczVPIg4%nXSriSYHYO3u&K >zOH9d6O4X~#Edc6ZV6dsM0y1+`OA-|-a&z*EttxDlz$&bOY>=?Nk^)#sNw%$0gl~X? >zbAC~(f~lT~o`I4bmx6+VO;JjkRgjAtR6CGotCUevQedU8UtV6WS8lAAUzDzIXlZGw >zZ(yWvWTXpJp<7&;SCUwvn^&w1F$89gOKNd)QD#9&W`3Rm$lS!F{L&IzB_)tWZ~$>< >zNoE?tro3XPw}2kh2g&Fg>KW+6%?4_<0f}1q7iFdbZ3dZdXJ`Xfi6REI$3`DyIg(=_ >zJ_U;cy=up0qYn=@J1(C?>XE>ZT<_`P7@{HC+GoghC_uoao+D$X*4hcTxL<I7iP+hm >zZcxGWR&<T1PHwJFPEgJLBe6f~l=OVk%F3Qi7D&F+s2<U7@0^x;Q%|94L1p99^?KV| >zQy1J=eZ%Xf&4bFgY3wDRGedO_9FzUQmlik8j9<#_X3`F2uMM(q&Ohh6+UEVJ{KX~t >zub)_o=ePL1NZurW;qv-P`Z8JtY(Gz|wlP1&@}+zG63y8Dw&KYN$*EIk{aN>yxAU;* >URJX?omqDq()78&qol`;+0GgcHOaK4? > >literal 0 >HcmV?d00001 > >diff --git a/Source/WebCore/WebCore.xcodeproj/project.pbxproj b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >index d34f8b009380c32c935e8790b7eddad0898df738..81288422faa54410f2c08023bbf94887613f47c9 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -4785,9 +4785,13 @@ > E4E9B1191810916F003ACCDF /* SimpleLineLayoutResolver.h in Headers */ = {isa = PBXBuildFile; fileRef = E4E9B1181810916F003ACCDF /* SimpleLineLayoutResolver.h */; }; > E4E9B11D1814569C003ACCDF /* SimpleLineLayoutFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E4E9B11C1814569C003ACCDF /* SimpleLineLayoutFunctions.h */; }; > E4F9EEF3156DA00700D23E7E /* StyleSheetContents.h in Headers */ = {isa = PBXBuildFile; fileRef = E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ E59DD4B821098287003C8B47 /* ListButtonArrow.png in Resources */ = {isa = PBXBuildFile; fileRef = E59DD4B721098285003C8B47 /* ListButtonArrow.png */; }; >+ E516699120FF9918009D2C27 /* ListButtonArrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E516698F20FF9916009D2C27 /* ListButtonArrow@2x.png */; }; > E517670320B88C1400D41167 /* DataListSuggestionInformation.h in Headers */ = {isa = PBXBuildFile; fileRef = E517670220B88C1400D41167 /* DataListSuggestionInformation.h */; settings = {ATTRIBUTES = (Private, ); }; }; > E52CF54D20A268AC00DADA27 /* DataListSuggestionsClient.h in Headers */ = {isa = PBXBuildFile; fileRef = E52CF54C20A268AC00DADA27 /* DataListSuggestionsClient.h */; settings = {ATTRIBUTES = (Private, ); }; }; > E52CF54F20A35A2800DADA27 /* DataListSuggestionPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = E52CF54E20A35A2800DADA27 /* DataListSuggestionPicker.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ E58B45BA20AD07DD00991025 /* DataListButtonElement.h in Headers */ = {isa = PBXBuildFile; fileRef = E58B45B820AD07DD00991025 /* DataListButtonElement.h */; }; >+ E58B45BB20AD07DD00991025 /* DataListButtonElement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */; }; > E5BA7D63151437CA00FE1E3F /* LengthFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */; settings = {ATTRIBUTES = (Private, ); }; }; > EBF5121C1696496C0056BD25 /* JSTypeConversions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = EBF5121A1696496C0056BD25 /* JSTypeConversions.cpp */; }; > EBF5121D1696496C0056BD25 /* JSTypeConversions.h in Headers */ = {isa = PBXBuildFile; fileRef = EBF5121B1696496C0056BD25 /* JSTypeConversions.h */; }; >@@ -14512,12 +14516,16 @@ > E4E9B11C1814569C003ACCDF /* SimpleLineLayoutFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleLineLayoutFunctions.h; sourceTree = "<group>"; }; > E4F9EEF0156D84C400D23E7E /* StyleSheetContents.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StyleSheetContents.cpp; sourceTree = "<group>"; }; > E4F9EEF1156D84C400D23E7E /* StyleSheetContents.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StyleSheetContents.h; sourceTree = "<group>"; }; >+ E59DD4B721098285003C8B47 /* ListButtonArrow.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ListButtonArrow.png; sourceTree = "<group>"; }; >+ E516698F20FF9916009D2C27 /* ListButtonArrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ListButtonArrow@2x.png"; sourceTree = "<group>"; }; > E517670220B88C1400D41167 /* DataListSuggestionInformation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionInformation.h; sourceTree = "<group>"; }; > E51A81DE17298D7700BFCA61 /* JSPerformance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSPerformance.cpp; sourceTree = "<group>"; }; > E526AF3E1727F8F200E41781 /* Performance.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Performance.cpp; sourceTree = "<group>"; }; > E52CF54C20A268AC00DADA27 /* DataListSuggestionsClient.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionsClient.h; sourceTree = "<group>"; }; > E52CF54E20A35A2800DADA27 /* DataListSuggestionPicker.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListSuggestionPicker.h; sourceTree = "<group>"; }; > E55F4979151B888000BB67DB /* LengthFunctions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LengthFunctions.cpp; sourceTree = "<group>"; }; >+ E58B45B820AD07DD00991025 /* DataListButtonElement.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DataListButtonElement.h; sourceTree = "<group>"; }; >+ E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DataListButtonElement.cpp; sourceTree = "<group>"; }; > E5BA7D62151437CA00FE1E3F /* LengthFunctions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LengthFunctions.h; sourceTree = "<group>"; }; > EB081CD81696084400553730 /* TypeConversions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TypeConversions.h; sourceTree = "<group>"; }; > EB081CD91696084400553730 /* TypeConversions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = TypeConversions.idl; sourceTree = "<group>"; }; >@@ -16869,6 +16877,8 @@ > 51C4AA5118B28357007BFE9B /* mac */, > 7C1E97251A9F9834007BF0FB /* AutoFillButtonElement.cpp */, > 7C1E97261A9F9834007BF0FB /* AutoFillButtonElement.h */, >+ E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */, >+ E58B45B820AD07DD00991025 /* DataListButtonElement.h */, > A7C9ABF61357A3BF00F5503F /* DetailsMarkerControl.cpp */, > A7C9ABF71357A3BF00F5503F /* DetailsMarkerControl.h */, > 510192D318B6B9B7007FC7A1 /* ImageControlsRootElement.cpp */, >@@ -19248,6 +19258,8 @@ > 2D50A4B61CE10E0000198049 /* AttachmentPlaceholder@2x.png */, > D02B64B014089E56006EFA21 /* DictationPhraseWithAlternativesDot.png */, > D02B64B114089E56006EFA21 /* DictationPhraseWithAlternativesDot@2x.png */, >+ E59DD4B721098285003C8B47 /* ListButtonArrow.png */, >+ E516698F20FF9916009D2C27 /* ListButtonArrow@2x.png */, > BE8C753010681324001E93F5 /* SpellingDot.png */, > 01E6C2E31194B2820050821C /* SpellingDot@2x.png */, > 1C2417B91992C04100EF9938 /* SpellingDot@3x.png */, >@@ -27717,6 +27729,7 @@ > BE23480D18A9871400E4B6E8 /* DataCue.h in Headers */, > C5227DF11C3C6DF100F5ED54 /* DataDetection.h in Headers */, > 7C7941E51C56C29300A4C58E /* DataDetectorsCoreSoftLink.h in Headers */, >+ E58B45BA20AD07DD00991025 /* DataListButtonElement.h in Headers */, > E517670320B88C1400D41167 /* DataListSuggestionInformation.h in Headers */, > E52CF54F20A35A2800DADA27 /* DataListSuggestionPicker.h in Headers */, > E52CF54D20A268AC00DADA27 /* DataListSuggestionsClient.h in Headers */, >@@ -31282,6 +31295,8 @@ > D02B64B314089E56006EFA21 /* DictationPhraseWithAlternativesDot@2x.png in Resources */, > 7CC7E3D717208C0F003C5277 /* IDNScriptWhiteList.txt in Resources */, > 2D9F0E1314FF1CBF00BA0FF7 /* linearSRGB.icc in Resources */, >+ E59DD4B821098287003C8B47 /* ListButtonArrow.png in Resources */, >+ E516699120FF9918009D2C27 /* ListButtonArrow@2x.png in Resources */, > BCAD180A131C7A0D00990406 /* Localizable.strings in Resources */, > 837A80131E1E127300026B9F /* Localizable.stringsdict in Resources */, > 311C08BD18EB7CAF00B65615 /* mediaControlsApple.css in Resources */, >@@ -31524,6 +31539,7 @@ > 46C696CC1E7205FC00597937 /* CPUMonitor.cpp in Sources */, > 1ABA76CA11D20E50004C201C /* CSSPropertyNames.cpp in Sources */, > BE23480C18A9870B00E4B6E8 /* DataCue.cpp in Sources */, >+ E58B45BB20AD07DD00991025 /* DataListButtonElement.cpp in Sources */, > 515BE18F1D54F5FB00DD7C68 /* EmptyGamepadProvider.cpp in Sources */, > 724ED32C1A3A7E5400F5F13C /* EXTBlendMinMax.cpp in Sources */, > 72F1ADA21A3904DC00014E18 /* EXTFragDepth.cpp in Sources */, >diff --git a/Source/WebCore/css/CSSPrimitiveValueMappings.h b/Source/WebCore/css/CSSPrimitiveValueMappings.h >index 37936eaf1aa551f8c43245d10f70664f6db83039..6794ef91ab367d675417183aa505ddcc5ddc0e43 100644 >--- a/Source/WebCore/css/CSSPrimitiveValueMappings.h >+++ b/Source/WebCore/css/CSSPrimitiveValueMappings.h >@@ -625,6 +625,11 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e) > case ColorWellPart: > m_value.valueID = CSSValueColorWell; > break; >+#endif >+#if ENABLE(DATALIST_ELEMENT) >+ case ListButtonPart: >+ m_value.valueID = CSSValueListButton; >+ break; > #endif > } > } >diff --git a/Source/WebCore/css/CSSProperties.json b/Source/WebCore/css/CSSProperties.json >index 4bbda84f434acfabcb06a70f5dd6101330d53ff0..537dd70e58b7666e80058c5d99d4a43d95624810 100644 >--- a/Source/WebCore/css/CSSProperties.json >+++ b/Source/WebCore/css/CSSProperties.json >@@ -4218,6 +4218,7 @@ > "attachment", > "caps-lock-indicator", > "color-well", >+ "list-button", > "none" > ], > "status": { >diff --git a/Source/WebCore/css/CSSValueKeywords.in b/Source/WebCore/css/CSSValueKeywords.in >index 211ff4c7d0d33b7a71ba7e09ca7a031b288ed132..9423127ef53a5540e11d2a7d6a045bdf17a9a16d 100644 >--- a/Source/WebCore/css/CSSValueKeywords.in >+++ b/Source/WebCore/css/CSSValueKeywords.in >@@ -839,6 +839,9 @@ image-controls-button > #if defined(ENABLE_INPUT_TYPE_COLOR) && ENABLE_INPUT_TYPE_COLOR > color-well > #endif >+#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT >+list-button >+#endif > textarea > #if defined(ENABLE_ATTACHMENT_ELEMENT) && ENABLE_ATTACHMENT_ELEMENT > attachment >diff --git a/Source/WebCore/css/html.css b/Source/WebCore/css/html.css >index f0ccb765f5d05b1b7d0a7471a465c617f9e8f9cf..e6b189e0eca18086631d480f21a1d36efb9683bb 100644 >--- a/Source/WebCore/css/html.css >+++ b/Source/WebCore/css/html.css >@@ -616,6 +616,20 @@ input::-webkit-caps-lock-indicator { > -webkit-user-select: none; > } > >+#if defined(ENABLE_DATALIST_ELEMENT) && ENABLE_DATALIST_ELEMENT >+input::-webkit-list-button { >+ -webkit-appearance: list-button; >+ display: block; >+ position: relative; >+ cursor: default; >+ align-self: stretch; >+ flex: none; >+ -webkit-user-select: none; >+ width: 16px; >+ height: 100%; >+} >+#endif >+ > keygen, select { > border-radius: 5px; > } >diff --git a/Source/WebCore/html/HTMLInputElement.cpp b/Source/WebCore/html/HTMLInputElement.cpp >index 9db84a8c38170eafcbd0caedce9ce6197e65db2c..724de1d13eca26f8bcab8a2194d07417a961e3ee 100644 >--- a/Source/WebCore/html/HTMLInputElement.cpp >+++ b/Source/WebCore/html/HTMLInputElement.cpp >@@ -241,6 +241,13 @@ HTMLElement* HTMLInputElement::placeholderElement() const > return m_inputType->placeholderElement(); > } > >+#if ENABLE(DATALIST_ELEMENT) >+HTMLElement* HTMLInputElement::dataListButtonElement() const >+{ >+ return m_inputType->dataListButtonElement(); >+} >+#endif >+ > bool HTMLInputElement::shouldAutocomplete() const > { > if (m_autocomplete != Uninitialized) >diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h >index 8dd0cdf413422da5603b695399c5cb61ccea9f2a..fedb742425598b6523da1dfc5a02fa7429d574cf 100644 >--- a/Source/WebCore/html/HTMLInputElement.h >+++ b/Source/WebCore/html/HTMLInputElement.h >@@ -150,6 +150,9 @@ public: > HTMLElement* sliderTrackElement() const; > HTMLElement* placeholderElement() const final; > WEBCORE_EXPORT HTMLElement* autoFillButtonElement() const; >+#if ENABLE(DATALIST_ELEMENT) >+ HTMLElement* dataListButtonElement() const; >+#endif > > bool checked() const { return m_isChecked; } > WEBCORE_EXPORT void setChecked(bool, TextFieldEventBehavior = DispatchNoEvent); >diff --git a/Source/WebCore/html/InputType.h b/Source/WebCore/html/InputType.h >index d131ad557d19fa057f4a75e36330afc3e6e9e495..828b4c05fa0269d482c6a62a67d4dbd32d62fb45 100644 >--- a/Source/WebCore/html/InputType.h >+++ b/Source/WebCore/html/InputType.h >@@ -228,6 +228,9 @@ public: > virtual HTMLElement* sliderThumbElement() const { return nullptr; } > virtual HTMLElement* sliderTrackElement() const { return nullptr; } > virtual HTMLElement* placeholderElement() const; >+#if ENABLE(DATALIST_ELEMENT) >+ virtual HTMLElement* dataListButtonElement() const { return nullptr; } >+#endif > > // Miscellaneous functions. > >diff --git a/Source/WebCore/html/TextFieldInputType.cpp b/Source/WebCore/html/TextFieldInputType.cpp >index 6fefffdb9e8144e7337340290c85b995c69849fb..13c31ba61aa2accf320e63d20a1314d0485fffbb 100644 >--- a/Source/WebCore/html/TextFieldInputType.cpp >+++ b/Source/WebCore/html/TextFieldInputType.cpp >@@ -285,6 +285,9 @@ RenderPtr<RenderElement> TextFieldInputType::createInputRenderer(RenderStyle&& s > > bool TextFieldInputType::needsContainer() const > { >+#if ENABLE(DATALIST_ELEMENT) >+ return element()->hasAttributeWithoutSynchronization(listAttr); >+#endif > return false; > } > >@@ -343,6 +346,12 @@ void TextFieldInputType::createShadowSubtree() > } > > updateAutoFillButton(); >+ >+#if ENABLE(DATALIST_ELEMENT) >+ m_dataListDropdownIndicator = DataListButtonElement::create(element()->document(), *this); >+ m_dataListDropdownIndicator->setInlineStyleProperty(CSSPropertyDisplay, CSSValueNone, true); >+ m_container->appendChild(*m_dataListDropdownIndicator); >+#endif > } > > HTMLElement* TextFieldInputType::containerElement() const >@@ -392,6 +401,9 @@ void TextFieldInputType::destroyShadowSubtree() > m_innerSpinButton = nullptr; > m_capsLockIndicator = nullptr; > m_autoFillButton = nullptr; >+#if ENABLE(DATALIST) >+ m_dataListDropdownIndicator = nullptr; >+#endif > m_container = nullptr; > } > >@@ -785,6 +797,25 @@ void TextFieldInputType::updateAutoFillButton() > > #if ENABLE(DATALIST_ELEMENT) > >+void TextFieldInputType::listAttributeTargetChanged() >+{ >+ if (!m_dataListDropdownIndicator) >+ return; >+ >+ m_dataListDropdownIndicator->setInlineStyleProperty(CSSPropertyDisplay, element()->list() ? CSSValueBlock : CSSValueNone, true); >+} >+ >+HTMLElement* TextFieldInputType::dataListButtonElement() const >+{ >+ return m_dataListDropdownIndicator.get(); >+} >+ >+void TextFieldInputType::dataListButtonElementWasClicked() >+{ >+ if (element()->list()) >+ displaySuggestions(DataListSuggestionActivationType::IndicatorClicked); >+} >+ > IntRect TextFieldInputType::elementRectInRootViewCoordinates() const > { > if (!element()->renderer()) >@@ -819,6 +850,8 @@ void TextFieldInputType::didSelectDataListOption(const String& selectedOption) > void TextFieldInputType::didCloseSuggestions() > { > m_suggestionPicker = nullptr; >+ if (element()->renderer()) >+ element()->renderer()->repaint(); > } > > void TextFieldInputType::displaySuggestions(DataListSuggestionActivationType type) >@@ -844,6 +877,11 @@ void TextFieldInputType::closeSuggestions() > m_suggestionPicker->close(); > } > >+bool TextFieldInputType::isPresentingAttachedView() const >+{ >+ return !!m_suggestionPicker; >+} >+ > #endif > > } // namespace WebCore >diff --git a/Source/WebCore/html/TextFieldInputType.h b/Source/WebCore/html/TextFieldInputType.h >index 34081bb799724cd2cc69170e43a7b4bd52b6e928..75d96c7f8f93b079dc15e7b20b02c4d7b375b063 100644 >--- a/Source/WebCore/html/TextFieldInputType.h >+++ b/Source/WebCore/html/TextFieldInputType.h >@@ -32,6 +32,7 @@ > #pragma once > > #include "AutoFillButtonElement.h" >+#include "DataListButtonElement.h" > #include "DataListSuggestionPicker.h" > #include "DataListSuggestionsClient.h" > #include "InputType.h" >@@ -46,7 +47,7 @@ class TextControlInnerTextElement; > // It supports not only the types for BaseTextInputType but also type=number. > class TextFieldInputType : public InputType, protected SpinButtonElement::SpinButtonOwner, protected AutoFillButtonElement::AutoFillButtonOwner > #if ENABLE(DATALIST_ELEMENT) >- , private DataListSuggestionsClient >+ , private DataListSuggestionsClient, protected DataListButtonElement::DataListButtonOwner > #endif > { > protected: >@@ -64,6 +65,9 @@ protected: > HTMLElement* innerSpinButtonElement() const final; > HTMLElement* capsLockIndicatorElement() const final; > HTMLElement* autoFillButtonElement() const final; >+#if ENABLE(DATALIST_ELEMENT) >+ HTMLElement* dataListButtonElement() const final; >+#endif > > virtual bool needsContainer() const; > void createShadowSubtree() override; >@@ -120,6 +124,8 @@ private: > void createAutoFillButton(AutoFillButtonType); > > #if ENABLE(DATALIST_ELEMENT) >+ bool isPresentingAttachedView() const final; >+ void listAttributeTargetChanged() final; > void displaySuggestions(DataListSuggestionActivationType); > void closeSuggestions(); > >@@ -129,6 +135,9 @@ private: > void didSelectDataListOption(const String&) final; > void didCloseSuggestions() final; > >+ void dataListButtonElementWasClicked() final; >+ RefPtr<DataListButtonElement> m_dataListDropdownIndicator; >+ > std::unique_ptr<DataListSuggestionPicker> m_suggestionPicker; > #endif > >diff --git a/Source/WebCore/html/shadow/DataListButtonElement.cpp b/Source/WebCore/html/shadow/DataListButtonElement.cpp >new file mode 100644 >index 0000000000000000000000000000000000000000..a437f0d8561222150f72255bd21b89ed7d566056 >--- /dev/null >+++ b/Source/WebCore/html/shadow/DataListButtonElement.cpp >@@ -0,0 +1,78 @@ >+/* >+ * Copyright (C) 2018 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#include "config.h" >+#include "DataListButtonElement.h" >+ >+#if ENABLE(DATALIST_ELEMENT) >+ >+#include "Event.h" >+#include "EventNames.h" >+#include "HTMLNames.h" >+#include "MouseEvent.h" >+#include <wtf/IsoMallocInlines.h> >+ >+namespace WebCore { >+ >+WTF_MAKE_ISO_ALLOCATED_IMPL(DataListButtonElement); >+ >+using namespace HTMLNames; >+ >+Ref<DataListButtonElement> DataListButtonElement::create(Document& document, DataListButtonOwner& owner) >+{ >+ return adoptRef(*new DataListButtonElement(document, owner)); >+} >+ >+DataListButtonElement::DataListButtonElement(Document& document, DataListButtonOwner& owner) >+ : HTMLDivElement(divTag, document) >+ , m_owner(owner) >+{ >+ setPseudo(AtomicString("-webkit-list-button", AtomicString::ConstructFromLiteral)); >+} >+ >+DataListButtonElement::~DataListButtonElement() { } >+ >+void DataListButtonElement::defaultEventHandler(Event& event) >+{ >+ if (!is<MouseEvent>(event)) { >+ if (!event.defaultHandled()) >+ HTMLDivElement::defaultEventHandler(event); >+ return; >+ } >+ >+ MouseEvent& mouseEvent = downcast<MouseEvent>(event); >+ >+ if (mouseEvent.type() == eventNames().clickEvent) { >+ m_owner.dataListButtonElementWasClicked(); >+ event.setDefaultHandled(); >+ } >+ >+ if (!event.defaultHandled()) >+ HTMLDivElement::defaultEventHandler(event); >+} >+ >+} // namespace WebCore >+ >+#endif // ENABLE(DATALIST_ELEMENT) >diff --git a/Source/WebCore/html/shadow/DataListButtonElement.h b/Source/WebCore/html/shadow/DataListButtonElement.h >new file mode 100644 >index 0000000000000000000000000000000000000000..fd95864ab7b1b72db4587cedd2e3f1d9c2b28ea8 >--- /dev/null >+++ b/Source/WebCore/html/shadow/DataListButtonElement.h >@@ -0,0 +1,59 @@ >+/* >+ * Copyright (C) 2018 Apple Inc. All rights reserved. >+ * >+ * Redistribution and use in source and binary forms, with or without >+ * modification, are permitted provided that the following conditions >+ * are met: >+ * 1. Redistributions of source code must retain the above copyright >+ * notice, this list of conditions and the following disclaimer. >+ * 2. Redistributions in binary form must reproduce the above copyright >+ * notice, this list of conditions and the following disclaimer in the >+ * documentation and/or other materials provided with the distribution. >+ * >+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' >+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, >+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR >+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS >+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR >+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF >+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS >+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN >+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) >+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF >+ * THE POSSIBILITY OF SUCH DAMAGE. >+ */ >+ >+#pragma once >+ >+#if ENABLE(DATALIST_ELEMENT) >+ >+#include "HTMLDivElement.h" >+ >+namespace WebCore { >+ >+class TextFieldInputType; >+ >+class DataListButtonElement final : public HTMLDivElement { >+ WTF_MAKE_ISO_ALLOCATED(DataListButtonElement); >+public: >+ class DataListButtonOwner { >+ public: >+ virtual ~DataListButtonOwner() = default; >+ virtual void dataListButtonElementWasClicked() = 0; >+ }; >+ >+ ~DataListButtonElement(); >+ >+ static Ref<DataListButtonElement> create(Document&, DataListButtonOwner&); >+ >+private: >+ explicit DataListButtonElement(Document&, DataListButtonOwner&); >+ >+ void defaultEventHandler(Event&) override; >+ >+ DataListButtonOwner& m_owner; >+}; >+ >+} // namespace WebCore >+ >+#endif // ENABLE(DATALIST_ELEMENT) >diff --git a/Source/WebCore/platform/ThemeTypes.h b/Source/WebCore/platform/ThemeTypes.h >index 2a4bc09fa39dab77deafb2ac928ef61a7dbdf437..cb6fa3683d4c0039052914bf59036499c8c87abc 100644 >--- a/Source/WebCore/platform/ThemeTypes.h >+++ b/Source/WebCore/platform/ThemeTypes.h >@@ -53,6 +53,9 @@ enum ControlPart { > #endif > #if ENABLE(INPUT_TYPE_COLOR) > ColorWellPart, >+#endif >+#if ENABLE(DATALIST_ELEMENT) >+ ListButtonPart, > #endif > TextAreaPart, > #if ENABLE(ATTACHMENT_ELEMENT) >diff --git a/Source/WebCore/rendering/RenderTheme.cpp b/Source/WebCore/rendering/RenderTheme.cpp >index 06d4cb4d2b4c214265d8d85453e552122086fd7b..34f3a1e8170b59c5cdc8741dfdc96aaa77e5d6c3 100644 >--- a/Source/WebCore/rendering/RenderTheme.cpp >+++ b/Source/WebCore/rendering/RenderTheme.cpp >@@ -271,6 +271,10 @@ void RenderTheme::adjustStyle(StyleResolver& styleResolver, RenderStyle& style, > case AttachmentPart: > case BorderlessAttachmentPart: > return adjustAttachmentStyle(styleResolver, style, element); >+#endif >+#if ENABLE(DATALIST_ELEMENT) >+ case ListButtonPart: >+ return adjustListButtonStyle(styleResolver, style, element); > #endif > default: > break; >@@ -1031,6 +1035,10 @@ bool RenderTheme::paintAttachment(const RenderObject&, const PaintInfo&, const I > > #if ENABLE(DATALIST_ELEMENT) > >+void RenderTheme::adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const >+{ >+} >+ > LayoutUnit RenderTheme::sliderTickSnappingThreshold() const > { > return 0; >diff --git a/Source/WebCore/rendering/RenderTheme.h b/Source/WebCore/rendering/RenderTheme.h >index 75393b435cd346cba235f71b54d255f66a4e869e..5e07f40620ec64a4baa9d0cc5a176b5c9aa92a79 100644 >--- a/Source/WebCore/rendering/RenderTheme.h >+++ b/Source/WebCore/rendering/RenderTheme.h >@@ -339,6 +339,10 @@ protected: > virtual bool paintAttachment(const RenderObject&, const PaintInfo&, const IntRect&); > #endif > >+#if ENABLE(DATALIST_ELEMENT) >+ virtual void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const; >+#endif >+ > virtual void adjustProgressBarStyle(StyleResolver&, RenderStyle&, const Element*) const; > virtual bool paintProgressBar(const RenderObject&, const PaintInfo&, const IntRect&) { return true; } > >diff --git a/Source/WebCore/rendering/RenderThemeMac.h b/Source/WebCore/rendering/RenderThemeMac.h >index 5c18d4daf281accadd4eea1a1d67ea821c073b76..d98de3a959916c8faa354dede51998f88d8b0e9c 100644 >--- a/Source/WebCore/rendering/RenderThemeMac.h >+++ b/Source/WebCore/rendering/RenderThemeMac.h >@@ -155,6 +155,11 @@ private: > void adjustSearchFieldResultsButtonStyle(StyleResolver&, RenderStyle&, const Element*) const final; > bool paintSearchFieldResultsButton(const RenderBox&, const PaintInfo&, const IntRect&) final; > >+#if ENABLE(DATALIST_ELEMENT) >+ void paintListButtonForInput(const RenderObject&, GraphicsContext&, const FloatRect&); >+ void adjustListButtonStyle(StyleResolver&, RenderStyle&, const Element*) const; >+#endif >+ > #if ENABLE(VIDEO) > bool supportsClosedCaptioning() const final { return true; } > #endif >@@ -219,6 +224,9 @@ private: > NSSliderCell *sliderThumbHorizontal() const; > NSSliderCell *sliderThumbVertical() const; > NSTextFieldCell *textField() const; >+#if ENABLE(DATALIST_ELEMENT) >+ NSCell *listButton() const; >+#endif > > #if ENABLE(METER_ELEMENT) > NSLevelIndicatorStyle levelIndicatorStyleFor(ControlPart) const; >@@ -247,6 +255,9 @@ private: > #if ENABLE(SERVICE_CONTROLS) > mutable RetainPtr<NSServicesRolloverButtonCell> m_servicesRolloverButton; > #endif >+#if ENABLE(DATALIST_ELEMENT) >+ mutable RetainPtr<NSCell> m_listButton; >+#endif > > bool m_isSliderThumbHorizontalPressed { false }; > bool m_isSliderThumbVerticalPressed { false }; >diff --git a/Source/WebCore/rendering/RenderThemeMac.mm b/Source/WebCore/rendering/RenderThemeMac.mm >index e2ead86eeb1fa4453761db23415fb741188c3929..b889dac4d4a1221cd57eeb0fd12bc55610c93b43 100644 >--- a/Source/WebCore/rendering/RenderThemeMac.mm >+++ b/Source/WebCore/rendering/RenderThemeMac.mm >@@ -197,6 +197,76 @@ static const double progressAnimationNumFrames = 256; > @implementation WebCoreRenderThemeBundle > @end > >+#if ENABLE(DATALIST_ELEMENT) >+ >+static const CGFloat listButtonWidth = 16.0f; >+static const CGFloat listButtonCornerRadius = 5.0f; >+ >+@interface WebListButtonCell : NSCell >+@end >+ >+@implementation WebListButtonCell >+- (void)drawWithFrame:(NSRect)cellFrame inView:(__unused NSView *)controlView >+{ >+ CGFloat listButtonCornerRadius = 5.0f; >+ NSPoint topLeft = NSMakePoint(NSMinX(cellFrame), NSMinY(cellFrame)); >+ NSPoint topRight = NSMakePoint(NSMaxX(cellFrame), NSMinY(cellFrame)); >+ NSPoint bottomRight = NSMakePoint(NSMaxX(cellFrame), NSMaxY(cellFrame)); >+ NSPoint bottomLeft = NSMakePoint(NSMinX(cellFrame), NSMaxY(cellFrame)); >+ >+ NSBezierPath *path = [NSBezierPath bezierPath]; >+ [path moveToPoint:topLeft]; >+ >+ [path lineToPoint:NSMakePoint(topRight.x - listButtonCornerRadius, topRight.y)]; >+ [path curveToPoint:NSMakePoint(topRight.x, topRight.y + listButtonCornerRadius) controlPoint1:topRight controlPoint2:topRight]; >+ >+ [path lineToPoint:NSMakePoint(bottomRight.x, bottomRight.y - listButtonCornerRadius)]; >+ [path curveToPoint:NSMakePoint(bottomRight.x - listButtonCornerRadius, bottomRight.y) controlPoint1:bottomRight controlPoint2:bottomRight]; >+ >+ [path lineToPoint:bottomLeft]; >+ [path lineToPoint:topLeft]; >+ >+ if ([self userInterfaceLayoutDirection] == NSUserInterfaceLayoutDirectionRightToLeft) { >+ NSAffineTransform *transform = [NSAffineTransform transform]; >+ [transform translateXBy:NSMidX(cellFrame) yBy:NSMidY(cellFrame)]; >+ [transform rotateByDegrees:180]; >+ [transform translateXBy:-1 * NSMidX(cellFrame) yBy:-1 * NSMidY(cellFrame)]; >+ [path transformUsingAffineTransform:transform]; >+ } >+ >+ // FIXME: Obtain the gradient colors from CoreUI or AppKit >+ RetainPtr<NSGradient> gradient; >+#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 >+ NSUserAccentColor accentColor = NSColorGetUserAccentColor(); >+ if (accentColor == NSUserAccentColorRed) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(212.0 / 255) green:(122.0 / 255) blue:(117.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(189.0 / 255) green:(34.0 / 255) blue:(23.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorOrange) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(242.0 / 255) green:(185.0 / 255) blue:(113.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(242.0 / 255) green:(145.0 / 255) blue:(17.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorYellow) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(241.0 / 255) green:(212.0 / 255) blue:(119.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(239.0 / 255) green:(193.0 / 255) blue:(27.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorGreen) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(132.0 / 255) green:(186.0 / 255) blue:(120.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(46.0 / 255) green:(145.0 / 255) blue:(30.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorPurple) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(178.0 / 255) green:(128.0 / 255) blue:(175.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(130.0 / 255) green:(43.0 / 255) blue:(123.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorPink) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(225.0 / 255) green:(126.0 / 255) blue:(165.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(211.0 / 255) green:(42.0 / 255) blue:(105.0 / 255) alpha:1.0]]); >+ else if (accentColor == NSUserAccentColorNoColor) >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(177.0 / 255) green:(177.0 / 255) blue:(182.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(145.0 / 255) green:(145.0 / 255) blue:(150.0 / 255) alpha:1.0]]); >+ else >+#endif >+ gradient = adoptNS([[NSGradient alloc] initWithStartingColor:[NSColor colorWithRed:(114.0 / 255) green:(164.0 / 255) blue:(243.0 / 255) alpha:1.0] endingColor:[NSColor colorWithRed:(45.0 / 255) green:(117.0 / 255) blue:(246.0 / 255) alpha:1.0]]); >+ >+ [gradient drawInBezierPath:path angle:90]; >+ if ([self isHighlighted]) { >+ NSColor *overlay = [NSColor colorWithWhite:0 alpha:0.1]; >+ [overlay setFill]; >+ [path fill]; >+ } >+} >+@end >+ >+#endif // ENABLE(DATALIST_ELEMENT) >+ > namespace WebCore { > > using namespace HTMLNames; >@@ -1048,6 +1118,54 @@ NSControlSize RenderThemeMac::controlSizeForSystemFont(const RenderStyle& style) > return NSControlSizeMini; > } > >+#if ENABLE(DATALIST_ELEMENT) >+ >+void RenderThemeMac::paintListButtonForInput(const RenderObject& o, GraphicsContext& context, const FloatRect& r) >+{ >+ // We can't paint an NSComboBoxCell since they are not height-resizable. >+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode())); >+ NSCell *listButton = this->listButton(); >+ >+ NSRect listButtonFrame = NSMakeRect(r.maxX() - listButtonWidth, r.y(), listButtonWidth, r.height()); >+ if (!o.style().isLeftToRightDirection()) { >+ listButtonFrame.origin.x = r.x(); >+ [listButton setUserInterfaceLayoutDirection:NSUserInterfaceLayoutDirectionRightToLeft]; >+ } else >+ [listButton setUserInterfaceLayoutDirection:NSUserInterfaceLayoutDirectionLeftToRight]; >+ >+ [listButton setHighlighted:input.isPresentingAttachedView()]; >+ if (!input.isPresentingAttachedView()) >+ updatePressedState(listButton, *(input.dataListButtonElement()->renderer())); >+ >+ [listButton drawWithFrame:listButtonFrame inView:documentViewFor(o)]; >+ [listButton setControlView:nil]; >+ >+ RefPtr<Image> image; >+ float imageScale = 1; >+ if (o.document().deviceScaleFactor() >= 2) { >+ image = Image::loadPlatformResource("ListButtonArrow@2x"); >+ imageScale = 2; >+ } else >+ image = Image::loadPlatformResource("ListButtonArrow"); >+ >+ FloatRect imageRect(0, 0, image->width() / imageScale, image->height() / imageScale); >+ imageRect.setX(NSMidX(listButtonFrame) - imageRect.width() / 2); >+ imageRect.setY(NSMidY(listButtonFrame) - imageRect.height() / 2); >+ >+ context.drawImage(*image, imageRect); >+} >+ >+void RenderThemeMac::adjustListButtonStyle(StyleResolver&, RenderStyle& style, const Element*) const >+{ >+ // Add a margin to place the button at end of the input field. >+ if (style.isLeftToRightDirection()) >+ style.setMarginRight(Length(-4, Fixed)); >+ else >+ style.setMarginLeft(Length(-4, Fixed)); >+} >+ >+#endif >+ > bool RenderThemeMac::paintTextField(const RenderObject& o, const PaintInfo& paintInfo, const FloatRect& r) > { > LocalCurrentGraphicsContext localContext(paintInfo.context()); >@@ -1074,6 +1192,15 @@ bool RenderThemeMac::paintTextField(const RenderObject& o, const PaintInfo& pain > > [textField setControlView:nil]; > >+#if ENABLE(DATALIST_ELEMENT) >+ if (!is<HTMLInputElement>(o.generatingNode())) >+ return false; >+ >+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode())); >+ if (input.list()) >+ paintListButtonForInput(o, paintInfo.context(), adjustedPaintRect); >+#endif >+ > return false; > } > >@@ -1831,6 +1958,15 @@ bool RenderThemeMac::paintSearchField(const RenderObject& o, const PaintInfo& pa > [search setControlView:nil]; > [search resetSearchButtonCell]; > >+#if ENABLE(DATALIST_ELEMENT) >+ if (!is<HTMLInputElement>(o.generatingNode())) >+ return false; >+ >+ const auto& input = downcast<HTMLInputElement>(*(o.generatingNode())); >+ if (input.list()) >+ paintListButtonForInput(o, paintInfo.context(), FloatRect(unzoomedRect.x(), unzoomedRect.y() + 1, unzoomedRect.width(), unzoomedRect.height() - 2)); >+#endif >+ > return false; > } > >@@ -1933,9 +2069,15 @@ bool RenderThemeMac::paintSearchFieldCancelButton(const RenderBox& box, const Pa > float zoomLevel = box.style().effectiveZoom(); > > FloatRect localBounds = adjustedCancelButtonRect([search cancelButtonRectForBounds:NSRect(snappedIntRect(inputBox.contentBoxRect()))]); >+ > // Adjust position based on the content direction. > float adjustedXPosition; >- if (box.style().direction() == TextDirection::RTL) >+ >+ if (is<HTMLInputElement>(*input)) { >+ RenderBox* cancelButtonBox = downcast<RenderBox>(downcast<HTMLInputElement>(*input).cancelButtonElement()->renderer()); >+ // The cancel button won't always be the rightmost element. >+ adjustedXPosition = inputBox.contentBoxRect().x() + (cancelButtonBox->absoluteContentBox().x() - inputBox.absoluteContentBox().x()); >+ } else if (box.style().direction() == TextDirection::RTL) > adjustedXPosition = inputBox.contentBoxRect().x(); > else > adjustedXPosition = inputBox.contentBoxRect().maxX() - localBounds.size().width(); >@@ -2270,6 +2412,16 @@ NSTextFieldCell* RenderThemeMac::textField() const > return m_textField.get(); > } > >+#if ENABLE(DATALIST_ELEMENT) >+NSCell *RenderThemeMac::listButton() const >+{ >+ if (!m_listButton) >+ m_listButton = adoptNS([[WebListButtonCell alloc] init]); >+ >+ return m_listButton.get(); >+} >+#endif >+ > String RenderThemeMac::fileListNameForWidth(const FileList* fileList, const FontCascade& font, int width, bool multipleFilesAllowed) const > { > if (width <= 0) >diff --git a/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js b/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js >index 75a0e74cf38b82b417a7602061858d811ee9c639..3eb22500a16ca3dccec50737209df6c82d0deecf 100644 >--- a/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js >+++ b/Source/WebInspectorUI/UserInterface/External/CodeMirror/css.js >@@ -626,7 +626,7 @@ CodeMirror.defineMode("css", function(config, parserConfig) { > "katakana", "katakana-iroha", "keep-all", "khmer", > "korean-hangul-formal", "korean-hanja-formal", "korean-hanja-informal", > "landscape", "lao", "large", "larger", "left", "level", "lighter", "lighten", >- "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "listitem", >+ "line-through", "linear", "linear-gradient", "lines", "list-item", "listbox", "list-button", "listitem", > "local", "logical", "loud", "lower", "lower-alpha", "lower-armenian", > "lower-greek", "lower-hexadecimal", "lower-latin", "lower-norwegian", > "lower-roman", "lowercase", "ltr", "luminosity", "malayalam", "match", "matrix", "matrix3d", >diff --git a/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js b/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >index 3567bed3eb978548cab80ee38088104ba3291ac5..f225ae374c68a7788a88516bb602368209d4fab1 100644 >--- a/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >+++ b/Source/WebInspectorUI/UserInterface/Models/CSSKeywordCompletions.js >@@ -1040,7 +1040,7 @@ WI.CSSKeywordCompletions._propertyKeywordMap = { > ], > /* > "-webkit-appearance": [ >- "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls-background", "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-well" >+ "none", "checkbox", "radio", "push-button", "square-button", "button", "button-bevel", "default-button", "inner-spin-button", "listbox", "listitem", "media-enter-fullscreen-button", "media-exit-fullscreen-button", "media-fullscreen-volume-slider", "media-fullscreen-volume-slider-thumb", "media-mute-button", "media-play-button", "media-overlay-play-button", "media-seek-back-button", "media-seek-forward-button", "media-rewind-button", "media-return-to-realtime-button", "media-toggle-closed-captions-button", "media-slider", "media-sliderthumb", "media-volume-slider-container", "media-volume-slider", "media-volume-sliderthumb", "media-volume-slider-mute-button", "media-controls-background", "media-controls-fullscreen-background", "media-current-time-display", "media-time-remaining-display", "menulist", "menulist-button", "menulist-text", "menulist-textfield", "meter", "progress-bar", "progress-bar-value", "slider-horizontal", "slider-vertical", "sliderthumb-horizontal", "sliderthumb-vertical", "caret", "searchfield", "searchfield-decoration", "searchfield-results-decoration", "searchfield-results-button", "searchfield-cancel-button", "snapshotted-plugin-overlay", "textfield", "relevancy-level-indicator", "continuous-capacity-level-indicator", "discrete-capacity-level-indicator", "rating-level-indicator", "textarea", "attachment", "caps-lock-indicator", "color-well", "list-button" > ], > */ > "-webkit-animation-trigger": [ >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index bff88267835d9debaeb8c2fb1b30357da3079d75..d1eb5fca8eede110600dd48d2746f1eb231fb7b7 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,20 @@ >+2018-08-15 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by Tim Horton. >+ >+ Added tests to verify appearance of TextFieldInputs with a datalist. >+ >+ * fast/forms/datalist/datalist-searchinput-appearance.html: Added. >+ * fast/forms/datalist/datalist-textinput-appearance.html: Added. >+ * platform/ios/TestExpectations: >+ * platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png: Added. >+ * platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt: Added. >+ * platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png: Added. >+ * platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt: Added. >+ > 2018-08-15 Per Arne Vollan <pvollan@apple.com> > > Layout Test editing/input/press-tab-during-ime-composition.html is failing >diff --git a/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html b/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html >new file mode 100644 >index 0000000000000000000000000000000000000000..8156c46a6e5a35bcce6eee65cb4d76778cdfa550 >--- /dev/null >+++ b/LayoutTests/fast/forms/datalist/datalist-searchinput-appearance.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+<body> >+ >+<input id="fruit" list="fruits" type="search"/> >+<datalist id="fruits"> >+ <option>Apple</option> >+ <option>Orange</option> >+ <option>Pear</option> >+</datalist> >+ >+</body> >+</html> >diff --git a/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html b/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html >new file mode 100644 >index 0000000000000000000000000000000000000000..deceeb9c6c2f50375d4f3388423ca7baa9c9f7c9 >--- /dev/null >+++ b/LayoutTests/fast/forms/datalist/datalist-textinput-appearance.html >@@ -0,0 +1,13 @@ >+<!DOCTYPE html> >+<html> >+<body> >+ >+<input id="fruit" list="fruits" type="text"/> >+<datalist id="fruits"> >+ <option>Apple</option> >+ <option>Orange</option> >+ <option>Pear</option> >+</datalist> >+ >+</body> >+</html> >diff --git a/LayoutTests/platform/ios/TestExpectations b/LayoutTests/platform/ios/TestExpectations >index 1bf6f6e65fec61884e5631f65e2683894ab4405a..e562f9107c9ab85a59a3842806e4e0186a06926e 100644 >--- a/LayoutTests/platform/ios/TestExpectations >+++ b/LayoutTests/platform/ios/TestExpectations >@@ -3199,6 +3199,8 @@ fast/block/block-only/relative-auto-with-parent-offset.html [ Failure ] > # Datalist > webkit.org/b/186714 fast/forms/datalist/datalist-show-hide.html [ Skip ] > webkit.org/b/186714 fast/forms/datalist/datalist-textinput-keydown.html [ Skip ] >+fast/forms/datalist/datalist-searchinput-appearance.html [ Skip ] >+fast/forms/datalist/datalist-textinput-appearance.html [ Skip ] > > # We are only accepting GLSL3 for macOS. > webkit.org/b/187982 webgl/2.0.0/conformance2/glsl3 [ Skip ] >diff --git a/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png b/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.png >new file mode 100644 >index 0000000000000000000000000000000000000000..3ccea8af864b935b03272b4a73933f88f3a8d8b3 >GIT binary patch >literal 11550 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 >N&dkYBZu{uOe*vARXFC7@ > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt b/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..2f96324146ab4c5b00707a9ffd5faf643dcc24c1 >--- /dev/null >+++ b/LayoutTests/platform/mac/fast/forms/datalist/datalist-searchinput-appearance-expected.txt >@@ -0,0 +1,14 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x39 >+ RenderBlock {HTML} at (0,0) size 800x39 >+ RenderBody {BODY} at (8,8) size 784x23 >+ RenderTextControl {INPUT} at (2,2) size 173x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] >+ RenderFlexibleBox {DIV} at (3,0) size 167x19 >+ RenderBlock {DIV} at (0,0) size 8x19 >+ RenderBlock {DIV} at (8,3) size 128x13 >+ RenderBlock {DIV} at (135,0) size 20x19 >+ RenderText {#text} at (0,0) size 0x0 >+ RenderText {#text} at (0,0) size 0x0 >+layer at (21,13) size 128x13 >+ RenderBlock {DIV} at (0,0) size 128x13 >diff --git a/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png b/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.png >new file mode 100644 >index 0000000000000000000000000000000000000000..ba67a7150660faf3f158dd9c6cf78cc1c54503da >GIT binary patch >literal 10602 >zcmeI2`BM{D0LM2mN}y6g)fo{aL1>XmA%Ny^kOV3PFL11m5s_#T@W2`omB^6*m7^mi >zICKV(LPn`jM<hyAPz(Vx<tU7F1j-=<Gbk7lk`Mx6$<fsk^dIO?eLwB)+w*<j_r34u >z?e0%|Bf{+M*4aT2WWOVP`#uO-Mt~qR1G@q#xpp!0EVA%AAIdn-J`u}~PrUF0L?N>L >zSyUp2M5M4bZy^P2A;uEpsBu(E04adOA#OJG3g2H1mAEe~1gd%FqJp4}>K)sI_w!Jb >z!+W^VHcr{f(S)4`LciW{pRhaw=X}HNo^6NE)yM2s2Trp9`fZBg<{iAIr-nhdy}9q? >zRUE!OFDG$qQ+|R+q;1k<Nr!VzPy6U2qfh-7*KrQD(O!YY5$Nd<3XMTlaM;dF`&IAP >ztVIl4EH1~oft1p}BGCO$ef!BFSRDC3-9Plmr+Hvt-~z3ub^YC@NE(m0vg7pwyt2KW >zI8;*Rz%)NER4V&uu8K<wcj7IF@Zr|VoaLeWJ}*#Rr==P+8cg5~DTY7&M(t}h+#*#{ >zN)$|9%45oU^Zd*M<w1dYQ1dKnWNz076_Dy=jIQe6M9&wtx;J{?rHEjb^V;qJw{CG? >zSFU$g(e2q{1yet(lEp~h)|p)Y)sCLt<Y<d6aEDp4yqv8x+MzF7VfA2k8*I{1r@i+) >z#OsBgzM}z}q$P2O;!vn_rLtsZ(|8awucDzZ{j|u$@N9XlZi>psleZoAmolZ3<<xm} >zP(tC7;^Yu|`cST~d~)97SrxZ=FwmyfMW#Om>u31-heMe5w<dVBQr$9`W*n2B>8j9| >zd|_?OC#O-U>Do{Sqx$f+Wwj}JFSs>PGNf+nJtiFbU$q%hKJh~Ja!l^7{#{3t9pOLf >zZ03&3>lDTIYRgGKqqb20y~~L4ZM){BS*1~Wj>{K>U83c=+~&vO<9&;dnNhJCM+lpb >zwHO_eO)J~Rs6T6mr4170q*~$Bn7}0&-;s5_k<GAjZffNSKapfK*6EHl7T@43NDsc4 >z6A4B{9#&J;52MkqE(%Q3U3?RpN0y9!7U-JB3wol3S%&7Mh#dU3)YvtIIoUaXBRqGd >zS8%wRzgf(E`loE~3fo1g$@>w>{_^eIW4b?fMSH-tw49OeOR~I?yw*%rsKVG~d0m%( >zjZkMZ`FGbUOv5aLLDEZGcTQCmH{268rrThBl#Lin`1Mq}v+kakk9q&Fs!vEe^0|!1 >z4Qgb{6r)m_ceczpIUsyFY?fy=;9FDZuC8`V=HR2z9GbYo@@72da*&jemQ3QLS`6Y2 >zKYGjYkjkP<)#YwZA}=R_6b_b_7V&q>X1`l<@(?0Hz090KgR6A+d}{_AyCv@3t!G4j >z11X(&YxCkL6vR(wna?fiWl<)1W~tzWMrL+<db^U`#gEpDj314vMT|PSaLp1aG^l2h >zb;H8mvU0l;JGSnZwwqOfm3{o(;)VXk6&#q{Ep@bB-=!`cqE3k|3Lzi%Vl?E{uXbrr >z*CkJ-+%Hd){T(lUXMUw<FfWcINN+fX#TLj7TjPW*#6%?bmZB1I%!nUi={sh*VPeuI >z8m?A6Sx{?}refeDmO|@^FN-m=b_EiNgk7s;h;clBLHyi?nOgysGrVAKp5+*|GtN_f >zyXuP4JQ10V7g#E^73w3}I{2HVzRPx`ILX2+Sr&_yfeVbVmLn~(F5^%DJIi{f_wvdK >z^k|f|jgak<bg2Dz`=vVL2n71jr^kc+Kp)@_&_Aq^0LBL}K7xGs7_lH9K|X?f1o;T^ >zaWNIZ`~l3L!2ELQ?G@kyzz2X203QH80DSOa)(H3r@Dbo6z(<Rp>Hr@CJ_LLS_z>_R >q;6uQN$d6cnj{zV5pZK^*0HLC0ew?V?S%&-v3GE1t*j^KIH1i*U2So+| > >literal 0 >HcmV?d00001 > >diff --git a/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt b/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt >new file mode 100644 >index 0000000000000000000000000000000000000000..14c0805870178d1103d43317e23fed74a3c8e774 >--- /dev/null >+++ b/LayoutTests/platform/mac/fast/forms/datalist/datalist-textinput-appearance-expected.txt >@@ -0,0 +1,12 @@ >+layer at (0,0) size 800x600 >+ RenderView at (0,0) size 800x600 >+layer at (0,0) size 800x39 >+ RenderBlock {HTML} at (0,0) size 800x39 >+ RenderBody {BODY} at (8,8) size 784x23 >+ RenderTextControl {INPUT} at (2,2) size 146x19 [bgcolor=#FFFFFF] [border: (2px inset #000000)] >+ RenderFlexibleBox {DIV} at (3,3) size 140x13 >+ RenderBlock {DIV} at (0,0) size 128x13 >+ RenderText {#text} at (0,0) size 0x0 >+ RenderText {#text} at (0,0) size 0x0 >+layer at (13,13) size 128x13 >+ RenderBlock {DIV} at (0,0) size 128x13
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 187741
:
345203
|
345253
|
345289
|
345689
|
345818
|
345878
|
345883
|
345900
|
347041
|
347048
|
347054
| 347171