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 ffAuto() {
97 return new FF("auto");
98 }
99
100 static BrowserConfiguration ffNone() {
101 return new FF("none");
102 }
103
104 static BrowserConfiguration ffNormal() {
105 return new FF("normal");
106 }
107
108 static BrowserConfiguration ff(final String defaultValue) {
109 return new FF(defaultValue);
110 }
111
112 static BrowserConfiguration ffNotIterable(final String defaultValue) {
113 return new FFNotIterable(defaultValue);
114 }
115
116 static BrowserConfiguration ffLatest(final String defaultValue) {
117 return new FFLatest(defaultValue);
118 }
119
120 static BrowserConfiguration ffEsr(final String defaultValue) {
121 return new FFESR(defaultValue);
122 }
123
124 static class ChromeAndEdgeNotIterable extends BrowserConfiguration {
125 ChromeAndEdgeNotIterable(final String defaultValue) {
126 super(defaultValue);
127 }
128
129 @Override
130 public boolean matches(final BrowserVersion browserVersion) {
131 return browserVersion.isChrome() || browserVersion.isEdge();
132 }
133
134 @Override
135 public boolean isIterable() {
136 return false;
137 }
138 }
139
140 private static class Chrome extends BrowserConfiguration {
141 Chrome(final String defaultValue) {
142 super(defaultValue);
143 }
144
145 @Override
146 public boolean matches(final BrowserVersion browserVersion) {
147 return browserVersion.isChrome();
148 }
149 }
150
151 private static class Edge extends BrowserConfiguration {
152 Edge(final String defaultValue) {
153 super(defaultValue);
154 }
155
156 @Override
157 public boolean matches(final BrowserVersion browserVersion) {
158 return browserVersion.isEdge();
159 }
160 }
161
162 private static class ChromeAndEdge extends BrowserConfiguration {
163 ChromeAndEdge(final String defaultValue) {
164 super(defaultValue);
165 }
166
167 @Override
168 public boolean matches(final BrowserVersion browserVersion) {
169 return browserVersion.isChrome() || browserVersion.isEdge();
170 }
171 }
172
173 private static class ChromeAndEdgeAndFirefox extends BrowserConfiguration {
174 ChromeAndEdgeAndFirefox(final String defaultValue) {
175 super(defaultValue);
176 }
177
178 @Override
179 public boolean matches(final BrowserVersion browserVersion) {
180 return browserVersion.isChrome()
181 || browserVersion.isEdge()
182 || browserVersion.isFirefox();
183 }
184 }
185
186 private static class FF extends BrowserConfiguration {
187 FF(final String defaultValue) {
188 super(defaultValue);
189 }
190
191 @Override
192 public boolean matches(final BrowserVersion browserVersion) {
193 return browserVersion.isFirefox();
194 }
195 }
196
197 private static class FFNotIterable extends BrowserConfiguration {
198 FFNotIterable(final String defaultValue) {
199 super(defaultValue);
200 }
201
202 @Override
203 public boolean matches(final BrowserVersion browserVersion) {
204 return browserVersion.isFirefox();
205 }
206
207 @Override
208 public boolean isIterable() {
209 return false;
210 }
211 }
212
213 private static class FFESR extends BrowserConfiguration {
214 FFESR(final String defaultValue) {
215 super(defaultValue);
216 }
217
218 @Override
219 public boolean matches(final BrowserVersion browserVersion) {
220 return browserVersion.isFirefox()
221 && browserVersion.getBrowserVersionNumeric()
222 == BrowserVersion.FIREFOX_ESR.getBrowserVersionNumeric();
223 }
224 }
225
226 private static class FFLatest extends BrowserConfiguration {
227 FFLatest(final String defaultValue) {
228 super(defaultValue);
229 }
230
231 @Override
232 public boolean matches(final BrowserVersion browserVersion) {
233 return browserVersion.isFirefox()
234 && browserVersion.getBrowserVersionNumeric()
235 > BrowserVersion.FIREFOX_ESR.getBrowserVersionNumeric();
236 }
237 }
238 }