WebKit Bugzilla
Attachment 345878 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
bug-187741-20180726151251.patch (text/plain), 58.05 KB, created by
Aditya Keerthi
on 2018-07-26 15:12:52 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Aditya Keerthi
Created:
2018-07-26 15:12:52 PDT
Size:
58.05 KB
patch
obsolete
>Subversion Revision: 234214 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 85009eabcc736c4ec900a5d6a9dcdf38193b916c..480f6f64142470ff76939db660dc569c375559bd 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,69 @@ >+2018-07-26 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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): >+ (WebCore::HTMLInputElement::isShowingList const): >+ * html/HTMLInputElement.h: >+ * html/InputType.h: >+ (WebCore::InputType::dataListButtonElement const): >+ (WebCore::InputType::isShowingList 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): >+ (WebCore::TextFieldInputType::isShowingList const): >+ * 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-07-25 Chris Dumez <cdumez@apple.com> > > navigator.userAgent may return outdated value after webView.customUserAgent is set >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index 5fd6e9308ebde9fd5e4f0d7b4347ce45b886a8c4..0aa44203711295ee39f93883b906b03f183ddaf2 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,12 @@ >+2018-07-26 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * pal/spi/cocoa/NSColorSPI.h: Added NSColorGetUserAccentColor(). >+ > 2018-07-24 Tim Horton <timothy_horton@apple.com> > > Enable Web Content Filtering on watchOS >diff --git a/Source/WebInspectorUI/ChangeLog b/Source/WebInspectorUI/ChangeLog >index db62e91f69da38db6c74400c8d729043292164df..7f5c948c72226f22f43980d387cc3f84c806f49f 100644 >--- a/Source/WebInspectorUI/ChangeLog >+++ b/Source/WebInspectorUI/ChangeLog >@@ -1,3 +1,15 @@ >+2018-07-26 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ Add keyword completion for 'list-button'. >+ >+ * UserInterface/External/CodeMirror/css.js: >+ * UserInterface/Models/CSSKeywordCompletions.js: >+ > 2018-07-22 Nikita Vasilyev <nvasilyev@apple.com> > > Web Inspector: Dark Mode: remove odd-looking top border >diff --git a/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h b/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >index b43a018339e29baefdad9828905ab8aa2ab9b85b..9f35d312a73e6f4e48ce50a66aec5b0dedf795e7 100644 >--- a/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >+++ b/Source/WebCore/PAL/pal/spi/cocoa/NSColorSPI.h >@@ -28,6 +28,7 @@ > #if PLATFORM(MAC) && USE(APPLE_INTERNAL_SDK) > > #import <AppKit/NSColor_Private.h> >+#import <AppKit/NSColor_UserAccent.h> > > #else > >@@ -46,4 +47,18 @@ > + (NSColor *)placeholderTextColor; > @end > >+typedef NS_ENUM(NSInteger, NSUserAccentColor) { >+ NSUserAccentColorRed = 0, >+ NSUserAccentColorOrange, >+ NSUserAccentColorYellow, >+ NSUserAccentColorGreen, >+ NSUserAccentColorBlue, >+ NSUserAccentColorPurple, >+ NSUserAccentColorPink, >+ >+ NSUserAccentColorNoColor = -1, >+}; >+ >+extern "C" NSUserAccentColor NSColorGetUserAccentColor(void); >+ > #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 22e1423b1ad1392fd3fcc9d0b0545b85705141e7..0ac24b5122fcb9b53fb924d489e62ca1b636e8c5 100644 >--- a/Source/WebCore/WebCore.xcodeproj/project.pbxproj >+++ b/Source/WebCore/WebCore.xcodeproj/project.pbxproj >@@ -4780,9 +4780,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 */; }; >@@ -14493,12 +14497,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>"; }; >@@ -16846,6 +16854,8 @@ > 51C4AA5118B28357007BFE9B /* mac */, > 7C1E97251A9F9834007BF0FB /* AutoFillButtonElement.cpp */, > 7C1E97261A9F9834007BF0FB /* AutoFillButtonElement.h */, >+ E58B45B920AD07DD00991025 /* DataListButtonElement.cpp */, >+ E58B45B820AD07DD00991025 /* DataListButtonElement.h */, > A7C9ABF61357A3BF00F5503F /* DetailsMarkerControl.cpp */, > A7C9ABF71357A3BF00F5503F /* DetailsMarkerControl.h */, > 510192D318B6B9B7007FC7A1 /* ImageControlsRootElement.cpp */, >@@ -19225,6 +19235,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 */, >@@ -27670,6 +27682,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 */, >@@ -31230,6 +31243,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 */, >@@ -31472,6 +31487,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 d14a451bf31c1b091196c6c057d3895b63f3159c..243cd558365ad5d2bfda513ba6f4da26855ea8db 100644 >--- a/Source/WebCore/css/CSSPrimitiveValueMappings.h >+++ b/Source/WebCore/css/CSSPrimitiveValueMappings.h >@@ -620,6 +620,11 @@ template<> inline CSSPrimitiveValue::CSSPrimitiveValue(ControlPart e) > case ApplePayButtonPart: > m_value.valueID = CSSValueApplePayButton; > 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 9741c0213154521358f964a7d34f97113af8f9e3..456a57f9fe4e687a023da2e216f8109589af06e1 100644 >--- a/Source/WebCore/css/CSSProperties.json >+++ b/Source/WebCore/css/CSSProperties.json >@@ -3793,6 +3793,7 @@ > "textarea", > "attachment", > "caps-lock-indicator", >+ "list-button", > "none" > ], > "status": { >diff --git a/Source/WebCore/css/CSSValueKeywords.in b/Source/WebCore/css/CSSValueKeywords.in >index 02047b517bbcce557442cc640abc935dcc2c5da2..220fe2f90f3157d301448d1b2ea6627ba1d562ed 100644 >--- a/Source/WebCore/css/CSSValueKeywords.in >+++ b/Source/WebCore/css/CSSValueKeywords.in >@@ -836,6 +836,9 @@ image-controls-button > #if defined(ENABLE_APPLE_PAY) && ENABLE_APPLE_PAY > -apple-pay-button > #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 21b35a33a13e623bb45be7aee1cd71b816e69f22..e360c7f974d21e339fd73a4d6341d7c8e78582ab 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 8e584d985509290bbcb72e82607f9c30e813fd8d..111961c844eaa82a458b73cac34ff1bd8f464016 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) >@@ -1630,6 +1637,11 @@ void HTMLInputElement::listAttributeTargetChanged() > m_inputType->listAttributeTargetChanged(); > } > >+bool HTMLInputElement::isShowingList() const >+{ >+ return m_inputType->isShowingList(); >+} >+ > #endif // ENABLE(DATALIST_ELEMENT) > > bool HTMLInputElement::isSteppable() const >diff --git a/Source/WebCore/html/HTMLInputElement.h b/Source/WebCore/html/HTMLInputElement.h >index 3729b89e27d8ca2e939c00f2081f97a2b5036102..fc09f0f48250f264e06a5f14ca120ef9980838f2 100644 >--- a/Source/WebCore/html/HTMLInputElement.h >+++ b/Source/WebCore/html/HTMLInputElement.h >@@ -148,6 +148,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); >@@ -272,6 +275,7 @@ public: > WEBCORE_EXPORT RefPtr<HTMLElement> list() const; > RefPtr<HTMLDataListElement> dataList() const; > void listAttributeTargetChanged(); >+ bool isShowingList() const; > #endif > > Vector<HTMLInputElement*> radioButtonGroup() const; >diff --git a/Source/WebCore/html/InputType.h b/Source/WebCore/html/InputType.h >index c994cce523cc86b66ce9ea8023847063629b2e8d..3dc978e5356292c324ea6246c9ce68f690453e29 100644 >--- a/Source/WebCore/html/InputType.h >+++ b/Source/WebCore/html/InputType.h >@@ -226,6 +226,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. > >@@ -290,6 +293,7 @@ public: > void dispatchSimulatedClickIfActive(KeyboardEvent&) const; > > #if ENABLE(DATALIST_ELEMENT) >+ virtual bool isShowingList() const { return false; }; > virtual void listAttributeTargetChanged(); > virtual std::optional<Decimal> findClosestTickMarkValue(const Decimal&); > #endif >diff --git a/Source/WebCore/html/TextFieldInputType.cpp b/Source/WebCore/html/TextFieldInputType.cpp >index 6fefffdb9e8144e7337340290c85b995c69849fb..ade8a5d515cd64215bae772d6e12f64d173f7c47 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,7 @@ void TextFieldInputType::didSelectDataListOption(const String& selectedOption) > void TextFieldInputType::didCloseSuggestions() > { > m_suggestionPicker = nullptr; >+ element()->renderer()->repaint(); > } > > void TextFieldInputType::displaySuggestions(DataListSuggestionActivationType type) >@@ -844,6 +876,11 @@ void TextFieldInputType::closeSuggestions() > m_suggestionPicker->close(); > } > >+bool TextFieldInputType::isShowingList() const >+{ >+ return !!m_suggestionPicker; >+} >+ > #endif > > } // namespace WebCore >diff --git a/Source/WebCore/html/TextFieldInputType.h b/Source/WebCore/html/TextFieldInputType.h >index 34081bb799724cd2cc69170e43a7b4bd52b6e928..1750d1dca7c6784b7904a06b35949eba2aa99991 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 isShowingList() const override; >+ 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..11652baa4eb41381d4c933168e5b8ffcbfcc5cc7 >--- /dev/null >+++ b/Source/WebCore/html/shadow/DataListButtonElement.cpp >@@ -0,0 +1,77 @@ >+/* >+ * 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 33cb30e38f0337dfa73ad9b8cb5af34e63eab848..8146f33462b452107074d926bfafa261b8f3ab52 100644 >--- a/Source/WebCore/platform/ThemeTypes.h >+++ b/Source/WebCore/platform/ThemeTypes.h >@@ -50,6 +50,9 @@ enum ControlPart { > #endif > #if ENABLE(APPLE_PAY) > ApplePayButtonPart, >+#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 468472c6865bf6716b9b2f88bbbae155df3e360a..e84f5467ad1389db8e0aa158d50a5881847e8dbd 100644 >--- a/Source/WebCore/rendering/RenderTheme.cpp >+++ b/Source/WebCore/rendering/RenderTheme.cpp >@@ -264,6 +264,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; >@@ -997,6 +1001,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 84d282da56f0772d34d922198c5cb340cf3534dc..41e74e42787cb2a424329841fac89bedb2a28b7e 100644 >--- a/Source/WebCore/rendering/RenderTheme.h >+++ b/Source/WebCore/rendering/RenderTheme.h >@@ -338,6 +338,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 3fad8c1e0812ecbc759a6a7ff529c40d382fb41d..22f59bf69566565f27c882268f9b5eb70e440efc 100644 >--- a/Source/WebCore/rendering/RenderThemeMac.h >+++ b/Source/WebCore/rendering/RenderThemeMac.h >@@ -154,6 +154,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 >@@ -218,6 +223,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; >@@ -246,6 +254,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 37665fd32d24762371bdc8209ce6c2e740e2f0aa..5faf50f9e6ddf9f4856db49ee16f9ab06972d635 100644 >--- a/Source/WebCore/rendering/RenderThemeMac.mm >+++ b/Source/WebCore/rendering/RenderThemeMac.mm >@@ -197,6 +197,74 @@ 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; >+ 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 >+ 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; >@@ -1005,6 +1073,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.isShowingList()]; >+ if (!input.isShowingList()) >+ 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()); >@@ -1031,6 +1147,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; > } > >@@ -1788,6 +1913,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; > } > >@@ -1890,13 +2024,21 @@ 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() == RTL) >- adjustedXPosition = inputBox.contentBoxRect().x(); >- else >- adjustedXPosition = inputBox.contentBoxRect().maxX() - localBounds.size().width(); >- >+ >+ 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() == RTL) >+ adjustedXPosition = inputBox.contentBoxRect().x(); >+ else >+ adjustedXPosition = inputBox.contentBoxRect().maxX() - localBounds.size().width(); >+ } >+ > localBounds.setX(adjustedXPosition); > FloatPoint paintingPos = convertToPaintingPosition(inputBox, box, localBounds.location(), r.location()); > >@@ -2227,6 +2369,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 0e65c21fa301f54874eada4221d8502903fa33b5..54ed4f2f43dcb67e06320393c7b0c5a7b663876c 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 019e3fd8a0f43c3f1e51d103d2164ad4d36df027..ef568fe7ebf10c3dff1b0aee253d116330d904f9 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" >+ "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", "list-button" > ], > */ > "-webkit-animation-trigger": [ >diff --git a/LayoutTests/ChangeLog b/LayoutTests/ChangeLog >index 874bf29ec58fcb6f007d8ed3dd40233800ec1722..f2b4d27159ff3172d26bfe2e53beef9eea127eda 100644 >--- a/LayoutTests/ChangeLog >+++ b/LayoutTests/ChangeLog >@@ -1,3 +1,19 @@ >+2018-07-26 Aditya Keerthi <akeerthi@apple.com> >+ >+ [Datalist] Add button to TextFieldInputs with a datalist >+ https://bugs.webkit.org/show_bug.cgi?id=187741 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ 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/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-07-25 David Fenton <david_fenton@apple.com> > > Layout Test media/audio-concurrent-supported.html is a flaky failure. >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/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..159467ed225bf55ad4f4598b337a076f6475cb45 >GIT binary patch >literal 11515 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 > >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..fd75849e1445d7a50993d4953fbfa3bc4ef730bd >GIT binary patch >literal 10617 >zcmeI2`%@EF6vsCaG?HpUi-JHygj$7ZD=$IDNPq#s3be(}AT(n%pmwNehNvNs2VhkY >znM83!z#)zxwgp6>j93x^rV=OuB2ylvB*cIiBLpOn4S6+MlG;C@KlT2!yJz>#J$uf% >z_xriKx8Te8=yeXR4iE&b+Zz*^070wp5QIE{T5YkEoyntG4&JAt4xCE)_DITiwA1NO >zfdA2*fjdJ2g8fn`l%0VTKi?pVZvcf77)-I4{8AWNS-GVVf|d{+0p0C$S3=M>)85GN >zuQL%d<NHpM)_izD9#DMshl@@HJd}5S;mFSs`EkFbcDptxoe%dXhEqD|P}S@K%Gz5u >z8!3n_J~6kW(jHXdFw>8F<5KsX859(;a7|R#UAj@O8GW!wl2j`x=|Cfpb|@@9EC;fj >zAajr0JDm6C%xZE&Af92Z7Zz)mon6eH^!#@oK|EXiU*69xN1;f2Chmv~sV+k*wE6N> >zh9C2Yps`+-w4TUN4b9DDmuVknN-wXtL|tdUQ8hp1$sZmV7>JVg>PfU*GJ&ly^ivx~ >zI=eN?mrC^Y=40^an6@voQ0Dpfi=(jD3)^qw5Da)uP9iZYrcnmNfJFQZ>$1N!zM&y~ >zWU)JoIR=vzs-}aX26bH%dra-P5;WA~n27|0zn3%rWe8HTwJ<K@xJ<yQO3^Qmx`)IS >z8?%jiWeDd-*~hl7igKXR-jd})T_iVAA)~=}h2Ebojry&Y!2H4TB@8cCHXgh?IRpMo >zWOQr0j(H@Dc$*zdn5p*mc3m3`w^*efue-Z7U7aRJuAgtGxsEQ&+fhpoZ)6BrB4umC >zdNr~6qO&!Pxk+dgFNveuZtgybLxdO_((_{r{Dj9n(4~2)`o^Bi<KNIl$_>`Ex7S)a >zsTCPY%#(=<FFc>cSm?-rhv3T7GUHeptXeasfu9d=6qjR8yr*VS{RR5T$-posdgz$a >zP_~i=-+c&#f6sRPw7Kd&H|G^j=RzJA3f<XoXRq9iULvk%a|8^NgxkiU!F|T5ITg_z >zBdPKJe2H7|ip(*wI9IGCHj!p=zQ(xNLtIum^2Dn)DLx?JM0Ec@Tbo>^%d<st35Gl- >znCVD#7OPEyKLqK`x&cA!p>AUGSz8s?m*qf=-`hOvVF^v(%1>xh6)eK33tD0_Mop+- >z2M$q~A5C^XSK>v+!L-b2ZjIc-V<v5?lwY=Zk&_onum!Tj2OoCON4==;;YzAUw7)ue >z4%YLTEjaeVi%h1F)h4MF)t(obRhsCzS+o41n5z)7KMD1+wMRRkc<2bm{krymFCzFA >zywKgQ{%!2n{fjPmh1cf6K|&ChcZqxTl1OT}DIMQWtR`n~ww29&OWA0L%}@EpJCYPK >z>7G}0bo3JU3Ms40!&-{imTO4lWHLL6EZy3yyI@Z@Kbg>Au%QbW$BG@T*&0P{ux_`_ >z8{JwIPsi#dzX&j$%4*ZeB`@PK=VH$_WXDWCxIn0$X2<sHM~G`CHT-QiOzXGX!bx+& >z;%SDTMD5cAqf@Q;tZTo$M6R!^(BbL^)x%lFW-*_c%We1AVs*XcH;Y$3oW-{9xvZ@B >zmqWdRWb7R#i6(2Iks*dv#$5#M{J6*{nx~&2YFkak*4!V8N0vD7Dl02PMqyGvHZ#j0 >z6c<0a(|7%;;)c{kb`N*0=Mh!anU+bNR?aP9q#iQ;>?TglzeY91fHTs}W(5h$tgyX- >z9V!snbF|aJTJmo?JRhFZg0#lQa_x^mT=~k)HbLOS!g5;PeIDEg@d5P##)nm#!TbQ` >zN1zY?NG#AtppQTwfj$C#Tu}wEegNwyu)ef?EChT2_yF($-~+%1fDhiT8UY^xJ_39M >z_-N&47T`m`hky?O9|ArEd<gi^vPBE<G2r9>6CdZAR|PTV&(P)*Z(6oRLVKg)Bkx8W >G%KHlr4M!OO > >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