001package Torello.Browser;
002
003import java.util.*;
004import javax.json.*;
005import javax.json.stream.*;
006import java.io.*;
007
008import java.lang.reflect.Method;
009import java.lang.reflect.Parameter;
010import java.util.function.Function;
011
012import Torello.Java.Additional.*;
013import Torello.Java.JSON.*;
014
015import static Torello.Java.JSON.JFlag.*;
016
017import Torello.Java.StrCmpr;
018import Torello.JavaDoc.StaticFunctional;
019import Torello.JavaDoc.JDHeaderBackgroundImg;
020import Torello.JavaDoc.Excuse;
021
022/**
023 * <SPAN CLASS=COPIEDJDK><B>This domain provides various functionality related to drawing atop the inspected page.</B></SPAN>
024 * 
025 * <EMBED CLASS='external-html' DATA-FILE-ID=CODE_GEN_NOTE>
026 */
027@StaticFunctional(Excused={"counter"}, Excuses={Excuse.CONFIGURATION})
028@JDHeaderBackgroundImg(EmbedTagFileID="WOOD_PLANK_NOTE")
029public class Overlay
030{
031    // ********************************************************************************************
032    // ********************************************************************************************
033    // Class Header Stuff
034    // ********************************************************************************************
035    // ********************************************************************************************
036
037
038    // No Pubic Constructors
039    private Overlay () { }
040
041    // These two Vector's are used by all the "Methods" exported by this class.  java.lang.reflect
042    // is used to generate the JSON String's.  It saves thousands of lines of Auto-Generated Code.
043    private static final Map<String, Vector<String>>    parameterNames = new HashMap<>();
044    private static final Map<String, Vector<Class<?>>>  parameterTypes = new HashMap<>();
045
046    // Some Methods do not take any parameters - for instance all the "enable()" and "disable()"
047    // I simply could not get ride of RAW-TYPES and UNCHECKED warnings... so there are now,
048    // offically, two empty-vectors.  One for String's, and the other for Classes.
049
050    private static final Vector<String>     EMPTY_VEC_STR = new Vector<>();
051    private static final Vector<Class<?>>   EMPTY_VEC_CLASS = new Vector<>();
052
053    static
054    {
055        for (Method m : Overlay.class.getMethods())
056        {
057            // This doesn't work!  The parameter names are all "arg0" ... "argN"
058            // It works for java.lang.reflect.Field, BUT NOT java.lang.reflect.Parameter!
059            //
060            // Vector<String> parameterNamesList = new Vector<>(); -- NOPE!
061
062            Vector<Class<?>> parameterTypesList = new Vector<>();
063        
064            for (Parameter p : m.getParameters()) parameterTypesList.add(p.getType());
065
066            parameterTypes.put(
067                m.getName(),
068                (parameterTypesList.size() > 0) ? parameterTypesList : EMPTY_VEC_CLASS
069            );
070        }
071    }
072
073    static
074    {
075        Vector<String> v = null;
076
077        parameterNames.put("disable", EMPTY_VEC_STR);
078
079        parameterNames.put("enable", EMPTY_VEC_STR);
080
081        v = new Vector<String>(5);
082        parameterNames.put("getHighlightObjectForTest", v);
083        Collections.addAll(v, new String[]
084        { "nodeId", "includeDistance", "includeStyle", "colorFormat", "showAccessibilityInfo", });
085
086        v = new Vector<String>(1);
087        parameterNames.put("getGridHighlightObjectsForTest", v);
088        Collections.addAll(v, new String[]
089        { "nodeIds", });
090
091        v = new Vector<String>(1);
092        parameterNames.put("getSourceOrderHighlightObjectForTest", v);
093        Collections.addAll(v, new String[]
094        { "nodeId", });
095
096        parameterNames.put("hideHighlight", EMPTY_VEC_STR);
097
098        v = new Vector<String>(3);
099        parameterNames.put("highlightFrame", v);
100        Collections.addAll(v, new String[]
101        { "frameId", "contentColor", "contentOutlineColor", });
102
103        v = new Vector<String>(5);
104        parameterNames.put("highlightNode", v);
105        Collections.addAll(v, new String[]
106        { "highlightConfig", "nodeId", "backendNodeId", "objectId", "selector", });
107
108        v = new Vector<String>(3);
109        parameterNames.put("highlightQuad", v);
110        Collections.addAll(v, new String[]
111        { "quad", "color", "outlineColor", });
112
113        v = new Vector<String>(6);
114        parameterNames.put("highlightRect", v);
115        Collections.addAll(v, new String[]
116        { "x", "y", "width", "height", "color", "outlineColor", });
117
118        v = new Vector<String>(4);
119        parameterNames.put("highlightSourceOrder", v);
120        Collections.addAll(v, new String[]
121        { "sourceOrderConfig", "nodeId", "backendNodeId", "objectId", });
122
123        v = new Vector<String>(2);
124        parameterNames.put("setInspectMode", v);
125        Collections.addAll(v, new String[]
126        { "mode", "highlightConfig", });
127
128        v = new Vector<String>(1);
129        parameterNames.put("setShowAdHighlights", v);
130        Collections.addAll(v, new String[]
131        { "show", });
132
133        v = new Vector<String>(1);
134        parameterNames.put("setPausedInDebuggerMessage", v);
135        Collections.addAll(v, new String[]
136        { "message", });
137
138        v = new Vector<String>(1);
139        parameterNames.put("setShowDebugBorders", v);
140        Collections.addAll(v, new String[]
141        { "show", });
142
143        v = new Vector<String>(1);
144        parameterNames.put("setShowFPSCounter", v);
145        Collections.addAll(v, new String[]
146        { "show", });
147
148        v = new Vector<String>(1);
149        parameterNames.put("setShowGridOverlays", v);
150        Collections.addAll(v, new String[]
151        { "gridNodeHighlightConfigs", });
152
153        v = new Vector<String>(1);
154        parameterNames.put("setShowFlexOverlays", v);
155        Collections.addAll(v, new String[]
156        { "flexNodeHighlightConfigs", });
157
158        v = new Vector<String>(1);
159        parameterNames.put("setShowScrollSnapOverlays", v);
160        Collections.addAll(v, new String[]
161        { "scrollSnapHighlightConfigs", });
162
163        v = new Vector<String>(1);
164        parameterNames.put("setShowContainerQueryOverlays", v);
165        Collections.addAll(v, new String[]
166        { "containerQueryHighlightConfigs", });
167
168        v = new Vector<String>(1);
169        parameterNames.put("setShowPaintRects", v);
170        Collections.addAll(v, new String[]
171        { "result", });
172
173        v = new Vector<String>(1);
174        parameterNames.put("setShowLayoutShiftRegions", v);
175        Collections.addAll(v, new String[]
176        { "result", });
177
178        v = new Vector<String>(1);
179        parameterNames.put("setShowScrollBottleneckRects", v);
180        Collections.addAll(v, new String[]
181        { "show", });
182
183        v = new Vector<String>(1);
184        parameterNames.put("setShowHitTestBorders", v);
185        Collections.addAll(v, new String[]
186        { "show", });
187
188        v = new Vector<String>(1);
189        parameterNames.put("setShowWebVitals", v);
190        Collections.addAll(v, new String[]
191        { "show", });
192
193        v = new Vector<String>(1);
194        parameterNames.put("setShowViewportSizeOnResize", v);
195        Collections.addAll(v, new String[]
196        { "show", });
197
198        v = new Vector<String>(1);
199        parameterNames.put("setShowHinge", v);
200        Collections.addAll(v, new String[]
201        { "hingeConfig", });
202
203        v = new Vector<String>(1);
204        parameterNames.put("setShowIsolatedElements", v);
205        Collections.addAll(v, new String[]
206        { "isolatedElementHighlightConfigs", });
207    }
208
209
210    // ********************************************************************************************
211    // ********************************************************************************************
212    // Types - Static Inner Classes
213    // ********************************************************************************************
214    // ********************************************************************************************
215
216    /** <CODE>[No Description Provided by Google]</CODE> */
217    public static final String[] ContrastAlgorithm =
218    { "aa", "aaa", "apca", };
219    
220    /** <CODE>[No Description Provided by Google]</CODE> */
221    public static final String[] ColorFormat =
222    { "rgb", "hsl", "hex", };
223    
224    /** <CODE>[No Description Provided by Google]</CODE> */
225    public static final String[] InspectMode =
226    { 
227        "searchForNode", "searchForUAShadowDOM", "captureAreaScreenshot", "showDistances", "none", 
228    };
229    
230    /** Configuration data for drawing the source order of an elements children. */
231    public static class SourceOrderConfig
232        extends BaseType
233        implements java.io.Serializable
234    {
235        /** For Object Serialization.  java.io.Serializable */
236        protected static final long serialVersionUID = 1;
237        
238        public boolean[] optionals()
239        { return new boolean[] { false, false, }; }
240        
241        /** the color to outline the givent element in. */
242        public final DOM.RGBA parentOutlineColor;
243        
244        /** the color to outline the child elements in. */
245        public final DOM.RGBA childOutlineColor;
246        
247        /**
248         * Constructor
249         *
250         * @param parentOutlineColor the color to outline the givent element in.
251         * 
252         * @param childOutlineColor the color to outline the child elements in.
253         */
254        public SourceOrderConfig(DOM.RGBA parentOutlineColor, DOM.RGBA childOutlineColor)
255        {
256            // Exception-Check(s) to ensure that if any parameters which are not declared as
257            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
258            
259            if (parentOutlineColor == null) THROWS.throwNPE("parentOutlineColor");
260            if (childOutlineColor == null)  THROWS.throwNPE("childOutlineColor");
261            
262            this.parentOutlineColor  = parentOutlineColor;
263            this.childOutlineColor   = childOutlineColor;
264        }
265        
266        /**
267         * JSON Object Constructor
268         * @param jo A Json-Object having data about an instance of {@code 'SourceOrderConfig'}.
269         */
270        public SourceOrderConfig (JsonObject jo)
271        {
272            this.parentOutlineColor  = ReadJSON.getObject(jo, "parentOutlineColor", DOM.RGBA.class, false, true);
273            this.childOutlineColor   = ReadJSON.getObject(jo, "childOutlineColor", DOM.RGBA.class, false, true);
274        }
275        
276        
277        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
278        public boolean equals(Object other)
279        {
280            if (this == other)                       return true;
281            if (other == null)                       return false;
282            if (other.getClass() != this.getClass()) return false;
283        
284            SourceOrderConfig o = (SourceOrderConfig) other;
285        
286            return
287                    Objects.equals(this.parentOutlineColor, o.parentOutlineColor)
288                &&  Objects.equals(this.childOutlineColor, o.childOutlineColor);
289        }
290        
291        /** Generates a Hash-Code for {@code 'this'} instance */
292        public int hashCode()
293        {
294            return
295                    this.parentOutlineColor.hashCode()
296                +   this.childOutlineColor.hashCode();
297        }
298    }
299    
300    /** Configuration data for the highlighting of Grid elements. */
301    public static class GridHighlightConfig
302        extends BaseType
303        implements java.io.Serializable
304    {
305        /** For Object Serialization.  java.io.Serializable */
306        protected static final long serialVersionUID = 1;
307        
308        public boolean[] optionals()
309        { return new boolean[] { true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, }; }
310        
311        /**
312         * Whether the extension lines from grid cells to the rulers should be shown (default: false).
313         * <BR />
314         * <BR /><B>OPTIONAL</B>
315         */
316        public final Boolean showGridExtensionLines;
317        
318        /**
319         * Show Positive line number labels (default: false).
320         * <BR />
321         * <BR /><B>OPTIONAL</B>
322         */
323        public final Boolean showPositiveLineNumbers;
324        
325        /**
326         * Show Negative line number labels (default: false).
327         * <BR />
328         * <BR /><B>OPTIONAL</B>
329         */
330        public final Boolean showNegativeLineNumbers;
331        
332        /**
333         * Show area name labels (default: false).
334         * <BR />
335         * <BR /><B>OPTIONAL</B>
336         */
337        public final Boolean showAreaNames;
338        
339        /**
340         * Show line name labels (default: false).
341         * <BR />
342         * <BR /><B>OPTIONAL</B>
343         */
344        public final Boolean showLineNames;
345        
346        /**
347         * Show track size labels (default: false).
348         * <BR />
349         * <BR /><B>OPTIONAL</B>
350         */
351        public final Boolean showTrackSizes;
352        
353        /**
354         * The grid container border highlight color (default: transparent).
355         * <BR />
356         * <BR /><B>OPTIONAL</B>
357         */
358        public final DOM.RGBA gridBorderColor;
359        
360        /**
361         * The cell border color (default: transparent). Deprecated, please use rowLineColor and columnLineColor instead.
362         * <BR />
363         * <BR /><B>OPTIONAL</B>
364         * <BR /><B>DEPRECATED</B>
365         */
366        public final DOM.RGBA cellBorderColor;
367        
368        /**
369         * The row line color (default: transparent).
370         * <BR />
371         * <BR /><B>OPTIONAL</B>
372         */
373        public final DOM.RGBA rowLineColor;
374        
375        /**
376         * The column line color (default: transparent).
377         * <BR />
378         * <BR /><B>OPTIONAL</B>
379         */
380        public final DOM.RGBA columnLineColor;
381        
382        /**
383         * Whether the grid border is dashed (default: false).
384         * <BR />
385         * <BR /><B>OPTIONAL</B>
386         */
387        public final Boolean gridBorderDash;
388        
389        /**
390         * Whether the cell border is dashed (default: false). Deprecated, please us rowLineDash and columnLineDash instead.
391         * <BR />
392         * <BR /><B>OPTIONAL</B>
393         * <BR /><B>DEPRECATED</B>
394         */
395        public final Boolean cellBorderDash;
396        
397        /**
398         * Whether row lines are dashed (default: false).
399         * <BR />
400         * <BR /><B>OPTIONAL</B>
401         */
402        public final Boolean rowLineDash;
403        
404        /**
405         * Whether column lines are dashed (default: false).
406         * <BR />
407         * <BR /><B>OPTIONAL</B>
408         */
409        public final Boolean columnLineDash;
410        
411        /**
412         * The row gap highlight fill color (default: transparent).
413         * <BR />
414         * <BR /><B>OPTIONAL</B>
415         */
416        public final DOM.RGBA rowGapColor;
417        
418        /**
419         * The row gap hatching fill color (default: transparent).
420         * <BR />
421         * <BR /><B>OPTIONAL</B>
422         */
423        public final DOM.RGBA rowHatchColor;
424        
425        /**
426         * The column gap highlight fill color (default: transparent).
427         * <BR />
428         * <BR /><B>OPTIONAL</B>
429         */
430        public final DOM.RGBA columnGapColor;
431        
432        /**
433         * The column gap hatching fill color (default: transparent).
434         * <BR />
435         * <BR /><B>OPTIONAL</B>
436         */
437        public final DOM.RGBA columnHatchColor;
438        
439        /**
440         * The named grid areas border color (Default: transparent).
441         * <BR />
442         * <BR /><B>OPTIONAL</B>
443         */
444        public final DOM.RGBA areaBorderColor;
445        
446        /**
447         * The grid container background color (Default: transparent).
448         * <BR />
449         * <BR /><B>OPTIONAL</B>
450         */
451        public final DOM.RGBA gridBackgroundColor;
452        
453        /**
454         * Constructor
455         *
456         * @param showGridExtensionLines Whether the extension lines from grid cells to the rulers should be shown (default: false).
457         * <BR /><B>OPTIONAL</B>
458         * 
459         * @param showPositiveLineNumbers Show Positive line number labels (default: false).
460         * <BR /><B>OPTIONAL</B>
461         * 
462         * @param showNegativeLineNumbers Show Negative line number labels (default: false).
463         * <BR /><B>OPTIONAL</B>
464         * 
465         * @param showAreaNames Show area name labels (default: false).
466         * <BR /><B>OPTIONAL</B>
467         * 
468         * @param showLineNames Show line name labels (default: false).
469         * <BR /><B>OPTIONAL</B>
470         * 
471         * @param showTrackSizes Show track size labels (default: false).
472         * <BR /><B>OPTIONAL</B>
473         * 
474         * @param gridBorderColor The grid container border highlight color (default: transparent).
475         * <BR /><B>OPTIONAL</B>
476         * 
477         * @param cellBorderColor The cell border color (default: transparent). Deprecated, please use rowLineColor and columnLineColor instead.
478         * <BR /><B>OPTIONAL</B>
479         * <BR /><B>DEPRECATED</B>
480         * 
481         * @param rowLineColor The row line color (default: transparent).
482         * <BR /><B>OPTIONAL</B>
483         * 
484         * @param columnLineColor The column line color (default: transparent).
485         * <BR /><B>OPTIONAL</B>
486         * 
487         * @param gridBorderDash Whether the grid border is dashed (default: false).
488         * <BR /><B>OPTIONAL</B>
489         * 
490         * @param cellBorderDash Whether the cell border is dashed (default: false). Deprecated, please us rowLineDash and columnLineDash instead.
491         * <BR /><B>OPTIONAL</B>
492         * <BR /><B>DEPRECATED</B>
493         * 
494         * @param rowLineDash Whether row lines are dashed (default: false).
495         * <BR /><B>OPTIONAL</B>
496         * 
497         * @param columnLineDash Whether column lines are dashed (default: false).
498         * <BR /><B>OPTIONAL</B>
499         * 
500         * @param rowGapColor The row gap highlight fill color (default: transparent).
501         * <BR /><B>OPTIONAL</B>
502         * 
503         * @param rowHatchColor The row gap hatching fill color (default: transparent).
504         * <BR /><B>OPTIONAL</B>
505         * 
506         * @param columnGapColor The column gap highlight fill color (default: transparent).
507         * <BR /><B>OPTIONAL</B>
508         * 
509         * @param columnHatchColor The column gap hatching fill color (default: transparent).
510         * <BR /><B>OPTIONAL</B>
511         * 
512         * @param areaBorderColor The named grid areas border color (Default: transparent).
513         * <BR /><B>OPTIONAL</B>
514         * 
515         * @param gridBackgroundColor The grid container background color (Default: transparent).
516         * <BR /><B>OPTIONAL</B>
517         */
518        public GridHighlightConfig(
519                Boolean showGridExtensionLines, Boolean showPositiveLineNumbers, 
520                Boolean showNegativeLineNumbers, Boolean showAreaNames, Boolean showLineNames, 
521                Boolean showTrackSizes, DOM.RGBA gridBorderColor, DOM.RGBA cellBorderColor, 
522                DOM.RGBA rowLineColor, DOM.RGBA columnLineColor, Boolean gridBorderDash, 
523                Boolean cellBorderDash, Boolean rowLineDash, Boolean columnLineDash, 
524                DOM.RGBA rowGapColor, DOM.RGBA rowHatchColor, DOM.RGBA columnGapColor, 
525                DOM.RGBA columnHatchColor, DOM.RGBA areaBorderColor, DOM.RGBA gridBackgroundColor
526            )
527        {
528            this.showGridExtensionLines   = showGridExtensionLines;
529            this.showPositiveLineNumbers  = showPositiveLineNumbers;
530            this.showNegativeLineNumbers  = showNegativeLineNumbers;
531            this.showAreaNames            = showAreaNames;
532            this.showLineNames            = showLineNames;
533            this.showTrackSizes           = showTrackSizes;
534            this.gridBorderColor          = gridBorderColor;
535            this.cellBorderColor          = cellBorderColor;
536            this.rowLineColor             = rowLineColor;
537            this.columnLineColor          = columnLineColor;
538            this.gridBorderDash           = gridBorderDash;
539            this.cellBorderDash           = cellBorderDash;
540            this.rowLineDash              = rowLineDash;
541            this.columnLineDash           = columnLineDash;
542            this.rowGapColor              = rowGapColor;
543            this.rowHatchColor            = rowHatchColor;
544            this.columnGapColor           = columnGapColor;
545            this.columnHatchColor         = columnHatchColor;
546            this.areaBorderColor          = areaBorderColor;
547            this.gridBackgroundColor      = gridBackgroundColor;
548        }
549        
550        /**
551         * JSON Object Constructor
552         * @param jo A Json-Object having data about an instance of {@code 'GridHighlightConfig'}.
553         */
554        public GridHighlightConfig (JsonObject jo)
555        {
556            this.showGridExtensionLines   = ReadBoxedJSON.getBoolean(jo, "showGridExtensionLines", true);
557            this.showPositiveLineNumbers  = ReadBoxedJSON.getBoolean(jo, "showPositiveLineNumbers", true);
558            this.showNegativeLineNumbers  = ReadBoxedJSON.getBoolean(jo, "showNegativeLineNumbers", true);
559            this.showAreaNames            = ReadBoxedJSON.getBoolean(jo, "showAreaNames", true);
560            this.showLineNames            = ReadBoxedJSON.getBoolean(jo, "showLineNames", true);
561            this.showTrackSizes           = ReadBoxedJSON.getBoolean(jo, "showTrackSizes", true);
562            this.gridBorderColor          = ReadJSON.getObject(jo, "gridBorderColor", DOM.RGBA.class, true, false);
563            this.cellBorderColor          = ReadJSON.getObject(jo, "cellBorderColor", DOM.RGBA.class, true, false);
564            this.rowLineColor             = ReadJSON.getObject(jo, "rowLineColor", DOM.RGBA.class, true, false);
565            this.columnLineColor          = ReadJSON.getObject(jo, "columnLineColor", DOM.RGBA.class, true, false);
566            this.gridBorderDash           = ReadBoxedJSON.getBoolean(jo, "gridBorderDash", true);
567            this.cellBorderDash           = ReadBoxedJSON.getBoolean(jo, "cellBorderDash", true);
568            this.rowLineDash              = ReadBoxedJSON.getBoolean(jo, "rowLineDash", true);
569            this.columnLineDash           = ReadBoxedJSON.getBoolean(jo, "columnLineDash", true);
570            this.rowGapColor              = ReadJSON.getObject(jo, "rowGapColor", DOM.RGBA.class, true, false);
571            this.rowHatchColor            = ReadJSON.getObject(jo, "rowHatchColor", DOM.RGBA.class, true, false);
572            this.columnGapColor           = ReadJSON.getObject(jo, "columnGapColor", DOM.RGBA.class, true, false);
573            this.columnHatchColor         = ReadJSON.getObject(jo, "columnHatchColor", DOM.RGBA.class, true, false);
574            this.areaBorderColor          = ReadJSON.getObject(jo, "areaBorderColor", DOM.RGBA.class, true, false);
575            this.gridBackgroundColor      = ReadJSON.getObject(jo, "gridBackgroundColor", DOM.RGBA.class, true, false);
576        }
577        
578        
579        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
580        public boolean equals(Object other)
581        {
582            if (this == other)                       return true;
583            if (other == null)                       return false;
584            if (other.getClass() != this.getClass()) return false;
585        
586            GridHighlightConfig o = (GridHighlightConfig) other;
587        
588            return
589                    Objects.equals(this.showGridExtensionLines, o.showGridExtensionLines)
590                &&  Objects.equals(this.showPositiveLineNumbers, o.showPositiveLineNumbers)
591                &&  Objects.equals(this.showNegativeLineNumbers, o.showNegativeLineNumbers)
592                &&  Objects.equals(this.showAreaNames, o.showAreaNames)
593                &&  Objects.equals(this.showLineNames, o.showLineNames)
594                &&  Objects.equals(this.showTrackSizes, o.showTrackSizes)
595                &&  Objects.equals(this.gridBorderColor, o.gridBorderColor)
596                &&  Objects.equals(this.cellBorderColor, o.cellBorderColor)
597                &&  Objects.equals(this.rowLineColor, o.rowLineColor)
598                &&  Objects.equals(this.columnLineColor, o.columnLineColor)
599                &&  Objects.equals(this.gridBorderDash, o.gridBorderDash)
600                &&  Objects.equals(this.cellBorderDash, o.cellBorderDash)
601                &&  Objects.equals(this.rowLineDash, o.rowLineDash)
602                &&  Objects.equals(this.columnLineDash, o.columnLineDash)
603                &&  Objects.equals(this.rowGapColor, o.rowGapColor)
604                &&  Objects.equals(this.rowHatchColor, o.rowHatchColor)
605                &&  Objects.equals(this.columnGapColor, o.columnGapColor)
606                &&  Objects.equals(this.columnHatchColor, o.columnHatchColor)
607                &&  Objects.equals(this.areaBorderColor, o.areaBorderColor)
608                &&  Objects.equals(this.gridBackgroundColor, o.gridBackgroundColor);
609        }
610        
611        /** Generates a Hash-Code for {@code 'this'} instance */
612        public int hashCode()
613        {
614            return
615                    Objects.hashCode(this.showGridExtensionLines)
616                +   Objects.hashCode(this.showPositiveLineNumbers)
617                +   Objects.hashCode(this.showNegativeLineNumbers)
618                +   Objects.hashCode(this.showAreaNames)
619                +   Objects.hashCode(this.showLineNames)
620                +   Objects.hashCode(this.showTrackSizes)
621                +   this.gridBorderColor.hashCode()
622                +   this.cellBorderColor.hashCode()
623                +   this.rowLineColor.hashCode()
624                +   this.columnLineColor.hashCode()
625                +   Objects.hashCode(this.gridBorderDash)
626                +   Objects.hashCode(this.cellBorderDash)
627                +   Objects.hashCode(this.rowLineDash)
628                +   Objects.hashCode(this.columnLineDash)
629                +   this.rowGapColor.hashCode()
630                +   this.rowHatchColor.hashCode()
631                +   this.columnGapColor.hashCode()
632                +   this.columnHatchColor.hashCode()
633                +   this.areaBorderColor.hashCode()
634                +   this.gridBackgroundColor.hashCode();
635        }
636    }
637    
638    /** Configuration data for the highlighting of Flex container elements. */
639    public static class FlexContainerHighlightConfig
640        extends BaseType
641        implements java.io.Serializable
642    {
643        /** For Object Serialization.  java.io.Serializable */
644        protected static final long serialVersionUID = 1;
645        
646        public boolean[] optionals()
647        { return new boolean[] { true, true, true, true, true, true, true, true, }; }
648        
649        /**
650         * The style of the container border
651         * <BR />
652         * <BR /><B>OPTIONAL</B>
653         */
654        public final Overlay.LineStyle containerBorder;
655        
656        /**
657         * The style of the separator between lines
658         * <BR />
659         * <BR /><B>OPTIONAL</B>
660         */
661        public final Overlay.LineStyle lineSeparator;
662        
663        /**
664         * The style of the separator between items
665         * <BR />
666         * <BR /><B>OPTIONAL</B>
667         */
668        public final Overlay.LineStyle itemSeparator;
669        
670        /**
671         * Style of content-distribution space on the main axis (justify-content).
672         * <BR />
673         * <BR /><B>OPTIONAL</B>
674         */
675        public final Overlay.BoxStyle mainDistributedSpace;
676        
677        /**
678         * Style of content-distribution space on the cross axis (align-content).
679         * <BR />
680         * <BR /><B>OPTIONAL</B>
681         */
682        public final Overlay.BoxStyle crossDistributedSpace;
683        
684        /**
685         * Style of empty space caused by row gaps (gap/row-gap).
686         * <BR />
687         * <BR /><B>OPTIONAL</B>
688         */
689        public final Overlay.BoxStyle rowGapSpace;
690        
691        /**
692         * Style of empty space caused by columns gaps (gap/column-gap).
693         * <BR />
694         * <BR /><B>OPTIONAL</B>
695         */
696        public final Overlay.BoxStyle columnGapSpace;
697        
698        /**
699         * Style of the self-alignment line (align-items).
700         * <BR />
701         * <BR /><B>OPTIONAL</B>
702         */
703        public final Overlay.LineStyle crossAlignment;
704        
705        /**
706         * Constructor
707         *
708         * @param containerBorder The style of the container border
709         * <BR /><B>OPTIONAL</B>
710         * 
711         * @param lineSeparator The style of the separator between lines
712         * <BR /><B>OPTIONAL</B>
713         * 
714         * @param itemSeparator The style of the separator between items
715         * <BR /><B>OPTIONAL</B>
716         * 
717         * @param mainDistributedSpace Style of content-distribution space on the main axis (justify-content).
718         * <BR /><B>OPTIONAL</B>
719         * 
720         * @param crossDistributedSpace Style of content-distribution space on the cross axis (align-content).
721         * <BR /><B>OPTIONAL</B>
722         * 
723         * @param rowGapSpace Style of empty space caused by row gaps (gap/row-gap).
724         * <BR /><B>OPTIONAL</B>
725         * 
726         * @param columnGapSpace Style of empty space caused by columns gaps (gap/column-gap).
727         * <BR /><B>OPTIONAL</B>
728         * 
729         * @param crossAlignment Style of the self-alignment line (align-items).
730         * <BR /><B>OPTIONAL</B>
731         */
732        public FlexContainerHighlightConfig(
733                Overlay.LineStyle containerBorder, Overlay.LineStyle lineSeparator, 
734                Overlay.LineStyle itemSeparator, Overlay.BoxStyle mainDistributedSpace, 
735                Overlay.BoxStyle crossDistributedSpace, Overlay.BoxStyle rowGapSpace, 
736                Overlay.BoxStyle columnGapSpace, Overlay.LineStyle crossAlignment
737            )
738        {
739            this.containerBorder        = containerBorder;
740            this.lineSeparator          = lineSeparator;
741            this.itemSeparator          = itemSeparator;
742            this.mainDistributedSpace   = mainDistributedSpace;
743            this.crossDistributedSpace  = crossDistributedSpace;
744            this.rowGapSpace            = rowGapSpace;
745            this.columnGapSpace         = columnGapSpace;
746            this.crossAlignment         = crossAlignment;
747        }
748        
749        /**
750         * JSON Object Constructor
751         * @param jo A Json-Object having data about an instance of {@code 'FlexContainerHighlightConfig'}.
752         */
753        public FlexContainerHighlightConfig (JsonObject jo)
754        {
755            this.containerBorder        = ReadJSON.getObject(jo, "containerBorder", Overlay.LineStyle.class, true, false);
756            this.lineSeparator          = ReadJSON.getObject(jo, "lineSeparator", Overlay.LineStyle.class, true, false);
757            this.itemSeparator          = ReadJSON.getObject(jo, "itemSeparator", Overlay.LineStyle.class, true, false);
758            this.mainDistributedSpace   = ReadJSON.getObject(jo, "mainDistributedSpace", Overlay.BoxStyle.class, true, false);
759            this.crossDistributedSpace  = ReadJSON.getObject(jo, "crossDistributedSpace", Overlay.BoxStyle.class, true, false);
760            this.rowGapSpace            = ReadJSON.getObject(jo, "rowGapSpace", Overlay.BoxStyle.class, true, false);
761            this.columnGapSpace         = ReadJSON.getObject(jo, "columnGapSpace", Overlay.BoxStyle.class, true, false);
762            this.crossAlignment         = ReadJSON.getObject(jo, "crossAlignment", Overlay.LineStyle.class, true, false);
763        }
764        
765        
766        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
767        public boolean equals(Object other)
768        {
769            if (this == other)                       return true;
770            if (other == null)                       return false;
771            if (other.getClass() != this.getClass()) return false;
772        
773            FlexContainerHighlightConfig o = (FlexContainerHighlightConfig) other;
774        
775            return
776                    Objects.equals(this.containerBorder, o.containerBorder)
777                &&  Objects.equals(this.lineSeparator, o.lineSeparator)
778                &&  Objects.equals(this.itemSeparator, o.itemSeparator)
779                &&  Objects.equals(this.mainDistributedSpace, o.mainDistributedSpace)
780                &&  Objects.equals(this.crossDistributedSpace, o.crossDistributedSpace)
781                &&  Objects.equals(this.rowGapSpace, o.rowGapSpace)
782                &&  Objects.equals(this.columnGapSpace, o.columnGapSpace)
783                &&  Objects.equals(this.crossAlignment, o.crossAlignment);
784        }
785        
786        /** Generates a Hash-Code for {@code 'this'} instance */
787        public int hashCode()
788        {
789            return
790                    this.containerBorder.hashCode()
791                +   this.lineSeparator.hashCode()
792                +   this.itemSeparator.hashCode()
793                +   this.mainDistributedSpace.hashCode()
794                +   this.crossDistributedSpace.hashCode()
795                +   this.rowGapSpace.hashCode()
796                +   this.columnGapSpace.hashCode()
797                +   this.crossAlignment.hashCode();
798        }
799    }
800    
801    /** Configuration data for the highlighting of Flex item elements. */
802    public static class FlexItemHighlightConfig
803        extends BaseType
804        implements java.io.Serializable
805    {
806        /** For Object Serialization.  java.io.Serializable */
807        protected static final long serialVersionUID = 1;
808        
809        public boolean[] optionals()
810        { return new boolean[] { true, true, true, }; }
811        
812        /**
813         * Style of the box representing the item's base size
814         * <BR />
815         * <BR /><B>OPTIONAL</B>
816         */
817        public final Overlay.BoxStyle baseSizeBox;
818        
819        /**
820         * Style of the border around the box representing the item's base size
821         * <BR />
822         * <BR /><B>OPTIONAL</B>
823         */
824        public final Overlay.LineStyle baseSizeBorder;
825        
826        /**
827         * Style of the arrow representing if the item grew or shrank
828         * <BR />
829         * <BR /><B>OPTIONAL</B>
830         */
831        public final Overlay.LineStyle flexibilityArrow;
832        
833        /**
834         * Constructor
835         *
836         * @param baseSizeBox Style of the box representing the item's base size
837         * <BR /><B>OPTIONAL</B>
838         * 
839         * @param baseSizeBorder Style of the border around the box representing the item's base size
840         * <BR /><B>OPTIONAL</B>
841         * 
842         * @param flexibilityArrow Style of the arrow representing if the item grew or shrank
843         * <BR /><B>OPTIONAL</B>
844         */
845        public FlexItemHighlightConfig(
846                Overlay.BoxStyle baseSizeBox, Overlay.LineStyle baseSizeBorder, 
847                Overlay.LineStyle flexibilityArrow
848            )
849        {
850            this.baseSizeBox       = baseSizeBox;
851            this.baseSizeBorder    = baseSizeBorder;
852            this.flexibilityArrow  = flexibilityArrow;
853        }
854        
855        /**
856         * JSON Object Constructor
857         * @param jo A Json-Object having data about an instance of {@code 'FlexItemHighlightConfig'}.
858         */
859        public FlexItemHighlightConfig (JsonObject jo)
860        {
861            this.baseSizeBox       = ReadJSON.getObject(jo, "baseSizeBox", Overlay.BoxStyle.class, true, false);
862            this.baseSizeBorder    = ReadJSON.getObject(jo, "baseSizeBorder", Overlay.LineStyle.class, true, false);
863            this.flexibilityArrow  = ReadJSON.getObject(jo, "flexibilityArrow", Overlay.LineStyle.class, true, false);
864        }
865        
866        
867        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
868        public boolean equals(Object other)
869        {
870            if (this == other)                       return true;
871            if (other == null)                       return false;
872            if (other.getClass() != this.getClass()) return false;
873        
874            FlexItemHighlightConfig o = (FlexItemHighlightConfig) other;
875        
876            return
877                    Objects.equals(this.baseSizeBox, o.baseSizeBox)
878                &&  Objects.equals(this.baseSizeBorder, o.baseSizeBorder)
879                &&  Objects.equals(this.flexibilityArrow, o.flexibilityArrow);
880        }
881        
882        /** Generates a Hash-Code for {@code 'this'} instance */
883        public int hashCode()
884        {
885            return
886                    this.baseSizeBox.hashCode()
887                +   this.baseSizeBorder.hashCode()
888                +   this.flexibilityArrow.hashCode();
889        }
890    }
891    
892    /** Style information for drawing a line. */
893    public static class LineStyle
894        extends BaseType
895        implements java.io.Serializable
896    {
897        /** For Object Serialization.  java.io.Serializable */
898        protected static final long serialVersionUID = 1;
899        
900        public boolean[] optionals()
901        { return new boolean[] { true, true, }; }
902        
903        /**
904         * The color of the line (default: transparent)
905         * <BR />
906         * <BR /><B>OPTIONAL</B>
907         */
908        public final DOM.RGBA color;
909        
910        /**
911         * The line pattern (default: solid)
912         * <BR />
913         * <BR /><B>OPTIONAL</B>
914         */
915        public final String pattern;
916        
917        /**
918         * Constructor
919         *
920         * @param color The color of the line (default: transparent)
921         * <BR /><B>OPTIONAL</B>
922         * 
923         * @param pattern The line pattern (default: solid)
924         * <BR />Acceptable Values: ["dashed", "dotted"]
925         * <BR /><B>OPTIONAL</B>
926         */
927        public LineStyle(DOM.RGBA color, String pattern)
928        {
929            // Exception-Check(s) to ensure that if any parameters which must adhere to a
930            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
931            
932            THROWS.checkIAE(
933                "pattern", pattern,
934                "dashed", "dotted"
935            );
936            
937            this.color    = color;
938            this.pattern  = pattern;
939        }
940        
941        /**
942         * JSON Object Constructor
943         * @param jo A Json-Object having data about an instance of {@code 'LineStyle'}.
944         */
945        public LineStyle (JsonObject jo)
946        {
947            this.color    = ReadJSON.getObject(jo, "color", DOM.RGBA.class, true, false);
948            this.pattern  = ReadJSON.getString(jo, "pattern", true, false);
949        }
950        
951        
952        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
953        public boolean equals(Object other)
954        {
955            if (this == other)                       return true;
956            if (other == null)                       return false;
957            if (other.getClass() != this.getClass()) return false;
958        
959            LineStyle o = (LineStyle) other;
960        
961            return
962                    Objects.equals(this.color, o.color)
963                &&  Objects.equals(this.pattern, o.pattern);
964        }
965        
966        /** Generates a Hash-Code for {@code 'this'} instance */
967        public int hashCode()
968        {
969            return
970                    this.color.hashCode()
971                +   Objects.hashCode(this.pattern);
972        }
973    }
974    
975    /** Style information for drawing a box. */
976    public static class BoxStyle
977        extends BaseType
978        implements java.io.Serializable
979    {
980        /** For Object Serialization.  java.io.Serializable */
981        protected static final long serialVersionUID = 1;
982        
983        public boolean[] optionals()
984        { return new boolean[] { true, true, }; }
985        
986        /**
987         * The background color for the box (default: transparent)
988         * <BR />
989         * <BR /><B>OPTIONAL</B>
990         */
991        public final DOM.RGBA fillColor;
992        
993        /**
994         * The hatching color for the box (default: transparent)
995         * <BR />
996         * <BR /><B>OPTIONAL</B>
997         */
998        public final DOM.RGBA hatchColor;
999        
1000        /**
1001         * Constructor
1002         *
1003         * @param fillColor The background color for the box (default: transparent)
1004         * <BR /><B>OPTIONAL</B>
1005         * 
1006         * @param hatchColor The hatching color for the box (default: transparent)
1007         * <BR /><B>OPTIONAL</B>
1008         */
1009        public BoxStyle(DOM.RGBA fillColor, DOM.RGBA hatchColor)
1010        {
1011            this.fillColor   = fillColor;
1012            this.hatchColor  = hatchColor;
1013        }
1014        
1015        /**
1016         * JSON Object Constructor
1017         * @param jo A Json-Object having data about an instance of {@code 'BoxStyle'}.
1018         */
1019        public BoxStyle (JsonObject jo)
1020        {
1021            this.fillColor   = ReadJSON.getObject(jo, "fillColor", DOM.RGBA.class, true, false);
1022            this.hatchColor  = ReadJSON.getObject(jo, "hatchColor", DOM.RGBA.class, true, false);
1023        }
1024        
1025        
1026        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1027        public boolean equals(Object other)
1028        {
1029            if (this == other)                       return true;
1030            if (other == null)                       return false;
1031            if (other.getClass() != this.getClass()) return false;
1032        
1033            BoxStyle o = (BoxStyle) other;
1034        
1035            return
1036                    Objects.equals(this.fillColor, o.fillColor)
1037                &&  Objects.equals(this.hatchColor, o.hatchColor);
1038        }
1039        
1040        /** Generates a Hash-Code for {@code 'this'} instance */
1041        public int hashCode()
1042        {
1043            return
1044                    this.fillColor.hashCode()
1045                +   this.hatchColor.hashCode();
1046        }
1047    }
1048    
1049    /** Configuration data for the highlighting of page elements. */
1050    public static class HighlightConfig
1051        extends BaseType
1052        implements java.io.Serializable
1053    {
1054        /** For Object Serialization.  java.io.Serializable */
1055        protected static final long serialVersionUID = 1;
1056        
1057        public boolean[] optionals()
1058        { return new boolean[] { true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, }; }
1059        
1060        /**
1061         * Whether the node info tooltip should be shown (default: false).
1062         * <BR />
1063         * <BR /><B>OPTIONAL</B>
1064         */
1065        public final Boolean showInfo;
1066        
1067        /**
1068         * Whether the node styles in the tooltip (default: false).
1069         * <BR />
1070         * <BR /><B>OPTIONAL</B>
1071         */
1072        public final Boolean showStyles;
1073        
1074        /**
1075         * Whether the rulers should be shown (default: false).
1076         * <BR />
1077         * <BR /><B>OPTIONAL</B>
1078         */
1079        public final Boolean showRulers;
1080        
1081        /**
1082         * Whether the a11y info should be shown (default: true).
1083         * <BR />
1084         * <BR /><B>OPTIONAL</B>
1085         */
1086        public final Boolean showAccessibilityInfo;
1087        
1088        /**
1089         * Whether the extension lines from node to the rulers should be shown (default: false).
1090         * <BR />
1091         * <BR /><B>OPTIONAL</B>
1092         */
1093        public final Boolean showExtensionLines;
1094        
1095        /**
1096         * The content box highlight fill color (default: transparent).
1097         * <BR />
1098         * <BR /><B>OPTIONAL</B>
1099         */
1100        public final DOM.RGBA contentColor;
1101        
1102        /**
1103         * The padding highlight fill color (default: transparent).
1104         * <BR />
1105         * <BR /><B>OPTIONAL</B>
1106         */
1107        public final DOM.RGBA paddingColor;
1108        
1109        /**
1110         * The border highlight fill color (default: transparent).
1111         * <BR />
1112         * <BR /><B>OPTIONAL</B>
1113         */
1114        public final DOM.RGBA borderColor;
1115        
1116        /**
1117         * The margin highlight fill color (default: transparent).
1118         * <BR />
1119         * <BR /><B>OPTIONAL</B>
1120         */
1121        public final DOM.RGBA marginColor;
1122        
1123        /**
1124         * The event target element highlight fill color (default: transparent).
1125         * <BR />
1126         * <BR /><B>OPTIONAL</B>
1127         */
1128        public final DOM.RGBA eventTargetColor;
1129        
1130        /**
1131         * The shape outside fill color (default: transparent).
1132         * <BR />
1133         * <BR /><B>OPTIONAL</B>
1134         */
1135        public final DOM.RGBA shapeColor;
1136        
1137        /**
1138         * The shape margin fill color (default: transparent).
1139         * <BR />
1140         * <BR /><B>OPTIONAL</B>
1141         */
1142        public final DOM.RGBA shapeMarginColor;
1143        
1144        /**
1145         * The grid layout color (default: transparent).
1146         * <BR />
1147         * <BR /><B>OPTIONAL</B>
1148         */
1149        public final DOM.RGBA cssGridColor;
1150        
1151        /**
1152         * The color format used to format color styles (default: hex).
1153         * <BR />
1154         * <BR /><B>OPTIONAL</B>
1155         */
1156        public final String colorFormat;
1157        
1158        /**
1159         * The grid layout highlight configuration (default: all transparent).
1160         * <BR />
1161         * <BR /><B>OPTIONAL</B>
1162         */
1163        public final Overlay.GridHighlightConfig gridHighlightConfig;
1164        
1165        /**
1166         * The flex container highlight configuration (default: all transparent).
1167         * <BR />
1168         * <BR /><B>OPTIONAL</B>
1169         */
1170        public final Overlay.FlexContainerHighlightConfig flexContainerHighlightConfig;
1171        
1172        /**
1173         * The flex item highlight configuration (default: all transparent).
1174         * <BR />
1175         * <BR /><B>OPTIONAL</B>
1176         */
1177        public final Overlay.FlexItemHighlightConfig flexItemHighlightConfig;
1178        
1179        /**
1180         * The contrast algorithm to use for the contrast ratio (default: aa).
1181         * <BR />
1182         * <BR /><B>OPTIONAL</B>
1183         */
1184        public final String contrastAlgorithm;
1185        
1186        /**
1187         * The container query container highlight configuration (default: all transparent).
1188         * <BR />
1189         * <BR /><B>OPTIONAL</B>
1190         */
1191        public final Overlay.ContainerQueryContainerHighlightConfig containerQueryContainerHighlightConfig;
1192        
1193        /**
1194         * Constructor
1195         *
1196         * @param showInfo Whether the node info tooltip should be shown (default: false).
1197         * <BR /><B>OPTIONAL</B>
1198         * 
1199         * @param showStyles Whether the node styles in the tooltip (default: false).
1200         * <BR /><B>OPTIONAL</B>
1201         * 
1202         * @param showRulers Whether the rulers should be shown (default: false).
1203         * <BR /><B>OPTIONAL</B>
1204         * 
1205         * @param showAccessibilityInfo Whether the a11y info should be shown (default: true).
1206         * <BR /><B>OPTIONAL</B>
1207         * 
1208         * @param showExtensionLines Whether the extension lines from node to the rulers should be shown (default: false).
1209         * <BR /><B>OPTIONAL</B>
1210         * 
1211         * @param contentColor The content box highlight fill color (default: transparent).
1212         * <BR /><B>OPTIONAL</B>
1213         * 
1214         * @param paddingColor The padding highlight fill color (default: transparent).
1215         * <BR /><B>OPTIONAL</B>
1216         * 
1217         * @param borderColor The border highlight fill color (default: transparent).
1218         * <BR /><B>OPTIONAL</B>
1219         * 
1220         * @param marginColor The margin highlight fill color (default: transparent).
1221         * <BR /><B>OPTIONAL</B>
1222         * 
1223         * @param eventTargetColor The event target element highlight fill color (default: transparent).
1224         * <BR /><B>OPTIONAL</B>
1225         * 
1226         * @param shapeColor The shape outside fill color (default: transparent).
1227         * <BR /><B>OPTIONAL</B>
1228         * 
1229         * @param shapeMarginColor The shape margin fill color (default: transparent).
1230         * <BR /><B>OPTIONAL</B>
1231         * 
1232         * @param cssGridColor The grid layout color (default: transparent).
1233         * <BR /><B>OPTIONAL</B>
1234         * 
1235         * @param colorFormat The color format used to format color styles (default: hex).
1236         * <BR /><B>OPTIONAL</B>
1237         * 
1238         * @param gridHighlightConfig The grid layout highlight configuration (default: all transparent).
1239         * <BR /><B>OPTIONAL</B>
1240         * 
1241         * @param flexContainerHighlightConfig The flex container highlight configuration (default: all transparent).
1242         * <BR /><B>OPTIONAL</B>
1243         * 
1244         * @param flexItemHighlightConfig The flex item highlight configuration (default: all transparent).
1245         * <BR /><B>OPTIONAL</B>
1246         * 
1247         * @param contrastAlgorithm The contrast algorithm to use for the contrast ratio (default: aa).
1248         * <BR /><B>OPTIONAL</B>
1249         * 
1250         * @param containerQueryContainerHighlightConfig The container query container highlight configuration (default: all transparent).
1251         * <BR /><B>OPTIONAL</B>
1252         */
1253        public HighlightConfig(
1254                Boolean showInfo, Boolean showStyles, Boolean showRulers, 
1255                Boolean showAccessibilityInfo, Boolean showExtensionLines, DOM.RGBA contentColor, 
1256                DOM.RGBA paddingColor, DOM.RGBA borderColor, DOM.RGBA marginColor, 
1257                DOM.RGBA eventTargetColor, DOM.RGBA shapeColor, DOM.RGBA shapeMarginColor, 
1258                DOM.RGBA cssGridColor, String colorFormat, 
1259                Overlay.GridHighlightConfig gridHighlightConfig, 
1260                Overlay.FlexContainerHighlightConfig flexContainerHighlightConfig, 
1261                Overlay.FlexItemHighlightConfig flexItemHighlightConfig, String contrastAlgorithm, 
1262                Overlay.ContainerQueryContainerHighlightConfig containerQueryContainerHighlightConfig
1263            )
1264        {
1265            // Exception-Check(s) to ensure that if any parameters which must adhere to a
1266            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
1267            
1268            THROWS.checkIAE("colorFormat", colorFormat, "Overlay.ColorFormat", Overlay.ColorFormat);
1269            THROWS.checkIAE("contrastAlgorithm", contrastAlgorithm, "Overlay.ContrastAlgorithm", Overlay.ContrastAlgorithm);
1270            
1271            this.showInfo                                = showInfo;
1272            this.showStyles                              = showStyles;
1273            this.showRulers                              = showRulers;
1274            this.showAccessibilityInfo                   = showAccessibilityInfo;
1275            this.showExtensionLines                      = showExtensionLines;
1276            this.contentColor                            = contentColor;
1277            this.paddingColor                            = paddingColor;
1278            this.borderColor                             = borderColor;
1279            this.marginColor                             = marginColor;
1280            this.eventTargetColor                        = eventTargetColor;
1281            this.shapeColor                              = shapeColor;
1282            this.shapeMarginColor                        = shapeMarginColor;
1283            this.cssGridColor                            = cssGridColor;
1284            this.colorFormat                             = colorFormat;
1285            this.gridHighlightConfig                     = gridHighlightConfig;
1286            this.flexContainerHighlightConfig            = flexContainerHighlightConfig;
1287            this.flexItemHighlightConfig                 = flexItemHighlightConfig;
1288            this.contrastAlgorithm                       = contrastAlgorithm;
1289            this.containerQueryContainerHighlightConfig  = containerQueryContainerHighlightConfig;
1290        }
1291        
1292        /**
1293         * JSON Object Constructor
1294         * @param jo A Json-Object having data about an instance of {@code 'HighlightConfig'}.
1295         */
1296        public HighlightConfig (JsonObject jo)
1297        {
1298            this.showInfo                                = ReadBoxedJSON.getBoolean(jo, "showInfo", true);
1299            this.showStyles                              = ReadBoxedJSON.getBoolean(jo, "showStyles", true);
1300            this.showRulers                              = ReadBoxedJSON.getBoolean(jo, "showRulers", true);
1301            this.showAccessibilityInfo                   = ReadBoxedJSON.getBoolean(jo, "showAccessibilityInfo", true);
1302            this.showExtensionLines                      = ReadBoxedJSON.getBoolean(jo, "showExtensionLines", true);
1303            this.contentColor                            = ReadJSON.getObject(jo, "contentColor", DOM.RGBA.class, true, false);
1304            this.paddingColor                            = ReadJSON.getObject(jo, "paddingColor", DOM.RGBA.class, true, false);
1305            this.borderColor                             = ReadJSON.getObject(jo, "borderColor", DOM.RGBA.class, true, false);
1306            this.marginColor                             = ReadJSON.getObject(jo, "marginColor", DOM.RGBA.class, true, false);
1307            this.eventTargetColor                        = ReadJSON.getObject(jo, "eventTargetColor", DOM.RGBA.class, true, false);
1308            this.shapeColor                              = ReadJSON.getObject(jo, "shapeColor", DOM.RGBA.class, true, false);
1309            this.shapeMarginColor                        = ReadJSON.getObject(jo, "shapeMarginColor", DOM.RGBA.class, true, false);
1310            this.cssGridColor                            = ReadJSON.getObject(jo, "cssGridColor", DOM.RGBA.class, true, false);
1311            this.colorFormat                             = ReadJSON.getString(jo, "colorFormat", true, false);
1312            this.gridHighlightConfig                     = ReadJSON.getObject(jo, "gridHighlightConfig", Overlay.GridHighlightConfig.class, true, false);
1313            this.flexContainerHighlightConfig            = ReadJSON.getObject(jo, "flexContainerHighlightConfig", Overlay.FlexContainerHighlightConfig.class, true, false);
1314            this.flexItemHighlightConfig                 = ReadJSON.getObject(jo, "flexItemHighlightConfig", Overlay.FlexItemHighlightConfig.class, true, false);
1315            this.contrastAlgorithm                       = ReadJSON.getString(jo, "contrastAlgorithm", true, false);
1316            this.containerQueryContainerHighlightConfig  = ReadJSON.getObject(jo, "containerQueryContainerHighlightConfig", Overlay.ContainerQueryContainerHighlightConfig.class, true, false);
1317        }
1318        
1319        
1320        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1321        public boolean equals(Object other)
1322        {
1323            if (this == other)                       return true;
1324            if (other == null)                       return false;
1325            if (other.getClass() != this.getClass()) return false;
1326        
1327            HighlightConfig o = (HighlightConfig) other;
1328        
1329            return
1330                    Objects.equals(this.showInfo, o.showInfo)
1331                &&  Objects.equals(this.showStyles, o.showStyles)
1332                &&  Objects.equals(this.showRulers, o.showRulers)
1333                &&  Objects.equals(this.showAccessibilityInfo, o.showAccessibilityInfo)
1334                &&  Objects.equals(this.showExtensionLines, o.showExtensionLines)
1335                &&  Objects.equals(this.contentColor, o.contentColor)
1336                &&  Objects.equals(this.paddingColor, o.paddingColor)
1337                &&  Objects.equals(this.borderColor, o.borderColor)
1338                &&  Objects.equals(this.marginColor, o.marginColor)
1339                &&  Objects.equals(this.eventTargetColor, o.eventTargetColor)
1340                &&  Objects.equals(this.shapeColor, o.shapeColor)
1341                &&  Objects.equals(this.shapeMarginColor, o.shapeMarginColor)
1342                &&  Objects.equals(this.cssGridColor, o.cssGridColor)
1343                &&  Objects.equals(this.colorFormat, o.colorFormat)
1344                &&  Objects.equals(this.gridHighlightConfig, o.gridHighlightConfig)
1345                &&  Objects.equals(this.flexContainerHighlightConfig, o.flexContainerHighlightConfig)
1346                &&  Objects.equals(this.flexItemHighlightConfig, o.flexItemHighlightConfig)
1347                &&  Objects.equals(this.contrastAlgorithm, o.contrastAlgorithm)
1348                &&  Objects.equals(this.containerQueryContainerHighlightConfig, o.containerQueryContainerHighlightConfig);
1349        }
1350        
1351        /** Generates a Hash-Code for {@code 'this'} instance */
1352        public int hashCode()
1353        {
1354            return
1355                    Objects.hashCode(this.showInfo)
1356                +   Objects.hashCode(this.showStyles)
1357                +   Objects.hashCode(this.showRulers)
1358                +   Objects.hashCode(this.showAccessibilityInfo)
1359                +   Objects.hashCode(this.showExtensionLines)
1360                +   this.contentColor.hashCode()
1361                +   this.paddingColor.hashCode()
1362                +   this.borderColor.hashCode()
1363                +   this.marginColor.hashCode()
1364                +   this.eventTargetColor.hashCode()
1365                +   this.shapeColor.hashCode()
1366                +   this.shapeMarginColor.hashCode()
1367                +   this.cssGridColor.hashCode()
1368                +   Objects.hashCode(this.colorFormat)
1369                +   this.gridHighlightConfig.hashCode()
1370                +   this.flexContainerHighlightConfig.hashCode()
1371                +   this.flexItemHighlightConfig.hashCode()
1372                +   Objects.hashCode(this.contrastAlgorithm)
1373                +   this.containerQueryContainerHighlightConfig.hashCode();
1374        }
1375    }
1376    
1377    /** Configurations for Persistent Grid Highlight */
1378    public static class GridNodeHighlightConfig
1379        extends BaseType
1380        implements java.io.Serializable
1381    {
1382        /** For Object Serialization.  java.io.Serializable */
1383        protected static final long serialVersionUID = 1;
1384        
1385        public boolean[] optionals()
1386        { return new boolean[] { false, false, }; }
1387        
1388        /** A descriptor for the highlight appearance. */
1389        public final Overlay.GridHighlightConfig gridHighlightConfig;
1390        
1391        /** Identifier of the node to highlight. */
1392        public final int nodeId;
1393        
1394        /**
1395         * Constructor
1396         *
1397         * @param gridHighlightConfig A descriptor for the highlight appearance.
1398         * 
1399         * @param nodeId Identifier of the node to highlight.
1400         */
1401        public GridNodeHighlightConfig
1402            (Overlay.GridHighlightConfig gridHighlightConfig, int nodeId)
1403        {
1404            // Exception-Check(s) to ensure that if any parameters which are not declared as
1405            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1406            
1407            if (gridHighlightConfig == null) THROWS.throwNPE("gridHighlightConfig");
1408            
1409            this.gridHighlightConfig  = gridHighlightConfig;
1410            this.nodeId               = nodeId;
1411        }
1412        
1413        /**
1414         * JSON Object Constructor
1415         * @param jo A Json-Object having data about an instance of {@code 'GridNodeHighlightConfig'}.
1416         */
1417        public GridNodeHighlightConfig (JsonObject jo)
1418        {
1419            this.gridHighlightConfig  = ReadJSON.getObject(jo, "gridHighlightConfig", Overlay.GridHighlightConfig.class, false, true);
1420            this.nodeId               = ReadPrimJSON.getInt(jo, "nodeId");
1421        }
1422        
1423        
1424        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1425        public boolean equals(Object other)
1426        {
1427            if (this == other)                       return true;
1428            if (other == null)                       return false;
1429            if (other.getClass() != this.getClass()) return false;
1430        
1431            GridNodeHighlightConfig o = (GridNodeHighlightConfig) other;
1432        
1433            return
1434                    Objects.equals(this.gridHighlightConfig, o.gridHighlightConfig)
1435                &&  Objects.equals(this.nodeId, o.nodeId);
1436        }
1437        
1438        /** Generates a Hash-Code for {@code 'this'} instance */
1439        public int hashCode()
1440        {
1441            return
1442                    this.gridHighlightConfig.hashCode()
1443                +   this.nodeId;
1444        }
1445    }
1446    
1447    /** <CODE>[No Description Provided by Google]</CODE> */
1448    public static class FlexNodeHighlightConfig
1449        extends BaseType
1450        implements java.io.Serializable
1451    {
1452        /** For Object Serialization.  java.io.Serializable */
1453        protected static final long serialVersionUID = 1;
1454        
1455        public boolean[] optionals()
1456        { return new boolean[] { false, false, }; }
1457        
1458        /** A descriptor for the highlight appearance of flex containers. */
1459        public final Overlay.FlexContainerHighlightConfig flexContainerHighlightConfig;
1460        
1461        /** Identifier of the node to highlight. */
1462        public final int nodeId;
1463        
1464        /**
1465         * Constructor
1466         *
1467         * @param flexContainerHighlightConfig A descriptor for the highlight appearance of flex containers.
1468         * 
1469         * @param nodeId Identifier of the node to highlight.
1470         */
1471        public FlexNodeHighlightConfig
1472            (Overlay.FlexContainerHighlightConfig flexContainerHighlightConfig, int nodeId)
1473        {
1474            // Exception-Check(s) to ensure that if any parameters which are not declared as
1475            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1476            
1477            if (flexContainerHighlightConfig == null) THROWS.throwNPE("flexContainerHighlightConfig");
1478            
1479            this.flexContainerHighlightConfig  = flexContainerHighlightConfig;
1480            this.nodeId                        = nodeId;
1481        }
1482        
1483        /**
1484         * JSON Object Constructor
1485         * @param jo A Json-Object having data about an instance of {@code 'FlexNodeHighlightConfig'}.
1486         */
1487        public FlexNodeHighlightConfig (JsonObject jo)
1488        {
1489            this.flexContainerHighlightConfig  = ReadJSON.getObject(jo, "flexContainerHighlightConfig", Overlay.FlexContainerHighlightConfig.class, false, true);
1490            this.nodeId                        = ReadPrimJSON.getInt(jo, "nodeId");
1491        }
1492        
1493        
1494        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1495        public boolean equals(Object other)
1496        {
1497            if (this == other)                       return true;
1498            if (other == null)                       return false;
1499            if (other.getClass() != this.getClass()) return false;
1500        
1501            FlexNodeHighlightConfig o = (FlexNodeHighlightConfig) other;
1502        
1503            return
1504                    Objects.equals(this.flexContainerHighlightConfig, o.flexContainerHighlightConfig)
1505                &&  Objects.equals(this.nodeId, o.nodeId);
1506        }
1507        
1508        /** Generates a Hash-Code for {@code 'this'} instance */
1509        public int hashCode()
1510        {
1511            return
1512                    this.flexContainerHighlightConfig.hashCode()
1513                +   this.nodeId;
1514        }
1515    }
1516    
1517    /** <CODE>[No Description Provided by Google]</CODE> */
1518    public static class ScrollSnapContainerHighlightConfig
1519        extends BaseType
1520        implements java.io.Serializable
1521    {
1522        /** For Object Serialization.  java.io.Serializable */
1523        protected static final long serialVersionUID = 1;
1524        
1525        public boolean[] optionals()
1526        { return new boolean[] { true, true, true, true, }; }
1527        
1528        /**
1529         * The style of the snapport border (default: transparent)
1530         * <BR />
1531         * <BR /><B>OPTIONAL</B>
1532         */
1533        public final Overlay.LineStyle snapportBorder;
1534        
1535        /**
1536         * The style of the snap area border (default: transparent)
1537         * <BR />
1538         * <BR /><B>OPTIONAL</B>
1539         */
1540        public final Overlay.LineStyle snapAreaBorder;
1541        
1542        /**
1543         * The margin highlight fill color (default: transparent).
1544         * <BR />
1545         * <BR /><B>OPTIONAL</B>
1546         */
1547        public final DOM.RGBA scrollMarginColor;
1548        
1549        /**
1550         * The padding highlight fill color (default: transparent).
1551         * <BR />
1552         * <BR /><B>OPTIONAL</B>
1553         */
1554        public final DOM.RGBA scrollPaddingColor;
1555        
1556        /**
1557         * Constructor
1558         *
1559         * @param snapportBorder The style of the snapport border (default: transparent)
1560         * <BR /><B>OPTIONAL</B>
1561         * 
1562         * @param snapAreaBorder The style of the snap area border (default: transparent)
1563         * <BR /><B>OPTIONAL</B>
1564         * 
1565         * @param scrollMarginColor The margin highlight fill color (default: transparent).
1566         * <BR /><B>OPTIONAL</B>
1567         * 
1568         * @param scrollPaddingColor The padding highlight fill color (default: transparent).
1569         * <BR /><B>OPTIONAL</B>
1570         */
1571        public ScrollSnapContainerHighlightConfig(
1572                Overlay.LineStyle snapportBorder, Overlay.LineStyle snapAreaBorder, 
1573                DOM.RGBA scrollMarginColor, DOM.RGBA scrollPaddingColor
1574            )
1575        {
1576            this.snapportBorder      = snapportBorder;
1577            this.snapAreaBorder      = snapAreaBorder;
1578            this.scrollMarginColor   = scrollMarginColor;
1579            this.scrollPaddingColor  = scrollPaddingColor;
1580        }
1581        
1582        /**
1583         * JSON Object Constructor
1584         * @param jo A Json-Object having data about an instance of {@code 'ScrollSnapContainerHighlightConfig'}.
1585         */
1586        public ScrollSnapContainerHighlightConfig (JsonObject jo)
1587        {
1588            this.snapportBorder      = ReadJSON.getObject(jo, "snapportBorder", Overlay.LineStyle.class, true, false);
1589            this.snapAreaBorder      = ReadJSON.getObject(jo, "snapAreaBorder", Overlay.LineStyle.class, true, false);
1590            this.scrollMarginColor   = ReadJSON.getObject(jo, "scrollMarginColor", DOM.RGBA.class, true, false);
1591            this.scrollPaddingColor  = ReadJSON.getObject(jo, "scrollPaddingColor", DOM.RGBA.class, true, false);
1592        }
1593        
1594        
1595        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1596        public boolean equals(Object other)
1597        {
1598            if (this == other)                       return true;
1599            if (other == null)                       return false;
1600            if (other.getClass() != this.getClass()) return false;
1601        
1602            ScrollSnapContainerHighlightConfig o = (ScrollSnapContainerHighlightConfig) other;
1603        
1604            return
1605                    Objects.equals(this.snapportBorder, o.snapportBorder)
1606                &&  Objects.equals(this.snapAreaBorder, o.snapAreaBorder)
1607                &&  Objects.equals(this.scrollMarginColor, o.scrollMarginColor)
1608                &&  Objects.equals(this.scrollPaddingColor, o.scrollPaddingColor);
1609        }
1610        
1611        /** Generates a Hash-Code for {@code 'this'} instance */
1612        public int hashCode()
1613        {
1614            return
1615                    this.snapportBorder.hashCode()
1616                +   this.snapAreaBorder.hashCode()
1617                +   this.scrollMarginColor.hashCode()
1618                +   this.scrollPaddingColor.hashCode();
1619        }
1620    }
1621    
1622    /** <CODE>[No Description Provided by Google]</CODE> */
1623    public static class ScrollSnapHighlightConfig
1624        extends BaseType
1625        implements java.io.Serializable
1626    {
1627        /** For Object Serialization.  java.io.Serializable */
1628        protected static final long serialVersionUID = 1;
1629        
1630        public boolean[] optionals()
1631        { return new boolean[] { false, false, }; }
1632        
1633        /** A descriptor for the highlight appearance of scroll snap containers. */
1634        public final Overlay.ScrollSnapContainerHighlightConfig scrollSnapContainerHighlightConfig;
1635        
1636        /** Identifier of the node to highlight. */
1637        public final int nodeId;
1638        
1639        /**
1640         * Constructor
1641         *
1642         * @param scrollSnapContainerHighlightConfig A descriptor for the highlight appearance of scroll snap containers.
1643         * 
1644         * @param nodeId Identifier of the node to highlight.
1645         */
1646        public ScrollSnapHighlightConfig(
1647                Overlay.ScrollSnapContainerHighlightConfig scrollSnapContainerHighlightConfig, 
1648                int nodeId
1649            )
1650        {
1651            // Exception-Check(s) to ensure that if any parameters which are not declared as
1652            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1653            
1654            if (scrollSnapContainerHighlightConfig == null) THROWS.throwNPE("scrollSnapContainerHighlightConfig");
1655            
1656            this.scrollSnapContainerHighlightConfig  = scrollSnapContainerHighlightConfig;
1657            this.nodeId                              = nodeId;
1658        }
1659        
1660        /**
1661         * JSON Object Constructor
1662         * @param jo A Json-Object having data about an instance of {@code 'ScrollSnapHighlightConfig'}.
1663         */
1664        public ScrollSnapHighlightConfig (JsonObject jo)
1665        {
1666            this.scrollSnapContainerHighlightConfig  = ReadJSON.getObject(jo, "scrollSnapContainerHighlightConfig", Overlay.ScrollSnapContainerHighlightConfig.class, false, true);
1667            this.nodeId                              = ReadPrimJSON.getInt(jo, "nodeId");
1668        }
1669        
1670        
1671        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1672        public boolean equals(Object other)
1673        {
1674            if (this == other)                       return true;
1675            if (other == null)                       return false;
1676            if (other.getClass() != this.getClass()) return false;
1677        
1678            ScrollSnapHighlightConfig o = (ScrollSnapHighlightConfig) other;
1679        
1680            return
1681                    Objects.equals(this.scrollSnapContainerHighlightConfig, o.scrollSnapContainerHighlightConfig)
1682                &&  Objects.equals(this.nodeId, o.nodeId);
1683        }
1684        
1685        /** Generates a Hash-Code for {@code 'this'} instance */
1686        public int hashCode()
1687        {
1688            return
1689                    this.scrollSnapContainerHighlightConfig.hashCode()
1690                +   this.nodeId;
1691        }
1692    }
1693    
1694    /** Configuration for dual screen hinge */
1695    public static class HingeConfig
1696        extends BaseType
1697        implements java.io.Serializable
1698    {
1699        /** For Object Serialization.  java.io.Serializable */
1700        protected static final long serialVersionUID = 1;
1701        
1702        public boolean[] optionals()
1703        { return new boolean[] { false, true, true, }; }
1704        
1705        /** A rectangle represent hinge */
1706        public final DOM.Rect rect;
1707        
1708        /**
1709         * The content box highlight fill color (default: a dark color).
1710         * <BR />
1711         * <BR /><B>OPTIONAL</B>
1712         */
1713        public final DOM.RGBA contentColor;
1714        
1715        /**
1716         * The content box highlight outline color (default: transparent).
1717         * <BR />
1718         * <BR /><B>OPTIONAL</B>
1719         */
1720        public final DOM.RGBA outlineColor;
1721        
1722        /**
1723         * Constructor
1724         *
1725         * @param rect A rectangle represent hinge
1726         * 
1727         * @param contentColor The content box highlight fill color (default: a dark color).
1728         * <BR /><B>OPTIONAL</B>
1729         * 
1730         * @param outlineColor The content box highlight outline color (default: transparent).
1731         * <BR /><B>OPTIONAL</B>
1732         */
1733        public HingeConfig(DOM.Rect rect, DOM.RGBA contentColor, DOM.RGBA outlineColor)
1734        {
1735            // Exception-Check(s) to ensure that if any parameters which are not declared as
1736            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1737            
1738            if (rect == null) THROWS.throwNPE("rect");
1739            
1740            this.rect          = rect;
1741            this.contentColor  = contentColor;
1742            this.outlineColor  = outlineColor;
1743        }
1744        
1745        /**
1746         * JSON Object Constructor
1747         * @param jo A Json-Object having data about an instance of {@code 'HingeConfig'}.
1748         */
1749        public HingeConfig (JsonObject jo)
1750        {
1751            this.rect          = ReadJSON.getObject(jo, "rect", DOM.Rect.class, false, true);
1752            this.contentColor  = ReadJSON.getObject(jo, "contentColor", DOM.RGBA.class, true, false);
1753            this.outlineColor  = ReadJSON.getObject(jo, "outlineColor", DOM.RGBA.class, true, false);
1754        }
1755        
1756        
1757        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1758        public boolean equals(Object other)
1759        {
1760            if (this == other)                       return true;
1761            if (other == null)                       return false;
1762            if (other.getClass() != this.getClass()) return false;
1763        
1764            HingeConfig o = (HingeConfig) other;
1765        
1766            return
1767                    Objects.equals(this.rect, o.rect)
1768                &&  Objects.equals(this.contentColor, o.contentColor)
1769                &&  Objects.equals(this.outlineColor, o.outlineColor);
1770        }
1771        
1772        /** Generates a Hash-Code for {@code 'this'} instance */
1773        public int hashCode()
1774        {
1775            return
1776                    this.rect.hashCode()
1777                +   this.contentColor.hashCode()
1778                +   this.outlineColor.hashCode();
1779        }
1780    }
1781    
1782    /** <CODE>[No Description Provided by Google]</CODE> */
1783    public static class ContainerQueryHighlightConfig
1784        extends BaseType
1785        implements java.io.Serializable
1786    {
1787        /** For Object Serialization.  java.io.Serializable */
1788        protected static final long serialVersionUID = 1;
1789        
1790        public boolean[] optionals()
1791        { return new boolean[] { false, false, }; }
1792        
1793        /** A descriptor for the highlight appearance of container query containers. */
1794        public final Overlay.ContainerQueryContainerHighlightConfig containerQueryContainerHighlightConfig;
1795        
1796        /** Identifier of the container node to highlight. */
1797        public final int nodeId;
1798        
1799        /**
1800         * Constructor
1801         *
1802         * @param containerQueryContainerHighlightConfig A descriptor for the highlight appearance of container query containers.
1803         * 
1804         * @param nodeId Identifier of the container node to highlight.
1805         */
1806        public ContainerQueryHighlightConfig(
1807                
1808                Overlay.ContainerQueryContainerHighlightConfig containerQueryContainerHighlightConfig, 
1809                int nodeId
1810            )
1811        {
1812            // Exception-Check(s) to ensure that if any parameters which are not declared as
1813            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1814            
1815            if (containerQueryContainerHighlightConfig == null) THROWS.throwNPE("containerQueryContainerHighlightConfig");
1816            
1817            this.containerQueryContainerHighlightConfig  = containerQueryContainerHighlightConfig;
1818            this.nodeId                                  = nodeId;
1819        }
1820        
1821        /**
1822         * JSON Object Constructor
1823         * @param jo A Json-Object having data about an instance of {@code 'ContainerQueryHighlightConfig'}.
1824         */
1825        public ContainerQueryHighlightConfig (JsonObject jo)
1826        {
1827            this.containerQueryContainerHighlightConfig  = ReadJSON.getObject(jo, "containerQueryContainerHighlightConfig", Overlay.ContainerQueryContainerHighlightConfig.class, false, true);
1828            this.nodeId                                  = ReadPrimJSON.getInt(jo, "nodeId");
1829        }
1830        
1831        
1832        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1833        public boolean equals(Object other)
1834        {
1835            if (this == other)                       return true;
1836            if (other == null)                       return false;
1837            if (other.getClass() != this.getClass()) return false;
1838        
1839            ContainerQueryHighlightConfig o = (ContainerQueryHighlightConfig) other;
1840        
1841            return
1842                    Objects.equals(this.containerQueryContainerHighlightConfig, o.containerQueryContainerHighlightConfig)
1843                &&  Objects.equals(this.nodeId, o.nodeId);
1844        }
1845        
1846        /** Generates a Hash-Code for {@code 'this'} instance */
1847        public int hashCode()
1848        {
1849            return
1850                    this.containerQueryContainerHighlightConfig.hashCode()
1851                +   this.nodeId;
1852        }
1853    }
1854    
1855    /** <CODE>[No Description Provided by Google]</CODE> */
1856    public static class ContainerQueryContainerHighlightConfig
1857        extends BaseType
1858        implements java.io.Serializable
1859    {
1860        /** For Object Serialization.  java.io.Serializable */
1861        protected static final long serialVersionUID = 1;
1862        
1863        public boolean[] optionals()
1864        { return new boolean[] { true, true, }; }
1865        
1866        /**
1867         * The style of the container border.
1868         * <BR />
1869         * <BR /><B>OPTIONAL</B>
1870         */
1871        public final Overlay.LineStyle containerBorder;
1872        
1873        /**
1874         * The style of the descendants' borders.
1875         * <BR />
1876         * <BR /><B>OPTIONAL</B>
1877         */
1878        public final Overlay.LineStyle descendantBorder;
1879        
1880        /**
1881         * Constructor
1882         *
1883         * @param containerBorder The style of the container border.
1884         * <BR /><B>OPTIONAL</B>
1885         * 
1886         * @param descendantBorder The style of the descendants' borders.
1887         * <BR /><B>OPTIONAL</B>
1888         */
1889        public ContainerQueryContainerHighlightConfig
1890            (Overlay.LineStyle containerBorder, Overlay.LineStyle descendantBorder)
1891        {
1892            this.containerBorder   = containerBorder;
1893            this.descendantBorder  = descendantBorder;
1894        }
1895        
1896        /**
1897         * JSON Object Constructor
1898         * @param jo A Json-Object having data about an instance of {@code 'ContainerQueryContainerHighlightConfig'}.
1899         */
1900        public ContainerQueryContainerHighlightConfig (JsonObject jo)
1901        {
1902            this.containerBorder   = ReadJSON.getObject(jo, "containerBorder", Overlay.LineStyle.class, true, false);
1903            this.descendantBorder  = ReadJSON.getObject(jo, "descendantBorder", Overlay.LineStyle.class, true, false);
1904        }
1905        
1906        
1907        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1908        public boolean equals(Object other)
1909        {
1910            if (this == other)                       return true;
1911            if (other == null)                       return false;
1912            if (other.getClass() != this.getClass()) return false;
1913        
1914            ContainerQueryContainerHighlightConfig o = (ContainerQueryContainerHighlightConfig) other;
1915        
1916            return
1917                    Objects.equals(this.containerBorder, o.containerBorder)
1918                &&  Objects.equals(this.descendantBorder, o.descendantBorder);
1919        }
1920        
1921        /** Generates a Hash-Code for {@code 'this'} instance */
1922        public int hashCode()
1923        {
1924            return
1925                    this.containerBorder.hashCode()
1926                +   this.descendantBorder.hashCode();
1927        }
1928    }
1929    
1930    /** <CODE>[No Description Provided by Google]</CODE> */
1931    public static class IsolatedElementHighlightConfig
1932        extends BaseType
1933        implements java.io.Serializable
1934    {
1935        /** For Object Serialization.  java.io.Serializable */
1936        protected static final long serialVersionUID = 1;
1937        
1938        public boolean[] optionals()
1939        { return new boolean[] { false, false, }; }
1940        
1941        /** A descriptor for the highlight appearance of an element in isolation mode. */
1942        public final Overlay.IsolationModeHighlightConfig isolationModeHighlightConfig;
1943        
1944        /** Identifier of the isolated element to highlight. */
1945        public final int nodeId;
1946        
1947        /**
1948         * Constructor
1949         *
1950         * @param isolationModeHighlightConfig A descriptor for the highlight appearance of an element in isolation mode.
1951         * 
1952         * @param nodeId Identifier of the isolated element to highlight.
1953         */
1954        public IsolatedElementHighlightConfig
1955            (Overlay.IsolationModeHighlightConfig isolationModeHighlightConfig, int nodeId)
1956        {
1957            // Exception-Check(s) to ensure that if any parameters which are not declared as
1958            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1959            
1960            if (isolationModeHighlightConfig == null) THROWS.throwNPE("isolationModeHighlightConfig");
1961            
1962            this.isolationModeHighlightConfig  = isolationModeHighlightConfig;
1963            this.nodeId                        = nodeId;
1964        }
1965        
1966        /**
1967         * JSON Object Constructor
1968         * @param jo A Json-Object having data about an instance of {@code 'IsolatedElementHighlightConfig'}.
1969         */
1970        public IsolatedElementHighlightConfig (JsonObject jo)
1971        {
1972            this.isolationModeHighlightConfig  = ReadJSON.getObject(jo, "isolationModeHighlightConfig", Overlay.IsolationModeHighlightConfig.class, false, true);
1973            this.nodeId                        = ReadPrimJSON.getInt(jo, "nodeId");
1974        }
1975        
1976        
1977        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1978        public boolean equals(Object other)
1979        {
1980            if (this == other)                       return true;
1981            if (other == null)                       return false;
1982            if (other.getClass() != this.getClass()) return false;
1983        
1984            IsolatedElementHighlightConfig o = (IsolatedElementHighlightConfig) other;
1985        
1986            return
1987                    Objects.equals(this.isolationModeHighlightConfig, o.isolationModeHighlightConfig)
1988                &&  Objects.equals(this.nodeId, o.nodeId);
1989        }
1990        
1991        /** Generates a Hash-Code for {@code 'this'} instance */
1992        public int hashCode()
1993        {
1994            return
1995                    this.isolationModeHighlightConfig.hashCode()
1996                +   this.nodeId;
1997        }
1998    }
1999    
2000    /** <CODE>[No Description Provided by Google]</CODE> */
2001    public static class IsolationModeHighlightConfig
2002        extends BaseType
2003        implements java.io.Serializable
2004    {
2005        /** For Object Serialization.  java.io.Serializable */
2006        protected static final long serialVersionUID = 1;
2007        
2008        public boolean[] optionals()
2009        { return new boolean[] { true, true, true, }; }
2010        
2011        /**
2012         * The fill color of the resizers (default: transparent).
2013         * <BR />
2014         * <BR /><B>OPTIONAL</B>
2015         */
2016        public final DOM.RGBA resizerColor;
2017        
2018        /**
2019         * The fill color for resizer handles (default: transparent).
2020         * <BR />
2021         * <BR /><B>OPTIONAL</B>
2022         */
2023        public final DOM.RGBA resizerHandleColor;
2024        
2025        /**
2026         * The fill color for the mask covering non-isolated elements (default: transparent).
2027         * <BR />
2028         * <BR /><B>OPTIONAL</B>
2029         */
2030        public final DOM.RGBA maskColor;
2031        
2032        /**
2033         * Constructor
2034         *
2035         * @param resizerColor The fill color of the resizers (default: transparent).
2036         * <BR /><B>OPTIONAL</B>
2037         * 
2038         * @param resizerHandleColor The fill color for resizer handles (default: transparent).
2039         * <BR /><B>OPTIONAL</B>
2040         * 
2041         * @param maskColor The fill color for the mask covering non-isolated elements (default: transparent).
2042         * <BR /><B>OPTIONAL</B>
2043         */
2044        public IsolationModeHighlightConfig
2045            (DOM.RGBA resizerColor, DOM.RGBA resizerHandleColor, DOM.RGBA maskColor)
2046        {
2047            this.resizerColor        = resizerColor;
2048            this.resizerHandleColor  = resizerHandleColor;
2049            this.maskColor           = maskColor;
2050        }
2051        
2052        /**
2053         * JSON Object Constructor
2054         * @param jo A Json-Object having data about an instance of {@code 'IsolationModeHighlightConfig'}.
2055         */
2056        public IsolationModeHighlightConfig (JsonObject jo)
2057        {
2058            this.resizerColor        = ReadJSON.getObject(jo, "resizerColor", DOM.RGBA.class, true, false);
2059            this.resizerHandleColor  = ReadJSON.getObject(jo, "resizerHandleColor", DOM.RGBA.class, true, false);
2060            this.maskColor           = ReadJSON.getObject(jo, "maskColor", DOM.RGBA.class, true, false);
2061        }
2062        
2063        
2064        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2065        public boolean equals(Object other)
2066        {
2067            if (this == other)                       return true;
2068            if (other == null)                       return false;
2069            if (other.getClass() != this.getClass()) return false;
2070        
2071            IsolationModeHighlightConfig o = (IsolationModeHighlightConfig) other;
2072        
2073            return
2074                    Objects.equals(this.resizerColor, o.resizerColor)
2075                &&  Objects.equals(this.resizerHandleColor, o.resizerHandleColor)
2076                &&  Objects.equals(this.maskColor, o.maskColor);
2077        }
2078        
2079        /** Generates a Hash-Code for {@code 'this'} instance */
2080        public int hashCode()
2081        {
2082            return
2083                    this.resizerColor.hashCode()
2084                +   this.resizerHandleColor.hashCode()
2085                +   this.maskColor.hashCode();
2086        }
2087    }
2088    
2089    /**
2090     * Fired when user cancels the inspect mode.
2091     *
2092     * <BR /><BR />This is Marker-Event.  Marker-Event's are Events that do not posses
2093     * any data, fields or state.  When they are fired, only the event name is supplied.
2094     */
2095    public static class inspectModeCanceled
2096        extends BrowserEvent
2097        implements java.io.Serializable
2098    {
2099        /** For Object Serialization.  java.io.Serializable */
2100        protected static final long serialVersionUID = 1;
2101    
2102        public boolean[] optionals() { return new boolean[0]; }
2103    
2104        /** JSON Object Constructor */
2105        public inspectModeCanceled(JsonObject jo)
2106        { super("Overlay", "inspectModeCanceled", 0); }
2107    
2108        @Override
2109        public String toString() { return "Overlay.inspectModeCanceled Marker Event\n"; }
2110    }
2111    
2112    /**
2113     * Fired when the node should be inspected. This happens after call to <CODE>setInspectMode</CODE> or when
2114     * user manually inspects an element.
2115     */
2116    public static class inspectNodeRequested
2117        extends BrowserEvent
2118        implements java.io.Serializable
2119    {
2120        /** For Object Serialization.  java.io.Serializable */
2121        protected static final long serialVersionUID = 1;
2122        
2123        public boolean[] optionals()
2124        { return new boolean[] { false, }; }
2125        
2126        /** Id of the node to inspect. */
2127        public final int backendNodeId;
2128        
2129        /**
2130         * Constructor
2131         *
2132         * @param backendNodeId Id of the node to inspect.
2133         */
2134        public inspectNodeRequested(int backendNodeId)
2135        {
2136            super("Overlay", "inspectNodeRequested", 1);
2137            
2138            this.backendNodeId  = backendNodeId;
2139        }
2140        
2141        /**
2142         * JSON Object Constructor
2143         * @param jo A Json-Object having data about an instance of {@code 'inspectNodeRequested'}.
2144         */
2145        public inspectNodeRequested (JsonObject jo)
2146        {
2147            super("Overlay", "inspectNodeRequested", 1);
2148        
2149            this.backendNodeId  = ReadPrimJSON.getInt(jo, "backendNodeId");
2150        }
2151        
2152        
2153        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2154        public boolean equals(Object other)
2155        {
2156            if (this == other)                       return true;
2157            if (other == null)                       return false;
2158            if (other.getClass() != this.getClass()) return false;
2159        
2160            inspectNodeRequested o = (inspectNodeRequested) other;
2161        
2162            return
2163                    Objects.equals(this.backendNodeId, o.backendNodeId);
2164        }
2165        
2166        /** Generates a Hash-Code for {@code 'this'} instance */
2167        public int hashCode()
2168        {
2169            return
2170                    this.backendNodeId;
2171        }
2172    }
2173    
2174    /** Fired when the node should be highlighted. This happens after call to <CODE>setInspectMode</CODE>. */
2175    public static class nodeHighlightRequested
2176        extends BrowserEvent
2177        implements java.io.Serializable
2178    {
2179        /** For Object Serialization.  java.io.Serializable */
2180        protected static final long serialVersionUID = 1;
2181        
2182        public boolean[] optionals()
2183        { return new boolean[] { false, }; }
2184        
2185        /** <CODE>[No Description Provided by Google]</CODE> */
2186        public final int nodeId;
2187        
2188        /**
2189         * Constructor
2190         *
2191         * @param nodeId -
2192         */
2193        public nodeHighlightRequested(int nodeId)
2194        {
2195            super("Overlay", "nodeHighlightRequested", 1);
2196            
2197            this.nodeId  = nodeId;
2198        }
2199        
2200        /**
2201         * JSON Object Constructor
2202         * @param jo A Json-Object having data about an instance of {@code 'nodeHighlightRequested'}.
2203         */
2204        public nodeHighlightRequested (JsonObject jo)
2205        {
2206            super("Overlay", "nodeHighlightRequested", 1);
2207        
2208            this.nodeId  = ReadPrimJSON.getInt(jo, "nodeId");
2209        }
2210        
2211        
2212        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2213        public boolean equals(Object other)
2214        {
2215            if (this == other)                       return true;
2216            if (other == null)                       return false;
2217            if (other.getClass() != this.getClass()) return false;
2218        
2219            nodeHighlightRequested o = (nodeHighlightRequested) other;
2220        
2221            return
2222                    Objects.equals(this.nodeId, o.nodeId);
2223        }
2224        
2225        /** Generates a Hash-Code for {@code 'this'} instance */
2226        public int hashCode()
2227        {
2228            return
2229                    this.nodeId;
2230        }
2231    }
2232    
2233    /** Fired when user asks to capture screenshot of some area on the page. */
2234    public static class screenshotRequested
2235        extends BrowserEvent
2236        implements java.io.Serializable
2237    {
2238        /** For Object Serialization.  java.io.Serializable */
2239        protected static final long serialVersionUID = 1;
2240        
2241        public boolean[] optionals()
2242        { return new boolean[] { false, }; }
2243        
2244        /** Viewport to capture, in device independent pixels (dip). */
2245        public final Page.Viewport viewport;
2246        
2247        /**
2248         * Constructor
2249         *
2250         * @param viewport Viewport to capture, in device independent pixels (dip).
2251         */
2252        public screenshotRequested(Page.Viewport viewport)
2253        {
2254            super("Overlay", "screenshotRequested", 1);
2255            
2256            // Exception-Check(s) to ensure that if any parameters which are not declared as
2257            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2258            
2259            if (viewport == null) THROWS.throwNPE("viewport");
2260            
2261            this.viewport  = viewport;
2262        }
2263        
2264        /**
2265         * JSON Object Constructor
2266         * @param jo A Json-Object having data about an instance of {@code 'screenshotRequested'}.
2267         */
2268        public screenshotRequested (JsonObject jo)
2269        {
2270            super("Overlay", "screenshotRequested", 1);
2271        
2272            this.viewport  = ReadJSON.getObject(jo, "viewport", Page.Viewport.class, false, true);
2273        }
2274        
2275        
2276        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2277        public boolean equals(Object other)
2278        {
2279            if (this == other)                       return true;
2280            if (other == null)                       return false;
2281            if (other.getClass() != this.getClass()) return false;
2282        
2283            screenshotRequested o = (screenshotRequested) other;
2284        
2285            return
2286                    Objects.equals(this.viewport, o.viewport);
2287        }
2288        
2289        /** Generates a Hash-Code for {@code 'this'} instance */
2290        public int hashCode()
2291        {
2292            return
2293                    this.viewport.hashCode();
2294        }
2295    }
2296    
2297    
2298    // Counter for keeping the WebSocket Request ID's distinct.
2299    private static int counter = 1;
2300    
2301    /**
2302     * Disables domain notifications.
2303     * 
2304     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2305     * {@link Ret0}&gt;</CODE>
2306     *
2307     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2308     * browser receives the invocation-request.
2309     *
2310     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2311     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2312     * {@code >} to ensure the Browser Function has run to completion.
2313     */
2314    public static Script<String, JsonObject, Ret0> disable()
2315    {
2316        final int          webSocketID = 31000000 + counter++;
2317        final boolean[]    optionals   = new boolean[0];
2318        
2319        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2320        String requestJSON = WriteJSON.get(
2321            parameterTypes.get("disable"),
2322            parameterNames.get("disable"),
2323            optionals, webSocketID,
2324            "Overlay.disable"
2325        );
2326        
2327        // This Remote Command does not have a Return-Value.
2328        return new Script<>
2329            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2330    }
2331    
2332    /**
2333     * Enables domain notifications.
2334     * 
2335     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2336     * {@link Ret0}&gt;</CODE>
2337     *
2338     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2339     * browser receives the invocation-request.
2340     *
2341     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2342     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2343     * {@code >} to ensure the Browser Function has run to completion.
2344     */
2345    public static Script<String, JsonObject, Ret0> enable()
2346    {
2347        final int          webSocketID = 31001000 + counter++;
2348        final boolean[]    optionals   = new boolean[0];
2349        
2350        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2351        String requestJSON = WriteJSON.get(
2352            parameterTypes.get("enable"),
2353            parameterNames.get("enable"),
2354            optionals, webSocketID,
2355            "Overlay.enable"
2356        );
2357        
2358        // This Remote Command does not have a Return-Value.
2359        return new Script<>
2360            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2361    }
2362    
2363    /**
2364     * For testing.
2365     * 
2366     * @param nodeId Id of the node to get highlight object for.
2367     * 
2368     * @param includeDistance Whether to include distance info.
2369     * <BR /><B>OPTIONAL</B>
2370     * 
2371     * @param includeStyle Whether to include style info.
2372     * <BR /><B>OPTIONAL</B>
2373     * 
2374     * @param colorFormat The color format to get config with (default: hex).
2375     * <BR /><B>OPTIONAL</B>
2376     * 
2377     * @param showAccessibilityInfo Whether to show accessibility info (default: true).
2378     * <BR /><B>OPTIONAL</B>
2379     * 
2380     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2381     * JsonObject&gt;</CODE>
2382     * 
2383     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
2384     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
2385     * JsonObject&gt;</CODE> will be returned.
2386     *
2387     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
2388     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
2389      * may be retrieved.</I>
2390     *
2391     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
2392     * <BR /><BR /><UL CLASS=JDUL>
2393     * <LI><CODE>JsonObject (<B>highlight</B></CODE>)
2394     *     <BR />Highlight data for the node.
2395     * </LI>
2396     * </UL> */
2397    public static Script<String, JsonObject, JsonObject> getHighlightObjectForTest(
2398            int nodeId, Boolean includeDistance, Boolean includeStyle, String colorFormat, 
2399            Boolean showAccessibilityInfo
2400        )
2401    {
2402        // Exception-Check(s) to ensure that if any parameters which must adhere to a
2403        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
2404        
2405        THROWS.checkIAE("colorFormat", colorFormat, "Overlay.ColorFormat", Overlay.ColorFormat);
2406        
2407        final int       webSocketID = 31002000 + counter++;
2408        final boolean[] optionals   = { false, true, true, true, true, };
2409        
2410        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2411        String requestJSON = WriteJSON.get(
2412            parameterTypes.get("getHighlightObjectForTest"),
2413            parameterNames.get("getHighlightObjectForTest"),
2414            optionals, webSocketID,
2415            "Overlay.getHighlightObjectForTest",
2416            nodeId, includeDistance, includeStyle, colorFormat, showAccessibilityInfo
2417        );
2418        
2419        // 'JSON Binding' ... Converts Browser Response-JSON to 'JsonObject'
2420        Function<JsonObject, JsonObject> responseProcessor = (JsonObject jo) ->
2421            jo.getJsonObject("highlight");
2422        
2423        return new Script<>(webSocketID, requestJSON, responseProcessor);
2424    }
2425    
2426    /**
2427     * For Persistent Grid testing.
2428     * 
2429     * @param nodeIds Ids of the node to get highlight object for.
2430     * 
2431     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2432     * JsonObject&gt;</CODE>
2433     * 
2434     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
2435     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
2436     * JsonObject&gt;</CODE> will be returned.
2437     *
2438     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
2439     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
2440      * may be retrieved.</I>
2441     *
2442     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
2443     * <BR /><BR /><UL CLASS=JDUL>
2444     * <LI><CODE>JsonObject (<B>highlights</B></CODE>)
2445     *     <BR />Grid Highlight data for the node ids provided.
2446     * </LI>
2447     * </UL> */
2448    public static Script<String, JsonObject, JsonObject> getGridHighlightObjectsForTest
2449        (int[] nodeIds)
2450    {
2451        // Exception-Check(s) to ensure that if any parameters which are not declared as
2452        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2453        
2454        if (nodeIds == null) THROWS.throwNPE("nodeIds");
2455        
2456        final int       webSocketID = 31003000 + counter++;
2457        final boolean[] optionals   = { false, };
2458        
2459        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2460        String requestJSON = WriteJSON.get(
2461            parameterTypes.get("getGridHighlightObjectsForTest"),
2462            parameterNames.get("getGridHighlightObjectsForTest"),
2463            optionals, webSocketID,
2464            "Overlay.getGridHighlightObjectsForTest",
2465            (Object) nodeIds
2466        );
2467        
2468        // 'JSON Binding' ... Converts Browser Response-JSON to 'JsonObject'
2469        Function<JsonObject, JsonObject> responseProcessor = (JsonObject jo) ->
2470            jo.getJsonObject("highlights");
2471        
2472        return new Script<>(webSocketID, requestJSON, responseProcessor);
2473    }
2474    
2475    /**
2476     * For Source Order Viewer testing.
2477     * 
2478     * @param nodeId Id of the node to highlight.
2479     * 
2480     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2481     * JsonObject&gt;</CODE>
2482     * 
2483     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
2484     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
2485     * JsonObject&gt;</CODE> will be returned.
2486     *
2487     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
2488     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
2489      * may be retrieved.</I>
2490     *
2491     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
2492     * <BR /><BR /><UL CLASS=JDUL>
2493     * <LI><CODE>JsonObject (<B>highlight</B></CODE>)
2494     *     <BR />Source order highlight data for the node id provided.
2495     * </LI>
2496     * </UL> */
2497    public static Script<String, JsonObject, JsonObject> getSourceOrderHighlightObjectForTest
2498        (int nodeId)
2499    {
2500        final int       webSocketID = 31004000 + counter++;
2501        final boolean[] optionals   = { false, };
2502        
2503        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2504        String requestJSON = WriteJSON.get(
2505            parameterTypes.get("getSourceOrderHighlightObjectForTest"),
2506            parameterNames.get("getSourceOrderHighlightObjectForTest"),
2507            optionals, webSocketID,
2508            "Overlay.getSourceOrderHighlightObjectForTest",
2509            nodeId
2510        );
2511        
2512        // 'JSON Binding' ... Converts Browser Response-JSON to 'JsonObject'
2513        Function<JsonObject, JsonObject> responseProcessor = (JsonObject jo) ->
2514            jo.getJsonObject("highlight");
2515        
2516        return new Script<>(webSocketID, requestJSON, responseProcessor);
2517    }
2518    
2519    /**
2520     * Hides any highlight.
2521     * 
2522     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2523     * {@link Ret0}&gt;</CODE>
2524     *
2525     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2526     * browser receives the invocation-request.
2527     *
2528     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2529     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2530     * {@code >} to ensure the Browser Function has run to completion.
2531     */
2532    public static Script<String, JsonObject, Ret0> hideHighlight()
2533    {
2534        final int          webSocketID = 31005000 + counter++;
2535        final boolean[]    optionals   = new boolean[0];
2536        
2537        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2538        String requestJSON = WriteJSON.get(
2539            parameterTypes.get("hideHighlight"),
2540            parameterNames.get("hideHighlight"),
2541            optionals, webSocketID,
2542            "Overlay.hideHighlight"
2543        );
2544        
2545        // This Remote Command does not have a Return-Value.
2546        return new Script<>
2547            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2548    }
2549    
2550    /**
2551     * Highlights owner element of the frame with given id.
2552     * Deprecated: Doesn't work reliablity and cannot be fixed due to process
2553     * separatation (the owner node might be in a different process). Determine
2554     * the owner node in the client and use highlightNode.
2555     * <BR /><B>DEPRECATED</B>
2556     * 
2557     * @param frameId Identifier of the frame to highlight.
2558     * 
2559     * @param contentColor The content box highlight fill color (default: transparent).
2560     * <BR /><B>OPTIONAL</B>
2561     * 
2562     * @param contentOutlineColor The content box highlight outline color (default: transparent).
2563     * <BR /><B>OPTIONAL</B>
2564     * 
2565     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2566     * {@link Ret0}&gt;</CODE>
2567     *
2568     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2569     * browser receives the invocation-request.
2570     *
2571     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2572     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2573     * {@code >} to ensure the Browser Function has run to completion.
2574     */
2575    public static Script<String, JsonObject, Ret0> highlightFrame
2576        (String frameId, DOM.RGBA contentColor, DOM.RGBA contentOutlineColor)
2577    {
2578        // Exception-Check(s) to ensure that if any parameters which are not declared as
2579        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2580        
2581        if (frameId == null) THROWS.throwNPE("frameId");
2582        
2583        final int       webSocketID = 31006000 + counter++;
2584        final boolean[] optionals   = { false, true, true, };
2585        
2586        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2587        String requestJSON = WriteJSON.get(
2588            parameterTypes.get("highlightFrame"),
2589            parameterNames.get("highlightFrame"),
2590            optionals, webSocketID,
2591            "Overlay.highlightFrame",
2592            frameId, contentColor, contentOutlineColor
2593        );
2594        
2595        // This Remote Command does not have a Return-Value.
2596        return new Script<>
2597            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2598    }
2599    
2600    /**
2601     * Highlights DOM node with given id or with the given JavaScript object wrapper. Either nodeId or
2602     * objectId must be specified.
2603     * 
2604     * @param highlightConfig A descriptor for the highlight appearance.
2605     * 
2606     * @param nodeId Identifier of the node to highlight.
2607     * <BR /><B>OPTIONAL</B>
2608     * 
2609     * @param backendNodeId Identifier of the backend node to highlight.
2610     * <BR /><B>OPTIONAL</B>
2611     * 
2612     * @param objectId JavaScript object id of the node to be highlighted.
2613     * <BR /><B>OPTIONAL</B>
2614     * 
2615     * @param selector Selectors to highlight relevant nodes.
2616     * <BR /><B>OPTIONAL</B>
2617     * 
2618     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2619     * {@link Ret0}&gt;</CODE>
2620     *
2621     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2622     * browser receives the invocation-request.
2623     *
2624     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2625     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2626     * {@code >} to ensure the Browser Function has run to completion.
2627     */
2628    public static Script<String, JsonObject, Ret0> highlightNode(
2629            Overlay.HighlightConfig highlightConfig, Integer nodeId, Integer backendNodeId, 
2630            String objectId, String selector
2631        )
2632    {
2633        // Exception-Check(s) to ensure that if any parameters which are not declared as
2634        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2635        
2636        if (highlightConfig == null) THROWS.throwNPE("highlightConfig");
2637        
2638        final int       webSocketID = 31007000 + counter++;
2639        final boolean[] optionals   = { false, true, true, true, true, };
2640        
2641        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2642        String requestJSON = WriteJSON.get(
2643            parameterTypes.get("highlightNode"),
2644            parameterNames.get("highlightNode"),
2645            optionals, webSocketID,
2646            "Overlay.highlightNode",
2647            highlightConfig, nodeId, backendNodeId, objectId, selector
2648        );
2649        
2650        // This Remote Command does not have a Return-Value.
2651        return new Script<>
2652            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2653    }
2654    
2655    /**
2656     * Highlights given quad. Coordinates are absolute with respect to the main frame viewport.
2657     * 
2658     * @param quad Quad to highlight
2659     * 
2660     * @param color The highlight fill color (default: transparent).
2661     * <BR /><B>OPTIONAL</B>
2662     * 
2663     * @param outlineColor The highlight outline color (default: transparent).
2664     * <BR /><B>OPTIONAL</B>
2665     * 
2666     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2667     * {@link Ret0}&gt;</CODE>
2668     *
2669     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2670     * browser receives the invocation-request.
2671     *
2672     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2673     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2674     * {@code >} to ensure the Browser Function has run to completion.
2675     */
2676    public static Script<String, JsonObject, Ret0> highlightQuad
2677        (Number[] quad, DOM.RGBA color, DOM.RGBA outlineColor)
2678    {
2679        // Exception-Check(s) to ensure that if any parameters which are not declared as
2680        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2681        
2682        if (quad == null) THROWS.throwNPE("quad");
2683        
2684        final int       webSocketID = 31008000 + counter++;
2685        final boolean[] optionals   = { false, true, true, };
2686        
2687        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2688        String requestJSON = WriteJSON.get(
2689            parameterTypes.get("highlightQuad"),
2690            parameterNames.get("highlightQuad"),
2691            optionals, webSocketID,
2692            "Overlay.highlightQuad",
2693            quad, color, outlineColor
2694        );
2695        
2696        // This Remote Command does not have a Return-Value.
2697        return new Script<>
2698            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2699    }
2700    
2701    /**
2702     * Highlights given rectangle. Coordinates are absolute with respect to the main frame viewport.
2703     * 
2704     * @param x X coordinate
2705     * 
2706     * @param y Y coordinate
2707     * 
2708     * @param width Rectangle width
2709     * 
2710     * @param height Rectangle height
2711     * 
2712     * @param color The highlight fill color (default: transparent).
2713     * <BR /><B>OPTIONAL</B>
2714     * 
2715     * @param outlineColor The highlight outline color (default: transparent).
2716     * <BR /><B>OPTIONAL</B>
2717     * 
2718     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2719     * {@link Ret0}&gt;</CODE>
2720     *
2721     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2722     * browser receives the invocation-request.
2723     *
2724     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2725     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2726     * {@code >} to ensure the Browser Function has run to completion.
2727     */
2728    public static Script<String, JsonObject, Ret0> highlightRect
2729        (int x, int y, int width, int height, DOM.RGBA color, DOM.RGBA outlineColor)
2730    {
2731        final int       webSocketID = 31009000 + counter++;
2732        final boolean[] optionals   = { false, false, false, false, true, true, };
2733        
2734        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2735        String requestJSON = WriteJSON.get(
2736            parameterTypes.get("highlightRect"),
2737            parameterNames.get("highlightRect"),
2738            optionals, webSocketID,
2739            "Overlay.highlightRect",
2740            x, y, width, height, color, outlineColor
2741        );
2742        
2743        // This Remote Command does not have a Return-Value.
2744        return new Script<>
2745            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2746    }
2747    
2748    /**
2749     * Highlights the source order of the children of the DOM node with given id or with the given
2750     * JavaScript object wrapper. Either nodeId or objectId must be specified.
2751     * 
2752     * @param sourceOrderConfig A descriptor for the appearance of the overlay drawing.
2753     * 
2754     * @param nodeId Identifier of the node to highlight.
2755     * <BR /><B>OPTIONAL</B>
2756     * 
2757     * @param backendNodeId Identifier of the backend node to highlight.
2758     * <BR /><B>OPTIONAL</B>
2759     * 
2760     * @param objectId JavaScript object id of the node to be highlighted.
2761     * <BR /><B>OPTIONAL</B>
2762     * 
2763     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2764     * {@link Ret0}&gt;</CODE>
2765     *
2766     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2767     * browser receives the invocation-request.
2768     *
2769     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2770     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2771     * {@code >} to ensure the Browser Function has run to completion.
2772     */
2773    public static Script<String, JsonObject, Ret0> highlightSourceOrder(
2774            Overlay.SourceOrderConfig sourceOrderConfig, Integer nodeId, Integer backendNodeId, 
2775            String objectId
2776        )
2777    {
2778        // Exception-Check(s) to ensure that if any parameters which are not declared as
2779        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2780        
2781        if (sourceOrderConfig == null) THROWS.throwNPE("sourceOrderConfig");
2782        
2783        final int       webSocketID = 31010000 + counter++;
2784        final boolean[] optionals   = { false, true, true, true, };
2785        
2786        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2787        String requestJSON = WriteJSON.get(
2788            parameterTypes.get("highlightSourceOrder"),
2789            parameterNames.get("highlightSourceOrder"),
2790            optionals, webSocketID,
2791            "Overlay.highlightSourceOrder",
2792            sourceOrderConfig, nodeId, backendNodeId, objectId
2793        );
2794        
2795        // This Remote Command does not have a Return-Value.
2796        return new Script<>
2797            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2798    }
2799    
2800    /**
2801     * Enters the 'inspect' mode. In this mode, elements that user is hovering over are highlighted.
2802     * Backend then generates 'inspectNodeRequested' event upon element selection.
2803     * 
2804     * @param mode Set an inspection mode.
2805     * 
2806     * @param highlightConfig 
2807     * A descriptor for the highlight appearance of hovered-over nodes. May be omitted if <CODE>enabled
2808     * == false</CODE>.
2809     * <BR /><B>OPTIONAL</B>
2810     * 
2811     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2812     * {@link Ret0}&gt;</CODE>
2813     *
2814     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2815     * browser receives the invocation-request.
2816     *
2817     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2818     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2819     * {@code >} to ensure the Browser Function has run to completion.
2820     */
2821    public static Script<String, JsonObject, Ret0> setInspectMode
2822        (String mode, Overlay.HighlightConfig highlightConfig)
2823    {
2824        // Exception-Check(s) to ensure that if any parameters which are not declared as
2825        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2826        
2827        if (mode == null) THROWS.throwNPE("mode");
2828        
2829        // Exception-Check(s) to ensure that if any parameters which must adhere to a
2830        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
2831        
2832        THROWS.checkIAE("mode", mode, "Overlay.InspectMode", Overlay.InspectMode);
2833        
2834        final int       webSocketID = 31011000 + counter++;
2835        final boolean[] optionals   = { false, true, };
2836        
2837        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2838        String requestJSON = WriteJSON.get(
2839            parameterTypes.get("setInspectMode"),
2840            parameterNames.get("setInspectMode"),
2841            optionals, webSocketID,
2842            "Overlay.setInspectMode",
2843            mode, highlightConfig
2844        );
2845        
2846        // This Remote Command does not have a Return-Value.
2847        return new Script<>
2848            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2849    }
2850    
2851    /**
2852     * Highlights owner element of all frames detected to be ads.
2853     * 
2854     * @param show True for showing ad highlights
2855     * 
2856     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2857     * {@link Ret0}&gt;</CODE>
2858     *
2859     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2860     * browser receives the invocation-request.
2861     *
2862     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2863     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2864     * {@code >} to ensure the Browser Function has run to completion.
2865     */
2866    public static Script<String, JsonObject, Ret0> setShowAdHighlights(boolean show)
2867    {
2868        final int       webSocketID = 31012000 + counter++;
2869        final boolean[] optionals   = { false, };
2870        
2871        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2872        String requestJSON = WriteJSON.get(
2873            parameterTypes.get("setShowAdHighlights"),
2874            parameterNames.get("setShowAdHighlights"),
2875            optionals, webSocketID,
2876            "Overlay.setShowAdHighlights",
2877            show
2878        );
2879        
2880        // This Remote Command does not have a Return-Value.
2881        return new Script<>
2882            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2883    }
2884    
2885    /**
2886     * <CODE>[No Description Provided by Google]</CODE>
2887     * 
2888     * @param message The message to display, also triggers resume and step over controls.
2889     * <BR /><B>OPTIONAL</B>
2890     * 
2891     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2892     * {@link Ret0}&gt;</CODE>
2893     *
2894     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2895     * browser receives the invocation-request.
2896     *
2897     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2898     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2899     * {@code >} to ensure the Browser Function has run to completion.
2900     */
2901    public static Script<String, JsonObject, Ret0> setPausedInDebuggerMessage(String message)
2902    {
2903        final int       webSocketID = 31013000 + counter++;
2904        final boolean[] optionals   = { true, };
2905        
2906        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2907        String requestJSON = WriteJSON.get(
2908            parameterTypes.get("setPausedInDebuggerMessage"),
2909            parameterNames.get("setPausedInDebuggerMessage"),
2910            optionals, webSocketID,
2911            "Overlay.setPausedInDebuggerMessage",
2912            message
2913        );
2914        
2915        // This Remote Command does not have a Return-Value.
2916        return new Script<>
2917            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2918    }
2919    
2920    /**
2921     * Requests that backend shows debug borders on layers
2922     * 
2923     * @param show True for showing debug borders
2924     * 
2925     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2926     * {@link Ret0}&gt;</CODE>
2927     *
2928     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2929     * browser receives the invocation-request.
2930     *
2931     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2932     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2933     * {@code >} to ensure the Browser Function has run to completion.
2934     */
2935    public static Script<String, JsonObject, Ret0> setShowDebugBorders(boolean show)
2936    {
2937        final int       webSocketID = 31014000 + counter++;
2938        final boolean[] optionals   = { false, };
2939        
2940        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2941        String requestJSON = WriteJSON.get(
2942            parameterTypes.get("setShowDebugBorders"),
2943            parameterNames.get("setShowDebugBorders"),
2944            optionals, webSocketID,
2945            "Overlay.setShowDebugBorders",
2946            show
2947        );
2948        
2949        // This Remote Command does not have a Return-Value.
2950        return new Script<>
2951            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2952    }
2953    
2954    /**
2955     * Requests that backend shows the FPS counter
2956     * 
2957     * @param show True for showing the FPS counter
2958     * 
2959     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2960     * {@link Ret0}&gt;</CODE>
2961     *
2962     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2963     * browser receives the invocation-request.
2964     *
2965     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
2966     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
2967     * {@code >} to ensure the Browser Function has run to completion.
2968     */
2969    public static Script<String, JsonObject, Ret0> setShowFPSCounter(boolean show)
2970    {
2971        final int       webSocketID = 31015000 + counter++;
2972        final boolean[] optionals   = { false, };
2973        
2974        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
2975        String requestJSON = WriteJSON.get(
2976            parameterTypes.get("setShowFPSCounter"),
2977            parameterNames.get("setShowFPSCounter"),
2978            optionals, webSocketID,
2979            "Overlay.setShowFPSCounter",
2980            show
2981        );
2982        
2983        // This Remote Command does not have a Return-Value.
2984        return new Script<>
2985            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
2986    }
2987    
2988    /**
2989     * Highlight multiple elements with the CSS Grid overlay.
2990     * 
2991     * @param gridNodeHighlightConfigs An array of node identifiers and descriptors for the highlight appearance.
2992     * 
2993     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
2994     * {@link Ret0}&gt;</CODE>
2995     *
2996     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
2997     * browser receives the invocation-request.
2998     *
2999     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3000     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3001     * {@code >} to ensure the Browser Function has run to completion.
3002     */
3003    public static Script<String, JsonObject, Ret0> setShowGridOverlays
3004        (Overlay.GridNodeHighlightConfig[] gridNodeHighlightConfigs)
3005    {
3006        // Exception-Check(s) to ensure that if any parameters which are not declared as
3007        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3008        
3009        if (gridNodeHighlightConfigs == null) THROWS.throwNPE("gridNodeHighlightConfigs");
3010        
3011        final int       webSocketID = 31016000 + counter++;
3012        final boolean[] optionals   = { false, };
3013        
3014        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3015        String requestJSON = WriteJSON.get(
3016            parameterTypes.get("setShowGridOverlays"),
3017            parameterNames.get("setShowGridOverlays"),
3018            optionals, webSocketID,
3019            "Overlay.setShowGridOverlays",
3020            (Object) gridNodeHighlightConfigs
3021        );
3022        
3023        // This Remote Command does not have a Return-Value.
3024        return new Script<>
3025            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3026    }
3027    
3028    /**
3029     * <CODE>[No Description Provided by Google]</CODE>
3030     * 
3031     * @param flexNodeHighlightConfigs An array of node identifiers and descriptors for the highlight appearance.
3032     * 
3033     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3034     * {@link Ret0}&gt;</CODE>
3035     *
3036     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3037     * browser receives the invocation-request.
3038     *
3039     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3040     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3041     * {@code >} to ensure the Browser Function has run to completion.
3042     */
3043    public static Script<String, JsonObject, Ret0> setShowFlexOverlays
3044        (Overlay.FlexNodeHighlightConfig[] flexNodeHighlightConfigs)
3045    {
3046        // Exception-Check(s) to ensure that if any parameters which are not declared as
3047        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3048        
3049        if (flexNodeHighlightConfigs == null) THROWS.throwNPE("flexNodeHighlightConfigs");
3050        
3051        final int       webSocketID = 31017000 + counter++;
3052        final boolean[] optionals   = { false, };
3053        
3054        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3055        String requestJSON = WriteJSON.get(
3056            parameterTypes.get("setShowFlexOverlays"),
3057            parameterNames.get("setShowFlexOverlays"),
3058            optionals, webSocketID,
3059            "Overlay.setShowFlexOverlays",
3060            (Object) flexNodeHighlightConfigs
3061        );
3062        
3063        // This Remote Command does not have a Return-Value.
3064        return new Script<>
3065            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3066    }
3067    
3068    /**
3069     * <CODE>[No Description Provided by Google]</CODE>
3070     * 
3071     * @param scrollSnapHighlightConfigs An array of node identifiers and descriptors for the highlight appearance.
3072     * 
3073     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3074     * {@link Ret0}&gt;</CODE>
3075     *
3076     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3077     * browser receives the invocation-request.
3078     *
3079     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3080     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3081     * {@code >} to ensure the Browser Function has run to completion.
3082     */
3083    public static Script<String, JsonObject, Ret0> setShowScrollSnapOverlays
3084        (Overlay.ScrollSnapHighlightConfig[] scrollSnapHighlightConfigs)
3085    {
3086        // Exception-Check(s) to ensure that if any parameters which are not declared as
3087        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3088        
3089        if (scrollSnapHighlightConfigs == null) THROWS.throwNPE("scrollSnapHighlightConfigs");
3090        
3091        final int       webSocketID = 31018000 + counter++;
3092        final boolean[] optionals   = { false, };
3093        
3094        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3095        String requestJSON = WriteJSON.get(
3096            parameterTypes.get("setShowScrollSnapOverlays"),
3097            parameterNames.get("setShowScrollSnapOverlays"),
3098            optionals, webSocketID,
3099            "Overlay.setShowScrollSnapOverlays",
3100            (Object) scrollSnapHighlightConfigs
3101        );
3102        
3103        // This Remote Command does not have a Return-Value.
3104        return new Script<>
3105            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3106    }
3107    
3108    /**
3109     * <CODE>[No Description Provided by Google]</CODE>
3110     * 
3111     * @param containerQueryHighlightConfigs An array of node identifiers and descriptors for the highlight appearance.
3112     * 
3113     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3114     * {@link Ret0}&gt;</CODE>
3115     *
3116     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3117     * browser receives the invocation-request.
3118     *
3119     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3120     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3121     * {@code >} to ensure the Browser Function has run to completion.
3122     */
3123    public static Script<String, JsonObject, Ret0> setShowContainerQueryOverlays
3124        (Overlay.ContainerQueryHighlightConfig[] containerQueryHighlightConfigs)
3125    {
3126        // Exception-Check(s) to ensure that if any parameters which are not declared as
3127        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3128        
3129        if (containerQueryHighlightConfigs == null) THROWS.throwNPE("containerQueryHighlightConfigs");
3130        
3131        final int       webSocketID = 31019000 + counter++;
3132        final boolean[] optionals   = { false, };
3133        
3134        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3135        String requestJSON = WriteJSON.get(
3136            parameterTypes.get("setShowContainerQueryOverlays"),
3137            parameterNames.get("setShowContainerQueryOverlays"),
3138            optionals, webSocketID,
3139            "Overlay.setShowContainerQueryOverlays",
3140            (Object) containerQueryHighlightConfigs
3141        );
3142        
3143        // This Remote Command does not have a Return-Value.
3144        return new Script<>
3145            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3146    }
3147    
3148    /**
3149     * Requests that backend shows paint rectangles
3150     * 
3151     * @param result True for showing paint rectangles
3152     * 
3153     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3154     * {@link Ret0}&gt;</CODE>
3155     *
3156     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3157     * browser receives the invocation-request.
3158     *
3159     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3160     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3161     * {@code >} to ensure the Browser Function has run to completion.
3162     */
3163    public static Script<String, JsonObject, Ret0> setShowPaintRects(boolean result)
3164    {
3165        final int       webSocketID = 31020000 + counter++;
3166        final boolean[] optionals   = { false, };
3167        
3168        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3169        String requestJSON = WriteJSON.get(
3170            parameterTypes.get("setShowPaintRects"),
3171            parameterNames.get("setShowPaintRects"),
3172            optionals, webSocketID,
3173            "Overlay.setShowPaintRects",
3174            result
3175        );
3176        
3177        // This Remote Command does not have a Return-Value.
3178        return new Script<>
3179            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3180    }
3181    
3182    /**
3183     * Requests that backend shows layout shift regions
3184     * 
3185     * @param result True for showing layout shift regions
3186     * 
3187     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3188     * {@link Ret0}&gt;</CODE>
3189     *
3190     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3191     * browser receives the invocation-request.
3192     *
3193     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3194     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3195     * {@code >} to ensure the Browser Function has run to completion.
3196     */
3197    public static Script<String, JsonObject, Ret0> setShowLayoutShiftRegions(boolean result)
3198    {
3199        final int       webSocketID = 31021000 + counter++;
3200        final boolean[] optionals   = { false, };
3201        
3202        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3203        String requestJSON = WriteJSON.get(
3204            parameterTypes.get("setShowLayoutShiftRegions"),
3205            parameterNames.get("setShowLayoutShiftRegions"),
3206            optionals, webSocketID,
3207            "Overlay.setShowLayoutShiftRegions",
3208            result
3209        );
3210        
3211        // This Remote Command does not have a Return-Value.
3212        return new Script<>
3213            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3214    }
3215    
3216    /**
3217     * Requests that backend shows scroll bottleneck rects
3218     * 
3219     * @param show True for showing scroll bottleneck rects
3220     * 
3221     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3222     * {@link Ret0}&gt;</CODE>
3223     *
3224     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3225     * browser receives the invocation-request.
3226     *
3227     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3228     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3229     * {@code >} to ensure the Browser Function has run to completion.
3230     */
3231    public static Script<String, JsonObject, Ret0> setShowScrollBottleneckRects(boolean show)
3232    {
3233        final int       webSocketID = 31022000 + counter++;
3234        final boolean[] optionals   = { false, };
3235        
3236        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3237        String requestJSON = WriteJSON.get(
3238            parameterTypes.get("setShowScrollBottleneckRects"),
3239            parameterNames.get("setShowScrollBottleneckRects"),
3240            optionals, webSocketID,
3241            "Overlay.setShowScrollBottleneckRects",
3242            show
3243        );
3244        
3245        // This Remote Command does not have a Return-Value.
3246        return new Script<>
3247            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3248    }
3249    
3250    /**
3251     * Requests that backend shows hit-test borders on layers
3252     * 
3253     * @param show True for showing hit-test borders
3254     * 
3255     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3256     * {@link Ret0}&gt;</CODE>
3257     *
3258     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3259     * browser receives the invocation-request.
3260     *
3261     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3262     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3263     * {@code >} to ensure the Browser Function has run to completion.
3264     */
3265    public static Script<String, JsonObject, Ret0> setShowHitTestBorders(boolean show)
3266    {
3267        final int       webSocketID = 31023000 + counter++;
3268        final boolean[] optionals   = { false, };
3269        
3270        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3271        String requestJSON = WriteJSON.get(
3272            parameterTypes.get("setShowHitTestBorders"),
3273            parameterNames.get("setShowHitTestBorders"),
3274            optionals, webSocketID,
3275            "Overlay.setShowHitTestBorders",
3276            show
3277        );
3278        
3279        // This Remote Command does not have a Return-Value.
3280        return new Script<>
3281            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3282    }
3283    
3284    /**
3285     * Request that backend shows an overlay with web vital metrics.
3286     * 
3287     * @param show -
3288     * 
3289     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3290     * {@link Ret0}&gt;</CODE>
3291     *
3292     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3293     * browser receives the invocation-request.
3294     *
3295     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3296     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3297     * {@code >} to ensure the Browser Function has run to completion.
3298     */
3299    public static Script<String, JsonObject, Ret0> setShowWebVitals(boolean show)
3300    {
3301        final int       webSocketID = 31024000 + counter++;
3302        final boolean[] optionals   = { false, };
3303        
3304        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3305        String requestJSON = WriteJSON.get(
3306            parameterTypes.get("setShowWebVitals"),
3307            parameterNames.get("setShowWebVitals"),
3308            optionals, webSocketID,
3309            "Overlay.setShowWebVitals",
3310            show
3311        );
3312        
3313        // This Remote Command does not have a Return-Value.
3314        return new Script<>
3315            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3316    }
3317    
3318    /**
3319     * Paints viewport size upon main frame resize.
3320     * 
3321     * @param show Whether to paint size or not.
3322     * 
3323     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3324     * {@link Ret0}&gt;</CODE>
3325     *
3326     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3327     * browser receives the invocation-request.
3328     *
3329     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3330     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3331     * {@code >} to ensure the Browser Function has run to completion.
3332     */
3333    public static Script<String, JsonObject, Ret0> setShowViewportSizeOnResize(boolean show)
3334    {
3335        final int       webSocketID = 31025000 + counter++;
3336        final boolean[] optionals   = { false, };
3337        
3338        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3339        String requestJSON = WriteJSON.get(
3340            parameterTypes.get("setShowViewportSizeOnResize"),
3341            parameterNames.get("setShowViewportSizeOnResize"),
3342            optionals, webSocketID,
3343            "Overlay.setShowViewportSizeOnResize",
3344            show
3345        );
3346        
3347        // This Remote Command does not have a Return-Value.
3348        return new Script<>
3349            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3350    }
3351    
3352    /**
3353     * Add a dual screen device hinge
3354     * 
3355     * @param hingeConfig hinge data, null means hideHinge
3356     * <BR /><B>OPTIONAL</B>
3357     * 
3358     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3359     * {@link Ret0}&gt;</CODE>
3360     *
3361     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3362     * browser receives the invocation-request.
3363     *
3364     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3365     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3366     * {@code >} to ensure the Browser Function has run to completion.
3367     */
3368    public static Script<String, JsonObject, Ret0> setShowHinge(Overlay.HingeConfig hingeConfig)
3369    {
3370        final int       webSocketID = 31026000 + counter++;
3371        final boolean[] optionals   = { true, };
3372        
3373        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3374        String requestJSON = WriteJSON.get(
3375            parameterTypes.get("setShowHinge"),
3376            parameterNames.get("setShowHinge"),
3377            optionals, webSocketID,
3378            "Overlay.setShowHinge",
3379            hingeConfig
3380        );
3381        
3382        // This Remote Command does not have a Return-Value.
3383        return new Script<>
3384            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3385    }
3386    
3387    /**
3388     * Show elements in isolation mode with overlays.
3389     * 
3390     * @param isolatedElementHighlightConfigs An array of node identifiers and descriptors for the highlight appearance.
3391     * 
3392     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
3393     * {@link Ret0}&gt;</CODE>
3394     *
3395     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
3396     * browser receives the invocation-request.
3397     *
3398     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
3399     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
3400     * {@code >} to ensure the Browser Function has run to completion.
3401     */
3402    public static Script<String, JsonObject, Ret0> setShowIsolatedElements
3403        (Overlay.IsolatedElementHighlightConfig[] isolatedElementHighlightConfigs)
3404    {
3405        // Exception-Check(s) to ensure that if any parameters which are not declared as
3406        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3407        
3408        if (isolatedElementHighlightConfigs == null) THROWS.throwNPE("isolatedElementHighlightConfigs");
3409        
3410        final int       webSocketID = 31027000 + counter++;
3411        final boolean[] optionals   = { false, };
3412        
3413        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
3414        String requestJSON = WriteJSON.get(
3415            parameterTypes.get("setShowIsolatedElements"),
3416            parameterNames.get("setShowIsolatedElements"),
3417            optionals, webSocketID,
3418            "Overlay.setShowIsolatedElements",
3419            (Object) isolatedElementHighlightConfigs
3420        );
3421        
3422        // This Remote Command does not have a Return-Value.
3423        return new Script<>
3424            (webSocketID, requestJSON, VOID_RETURN.NoReturnValues);
3425    }
3426    
3427}