1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 package org.htmlunit.css;
16
17 import org.htmlunit.BrowserVersion;
18
19
20
21
22
23
24
25
26
27
28
29 abstract class BrowserConfiguration {
30
31 private final String defaultValue_;
32
33 BrowserConfiguration(final String defaultValue) {
34 defaultValue_ = defaultValue;
35 }
36
37 String getDefaultValue() {
38 return defaultValue_;
39 }
40
41 abstract boolean matches(BrowserVersion browserVersion);
42
43 public boolean isIterable() {
44 return true;
45 }
46
47 static BrowserConfiguration getMatchingConfiguration(
48 final BrowserVersion browserVersion,
49 final BrowserConfiguration[] browserConfigurations) {
50
51 for (final BrowserConfiguration browserConfiguration : browserConfigurations) {
52 if (browserConfiguration.matches(browserVersion)) {
53 return browserConfiguration;
54 }
55 }
56
57 return null;
58 }
59
60 static BrowserConfiguration chromeAndEdgeAuto() {
61 return new ChromeAndEdge("auto");
62 }
63
64 static BrowserConfiguration chromeAndEdgeNone() {
65 return new ChromeAndEdge("none");
66 }
67
68 static BrowserConfiguration chromeAndEdgeNormal() {
69 return new ChromeAndEdge("normal");
70 }
71
72 static BrowserConfiguration chromeAndEdgeEmpty() {
73 return new ChromeAndEdge("");
74 }
75
76 static BrowserConfiguration chromeAndEdge(final String defaultValue) {
77 return new ChromeAndEdge(defaultValue);
78 }
79
80 static BrowserConfiguration chrome(final String defaultValue) {
81 return new Chrome(defaultValue);
82 }
83
84 static BrowserConfiguration edge(final String defaultValue) {
85 return new Edge(defaultValue);
86 }
87
88 static BrowserConfiguration chromeAndEdgeAndFirefox(final String defaultValue) {
89 return new ChromeAndEdgeAndFirefox(defaultValue);
90 }
91
92 static BrowserConfiguration chromeAndEdgeNotIterable(final String defaultValue) {
93 return new ChromeAndEdgeNotIterable(defaultValue);
94 }
95
96 static BrowserConfiguration ffNone() {
97 return new FF("none");
98 }
99
100 static BrowserConfiguration ffNormal() {
101 return new FF("normal");
102 }
103
104 static BrowserConfiguration ff(final String defaultValue) {
105 return new FF(defaultValue);
106 }
107
108 static BrowserConfiguration ffNotIterable(final String defaultValue) {
109 return new FFNotIterable(defaultValue);
110 }
111
112 static BrowserConfiguration ffLatest(final String defaultValue) {
113 return new FFLatest(defaultValue);
114 }
115
116 static BrowserConfiguration ffEsr(final String defaultValue) {
117 return new FFESR(defaultValue);
118 }
119
120 static class ChromeAndEdgeNotIterable extends BrowserConfiguration {
121 ChromeAndEdgeNotIterable(final String defaultValue) {
122 super(defaultValue);
123 }
124
125 @Override
126 public boolean matches(final BrowserVersion browserVersion) {
127 return browserVersion.isChrome() || browserVersion.isEdge();
128 }
129
130 @Override
131 public boolean isIterable() {
132 return false;
133 }
134 }
135
136 private static class Chrome extends BrowserConfiguration {
137 Chrome(final String defaultValue) {
138 super(defaultValue);
139 }
140
141 @Override
142 public boolean matches(final BrowserVersion browserVersion) {
143 return browserVersion.isChrome();
144 }
145 }
146
147 private static class Edge extends BrowserConfiguration {
148 Edge(final String defaultValue) {
149 super(defaultValue);
150 }
151
152 @Override
153 public boolean matches(final BrowserVersion browserVersion) {
154 return browserVersion.isEdge();
155 }
156 }
157
158 private static class ChromeAndEdge extends BrowserConfiguration {
159 ChromeAndEdge(final String defaultValue) {
160 super(defaultValue);
161 }
162
163 @Override
164 public boolean matches(final BrowserVersion browserVersion) {
165 return browserVersion.isChrome() || browserVersion.isEdge();
166 }
167 }
168
169 private static class ChromeAndEdgeAndFirefox extends BrowserConfiguration {
170 ChromeAndEdgeAndFirefox(final String defaultValue) {
171 super(defaultValue);
172 }
173
174 @Override
175 public boolean matches(final BrowserVersion browserVersion) {
176 return browserVersion.isChrome()
177 || browserVersion.isEdge()
178 || browserVersion.isFirefox();
179 }
180 }
181
182 private static class FF extends BrowserConfiguration {
183 FF(final String defaultValue) {
184 super(defaultValue);
185 }
186
187 @Override
188 public boolean matches(final BrowserVersion browserVersion) {
189 return browserVersion.isFirefox();
190 }
191 }
192
193 private static class FFNotIterable extends BrowserConfiguration {
194 FFNotIterable(final String defaultValue) {
195 super(defaultValue);
196 }
197
198 @Override
199 public boolean matches(final BrowserVersion browserVersion) {
200 return browserVersion.isFirefox();
201 }
202
203 @Override
204 public boolean isIterable() {
205 return false;
206 }
207 }
208
209 private static class FFESR extends BrowserConfiguration {
210 FFESR(final String defaultValue) {
211 super(defaultValue);
212 }
213
214 @Override
215 public boolean matches(final BrowserVersion browserVersion) {
216 return browserVersion.isFirefox()
217 && browserVersion.getBrowserVersionNumeric()
218 == BrowserVersion.FIREFOX_ESR.getBrowserVersionNumeric();
219 }
220 }
221
222 private static class FFLatest extends BrowserConfiguration {
223 FFLatest(final String defaultValue) {
224 super(defaultValue);
225 }
226
227 @Override
228 public boolean matches(final BrowserVersion browserVersion) {
229 return browserVersion.isFirefox()
230 && browserVersion.getBrowserVersionNumeric()
231 > BrowserVersion.FIREFOX_ESR.getBrowserVersionNumeric();
232 }
233 }
234 }