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>Actions and events related to the inspected page belong to the page domain.</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 Page
030{
031    // ********************************************************************************************
032    // ********************************************************************************************
033    // Class Header Stuff
034    // ********************************************************************************************
035    // ********************************************************************************************
036
037
038    // No Pubic Constructors
039    private Page () { }
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 : Page.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        v = new Vector<String>(1);
078        parameterNames.put("addScriptToEvaluateOnLoad", v);
079        Collections.addAll(v, new String[]
080        { "scriptSource", });
081
082        v = new Vector<String>(3);
083        parameterNames.put("addScriptToEvaluateOnNewDocument", v);
084        Collections.addAll(v, new String[]
085        { "source", "worldName", "includeCommandLineAPI", });
086
087        parameterNames.put("bringToFront", EMPTY_VEC_STR);
088
089        v = new Vector<String>(5);
090        parameterNames.put("captureScreenshot", v);
091        Collections.addAll(v, new String[]
092        { "format", "quality", "clip", "fromSurface", "captureBeyondViewport", });
093
094        v = new Vector<String>(1);
095        parameterNames.put("captureSnapshot", v);
096        Collections.addAll(v, new String[]
097        { "format", });
098
099        parameterNames.put("clearDeviceMetricsOverride", EMPTY_VEC_STR);
100
101        parameterNames.put("clearDeviceOrientationOverride", EMPTY_VEC_STR);
102
103        parameterNames.put("clearGeolocationOverride", EMPTY_VEC_STR);
104
105        v = new Vector<String>(3);
106        parameterNames.put("createIsolatedWorld", v);
107        Collections.addAll(v, new String[]
108        { "frameId", "worldName", "grantUniveralAccess", });
109
110        v = new Vector<String>(2);
111        parameterNames.put("deleteCookie", v);
112        Collections.addAll(v, new String[]
113        { "cookieName", "url", });
114
115        parameterNames.put("disable", EMPTY_VEC_STR);
116
117        parameterNames.put("enable", EMPTY_VEC_STR);
118
119        parameterNames.put("getAppManifest", EMPTY_VEC_STR);
120
121        parameterNames.put("getInstallabilityErrors", EMPTY_VEC_STR);
122
123        parameterNames.put("getManifestIcons", EMPTY_VEC_STR);
124
125        parameterNames.put("getAppId", EMPTY_VEC_STR);
126
127        parameterNames.put("getCookies", EMPTY_VEC_STR);
128
129        parameterNames.put("getFrameTree", EMPTY_VEC_STR);
130
131        parameterNames.put("getLayoutMetrics", EMPTY_VEC_STR);
132
133        parameterNames.put("getNavigationHistory", EMPTY_VEC_STR);
134
135        parameterNames.put("resetNavigationHistory", EMPTY_VEC_STR);
136
137        v = new Vector<String>(2);
138        parameterNames.put("getResourceContent", v);
139        Collections.addAll(v, new String[]
140        { "frameId", "url", });
141
142        parameterNames.put("getResourceTree", EMPTY_VEC_STR);
143
144        v = new Vector<String>(2);
145        parameterNames.put("handleJavaScriptDialog", v);
146        Collections.addAll(v, new String[]
147        { "accept", "promptText", });
148
149        v = new Vector<String>(5);
150        parameterNames.put("navigate", v);
151        Collections.addAll(v, new String[]
152        { "url", "referrer", "transitionType", "frameId", "referrerPolicy", });
153
154        v = new Vector<String>(1);
155        parameterNames.put("navigateToHistoryEntry", v);
156        Collections.addAll(v, new String[]
157        { "entryId", });
158
159        v = new Vector<String>(16);
160        parameterNames.put("printToPDF", v);
161        Collections.addAll(v, new String[]
162        { "landscape", "displayHeaderFooter", "printBackground", "scale", "paperWidth", "paperHeight", "marginTop", "marginBottom", "marginLeft", "marginRight", "pageRanges", "ignoreInvalidPageRanges", "headerTemplate", "footerTemplate", "preferCSSPageSize", "transferMode", });
163
164        v = new Vector<String>(2);
165        parameterNames.put("reload", v);
166        Collections.addAll(v, new String[]
167        { "ignoreCache", "scriptToEvaluateOnLoad", });
168
169        v = new Vector<String>(1);
170        parameterNames.put("removeScriptToEvaluateOnLoad", v);
171        Collections.addAll(v, new String[]
172        { "identifier", });
173
174        v = new Vector<String>(1);
175        parameterNames.put("removeScriptToEvaluateOnNewDocument", v);
176        Collections.addAll(v, new String[]
177        { "identifier", });
178
179        v = new Vector<String>(1);
180        parameterNames.put("screencastFrameAck", v);
181        Collections.addAll(v, new String[]
182        { "sessionId", });
183
184        v = new Vector<String>(5);
185        parameterNames.put("searchInResource", v);
186        Collections.addAll(v, new String[]
187        { "frameId", "url", "query", "caseSensitive", "isRegex", });
188
189        v = new Vector<String>(1);
190        parameterNames.put("setAdBlockingEnabled", v);
191        Collections.addAll(v, new String[]
192        { "enabled", });
193
194        v = new Vector<String>(1);
195        parameterNames.put("setBypassCSP", v);
196        Collections.addAll(v, new String[]
197        { "enabled", });
198
199        v = new Vector<String>(1);
200        parameterNames.put("getPermissionsPolicyState", v);
201        Collections.addAll(v, new String[]
202        { "frameId", });
203
204        v = new Vector<String>(1);
205        parameterNames.put("getOriginTrials", v);
206        Collections.addAll(v, new String[]
207        { "frameId", });
208
209        v = new Vector<String>(12);
210        parameterNames.put("setDeviceMetricsOverride", v);
211        Collections.addAll(v, new String[]
212        { "width", "height", "deviceScaleFactor", "mobile", "scale", "screenWidth", "screenHeight", "positionX", "positionY", "dontSetVisibleSize", "screenOrientation", "viewport", });
213
214        v = new Vector<String>(3);
215        parameterNames.put("setDeviceOrientationOverride", v);
216        Collections.addAll(v, new String[]
217        { "alpha", "beta", "gamma", });
218
219        v = new Vector<String>(1);
220        parameterNames.put("setFontFamilies", v);
221        Collections.addAll(v, new String[]
222        { "fontFamilies", });
223
224        v = new Vector<String>(1);
225        parameterNames.put("setFontSizes", v);
226        Collections.addAll(v, new String[]
227        { "fontSizes", });
228
229        v = new Vector<String>(2);
230        parameterNames.put("setDocumentContent", v);
231        Collections.addAll(v, new String[]
232        { "frameId", "html", });
233
234        v = new Vector<String>(2);
235        parameterNames.put("setDownloadBehavior", v);
236        Collections.addAll(v, new String[]
237        { "behavior", "downloadPath", });
238
239        v = new Vector<String>(3);
240        parameterNames.put("setGeolocationOverride", v);
241        Collections.addAll(v, new String[]
242        { "latitude", "longitude", "accuracy", });
243
244        v = new Vector<String>(1);
245        parameterNames.put("setLifecycleEventsEnabled", v);
246        Collections.addAll(v, new String[]
247        { "enabled", });
248
249        v = new Vector<String>(2);
250        parameterNames.put("setTouchEmulationEnabled", v);
251        Collections.addAll(v, new String[]
252        { "enabled", "configuration", });
253
254        v = new Vector<String>(5);
255        parameterNames.put("startScreencast", v);
256        Collections.addAll(v, new String[]
257        { "format", "quality", "maxWidth", "maxHeight", "everyNthFrame", });
258
259        parameterNames.put("stopLoading", EMPTY_VEC_STR);
260
261        parameterNames.put("crash", EMPTY_VEC_STR);
262
263        parameterNames.put("close", EMPTY_VEC_STR);
264
265        v = new Vector<String>(1);
266        parameterNames.put("setWebLifecycleState", v);
267        Collections.addAll(v, new String[]
268        { "state", });
269
270        parameterNames.put("stopScreencast", EMPTY_VEC_STR);
271
272        v = new Vector<String>(1);
273        parameterNames.put("produceCompilationCache", v);
274        Collections.addAll(v, new String[]
275        { "scripts", });
276
277        v = new Vector<String>(2);
278        parameterNames.put("addCompilationCache", v);
279        Collections.addAll(v, new String[]
280        { "url", "data", });
281
282        parameterNames.put("clearCompilationCache", EMPTY_VEC_STR);
283
284        v = new Vector<String>(2);
285        parameterNames.put("generateTestReport", v);
286        Collections.addAll(v, new String[]
287        { "message", "group", });
288
289        parameterNames.put("waitForDebugger", EMPTY_VEC_STR);
290
291        v = new Vector<String>(1);
292        parameterNames.put("setInterceptFileChooserDialog", v);
293        Collections.addAll(v, new String[]
294        { "enabled", });
295    }
296
297
298    // ********************************************************************************************
299    // ********************************************************************************************
300    // Types - Static Inner Classes
301    // ********************************************************************************************
302    // ********************************************************************************************
303
304    // public static class FrameId => String
305    
306    // public static class ScriptIdentifier => String
307    
308    /**
309     * Indicates whether a frame has been identified as an ad.
310     * <BR />
311     * <BR /><B>EXPERIMENTAL</B>
312     */
313    public static final String[] AdFrameType =
314    { "none", "child", "root", };
315    
316    /**
317     * <CODE>[No Description Provided by Google]</CODE>
318     * <BR />
319     * <BR /><B>EXPERIMENTAL</B>
320     */
321    public static final String[] AdFrameExplanation =
322    { "ParentIsAd", "CreatedByAdScript", "MatchedBlockingRule", };
323    
324    /**
325     * Indicates whether the frame is a secure context and why it is the case.
326     * <BR />
327     * <BR /><B>EXPERIMENTAL</B>
328     */
329    public static final String[] SecureContextType =
330    { "Secure", "SecureLocalhost", "InsecureScheme", "InsecureAncestor", };
331    
332    /**
333     * Indicates whether the frame is cross-origin isolated and why it is the case.
334     * <BR />
335     * <BR /><B>EXPERIMENTAL</B>
336     */
337    public static final String[] CrossOriginIsolatedContextType =
338    { "Isolated", "NotIsolated", "NotIsolatedFeatureDisabled", };
339    
340    /**
341     * <CODE>[No Description Provided by Google]</CODE>
342     * <BR />
343     * <BR /><B>EXPERIMENTAL</B>
344     */
345    public static final String[] GatedAPIFeatures =
346    { 
347        "SharedArrayBuffers", "SharedArrayBuffersTransferAllowed", "PerformanceMeasureMemory", 
348        "PerformanceProfile", 
349    };
350    
351    /**
352     * All Permissions Policy features. This enum should match the one defined
353     * in third_party/blink/renderer/core/permissions_policy/permissions_policy_features.json5.
354     * <BR />
355     * <BR /><B>EXPERIMENTAL</B>
356     */
357    public static final String[] PermissionsPolicyFeature =
358    { 
359        "accelerometer", "ambient-light-sensor", "attribution-reporting", "autoplay", "camera", 
360        "ch-dpr", "ch-device-memory", "ch-downlink", "ch-ect", "ch-prefers-color-scheme", "ch-rtt", 
361        "ch-ua", "ch-ua-arch", "ch-ua-bitness", "ch-ua-platform", "ch-ua-model", "ch-ua-mobile", 
362        "ch-ua-full-version", "ch-ua-platform-version", "ch-ua-reduced", "ch-viewport-height", 
363        "ch-viewport-width", "ch-width", "clipboard-read", "clipboard-write", 
364        "cross-origin-isolated", "direct-sockets", "display-capture", "document-domain", 
365        "encrypted-media", "execution-while-out-of-viewport", "execution-while-not-rendered", 
366        "focus-without-user-activation", "fullscreen", "frobulate", "gamepad", "geolocation", 
367        "gyroscope", "hid", "idle-detection", "interest-cohort", "keyboard-map", "magnetometer", 
368        "microphone", "midi", "otp-credentials", "payment", "picture-in-picture", 
369        "publickey-credentials-get", "screen-wake-lock", "serial", "shared-autofill", 
370        "storage-access-api", "sync-xhr", "trust-token-redemption", "usb", "vertical-scroll", 
371        "web-share", "window-placement", "xr-spatial-tracking", 
372    };
373    
374    /**
375     * Reason for a permissions policy feature to be disabled.
376     * <BR />
377     * <BR /><B>EXPERIMENTAL</B>
378     */
379    public static final String[] PermissionsPolicyBlockReason =
380    { "Header", "IframeAttribute", };
381    
382    /**
383     * Origin Trial(https://www.chromium.org/blink/origin-trials) support.
384     * Status for an Origin Trial token.
385     * <BR />
386     * <BR /><B>EXPERIMENTAL</B>
387     */
388    public static final String[] OriginTrialTokenStatus =
389    { 
390        "Success", "NotSupported", "Insecure", "Expired", "WrongOrigin", "InvalidSignature", 
391        "Malformed", "WrongVersion", "FeatureDisabled", "TokenDisabled", "FeatureDisabledForUser", 
392        "UnknownTrial", 
393    };
394    
395    /**
396     * Status for an Origin Trial.
397     * <BR />
398     * <BR /><B>EXPERIMENTAL</B>
399     */
400    public static final String[] OriginTrialStatus =
401    { "Enabled", "ValidTokenNotProvided", "OSNotSupported", "TrialNotAllowed", };
402    
403    /**
404     * <CODE>[No Description Provided by Google]</CODE>
405     * <BR />
406     * <BR /><B>EXPERIMENTAL</B>
407     */
408    public static final String[] OriginTrialUsageRestriction =
409    { "None", "Subset", };
410    
411    /** Transition type. */
412    public static final String[] TransitionType =
413    { 
414        "link", "typed", "address_bar", "auto_bookmark", "auto_subframe", "manual_subframe", 
415        "generated", "auto_toplevel", "form_submit", "reload", "keyword", "keyword_generated", 
416        "other", 
417    };
418    
419    /** Javascript dialog type. */
420    public static final String[] DialogType =
421    { "alert", "confirm", "prompt", "beforeunload", };
422    
423    /**
424     * <CODE>[No Description Provided by Google]</CODE>
425     * <BR />
426     * <BR /><B>EXPERIMENTAL</B>
427     */
428    public static final String[] ClientNavigationReason =
429    { 
430        "formSubmissionGet", "formSubmissionPost", "httpHeaderRefresh", "scriptInitiated", 
431        "metaTagRefresh", "pageBlockInterstitial", "reload", "anchorClick", 
432    };
433    
434    /**
435     * <CODE>[No Description Provided by Google]</CODE>
436     * <BR />
437     * <BR /><B>EXPERIMENTAL</B>
438     */
439    public static final String[] ClientNavigationDisposition =
440    { "currentTab", "newTab", "newWindow", "download", };
441    
442    /**
443     * The referring-policy used for the navigation.
444     * <BR />
445     * <BR /><B>EXPERIMENTAL</B>
446     */
447    public static final String[] ReferrerPolicy =
448    { 
449        "noReferrer", "noReferrerWhenDowngrade", "origin", "originWhenCrossOrigin", "sameOrigin", 
450        "strictOrigin", "strictOriginWhenCrossOrigin", "unsafeUrl", 
451    };
452    
453    /**
454     * The type of a frameNavigated event.
455     * <BR />
456     * <BR /><B>EXPERIMENTAL</B>
457     */
458    public static final String[] NavigationType =
459    { "Navigation", "BackForwardCacheRestore", };
460    
461    /**
462     * List of not restored reasons for back-forward cache.
463     * <BR />
464     * <BR /><B>EXPERIMENTAL</B>
465     */
466    public static final String[] BackForwardCacheNotRestoredReason =
467    { 
468        "NotMainFrame", "BackForwardCacheDisabled", "RelatedActiveContentsExist", 
469        "HTTPStatusNotOK", "SchemeNotHTTPOrHTTPS", "Loading", "WasGrantedMediaAccess", 
470        "DisableForRenderFrameHostCalled", "DomainNotAllowed", "HTTPMethodNotGET", 
471        "SubframeIsNavigating", "Timeout", "CacheLimit", "JavaScriptExecution", 
472        "RendererProcessKilled", "RendererProcessCrashed", "GrantedMediaStreamAccess", 
473        "SchedulerTrackedFeatureUsed", "ConflictingBrowsingInstance", "CacheFlushed", 
474        "ServiceWorkerVersionActivation", "SessionRestored", "ServiceWorkerPostMessage", 
475        "EnteredBackForwardCacheBeforeServiceWorkerHostAdded", "RenderFrameHostReused_SameSite", 
476        "RenderFrameHostReused_CrossSite", "ServiceWorkerClaim", "IgnoreEventAndEvict", 
477        "HaveInnerContents", "TimeoutPuttingInCache", "BackForwardCacheDisabledByLowMemory", 
478        "BackForwardCacheDisabledByCommandLine", "NetworkRequestDatapipeDrainedAsBytesConsumer", 
479        "NetworkRequestRedirected", "NetworkRequestTimeout", "NetworkExceedsBufferLimit", 
480        "NavigationCancelledWhileRestoring", "NotMostRecentNavigationEntry", 
481        "BackForwardCacheDisabledForPrerender", "UserAgentOverrideDiffers", "ForegroundCacheLimit", 
482        "BrowsingInstanceNotSwapped", "BackForwardCacheDisabledForDelegate", 
483        "OptInUnloadHeaderNotPresent", "UnloadHandlerExistsInMainFrame", 
484        "UnloadHandlerExistsInSubFrame", "ServiceWorkerUnregistration", "CacheControlNoStore", 
485        "CacheControlNoStoreCookieModified", "CacheControlNoStoreHTTPOnlyCookieModified", 
486        "NoResponseHead", "Unknown", "ActivationNavigationsDisallowedForBug1234857", "WebSocket", 
487        "WebTransport", "WebRTC", "MainResourceHasCacheControlNoStore", 
488        "MainResourceHasCacheControlNoCache", "SubresourceHasCacheControlNoStore", 
489        "SubresourceHasCacheControlNoCache", "ContainsPlugins", "DocumentLoaded", 
490        "DedicatedWorkerOrWorklet", "OutstandingNetworkRequestOthers", 
491        "OutstandingIndexedDBTransaction", "RequestedNotificationsPermission", 
492        "RequestedMIDIPermission", "RequestedAudioCapturePermission", 
493        "RequestedVideoCapturePermission", "RequestedBackForwardCacheBlockedSensors", 
494        "RequestedBackgroundWorkPermission", "BroadcastChannel", "IndexedDBConnection", "WebXR", 
495        "SharedWorker", "WebLocks", "WebHID", "WebShare", "RequestedStorageAccessGrant", "WebNfc", 
496        "OutstandingNetworkRequestFetch", "OutstandingNetworkRequestXHR", "AppBanner", "Printing", 
497        "WebDatabase", "PictureInPicture", "Portal", "SpeechRecognizer", "IdleManager", 
498        "PaymentManager", "SpeechSynthesis", "KeyboardLock", "WebOTPService", 
499        "OutstandingNetworkRequestDirectSocket", "InjectedJavascript", "InjectedStyleSheet", 
500        "Dummy", "ContentSecurityHandler", "ContentWebAuthenticationAPI", "ContentFileChooser", 
501        "ContentSerial", "ContentFileSystemAccess", "ContentMediaDevicesDispatcherHost", 
502        "ContentWebBluetooth", "ContentWebUSB", "ContentMediaSession", 
503        "ContentMediaSessionService", "EmbedderPopupBlockerTabHelper", 
504        "EmbedderSafeBrowsingTriggeredPopupBlocker", "EmbedderSafeBrowsingThreatDetails", 
505        "EmbedderAppBannerManager", "EmbedderDomDistillerViewerSource", 
506        "EmbedderDomDistillerSelfDeletingRequestDelegate", "EmbedderOomInterventionTabHelper", 
507        "EmbedderOfflinePage", "EmbedderChromePasswordManagerClientBindCredentialManager", 
508        "EmbedderPermissionRequestManager", "EmbedderModalDialog", "EmbedderExtensions", 
509        "EmbedderExtensionMessaging", "EmbedderExtensionMessagingForOpenPort", 
510        "EmbedderExtensionSentMessageToCachedFrame", 
511    };
512    
513    /**
514     * Types of not restored reasons for back-forward cache.
515     * <BR />
516     * <BR /><B>EXPERIMENTAL</B>
517     */
518    public static final String[] BackForwardCacheNotRestoredReasonType =
519    { "SupportPending", "PageSupportNeeded", "Circumstantial", };
520    
521    /**
522     * Indicates whether a frame has been identified as an ad and why.
523     * <BR />
524     * <BR /><B>EXPERIMENTAL</B>
525     */
526    public static class AdFrameStatus
527        extends BaseType
528        implements java.io.Serializable
529    {
530        /** For Object Serialization.  java.io.Serializable */
531        protected static final long serialVersionUID = 1;
532        
533        public boolean[] optionals()
534        { return new boolean[] { false, true, }; }
535        
536        /** <CODE>[No Description Provided by Google]</CODE> */
537        public final String adFrameType;
538        
539        /**
540         * <CODE>[No Description Provided by Google]</CODE>
541         * <BR />
542         * <BR /><B>OPTIONAL</B>
543         */
544        public final String[] explanations;
545        
546        /**
547         * Constructor
548         *
549         * @param adFrameType -
550         * 
551         * @param explanations -
552         * <BR /><B>OPTIONAL</B>
553         */
554        public AdFrameStatus(String adFrameType, String[] explanations)
555        {
556            // Exception-Check(s) to ensure that if any parameters which are not declared as
557            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
558            
559            if (adFrameType == null) BRDPC.throwNPE("adFrameType");
560            
561            // Exception-Check(s) to ensure that if any parameters which must adhere to a
562            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
563            
564            BRDPC.checkIAE("adFrameType", adFrameType, "Page.AdFrameType", Page.AdFrameType);
565            
566            this.adFrameType   = adFrameType;
567            this.explanations  = explanations;
568        }
569        
570        /**
571         * JSON Object Constructor
572         * @param jo A Json-Object having data about an instance of {@code 'AdFrameStatus'}.
573         */
574        public AdFrameStatus (JsonObject jo)
575        {
576            this.adFrameType   = ReadJSON.getString(jo, "adFrameType", false, true);
577            this.explanations = (jo.getJsonArray("explanations") == null)
578                ? null
579                : RJArrIntoStream.strArr(jo.getJsonArray("explanations"), null, 0).toArray(String[]::new);
580        
581        }
582        
583        
584        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
585        public boolean equals(Object other)
586        {
587            if (other == null)                       return false;
588            if (other.getClass() != this.getClass()) return false;
589        
590            AdFrameStatus o = (AdFrameStatus) other;
591        
592            return
593                    Objects.equals(this.adFrameType, o.adFrameType)
594                &&  Arrays.deepEquals(this.explanations, o.explanations);
595        }
596        
597        /** Generates a Hash-Code for {@code 'this'} instance */
598        public int hashCode()
599        {
600            return
601                    Objects.hashCode(this.adFrameType)
602                +   Arrays.deepHashCode(this.explanations);
603        }
604    }
605    
606    /**
607     * <CODE>[No Description Provided by Google]</CODE>
608     * <BR />
609     * <BR /><B>EXPERIMENTAL</B>
610     */
611    public static class PermissionsPolicyBlockLocator
612        extends BaseType
613        implements java.io.Serializable
614    {
615        /** For Object Serialization.  java.io.Serializable */
616        protected static final long serialVersionUID = 1;
617        
618        public boolean[] optionals()
619        { return new boolean[] { false, false, }; }
620        
621        /** <CODE>[No Description Provided by Google]</CODE> */
622        public final String frameId;
623        
624        /** <CODE>[No Description Provided by Google]</CODE> */
625        public final String blockReason;
626        
627        /**
628         * Constructor
629         *
630         * @param frameId -
631         * 
632         * @param blockReason -
633         */
634        public PermissionsPolicyBlockLocator(String frameId, String blockReason)
635        {
636            // Exception-Check(s) to ensure that if any parameters which are not declared as
637            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
638            
639            if (frameId == null)     BRDPC.throwNPE("frameId");
640            if (blockReason == null) BRDPC.throwNPE("blockReason");
641            
642            // Exception-Check(s) to ensure that if any parameters which must adhere to a
643            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
644            
645            BRDPC.checkIAE("blockReason", blockReason, "Page.PermissionsPolicyBlockReason", Page.PermissionsPolicyBlockReason);
646            
647            this.frameId      = frameId;
648            this.blockReason  = blockReason;
649        }
650        
651        /**
652         * JSON Object Constructor
653         * @param jo A Json-Object having data about an instance of {@code 'PermissionsPolicyBlockLocator'}.
654         */
655        public PermissionsPolicyBlockLocator (JsonObject jo)
656        {
657            this.frameId      = ReadJSON.getString(jo, "frameId", false, true);
658            this.blockReason  = ReadJSON.getString(jo, "blockReason", false, true);
659        }
660        
661        
662        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
663        public boolean equals(Object other)
664        {
665            if (other == null)                       return false;
666            if (other.getClass() != this.getClass()) return false;
667        
668            PermissionsPolicyBlockLocator o = (PermissionsPolicyBlockLocator) other;
669        
670            return
671                    Objects.equals(this.frameId, o.frameId)
672                &&  Objects.equals(this.blockReason, o.blockReason);
673        }
674        
675        /** Generates a Hash-Code for {@code 'this'} instance */
676        public int hashCode()
677        {
678            return
679                    Objects.hashCode(this.frameId)
680                +   Objects.hashCode(this.blockReason);
681        }
682    }
683    
684    /**
685     * <CODE>[No Description Provided by Google]</CODE>
686     * <BR />
687     * <BR /><B>EXPERIMENTAL</B>
688     */
689    public static class PermissionsPolicyFeatureState
690        extends BaseType
691        implements java.io.Serializable
692    {
693        /** For Object Serialization.  java.io.Serializable */
694        protected static final long serialVersionUID = 1;
695        
696        public boolean[] optionals()
697        { return new boolean[] { false, false, true, }; }
698        
699        /** <CODE>[No Description Provided by Google]</CODE> */
700        public final String feature;
701        
702        /** <CODE>[No Description Provided by Google]</CODE> */
703        public final boolean allowed;
704        
705        /**
706         * <CODE>[No Description Provided by Google]</CODE>
707         * <BR />
708         * <BR /><B>OPTIONAL</B>
709         */
710        public final Page.PermissionsPolicyBlockLocator locator;
711        
712        /**
713         * Constructor
714         *
715         * @param feature -
716         * 
717         * @param allowed -
718         * 
719         * @param locator -
720         * <BR /><B>OPTIONAL</B>
721         */
722        public PermissionsPolicyFeatureState
723            (String feature, boolean allowed, Page.PermissionsPolicyBlockLocator locator)
724        {
725            // Exception-Check(s) to ensure that if any parameters which are not declared as
726            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
727            
728            if (feature == null) BRDPC.throwNPE("feature");
729            
730            // Exception-Check(s) to ensure that if any parameters which must adhere to a
731            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
732            
733            BRDPC.checkIAE("feature", feature, "Page.PermissionsPolicyFeature", Page.PermissionsPolicyFeature);
734            
735            this.feature  = feature;
736            this.allowed  = allowed;
737            this.locator  = locator;
738        }
739        
740        /**
741         * JSON Object Constructor
742         * @param jo A Json-Object having data about an instance of {@code 'PermissionsPolicyFeatureState'}.
743         */
744        public PermissionsPolicyFeatureState (JsonObject jo)
745        {
746            this.feature  = ReadJSON.getString(jo, "feature", false, true);
747            this.allowed  = ReadPrimJSON.getBoolean(jo, "allowed");
748            this.locator  = ReadJSON.getObject(jo, "locator", Page.PermissionsPolicyBlockLocator.class, true, false);
749        }
750        
751        
752        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
753        public boolean equals(Object other)
754        {
755            if (other == null)                       return false;
756            if (other.getClass() != this.getClass()) return false;
757        
758            PermissionsPolicyFeatureState o = (PermissionsPolicyFeatureState) other;
759        
760            return
761                    Objects.equals(this.feature, o.feature)
762                &&  (this.allowed == o.allowed)
763                &&  Objects.equals(this.locator, o.locator);
764        }
765        
766        /** Generates a Hash-Code for {@code 'this'} instance */
767        public int hashCode()
768        {
769            return
770                    Objects.hashCode(this.feature)
771                +   (this.allowed ? 1 : 0)
772                +   this.locator.hashCode();
773        }
774    }
775    
776    /**
777     * <CODE>[No Description Provided by Google]</CODE>
778     * <BR />
779     * <BR /><B>EXPERIMENTAL</B>
780     */
781    public static class OriginTrialToken
782        extends BaseType
783        implements java.io.Serializable
784    {
785        /** For Object Serialization.  java.io.Serializable */
786        protected static final long serialVersionUID = 1;
787        
788        public boolean[] optionals()
789        { return new boolean[] { false, false, false, false, false, false, }; }
790        
791        /** <CODE>[No Description Provided by Google]</CODE> */
792        public final String origin;
793        
794        /** <CODE>[No Description Provided by Google]</CODE> */
795        public final boolean matchSubDomains;
796        
797        /** <CODE>[No Description Provided by Google]</CODE> */
798        public final String trialName;
799        
800        /** <CODE>[No Description Provided by Google]</CODE> */
801        public final Number expiryTime;
802        
803        /** <CODE>[No Description Provided by Google]</CODE> */
804        public final boolean isThirdParty;
805        
806        /** <CODE>[No Description Provided by Google]</CODE> */
807        public final String usageRestriction;
808        
809        /**
810         * Constructor
811         *
812         * @param origin -
813         * 
814         * @param matchSubDomains -
815         * 
816         * @param trialName -
817         * 
818         * @param expiryTime -
819         * 
820         * @param isThirdParty -
821         * 
822         * @param usageRestriction -
823         */
824        public OriginTrialToken(
825                String origin, boolean matchSubDomains, String trialName, Number expiryTime, 
826                boolean isThirdParty, String usageRestriction
827            )
828        {
829            // Exception-Check(s) to ensure that if any parameters which are not declared as
830            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
831            
832            if (origin == null)           BRDPC.throwNPE("origin");
833            if (trialName == null)        BRDPC.throwNPE("trialName");
834            if (expiryTime == null)       BRDPC.throwNPE("expiryTime");
835            if (usageRestriction == null) BRDPC.throwNPE("usageRestriction");
836            
837            // Exception-Check(s) to ensure that if any parameters which must adhere to a
838            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
839            
840            BRDPC.checkIAE("usageRestriction", usageRestriction, "Page.OriginTrialUsageRestriction", Page.OriginTrialUsageRestriction);
841            
842            this.origin            = origin;
843            this.matchSubDomains   = matchSubDomains;
844            this.trialName         = trialName;
845            this.expiryTime        = expiryTime;
846            this.isThirdParty      = isThirdParty;
847            this.usageRestriction  = usageRestriction;
848        }
849        
850        /**
851         * JSON Object Constructor
852         * @param jo A Json-Object having data about an instance of {@code 'OriginTrialToken'}.
853         */
854        public OriginTrialToken (JsonObject jo)
855        {
856            this.origin            = ReadJSON.getString(jo, "origin", false, true);
857            this.matchSubDomains   = ReadPrimJSON.getBoolean(jo, "matchSubDomains");
858            this.trialName         = ReadJSON.getString(jo, "trialName", false, true);
859            this.expiryTime        = ReadNumberJSON.get(jo, "expiryTime", false, true);
860            this.isThirdParty      = ReadPrimJSON.getBoolean(jo, "isThirdParty");
861            this.usageRestriction  = ReadJSON.getString(jo, "usageRestriction", false, true);
862        }
863        
864        
865        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
866        public boolean equals(Object other)
867        {
868            if (other == null)                       return false;
869            if (other.getClass() != this.getClass()) return false;
870        
871            OriginTrialToken o = (OriginTrialToken) other;
872        
873            return
874                    Objects.equals(this.origin, o.origin)
875                &&  (this.matchSubDomains == o.matchSubDomains)
876                &&  Objects.equals(this.trialName, o.trialName)
877                &&  Objects.equals(this.expiryTime, o.expiryTime)
878                &&  (this.isThirdParty == o.isThirdParty)
879                &&  Objects.equals(this.usageRestriction, o.usageRestriction);
880        }
881        
882        /** Generates a Hash-Code for {@code 'this'} instance */
883        public int hashCode()
884        {
885            return
886                    Objects.hashCode(this.origin)
887                +   (this.matchSubDomains ? 1 : 0)
888                +   Objects.hashCode(this.trialName)
889                +   Objects.hashCode(this.expiryTime)
890                +   (this.isThirdParty ? 1 : 0)
891                +   Objects.hashCode(this.usageRestriction);
892        }
893    }
894    
895    /**
896     * <CODE>[No Description Provided by Google]</CODE>
897     * <BR />
898     * <BR /><B>EXPERIMENTAL</B>
899     */
900    public static class OriginTrialTokenWithStatus
901        extends BaseType
902        implements java.io.Serializable
903    {
904        /** For Object Serialization.  java.io.Serializable */
905        protected static final long serialVersionUID = 1;
906        
907        public boolean[] optionals()
908        { return new boolean[] { false, true, false, }; }
909        
910        /** <CODE>[No Description Provided by Google]</CODE> */
911        public final String rawTokenText;
912        
913        /**
914         * <CODE>parsedToken</CODE> is present only when the token is extractable and
915         * parsable.
916         * <BR />
917         * <BR /><B>OPTIONAL</B>
918         */
919        public final Page.OriginTrialToken parsedToken;
920        
921        /** <CODE>[No Description Provided by Google]</CODE> */
922        public final String status;
923        
924        /**
925         * Constructor
926         *
927         * @param rawTokenText -
928         * 
929         * @param parsedToken 
930         * <CODE>parsedToken</CODE> is present only when the token is extractable and
931         * parsable.
932         * <BR /><B>OPTIONAL</B>
933         * 
934         * @param status -
935         */
936        public OriginTrialTokenWithStatus
937            (String rawTokenText, Page.OriginTrialToken parsedToken, String status)
938        {
939            // Exception-Check(s) to ensure that if any parameters which are not declared as
940            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
941            
942            if (rawTokenText == null) BRDPC.throwNPE("rawTokenText");
943            if (status == null)       BRDPC.throwNPE("status");
944            
945            // Exception-Check(s) to ensure that if any parameters which must adhere to a
946            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
947            
948            BRDPC.checkIAE("status", status, "Page.OriginTrialTokenStatus", Page.OriginTrialTokenStatus);
949            
950            this.rawTokenText  = rawTokenText;
951            this.parsedToken   = parsedToken;
952            this.status        = status;
953        }
954        
955        /**
956         * JSON Object Constructor
957         * @param jo A Json-Object having data about an instance of {@code 'OriginTrialTokenWithStatus'}.
958         */
959        public OriginTrialTokenWithStatus (JsonObject jo)
960        {
961            this.rawTokenText  = ReadJSON.getString(jo, "rawTokenText", false, true);
962            this.parsedToken   = ReadJSON.getObject(jo, "parsedToken", Page.OriginTrialToken.class, true, false);
963            this.status        = ReadJSON.getString(jo, "status", false, true);
964        }
965        
966        
967        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
968        public boolean equals(Object other)
969        {
970            if (other == null)                       return false;
971            if (other.getClass() != this.getClass()) return false;
972        
973            OriginTrialTokenWithStatus o = (OriginTrialTokenWithStatus) other;
974        
975            return
976                    Objects.equals(this.rawTokenText, o.rawTokenText)
977                &&  Objects.equals(this.parsedToken, o.parsedToken)
978                &&  Objects.equals(this.status, o.status);
979        }
980        
981        /** Generates a Hash-Code for {@code 'this'} instance */
982        public int hashCode()
983        {
984            return
985                    Objects.hashCode(this.rawTokenText)
986                +   this.parsedToken.hashCode()
987                +   Objects.hashCode(this.status);
988        }
989    }
990    
991    /**
992     * <CODE>[No Description Provided by Google]</CODE>
993     * <BR />
994     * <BR /><B>EXPERIMENTAL</B>
995     */
996    public static class OriginTrial
997        extends BaseType
998        implements java.io.Serializable
999    {
1000        /** For Object Serialization.  java.io.Serializable */
1001        protected static final long serialVersionUID = 1;
1002        
1003        public boolean[] optionals()
1004        { return new boolean[] { false, false, false, }; }
1005        
1006        /** <CODE>[No Description Provided by Google]</CODE> */
1007        public final String trialName;
1008        
1009        /** <CODE>[No Description Provided by Google]</CODE> */
1010        public final String status;
1011        
1012        /** <CODE>[No Description Provided by Google]</CODE> */
1013        public final Page.OriginTrialTokenWithStatus[] tokensWithStatus;
1014        
1015        /**
1016         * Constructor
1017         *
1018         * @param trialName -
1019         * 
1020         * @param status -
1021         * 
1022         * @param tokensWithStatus -
1023         */
1024        public OriginTrial
1025            (String trialName, String status, Page.OriginTrialTokenWithStatus[] tokensWithStatus)
1026        {
1027            // Exception-Check(s) to ensure that if any parameters which are not declared as
1028            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1029            
1030            if (trialName == null)        BRDPC.throwNPE("trialName");
1031            if (status == null)           BRDPC.throwNPE("status");
1032            if (tokensWithStatus == null) BRDPC.throwNPE("tokensWithStatus");
1033            
1034            // Exception-Check(s) to ensure that if any parameters which must adhere to a
1035            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
1036            
1037            BRDPC.checkIAE("status", status, "Page.OriginTrialStatus", Page.OriginTrialStatus);
1038            
1039            this.trialName         = trialName;
1040            this.status            = status;
1041            this.tokensWithStatus  = tokensWithStatus;
1042        }
1043        
1044        /**
1045         * JSON Object Constructor
1046         * @param jo A Json-Object having data about an instance of {@code 'OriginTrial'}.
1047         */
1048        public OriginTrial (JsonObject jo)
1049        {
1050            this.trialName         = ReadJSON.getString(jo, "trialName", false, true);
1051            this.status            = ReadJSON.getString(jo, "status", false, true);
1052            this.tokensWithStatus = (jo.getJsonArray("tokensWithStatus") == null)
1053                ? null
1054                : RJArrDimN.objArr(jo.getJsonArray("tokensWithStatus"), null, 0, Page.OriginTrialTokenWithStatus[].class);
1055        
1056        }
1057        
1058        
1059        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1060        public boolean equals(Object other)
1061        {
1062            if (other == null)                       return false;
1063            if (other.getClass() != this.getClass()) return false;
1064        
1065            OriginTrial o = (OriginTrial) other;
1066        
1067            return
1068                    Objects.equals(this.trialName, o.trialName)
1069                &&  Objects.equals(this.status, o.status)
1070                &&  Arrays.deepEquals(this.tokensWithStatus, o.tokensWithStatus);
1071        }
1072        
1073        /** Generates a Hash-Code for {@code 'this'} instance */
1074        public int hashCode()
1075        {
1076            return
1077                    Objects.hashCode(this.trialName)
1078                +   Objects.hashCode(this.status)
1079                +   Arrays.deepHashCode(this.tokensWithStatus);
1080        }
1081    }
1082    
1083    /** Information about the Frame on the page. */
1084    public static class Frame
1085        extends BaseType
1086        implements java.io.Serializable
1087    {
1088        /** For Object Serialization.  java.io.Serializable */
1089        protected static final long serialVersionUID = 1;
1090        
1091        public boolean[] optionals()
1092        { return new boolean[] { false, true, false, true, false, true, false, false, false, true, true, false, false, false, }; }
1093        
1094        /** Frame unique identifier. */
1095        public final String id;
1096        
1097        /**
1098         * Parent frame identifier.
1099         * <BR />
1100         * <BR /><B>OPTIONAL</B>
1101         */
1102        public final String parentId;
1103        
1104        /** Identifier of the loader associated with this frame. */
1105        public final String loaderId;
1106        
1107        /**
1108         * Frame's name as specified in the tag.
1109         * <BR />
1110         * <BR /><B>OPTIONAL</B>
1111         */
1112        public final String name;
1113        
1114        /** Frame document's URL without fragment. */
1115        public final String url;
1116        
1117        /**
1118         * Frame document's URL fragment including the '#'.
1119         * <BR />
1120         * <BR /><B>OPTIONAL</B>
1121         * <BR /><B>EXPERIMENTAL</B>
1122         */
1123        public final String urlFragment;
1124        
1125        /**
1126         * Frame document's registered domain, taking the public suffixes list into account.
1127         * Extracted from the Frame's url.
1128         * Example URLs: http://www.google.com/file.html -&gt; "google.com"
1129         *               http://a.b.co.uk/file.html      -&gt; "b.co.uk"
1130         * <BR />
1131         * <BR /><B>EXPERIMENTAL</B>
1132         */
1133        public final String domainAndRegistry;
1134        
1135        /** Frame document's security origin. */
1136        public final String securityOrigin;
1137        
1138        /** Frame document's mimeType as determined by the browser. */
1139        public final String mimeType;
1140        
1141        /**
1142         * If the frame failed to load, this contains the URL that could not be loaded. Note that unlike url above, this URL may contain a fragment.
1143         * <BR />
1144         * <BR /><B>OPTIONAL</B>
1145         * <BR /><B>EXPERIMENTAL</B>
1146         */
1147        public final String unreachableUrl;
1148        
1149        /**
1150         * Indicates whether this frame was tagged as an ad and why.
1151         * <BR />
1152         * <BR /><B>OPTIONAL</B>
1153         * <BR /><B>EXPERIMENTAL</B>
1154         */
1155        public final Page.AdFrameStatus adFrameStatus;
1156        
1157        /**
1158         * Indicates whether the main document is a secure context and explains why that is the case.
1159         * <BR />
1160         * <BR /><B>EXPERIMENTAL</B>
1161         */
1162        public final String secureContextType;
1163        
1164        /**
1165         * Indicates whether this is a cross origin isolated context.
1166         * <BR />
1167         * <BR /><B>EXPERIMENTAL</B>
1168         */
1169        public final String crossOriginIsolatedContextType;
1170        
1171        /**
1172         * Indicated which gated APIs / features are available.
1173         * <BR />
1174         * <BR /><B>EXPERIMENTAL</B>
1175         */
1176        public final String[] gatedAPIFeatures;
1177        
1178        /**
1179         * Constructor
1180         *
1181         * @param id Frame unique identifier.
1182         * 
1183         * @param parentId Parent frame identifier.
1184         * <BR /><B>OPTIONAL</B>
1185         * 
1186         * @param loaderId Identifier of the loader associated with this frame.
1187         * 
1188         * @param name Frame's name as specified in the tag.
1189         * <BR /><B>OPTIONAL</B>
1190         * 
1191         * @param url Frame document's URL without fragment.
1192         * 
1193         * @param urlFragment Frame document's URL fragment including the '#'.
1194         * <BR /><B>OPTIONAL</B>
1195         * <BR /><B>EXPERIMENTAL</B>
1196         * 
1197         * @param domainAndRegistry 
1198         * Frame document's registered domain, taking the public suffixes list into account.
1199         * Extracted from the Frame's url.
1200         * Example URLs: http://www.google.com/file.html -&gt; "google.com"
1201         *               http://a.b.co.uk/file.html      -&gt; "b.co.uk"
1202         * <BR /><B>EXPERIMENTAL</B>
1203         * 
1204         * @param securityOrigin Frame document's security origin.
1205         * 
1206         * @param mimeType Frame document's mimeType as determined by the browser.
1207         * 
1208         * @param unreachableUrl If the frame failed to load, this contains the URL that could not be loaded. Note that unlike url above, this URL may contain a fragment.
1209         * <BR /><B>OPTIONAL</B>
1210         * <BR /><B>EXPERIMENTAL</B>
1211         * 
1212         * @param adFrameStatus Indicates whether this frame was tagged as an ad and why.
1213         * <BR /><B>OPTIONAL</B>
1214         * <BR /><B>EXPERIMENTAL</B>
1215         * 
1216         * @param secureContextType Indicates whether the main document is a secure context and explains why that is the case.
1217         * <BR /><B>EXPERIMENTAL</B>
1218         * 
1219         * @param crossOriginIsolatedContextType Indicates whether this is a cross origin isolated context.
1220         * <BR /><B>EXPERIMENTAL</B>
1221         * 
1222         * @param gatedAPIFeatures Indicated which gated APIs / features are available.
1223         * <BR /><B>EXPERIMENTAL</B>
1224         */
1225        public Frame(
1226                String id, String parentId, String loaderId, String name, String url, 
1227                String urlFragment, String domainAndRegistry, String securityOrigin, 
1228                String mimeType, String unreachableUrl, Page.AdFrameStatus adFrameStatus, 
1229                String secureContextType, String crossOriginIsolatedContextType, 
1230                String[] gatedAPIFeatures
1231            )
1232        {
1233            // Exception-Check(s) to ensure that if any parameters which are not declared as
1234            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1235            
1236            if (id == null)                             BRDPC.throwNPE("id");
1237            if (loaderId == null)                       BRDPC.throwNPE("loaderId");
1238            if (url == null)                            BRDPC.throwNPE("url");
1239            if (domainAndRegistry == null)              BRDPC.throwNPE("domainAndRegistry");
1240            if (securityOrigin == null)                 BRDPC.throwNPE("securityOrigin");
1241            if (mimeType == null)                       BRDPC.throwNPE("mimeType");
1242            if (secureContextType == null)              BRDPC.throwNPE("secureContextType");
1243            if (crossOriginIsolatedContextType == null) BRDPC.throwNPE("crossOriginIsolatedContextType");
1244            if (gatedAPIFeatures == null)               BRDPC.throwNPE("gatedAPIFeatures");
1245            
1246            // Exception-Check(s) to ensure that if any parameters which must adhere to a
1247            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
1248            
1249            BRDPC.checkIAE("secureContextType", secureContextType, "Page.SecureContextType", Page.SecureContextType);
1250            BRDPC.checkIAE("crossOriginIsolatedContextType", crossOriginIsolatedContextType, "Page.CrossOriginIsolatedContextType", Page.CrossOriginIsolatedContextType);
1251            
1252            this.id                              = id;
1253            this.parentId                        = parentId;
1254            this.loaderId                        = loaderId;
1255            this.name                            = name;
1256            this.url                             = url;
1257            this.urlFragment                     = urlFragment;
1258            this.domainAndRegistry               = domainAndRegistry;
1259            this.securityOrigin                  = securityOrigin;
1260            this.mimeType                        = mimeType;
1261            this.unreachableUrl                  = unreachableUrl;
1262            this.adFrameStatus                   = adFrameStatus;
1263            this.secureContextType               = secureContextType;
1264            this.crossOriginIsolatedContextType  = crossOriginIsolatedContextType;
1265            this.gatedAPIFeatures                = gatedAPIFeatures;
1266        }
1267        
1268        /**
1269         * JSON Object Constructor
1270         * @param jo A Json-Object having data about an instance of {@code 'Frame'}.
1271         */
1272        public Frame (JsonObject jo)
1273        {
1274            this.id                              = ReadJSON.getString(jo, "id", false, true);
1275            this.parentId                        = ReadJSON.getString(jo, "parentId", true, false);
1276            this.loaderId                        = ReadJSON.getString(jo, "loaderId", false, true);
1277            this.name                            = ReadJSON.getString(jo, "name", true, false);
1278            this.url                             = ReadJSON.getString(jo, "url", false, true);
1279            this.urlFragment                     = ReadJSON.getString(jo, "urlFragment", true, false);
1280            this.domainAndRegistry               = ReadJSON.getString(jo, "domainAndRegistry", false, true);
1281            this.securityOrigin                  = ReadJSON.getString(jo, "securityOrigin", false, true);
1282            this.mimeType                        = ReadJSON.getString(jo, "mimeType", false, true);
1283            this.unreachableUrl                  = ReadJSON.getString(jo, "unreachableUrl", true, false);
1284            this.adFrameStatus                   = ReadJSON.getObject(jo, "adFrameStatus", Page.AdFrameStatus.class, true, false);
1285            this.secureContextType               = ReadJSON.getString(jo, "secureContextType", false, true);
1286            this.crossOriginIsolatedContextType  = ReadJSON.getString(jo, "crossOriginIsolatedContextType", false, true);
1287            this.gatedAPIFeatures = (jo.getJsonArray("gatedAPIFeatures") == null)
1288                ? null
1289                : RJArrIntoStream.strArr(jo.getJsonArray("gatedAPIFeatures"), null, 0).toArray(String[]::new);
1290        
1291        }
1292        
1293        
1294        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1295        public boolean equals(Object other)
1296        {
1297            if (other == null)                       return false;
1298            if (other.getClass() != this.getClass()) return false;
1299        
1300            Frame o = (Frame) other;
1301        
1302            return
1303                    Objects.equals(this.id, o.id)
1304                &&  Objects.equals(this.parentId, o.parentId)
1305                &&  Objects.equals(this.loaderId, o.loaderId)
1306                &&  Objects.equals(this.name, o.name)
1307                &&  Objects.equals(this.url, o.url)
1308                &&  Objects.equals(this.urlFragment, o.urlFragment)
1309                &&  Objects.equals(this.domainAndRegistry, o.domainAndRegistry)
1310                &&  Objects.equals(this.securityOrigin, o.securityOrigin)
1311                &&  Objects.equals(this.mimeType, o.mimeType)
1312                &&  Objects.equals(this.unreachableUrl, o.unreachableUrl)
1313                &&  Objects.equals(this.adFrameStatus, o.adFrameStatus)
1314                &&  Objects.equals(this.secureContextType, o.secureContextType)
1315                &&  Objects.equals(this.crossOriginIsolatedContextType, o.crossOriginIsolatedContextType)
1316                &&  Arrays.deepEquals(this.gatedAPIFeatures, o.gatedAPIFeatures);
1317        }
1318        
1319        /** Generates a Hash-Code for {@code 'this'} instance */
1320        public int hashCode()
1321        {
1322            return
1323                    Objects.hashCode(this.id)
1324                +   Objects.hashCode(this.parentId)
1325                +   Objects.hashCode(this.loaderId)
1326                +   Objects.hashCode(this.name)
1327                +   Objects.hashCode(this.url)
1328                +   Objects.hashCode(this.urlFragment)
1329                +   Objects.hashCode(this.domainAndRegistry)
1330                +   Objects.hashCode(this.securityOrigin)
1331                +   Objects.hashCode(this.mimeType)
1332                +   Objects.hashCode(this.unreachableUrl)
1333                +   this.adFrameStatus.hashCode()
1334                +   Objects.hashCode(this.secureContextType)
1335                +   Objects.hashCode(this.crossOriginIsolatedContextType)
1336                +   Arrays.deepHashCode(this.gatedAPIFeatures);
1337        }
1338    }
1339    
1340    /**
1341     * Information about the Resource on the page.
1342     * <BR />
1343     * <BR /><B>EXPERIMENTAL</B>
1344     */
1345    public static class FrameResource
1346        extends BaseType
1347        implements java.io.Serializable
1348    {
1349        /** For Object Serialization.  java.io.Serializable */
1350        protected static final long serialVersionUID = 1;
1351        
1352        public boolean[] optionals()
1353        { return new boolean[] { false, false, false, true, true, true, true, }; }
1354        
1355        /** Resource URL. */
1356        public final String url;
1357        
1358        /** Type of this resource. */
1359        public final String type;
1360        
1361        /** Resource mimeType as determined by the browser. */
1362        public final String mimeType;
1363        
1364        /**
1365         * last-modified timestamp as reported by server.
1366         * <BR />
1367         * <BR /><B>OPTIONAL</B>
1368         */
1369        public final Number lastModified;
1370        
1371        /**
1372         * Resource content size.
1373         * <BR />
1374         * <BR /><B>OPTIONAL</B>
1375         */
1376        public final Number contentSize;
1377        
1378        /**
1379         * True if the resource failed to load.
1380         * <BR />
1381         * <BR /><B>OPTIONAL</B>
1382         */
1383        public final Boolean failed;
1384        
1385        /**
1386         * True if the resource was canceled during loading.
1387         * <BR />
1388         * <BR /><B>OPTIONAL</B>
1389         */
1390        public final Boolean canceled;
1391        
1392        /**
1393         * Constructor
1394         *
1395         * @param url Resource URL.
1396         * 
1397         * @param type Type of this resource.
1398         * 
1399         * @param mimeType Resource mimeType as determined by the browser.
1400         * 
1401         * @param lastModified last-modified timestamp as reported by server.
1402         * <BR /><B>OPTIONAL</B>
1403         * 
1404         * @param contentSize Resource content size.
1405         * <BR /><B>OPTIONAL</B>
1406         * 
1407         * @param failed True if the resource failed to load.
1408         * <BR /><B>OPTIONAL</B>
1409         * 
1410         * @param canceled True if the resource was canceled during loading.
1411         * <BR /><B>OPTIONAL</B>
1412         */
1413        public FrameResource(
1414                String url, String type, String mimeType, Number lastModified, Number contentSize, 
1415                Boolean failed, Boolean canceled
1416            )
1417        {
1418            // Exception-Check(s) to ensure that if any parameters which are not declared as
1419            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1420            
1421            if (url == null)      BRDPC.throwNPE("url");
1422            if (type == null)     BRDPC.throwNPE("type");
1423            if (mimeType == null) BRDPC.throwNPE("mimeType");
1424            
1425            // Exception-Check(s) to ensure that if any parameters which must adhere to a
1426            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
1427            
1428            BRDPC.checkIAE("type", type, "Network.ResourceType", Network.ResourceType);
1429            
1430            this.url           = url;
1431            this.type          = type;
1432            this.mimeType      = mimeType;
1433            this.lastModified  = lastModified;
1434            this.contentSize   = contentSize;
1435            this.failed        = failed;
1436            this.canceled      = canceled;
1437        }
1438        
1439        /**
1440         * JSON Object Constructor
1441         * @param jo A Json-Object having data about an instance of {@code 'FrameResource'}.
1442         */
1443        public FrameResource (JsonObject jo)
1444        {
1445            this.url           = ReadJSON.getString(jo, "url", false, true);
1446            this.type          = ReadJSON.getString(jo, "type", false, true);
1447            this.mimeType      = ReadJSON.getString(jo, "mimeType", false, true);
1448            this.lastModified  = ReadNumberJSON.get(jo, "lastModified", true, false);
1449            this.contentSize   = ReadNumberJSON.get(jo, "contentSize", true, false);
1450            this.failed        = ReadBoxedJSON.getBoolean(jo, "failed", true);
1451            this.canceled      = ReadBoxedJSON.getBoolean(jo, "canceled", true);
1452        }
1453        
1454        
1455        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1456        public boolean equals(Object other)
1457        {
1458            if (other == null)                       return false;
1459            if (other.getClass() != this.getClass()) return false;
1460        
1461            FrameResource o = (FrameResource) other;
1462        
1463            return
1464                    Objects.equals(this.url, o.url)
1465                &&  Objects.equals(this.type, o.type)
1466                &&  Objects.equals(this.mimeType, o.mimeType)
1467                &&  Objects.equals(this.lastModified, o.lastModified)
1468                &&  Objects.equals(this.contentSize, o.contentSize)
1469                &&  Objects.equals(this.failed, o.failed)
1470                &&  Objects.equals(this.canceled, o.canceled);
1471        }
1472        
1473        /** Generates a Hash-Code for {@code 'this'} instance */
1474        public int hashCode()
1475        {
1476            return
1477                    Objects.hashCode(this.url)
1478                +   Objects.hashCode(this.type)
1479                +   Objects.hashCode(this.mimeType)
1480                +   Objects.hashCode(this.lastModified)
1481                +   Objects.hashCode(this.contentSize)
1482                +   Objects.hashCode(this.failed)
1483                +   Objects.hashCode(this.canceled);
1484        }
1485    }
1486    
1487    /**
1488     * Information about the Frame hierarchy along with their cached resources.
1489     * <BR />
1490     * <BR /><B>EXPERIMENTAL</B>
1491     */
1492    public static class FrameResourceTree
1493        extends BaseType
1494        implements java.io.Serializable
1495    {
1496        /** For Object Serialization.  java.io.Serializable */
1497        protected static final long serialVersionUID = 1;
1498        
1499        public boolean[] optionals()
1500        { return new boolean[] { false, true, false, }; }
1501        
1502        /** Frame information for this tree item. */
1503        public final Page.Frame frame;
1504        
1505        /**
1506         * Child frames.
1507         * <BR />
1508         * <BR /><B>OPTIONAL</B>
1509         */
1510        public final Page.FrameResourceTree[] childFrames;
1511        
1512        /** Information about frame resources. */
1513        public final Page.FrameResource[] resources;
1514        
1515        /**
1516         * Constructor
1517         *
1518         * @param frame Frame information for this tree item.
1519         * 
1520         * @param childFrames Child frames.
1521         * <BR /><B>OPTIONAL</B>
1522         * 
1523         * @param resources Information about frame resources.
1524         */
1525        public FrameResourceTree
1526            (Page.Frame frame, Page.FrameResourceTree[] childFrames, Page.FrameResource[] resources)
1527        {
1528            // Exception-Check(s) to ensure that if any parameters which are not declared as
1529            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1530            
1531            if (frame == null)     BRDPC.throwNPE("frame");
1532            if (resources == null) BRDPC.throwNPE("resources");
1533            
1534            this.frame        = frame;
1535            this.childFrames  = childFrames;
1536            this.resources    = resources;
1537        }
1538        
1539        /**
1540         * JSON Object Constructor
1541         * @param jo A Json-Object having data about an instance of {@code 'FrameResourceTree'}.
1542         */
1543        public FrameResourceTree (JsonObject jo)
1544        {
1545            this.frame        = ReadJSON.getObject(jo, "frame", Page.Frame.class, false, true);
1546            this.childFrames = (jo.getJsonArray("childFrames") == null)
1547                ? null
1548                : RJArrDimN.objArr(jo.getJsonArray("childFrames"), null, 0, Page.FrameResourceTree[].class);
1549        
1550            this.resources = (jo.getJsonArray("resources") == null)
1551                ? null
1552                : RJArrDimN.objArr(jo.getJsonArray("resources"), null, 0, Page.FrameResource[].class);
1553        
1554        }
1555        
1556        
1557        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1558        public boolean equals(Object other)
1559        {
1560            if (other == null)                       return false;
1561            if (other.getClass() != this.getClass()) return false;
1562        
1563            FrameResourceTree o = (FrameResourceTree) other;
1564        
1565            return
1566                    Objects.equals(this.frame, o.frame)
1567                &&  Arrays.deepEquals(this.childFrames, o.childFrames)
1568                &&  Arrays.deepEquals(this.resources, o.resources);
1569        }
1570        
1571        /** Generates a Hash-Code for {@code 'this'} instance */
1572        public int hashCode()
1573        {
1574            return
1575                    this.frame.hashCode()
1576                +   Arrays.deepHashCode(this.childFrames)
1577                +   Arrays.deepHashCode(this.resources);
1578        }
1579    }
1580    
1581    /** Information about the Frame hierarchy. */
1582    public static class FrameTree
1583        extends BaseType
1584        implements java.io.Serializable
1585    {
1586        /** For Object Serialization.  java.io.Serializable */
1587        protected static final long serialVersionUID = 1;
1588        
1589        public boolean[] optionals()
1590        { return new boolean[] { false, true, }; }
1591        
1592        /** Frame information for this tree item. */
1593        public final Page.Frame frame;
1594        
1595        /**
1596         * Child frames.
1597         * <BR />
1598         * <BR /><B>OPTIONAL</B>
1599         */
1600        public final Page.FrameTree[] childFrames;
1601        
1602        /**
1603         * Constructor
1604         *
1605         * @param frame Frame information for this tree item.
1606         * 
1607         * @param childFrames Child frames.
1608         * <BR /><B>OPTIONAL</B>
1609         */
1610        public FrameTree(Page.Frame frame, Page.FrameTree[] childFrames)
1611        {
1612            // Exception-Check(s) to ensure that if any parameters which are not declared as
1613            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1614            
1615            if (frame == null) BRDPC.throwNPE("frame");
1616            
1617            this.frame        = frame;
1618            this.childFrames  = childFrames;
1619        }
1620        
1621        /**
1622         * JSON Object Constructor
1623         * @param jo A Json-Object having data about an instance of {@code 'FrameTree'}.
1624         */
1625        public FrameTree (JsonObject jo)
1626        {
1627            this.frame        = ReadJSON.getObject(jo, "frame", Page.Frame.class, false, true);
1628            this.childFrames = (jo.getJsonArray("childFrames") == null)
1629                ? null
1630                : RJArrDimN.objArr(jo.getJsonArray("childFrames"), null, 0, Page.FrameTree[].class);
1631        
1632        }
1633        
1634        
1635        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1636        public boolean equals(Object other)
1637        {
1638            if (other == null)                       return false;
1639            if (other.getClass() != this.getClass()) return false;
1640        
1641            FrameTree o = (FrameTree) other;
1642        
1643            return
1644                    Objects.equals(this.frame, o.frame)
1645                &&  Arrays.deepEquals(this.childFrames, o.childFrames);
1646        }
1647        
1648        /** Generates a Hash-Code for {@code 'this'} instance */
1649        public int hashCode()
1650        {
1651            return
1652                    this.frame.hashCode()
1653                +   Arrays.deepHashCode(this.childFrames);
1654        }
1655    }
1656    
1657    /** Navigation history entry. */
1658    public static class NavigationEntry
1659        extends BaseType
1660        implements java.io.Serializable
1661    {
1662        /** For Object Serialization.  java.io.Serializable */
1663        protected static final long serialVersionUID = 1;
1664        
1665        public boolean[] optionals()
1666        { return new boolean[] { false, false, false, false, false, }; }
1667        
1668        /** Unique id of the navigation history entry. */
1669        public final int id;
1670        
1671        /** URL of the navigation history entry. */
1672        public final String url;
1673        
1674        /** URL that the user typed in the url bar. */
1675        public final String userTypedURL;
1676        
1677        /** Title of the navigation history entry. */
1678        public final String title;
1679        
1680        /** Transition type. */
1681        public final String transitionType;
1682        
1683        /**
1684         * Constructor
1685         *
1686         * @param id Unique id of the navigation history entry.
1687         * 
1688         * @param url URL of the navigation history entry.
1689         * 
1690         * @param userTypedURL URL that the user typed in the url bar.
1691         * 
1692         * @param title Title of the navigation history entry.
1693         * 
1694         * @param transitionType Transition type.
1695         */
1696        public NavigationEntry
1697            (int id, String url, String userTypedURL, String title, String transitionType)
1698        {
1699            // Exception-Check(s) to ensure that if any parameters which are not declared as
1700            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1701            
1702            if (url == null)            BRDPC.throwNPE("url");
1703            if (userTypedURL == null)   BRDPC.throwNPE("userTypedURL");
1704            if (title == null)          BRDPC.throwNPE("title");
1705            if (transitionType == null) BRDPC.throwNPE("transitionType");
1706            
1707            // Exception-Check(s) to ensure that if any parameters which must adhere to a
1708            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
1709            
1710            BRDPC.checkIAE("transitionType", transitionType, "Page.TransitionType", Page.TransitionType);
1711            
1712            this.id              = id;
1713            this.url             = url;
1714            this.userTypedURL    = userTypedURL;
1715            this.title           = title;
1716            this.transitionType  = transitionType;
1717        }
1718        
1719        /**
1720         * JSON Object Constructor
1721         * @param jo A Json-Object having data about an instance of {@code 'NavigationEntry'}.
1722         */
1723        public NavigationEntry (JsonObject jo)
1724        {
1725            this.id              = ReadPrimJSON.getInt(jo, "id");
1726            this.url             = ReadJSON.getString(jo, "url", false, true);
1727            this.userTypedURL    = ReadJSON.getString(jo, "userTypedURL", false, true);
1728            this.title           = ReadJSON.getString(jo, "title", false, true);
1729            this.transitionType  = ReadJSON.getString(jo, "transitionType", false, true);
1730        }
1731        
1732        
1733        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1734        public boolean equals(Object other)
1735        {
1736            if (other == null)                       return false;
1737            if (other.getClass() != this.getClass()) return false;
1738        
1739            NavigationEntry o = (NavigationEntry) other;
1740        
1741            return
1742                    (this.id == o.id)
1743                &&  Objects.equals(this.url, o.url)
1744                &&  Objects.equals(this.userTypedURL, o.userTypedURL)
1745                &&  Objects.equals(this.title, o.title)
1746                &&  Objects.equals(this.transitionType, o.transitionType);
1747        }
1748        
1749        /** Generates a Hash-Code for {@code 'this'} instance */
1750        public int hashCode()
1751        {
1752            return
1753                    this.id
1754                +   Objects.hashCode(this.url)
1755                +   Objects.hashCode(this.userTypedURL)
1756                +   Objects.hashCode(this.title)
1757                +   Objects.hashCode(this.transitionType);
1758        }
1759    }
1760    
1761    /**
1762     * Screencast frame metadata.
1763     * <BR />
1764     * <BR /><B>EXPERIMENTAL</B>
1765     */
1766    public static class ScreencastFrameMetadata
1767        extends BaseType
1768        implements java.io.Serializable
1769    {
1770        /** For Object Serialization.  java.io.Serializable */
1771        protected static final long serialVersionUID = 1;
1772        
1773        public boolean[] optionals()
1774        { return new boolean[] { false, false, false, false, false, false, true, }; }
1775        
1776        /** Top offset in DIP. */
1777        public final Number offsetTop;
1778        
1779        /** Page scale factor. */
1780        public final Number pageScaleFactor;
1781        
1782        /** Device screen width in DIP. */
1783        public final Number deviceWidth;
1784        
1785        /** Device screen height in DIP. */
1786        public final Number deviceHeight;
1787        
1788        /** Position of horizontal scroll in CSS pixels. */
1789        public final Number scrollOffsetX;
1790        
1791        /** Position of vertical scroll in CSS pixels. */
1792        public final Number scrollOffsetY;
1793        
1794        /**
1795         * Frame swap timestamp.
1796         * <BR />
1797         * <BR /><B>OPTIONAL</B>
1798         */
1799        public final Number timestamp;
1800        
1801        /**
1802         * Constructor
1803         *
1804         * @param offsetTop Top offset in DIP.
1805         * 
1806         * @param pageScaleFactor Page scale factor.
1807         * 
1808         * @param deviceWidth Device screen width in DIP.
1809         * 
1810         * @param deviceHeight Device screen height in DIP.
1811         * 
1812         * @param scrollOffsetX Position of horizontal scroll in CSS pixels.
1813         * 
1814         * @param scrollOffsetY Position of vertical scroll in CSS pixels.
1815         * 
1816         * @param timestamp Frame swap timestamp.
1817         * <BR /><B>OPTIONAL</B>
1818         */
1819        public ScreencastFrameMetadata(
1820                Number offsetTop, Number pageScaleFactor, Number deviceWidth, Number deviceHeight, 
1821                Number scrollOffsetX, Number scrollOffsetY, Number timestamp
1822            )
1823        {
1824            // Exception-Check(s) to ensure that if any parameters which are not declared as
1825            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1826            
1827            if (offsetTop == null)       BRDPC.throwNPE("offsetTop");
1828            if (pageScaleFactor == null) BRDPC.throwNPE("pageScaleFactor");
1829            if (deviceWidth == null)     BRDPC.throwNPE("deviceWidth");
1830            if (deviceHeight == null)    BRDPC.throwNPE("deviceHeight");
1831            if (scrollOffsetX == null)   BRDPC.throwNPE("scrollOffsetX");
1832            if (scrollOffsetY == null)   BRDPC.throwNPE("scrollOffsetY");
1833            
1834            this.offsetTop        = offsetTop;
1835            this.pageScaleFactor  = pageScaleFactor;
1836            this.deviceWidth      = deviceWidth;
1837            this.deviceHeight     = deviceHeight;
1838            this.scrollOffsetX    = scrollOffsetX;
1839            this.scrollOffsetY    = scrollOffsetY;
1840            this.timestamp        = timestamp;
1841        }
1842        
1843        /**
1844         * JSON Object Constructor
1845         * @param jo A Json-Object having data about an instance of {@code 'ScreencastFrameMetadata'}.
1846         */
1847        public ScreencastFrameMetadata (JsonObject jo)
1848        {
1849            this.offsetTop        = ReadNumberJSON.get(jo, "offsetTop", false, true);
1850            this.pageScaleFactor  = ReadNumberJSON.get(jo, "pageScaleFactor", false, true);
1851            this.deviceWidth      = ReadNumberJSON.get(jo, "deviceWidth", false, true);
1852            this.deviceHeight     = ReadNumberJSON.get(jo, "deviceHeight", false, true);
1853            this.scrollOffsetX    = ReadNumberJSON.get(jo, "scrollOffsetX", false, true);
1854            this.scrollOffsetY    = ReadNumberJSON.get(jo, "scrollOffsetY", false, true);
1855            this.timestamp        = ReadNumberJSON.get(jo, "timestamp", true, false);
1856        }
1857        
1858        
1859        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1860        public boolean equals(Object other)
1861        {
1862            if (other == null)                       return false;
1863            if (other.getClass() != this.getClass()) return false;
1864        
1865            ScreencastFrameMetadata o = (ScreencastFrameMetadata) other;
1866        
1867            return
1868                    Objects.equals(this.offsetTop, o.offsetTop)
1869                &&  Objects.equals(this.pageScaleFactor, o.pageScaleFactor)
1870                &&  Objects.equals(this.deviceWidth, o.deviceWidth)
1871                &&  Objects.equals(this.deviceHeight, o.deviceHeight)
1872                &&  Objects.equals(this.scrollOffsetX, o.scrollOffsetX)
1873                &&  Objects.equals(this.scrollOffsetY, o.scrollOffsetY)
1874                &&  Objects.equals(this.timestamp, o.timestamp);
1875        }
1876        
1877        /** Generates a Hash-Code for {@code 'this'} instance */
1878        public int hashCode()
1879        {
1880            return
1881                    Objects.hashCode(this.offsetTop)
1882                +   Objects.hashCode(this.pageScaleFactor)
1883                +   Objects.hashCode(this.deviceWidth)
1884                +   Objects.hashCode(this.deviceHeight)
1885                +   Objects.hashCode(this.scrollOffsetX)
1886                +   Objects.hashCode(this.scrollOffsetY)
1887                +   Objects.hashCode(this.timestamp);
1888        }
1889    }
1890    
1891    /** Error while paring app manifest. */
1892    public static class AppManifestError
1893        extends BaseType
1894        implements java.io.Serializable
1895    {
1896        /** For Object Serialization.  java.io.Serializable */
1897        protected static final long serialVersionUID = 1;
1898        
1899        public boolean[] optionals()
1900        { return new boolean[] { false, false, false, false, }; }
1901        
1902        /** Error message. */
1903        public final String message;
1904        
1905        /** If criticial, this is a non-recoverable parse error. */
1906        public final int critical;
1907        
1908        /** Error line. */
1909        public final int line;
1910        
1911        /** Error column. */
1912        public final int column;
1913        
1914        /**
1915         * Constructor
1916         *
1917         * @param message Error message.
1918         * 
1919         * @param critical If criticial, this is a non-recoverable parse error.
1920         * 
1921         * @param line Error line.
1922         * 
1923         * @param column Error column.
1924         */
1925        public AppManifestError(String message, int critical, int line, int column)
1926        {
1927            // Exception-Check(s) to ensure that if any parameters which are not declared as
1928            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
1929            
1930            if (message == null) BRDPC.throwNPE("message");
1931            
1932            this.message   = message;
1933            this.critical  = critical;
1934            this.line      = line;
1935            this.column    = column;
1936        }
1937        
1938        /**
1939         * JSON Object Constructor
1940         * @param jo A Json-Object having data about an instance of {@code 'AppManifestError'}.
1941         */
1942        public AppManifestError (JsonObject jo)
1943        {
1944            this.message   = ReadJSON.getString(jo, "message", false, true);
1945            this.critical  = ReadPrimJSON.getInt(jo, "critical");
1946            this.line      = ReadPrimJSON.getInt(jo, "line");
1947            this.column    = ReadPrimJSON.getInt(jo, "column");
1948        }
1949        
1950        
1951        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
1952        public boolean equals(Object other)
1953        {
1954            if (other == null)                       return false;
1955            if (other.getClass() != this.getClass()) return false;
1956        
1957            AppManifestError o = (AppManifestError) other;
1958        
1959            return
1960                    Objects.equals(this.message, o.message)
1961                &&  (this.critical == o.critical)
1962                &&  (this.line == o.line)
1963                &&  (this.column == o.column);
1964        }
1965        
1966        /** Generates a Hash-Code for {@code 'this'} instance */
1967        public int hashCode()
1968        {
1969            return
1970                    Objects.hashCode(this.message)
1971                +   this.critical
1972                +   this.line
1973                +   this.column;
1974        }
1975    }
1976    
1977    /**
1978     * Parsed app manifest properties.
1979     * <BR />
1980     * <BR /><B>EXPERIMENTAL</B>
1981     */
1982    public static class AppManifestParsedProperties
1983        extends BaseType
1984        implements java.io.Serializable
1985    {
1986        /** For Object Serialization.  java.io.Serializable */
1987        protected static final long serialVersionUID = 1;
1988        
1989        public boolean[] optionals()
1990        { return new boolean[] { false, }; }
1991        
1992        /** Computed scope value */
1993        public final String scope;
1994        
1995        /**
1996         * Constructor
1997         *
1998         * @param scope Computed scope value
1999         */
2000        public AppManifestParsedProperties(String scope)
2001        {
2002            // Exception-Check(s) to ensure that if any parameters which are not declared as
2003            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2004            
2005            if (scope == null) BRDPC.throwNPE("scope");
2006            
2007            this.scope  = scope;
2008        }
2009        
2010        /**
2011         * JSON Object Constructor
2012         * @param jo A Json-Object having data about an instance of {@code 'AppManifestParsedProperties'}.
2013         */
2014        public AppManifestParsedProperties (JsonObject jo)
2015        {
2016            this.scope  = ReadJSON.getString(jo, "scope", false, true);
2017        }
2018        
2019        
2020        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2021        public boolean equals(Object other)
2022        {
2023            if (other == null)                       return false;
2024            if (other.getClass() != this.getClass()) return false;
2025        
2026            AppManifestParsedProperties o = (AppManifestParsedProperties) other;
2027        
2028            return
2029                    Objects.equals(this.scope, o.scope);
2030        }
2031        
2032        /** Generates a Hash-Code for {@code 'this'} instance */
2033        public int hashCode()
2034        {
2035            return
2036                    Objects.hashCode(this.scope);
2037        }
2038    }
2039    
2040    /** Layout viewport position and dimensions. */
2041    public static class LayoutViewport
2042        extends BaseType
2043        implements java.io.Serializable
2044    {
2045        /** For Object Serialization.  java.io.Serializable */
2046        protected static final long serialVersionUID = 1;
2047        
2048        public boolean[] optionals()
2049        { return new boolean[] { false, false, false, false, }; }
2050        
2051        /** Horizontal offset relative to the document (CSS pixels). */
2052        public final int pageX;
2053        
2054        /** Vertical offset relative to the document (CSS pixels). */
2055        public final int pageY;
2056        
2057        /** Width (CSS pixels), excludes scrollbar if present. */
2058        public final int clientWidth;
2059        
2060        /** Height (CSS pixels), excludes scrollbar if present. */
2061        public final int clientHeight;
2062        
2063        /**
2064         * Constructor
2065         *
2066         * @param pageX Horizontal offset relative to the document (CSS pixels).
2067         * 
2068         * @param pageY Vertical offset relative to the document (CSS pixels).
2069         * 
2070         * @param clientWidth Width (CSS pixels), excludes scrollbar if present.
2071         * 
2072         * @param clientHeight Height (CSS pixels), excludes scrollbar if present.
2073         */
2074        public LayoutViewport(int pageX, int pageY, int clientWidth, int clientHeight)
2075        {
2076            this.pageX         = pageX;
2077            this.pageY         = pageY;
2078            this.clientWidth   = clientWidth;
2079            this.clientHeight  = clientHeight;
2080        }
2081        
2082        /**
2083         * JSON Object Constructor
2084         * @param jo A Json-Object having data about an instance of {@code 'LayoutViewport'}.
2085         */
2086        public LayoutViewport (JsonObject jo)
2087        {
2088            this.pageX         = ReadPrimJSON.getInt(jo, "pageX");
2089            this.pageY         = ReadPrimJSON.getInt(jo, "pageY");
2090            this.clientWidth   = ReadPrimJSON.getInt(jo, "clientWidth");
2091            this.clientHeight  = ReadPrimJSON.getInt(jo, "clientHeight");
2092        }
2093        
2094        
2095        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2096        public boolean equals(Object other)
2097        {
2098            if (other == null)                       return false;
2099            if (other.getClass() != this.getClass()) return false;
2100        
2101            LayoutViewport o = (LayoutViewport) other;
2102        
2103            return
2104                    (this.pageX == o.pageX)
2105                &&  (this.pageY == o.pageY)
2106                &&  (this.clientWidth == o.clientWidth)
2107                &&  (this.clientHeight == o.clientHeight);
2108        }
2109        
2110        /** Generates a Hash-Code for {@code 'this'} instance */
2111        public int hashCode()
2112        {
2113            return
2114                    this.pageX
2115                +   this.pageY
2116                +   this.clientWidth
2117                +   this.clientHeight;
2118        }
2119    }
2120    
2121    /** Visual viewport position, dimensions, and scale. */
2122    public static class VisualViewport
2123        extends BaseType
2124        implements java.io.Serializable
2125    {
2126        /** For Object Serialization.  java.io.Serializable */
2127        protected static final long serialVersionUID = 1;
2128        
2129        public boolean[] optionals()
2130        { return new boolean[] { false, false, false, false, false, false, false, true, }; }
2131        
2132        /** Horizontal offset relative to the layout viewport (CSS pixels). */
2133        public final Number offsetX;
2134        
2135        /** Vertical offset relative to the layout viewport (CSS pixels). */
2136        public final Number offsetY;
2137        
2138        /** Horizontal offset relative to the document (CSS pixels). */
2139        public final Number pageX;
2140        
2141        /** Vertical offset relative to the document (CSS pixels). */
2142        public final Number pageY;
2143        
2144        /** Width (CSS pixels), excludes scrollbar if present. */
2145        public final Number clientWidth;
2146        
2147        /** Height (CSS pixels), excludes scrollbar if present. */
2148        public final Number clientHeight;
2149        
2150        /** Scale relative to the ideal viewport (size at width=device-width). */
2151        public final Number scale;
2152        
2153        /**
2154         * Page zoom factor (CSS to device independent pixels ratio).
2155         * <BR />
2156         * <BR /><B>OPTIONAL</B>
2157         */
2158        public final Number zoom;
2159        
2160        /**
2161         * Constructor
2162         *
2163         * @param offsetX Horizontal offset relative to the layout viewport (CSS pixels).
2164         * 
2165         * @param offsetY Vertical offset relative to the layout viewport (CSS pixels).
2166         * 
2167         * @param pageX Horizontal offset relative to the document (CSS pixels).
2168         * 
2169         * @param pageY Vertical offset relative to the document (CSS pixels).
2170         * 
2171         * @param clientWidth Width (CSS pixels), excludes scrollbar if present.
2172         * 
2173         * @param clientHeight Height (CSS pixels), excludes scrollbar if present.
2174         * 
2175         * @param scale Scale relative to the ideal viewport (size at width=device-width).
2176         * 
2177         * @param zoom Page zoom factor (CSS to device independent pixels ratio).
2178         * <BR /><B>OPTIONAL</B>
2179         */
2180        public VisualViewport(
2181                Number offsetX, Number offsetY, Number pageX, Number pageY, Number clientWidth, 
2182                Number clientHeight, Number scale, Number zoom
2183            )
2184        {
2185            // Exception-Check(s) to ensure that if any parameters which are not declared as
2186            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2187            
2188            if (offsetX == null)      BRDPC.throwNPE("offsetX");
2189            if (offsetY == null)      BRDPC.throwNPE("offsetY");
2190            if (pageX == null)        BRDPC.throwNPE("pageX");
2191            if (pageY == null)        BRDPC.throwNPE("pageY");
2192            if (clientWidth == null)  BRDPC.throwNPE("clientWidth");
2193            if (clientHeight == null) BRDPC.throwNPE("clientHeight");
2194            if (scale == null)        BRDPC.throwNPE("scale");
2195            
2196            this.offsetX       = offsetX;
2197            this.offsetY       = offsetY;
2198            this.pageX         = pageX;
2199            this.pageY         = pageY;
2200            this.clientWidth   = clientWidth;
2201            this.clientHeight  = clientHeight;
2202            this.scale         = scale;
2203            this.zoom          = zoom;
2204        }
2205        
2206        /**
2207         * JSON Object Constructor
2208         * @param jo A Json-Object having data about an instance of {@code 'VisualViewport'}.
2209         */
2210        public VisualViewport (JsonObject jo)
2211        {
2212            this.offsetX       = ReadNumberJSON.get(jo, "offsetX", false, true);
2213            this.offsetY       = ReadNumberJSON.get(jo, "offsetY", false, true);
2214            this.pageX         = ReadNumberJSON.get(jo, "pageX", false, true);
2215            this.pageY         = ReadNumberJSON.get(jo, "pageY", false, true);
2216            this.clientWidth   = ReadNumberJSON.get(jo, "clientWidth", false, true);
2217            this.clientHeight  = ReadNumberJSON.get(jo, "clientHeight", false, true);
2218            this.scale         = ReadNumberJSON.get(jo, "scale", false, true);
2219            this.zoom          = ReadNumberJSON.get(jo, "zoom", true, false);
2220        }
2221        
2222        
2223        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2224        public boolean equals(Object other)
2225        {
2226            if (other == null)                       return false;
2227            if (other.getClass() != this.getClass()) return false;
2228        
2229            VisualViewport o = (VisualViewport) other;
2230        
2231            return
2232                    Objects.equals(this.offsetX, o.offsetX)
2233                &&  Objects.equals(this.offsetY, o.offsetY)
2234                &&  Objects.equals(this.pageX, o.pageX)
2235                &&  Objects.equals(this.pageY, o.pageY)
2236                &&  Objects.equals(this.clientWidth, o.clientWidth)
2237                &&  Objects.equals(this.clientHeight, o.clientHeight)
2238                &&  Objects.equals(this.scale, o.scale)
2239                &&  Objects.equals(this.zoom, o.zoom);
2240        }
2241        
2242        /** Generates a Hash-Code for {@code 'this'} instance */
2243        public int hashCode()
2244        {
2245            return
2246                    Objects.hashCode(this.offsetX)
2247                +   Objects.hashCode(this.offsetY)
2248                +   Objects.hashCode(this.pageX)
2249                +   Objects.hashCode(this.pageY)
2250                +   Objects.hashCode(this.clientWidth)
2251                +   Objects.hashCode(this.clientHeight)
2252                +   Objects.hashCode(this.scale)
2253                +   Objects.hashCode(this.zoom);
2254        }
2255    }
2256    
2257    /** Viewport for capturing screenshot. */
2258    public static class Viewport
2259        extends BaseType
2260        implements java.io.Serializable
2261    {
2262        /** For Object Serialization.  java.io.Serializable */
2263        protected static final long serialVersionUID = 1;
2264        
2265        public boolean[] optionals()
2266        { return new boolean[] { false, false, false, false, false, }; }
2267        
2268        /** X offset in device independent pixels (dip). */
2269        public final Number x;
2270        
2271        /** Y offset in device independent pixels (dip). */
2272        public final Number y;
2273        
2274        /** Rectangle width in device independent pixels (dip). */
2275        public final Number width;
2276        
2277        /** Rectangle height in device independent pixels (dip). */
2278        public final Number height;
2279        
2280        /** Page scale factor. */
2281        public final Number scale;
2282        
2283        /**
2284         * Constructor
2285         *
2286         * @param x X offset in device independent pixels (dip).
2287         * 
2288         * @param y Y offset in device independent pixels (dip).
2289         * 
2290         * @param width Rectangle width in device independent pixels (dip).
2291         * 
2292         * @param height Rectangle height in device independent pixels (dip).
2293         * 
2294         * @param scale Page scale factor.
2295         */
2296        public Viewport(Number x, Number y, Number width, Number height, Number scale)
2297        {
2298            // Exception-Check(s) to ensure that if any parameters which are not declared as
2299            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2300            
2301            if (x == null)      BRDPC.throwNPE("x");
2302            if (y == null)      BRDPC.throwNPE("y");
2303            if (width == null)  BRDPC.throwNPE("width");
2304            if (height == null) BRDPC.throwNPE("height");
2305            if (scale == null)  BRDPC.throwNPE("scale");
2306            
2307            this.x       = x;
2308            this.y       = y;
2309            this.width   = width;
2310            this.height  = height;
2311            this.scale   = scale;
2312        }
2313        
2314        /**
2315         * JSON Object Constructor
2316         * @param jo A Json-Object having data about an instance of {@code 'Viewport'}.
2317         */
2318        public Viewport (JsonObject jo)
2319        {
2320            this.x       = ReadNumberJSON.get(jo, "x", false, true);
2321            this.y       = ReadNumberJSON.get(jo, "y", false, true);
2322            this.width   = ReadNumberJSON.get(jo, "width", false, true);
2323            this.height  = ReadNumberJSON.get(jo, "height", false, true);
2324            this.scale   = ReadNumberJSON.get(jo, "scale", false, true);
2325        }
2326        
2327        
2328        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2329        public boolean equals(Object other)
2330        {
2331            if (other == null)                       return false;
2332            if (other.getClass() != this.getClass()) return false;
2333        
2334            Viewport o = (Viewport) other;
2335        
2336            return
2337                    Objects.equals(this.x, o.x)
2338                &&  Objects.equals(this.y, o.y)
2339                &&  Objects.equals(this.width, o.width)
2340                &&  Objects.equals(this.height, o.height)
2341                &&  Objects.equals(this.scale, o.scale);
2342        }
2343        
2344        /** Generates a Hash-Code for {@code 'this'} instance */
2345        public int hashCode()
2346        {
2347            return
2348                    Objects.hashCode(this.x)
2349                +   Objects.hashCode(this.y)
2350                +   Objects.hashCode(this.width)
2351                +   Objects.hashCode(this.height)
2352                +   Objects.hashCode(this.scale);
2353        }
2354    }
2355    
2356    /**
2357     * Generic font families collection.
2358     * <BR />
2359     * <BR /><B>EXPERIMENTAL</B>
2360     */
2361    public static class FontFamilies
2362        extends BaseType
2363        implements java.io.Serializable
2364    {
2365        /** For Object Serialization.  java.io.Serializable */
2366        protected static final long serialVersionUID = 1;
2367        
2368        public boolean[] optionals()
2369        { return new boolean[] { true, true, true, true, true, true, true, }; }
2370        
2371        /**
2372         * The standard font-family.
2373         * <BR />
2374         * <BR /><B>OPTIONAL</B>
2375         */
2376        public final String standard;
2377        
2378        /**
2379         * The fixed font-family.
2380         * <BR />
2381         * <BR /><B>OPTIONAL</B>
2382         */
2383        public final String fixed;
2384        
2385        /**
2386         * The serif font-family.
2387         * <BR />
2388         * <BR /><B>OPTIONAL</B>
2389         */
2390        public final String serif;
2391        
2392        /**
2393         * The sansSerif font-family.
2394         * <BR />
2395         * <BR /><B>OPTIONAL</B>
2396         */
2397        public final String sansSerif;
2398        
2399        /**
2400         * The cursive font-family.
2401         * <BR />
2402         * <BR /><B>OPTIONAL</B>
2403         */
2404        public final String cursive;
2405        
2406        /**
2407         * The fantasy font-family.
2408         * <BR />
2409         * <BR /><B>OPTIONAL</B>
2410         */
2411        public final String fantasy;
2412        
2413        /**
2414         * The pictograph font-family.
2415         * <BR />
2416         * <BR /><B>OPTIONAL</B>
2417         */
2418        public final String pictograph;
2419        
2420        /**
2421         * Constructor
2422         *
2423         * @param standard The standard font-family.
2424         * <BR /><B>OPTIONAL</B>
2425         * 
2426         * @param fixed The fixed font-family.
2427         * <BR /><B>OPTIONAL</B>
2428         * 
2429         * @param serif The serif font-family.
2430         * <BR /><B>OPTIONAL</B>
2431         * 
2432         * @param sansSerif The sansSerif font-family.
2433         * <BR /><B>OPTIONAL</B>
2434         * 
2435         * @param cursive The cursive font-family.
2436         * <BR /><B>OPTIONAL</B>
2437         * 
2438         * @param fantasy The fantasy font-family.
2439         * <BR /><B>OPTIONAL</B>
2440         * 
2441         * @param pictograph The pictograph font-family.
2442         * <BR /><B>OPTIONAL</B>
2443         */
2444        public FontFamilies(
2445                String standard, String fixed, String serif, String sansSerif, String cursive, 
2446                String fantasy, String pictograph
2447            )
2448        {
2449            this.standard    = standard;
2450            this.fixed       = fixed;
2451            this.serif       = serif;
2452            this.sansSerif   = sansSerif;
2453            this.cursive     = cursive;
2454            this.fantasy     = fantasy;
2455            this.pictograph  = pictograph;
2456        }
2457        
2458        /**
2459         * JSON Object Constructor
2460         * @param jo A Json-Object having data about an instance of {@code 'FontFamilies'}.
2461         */
2462        public FontFamilies (JsonObject jo)
2463        {
2464            this.standard    = ReadJSON.getString(jo, "standard", true, false);
2465            this.fixed       = ReadJSON.getString(jo, "fixed", true, false);
2466            this.serif       = ReadJSON.getString(jo, "serif", true, false);
2467            this.sansSerif   = ReadJSON.getString(jo, "sansSerif", true, false);
2468            this.cursive     = ReadJSON.getString(jo, "cursive", true, false);
2469            this.fantasy     = ReadJSON.getString(jo, "fantasy", true, false);
2470            this.pictograph  = ReadJSON.getString(jo, "pictograph", true, false);
2471        }
2472        
2473        
2474        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2475        public boolean equals(Object other)
2476        {
2477            if (other == null)                       return false;
2478            if (other.getClass() != this.getClass()) return false;
2479        
2480            FontFamilies o = (FontFamilies) other;
2481        
2482            return
2483                    Objects.equals(this.standard, o.standard)
2484                &&  Objects.equals(this.fixed, o.fixed)
2485                &&  Objects.equals(this.serif, o.serif)
2486                &&  Objects.equals(this.sansSerif, o.sansSerif)
2487                &&  Objects.equals(this.cursive, o.cursive)
2488                &&  Objects.equals(this.fantasy, o.fantasy)
2489                &&  Objects.equals(this.pictograph, o.pictograph);
2490        }
2491        
2492        /** Generates a Hash-Code for {@code 'this'} instance */
2493        public int hashCode()
2494        {
2495            return
2496                    Objects.hashCode(this.standard)
2497                +   Objects.hashCode(this.fixed)
2498                +   Objects.hashCode(this.serif)
2499                +   Objects.hashCode(this.sansSerif)
2500                +   Objects.hashCode(this.cursive)
2501                +   Objects.hashCode(this.fantasy)
2502                +   Objects.hashCode(this.pictograph);
2503        }
2504    }
2505    
2506    /**
2507     * Default font sizes.
2508     * <BR />
2509     * <BR /><B>EXPERIMENTAL</B>
2510     */
2511    public static class FontSizes
2512        extends BaseType
2513        implements java.io.Serializable
2514    {
2515        /** For Object Serialization.  java.io.Serializable */
2516        protected static final long serialVersionUID = 1;
2517        
2518        public boolean[] optionals()
2519        { return new boolean[] { true, true, }; }
2520        
2521        /**
2522         * Default standard font size.
2523         * <BR />
2524         * <BR /><B>OPTIONAL</B>
2525         */
2526        public final Integer standard;
2527        
2528        /**
2529         * Default fixed font size.
2530         * <BR />
2531         * <BR /><B>OPTIONAL</B>
2532         */
2533        public final Integer fixed;
2534        
2535        /**
2536         * Constructor
2537         *
2538         * @param standard Default standard font size.
2539         * <BR /><B>OPTIONAL</B>
2540         * 
2541         * @param fixed Default fixed font size.
2542         * <BR /><B>OPTIONAL</B>
2543         */
2544        public FontSizes(Integer standard, Integer fixed)
2545        {
2546            this.standard  = standard;
2547            this.fixed     = fixed;
2548        }
2549        
2550        /**
2551         * JSON Object Constructor
2552         * @param jo A Json-Object having data about an instance of {@code 'FontSizes'}.
2553         */
2554        public FontSizes (JsonObject jo)
2555        {
2556            this.standard  = ReadBoxedJSON.getInteger(jo, "standard", true);
2557            this.fixed     = ReadBoxedJSON.getInteger(jo, "fixed", true);
2558        }
2559        
2560        
2561        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2562        public boolean equals(Object other)
2563        {
2564            if (other == null)                       return false;
2565            if (other.getClass() != this.getClass()) return false;
2566        
2567            FontSizes o = (FontSizes) other;
2568        
2569            return
2570                    Objects.equals(this.standard, o.standard)
2571                &&  Objects.equals(this.fixed, o.fixed);
2572        }
2573        
2574        /** Generates a Hash-Code for {@code 'this'} instance */
2575        public int hashCode()
2576        {
2577            return
2578                    Objects.hashCode(this.standard)
2579                +   Objects.hashCode(this.fixed);
2580        }
2581    }
2582    
2583    /**
2584     * <CODE>[No Description Provided by Google]</CODE>
2585     * <BR />
2586     * <BR /><B>EXPERIMENTAL</B>
2587     */
2588    public static class InstallabilityErrorArgument
2589        extends BaseType
2590        implements java.io.Serializable
2591    {
2592        /** For Object Serialization.  java.io.Serializable */
2593        protected static final long serialVersionUID = 1;
2594        
2595        public boolean[] optionals()
2596        { return new boolean[] { false, false, }; }
2597        
2598        /** Argument name (e.g. name:'minimum-icon-size-in-pixels'). */
2599        public final String name;
2600        
2601        /** Argument value (e.g. value:'64'). */
2602        public final String value;
2603        
2604        /**
2605         * Constructor
2606         *
2607         * @param name Argument name (e.g. name:'minimum-icon-size-in-pixels').
2608         * 
2609         * @param value Argument value (e.g. value:'64').
2610         */
2611        public InstallabilityErrorArgument(String name, String value)
2612        {
2613            // Exception-Check(s) to ensure that if any parameters which are not declared as
2614            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2615            
2616            if (name == null)  BRDPC.throwNPE("name");
2617            if (value == null) BRDPC.throwNPE("value");
2618            
2619            this.name   = name;
2620            this.value  = value;
2621        }
2622        
2623        /**
2624         * JSON Object Constructor
2625         * @param jo A Json-Object having data about an instance of {@code 'InstallabilityErrorArgument'}.
2626         */
2627        public InstallabilityErrorArgument (JsonObject jo)
2628        {
2629            this.name   = ReadJSON.getString(jo, "name", false, true);
2630            this.value  = ReadJSON.getString(jo, "value", false, true);
2631        }
2632        
2633        
2634        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2635        public boolean equals(Object other)
2636        {
2637            if (other == null)                       return false;
2638            if (other.getClass() != this.getClass()) return false;
2639        
2640            InstallabilityErrorArgument o = (InstallabilityErrorArgument) other;
2641        
2642            return
2643                    Objects.equals(this.name, o.name)
2644                &&  Objects.equals(this.value, o.value);
2645        }
2646        
2647        /** Generates a Hash-Code for {@code 'this'} instance */
2648        public int hashCode()
2649        {
2650            return
2651                    Objects.hashCode(this.name)
2652                +   Objects.hashCode(this.value);
2653        }
2654    }
2655    
2656    /**
2657     * The installability error
2658     * <BR />
2659     * <BR /><B>EXPERIMENTAL</B>
2660     */
2661    public static class InstallabilityError
2662        extends BaseType
2663        implements java.io.Serializable
2664    {
2665        /** For Object Serialization.  java.io.Serializable */
2666        protected static final long serialVersionUID = 1;
2667        
2668        public boolean[] optionals()
2669        { return new boolean[] { false, false, }; }
2670        
2671        /** The error id (e.g. 'manifest-missing-suitable-icon'). */
2672        public final String errorId;
2673        
2674        /** The list of error arguments (e.g. {name:'minimum-icon-size-in-pixels', value:'64'}). */
2675        public final Page.InstallabilityErrorArgument[] errorArguments;
2676        
2677        /**
2678         * Constructor
2679         *
2680         * @param errorId The error id (e.g. 'manifest-missing-suitable-icon').
2681         * 
2682         * @param errorArguments The list of error arguments (e.g. {name:'minimum-icon-size-in-pixels', value:'64'}).
2683         */
2684        public InstallabilityError
2685            (String errorId, Page.InstallabilityErrorArgument[] errorArguments)
2686        {
2687            // Exception-Check(s) to ensure that if any parameters which are not declared as
2688            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2689            
2690            if (errorId == null)        BRDPC.throwNPE("errorId");
2691            if (errorArguments == null) BRDPC.throwNPE("errorArguments");
2692            
2693            this.errorId         = errorId;
2694            this.errorArguments  = errorArguments;
2695        }
2696        
2697        /**
2698         * JSON Object Constructor
2699         * @param jo A Json-Object having data about an instance of {@code 'InstallabilityError'}.
2700         */
2701        public InstallabilityError (JsonObject jo)
2702        {
2703            this.errorId         = ReadJSON.getString(jo, "errorId", false, true);
2704            this.errorArguments = (jo.getJsonArray("errorArguments") == null)
2705                ? null
2706                : RJArrDimN.objArr(jo.getJsonArray("errorArguments"), null, 0, Page.InstallabilityErrorArgument[].class);
2707        
2708        }
2709        
2710        
2711        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2712        public boolean equals(Object other)
2713        {
2714            if (other == null)                       return false;
2715            if (other.getClass() != this.getClass()) return false;
2716        
2717            InstallabilityError o = (InstallabilityError) other;
2718        
2719            return
2720                    Objects.equals(this.errorId, o.errorId)
2721                &&  Arrays.deepEquals(this.errorArguments, o.errorArguments);
2722        }
2723        
2724        /** Generates a Hash-Code for {@code 'this'} instance */
2725        public int hashCode()
2726        {
2727            return
2728                    Objects.hashCode(this.errorId)
2729                +   Arrays.deepHashCode(this.errorArguments);
2730        }
2731    }
2732    
2733    /**
2734     * Per-script compilation cache parameters for <CODE>Page.produceCompilationCache</CODE>
2735     * <BR />
2736     * <BR /><B>EXPERIMENTAL</B>
2737     */
2738    public static class CompilationCacheParams
2739        extends BaseType
2740        implements java.io.Serializable
2741    {
2742        /** For Object Serialization.  java.io.Serializable */
2743        protected static final long serialVersionUID = 1;
2744        
2745        public boolean[] optionals()
2746        { return new boolean[] { false, true, }; }
2747        
2748        /** The URL of the script to produce a compilation cache entry for. */
2749        public final String url;
2750        
2751        /**
2752         * A hint to the backend whether eager compilation is recommended.
2753         * (the actual compilation mode used is upon backend discretion).
2754         * <BR />
2755         * <BR /><B>OPTIONAL</B>
2756         */
2757        public final Boolean eager;
2758        
2759        /**
2760         * Constructor
2761         *
2762         * @param url The URL of the script to produce a compilation cache entry for.
2763         * 
2764         * @param eager 
2765         * A hint to the backend whether eager compilation is recommended.
2766         * (the actual compilation mode used is upon backend discretion).
2767         * <BR /><B>OPTIONAL</B>
2768         */
2769        public CompilationCacheParams(String url, Boolean eager)
2770        {
2771            // Exception-Check(s) to ensure that if any parameters which are not declared as
2772            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2773            
2774            if (url == null) BRDPC.throwNPE("url");
2775            
2776            this.url    = url;
2777            this.eager  = eager;
2778        }
2779        
2780        /**
2781         * JSON Object Constructor
2782         * @param jo A Json-Object having data about an instance of {@code 'CompilationCacheParams'}.
2783         */
2784        public CompilationCacheParams (JsonObject jo)
2785        {
2786            this.url    = ReadJSON.getString(jo, "url", false, true);
2787            this.eager  = ReadBoxedJSON.getBoolean(jo, "eager", true);
2788        }
2789        
2790        
2791        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2792        public boolean equals(Object other)
2793        {
2794            if (other == null)                       return false;
2795            if (other.getClass() != this.getClass()) return false;
2796        
2797            CompilationCacheParams o = (CompilationCacheParams) other;
2798        
2799            return
2800                    Objects.equals(this.url, o.url)
2801                &&  Objects.equals(this.eager, o.eager);
2802        }
2803        
2804        /** Generates a Hash-Code for {@code 'this'} instance */
2805        public int hashCode()
2806        {
2807            return
2808                    Objects.hashCode(this.url)
2809                +   Objects.hashCode(this.eager);
2810        }
2811    }
2812    
2813    /**
2814     * <CODE>[No Description Provided by Google]</CODE>
2815     * <BR />
2816     * <BR /><B>EXPERIMENTAL</B>
2817     */
2818    public static class BackForwardCacheNotRestoredExplanation
2819        extends BaseType
2820        implements java.io.Serializable
2821    {
2822        /** For Object Serialization.  java.io.Serializable */
2823        protected static final long serialVersionUID = 1;
2824        
2825        public boolean[] optionals()
2826        { return new boolean[] { false, false, }; }
2827        
2828        /** Type of the reason */
2829        public final String type;
2830        
2831        /** Not restored reason */
2832        public final String reason;
2833        
2834        /**
2835         * Constructor
2836         *
2837         * @param type Type of the reason
2838         * 
2839         * @param reason Not restored reason
2840         */
2841        public BackForwardCacheNotRestoredExplanation(String type, String reason)
2842        {
2843            // Exception-Check(s) to ensure that if any parameters which are not declared as
2844            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2845            
2846            if (type == null)   BRDPC.throwNPE("type");
2847            if (reason == null) BRDPC.throwNPE("reason");
2848            
2849            // Exception-Check(s) to ensure that if any parameters which must adhere to a
2850            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
2851            
2852            BRDPC.checkIAE("type", type, "Page.BackForwardCacheNotRestoredReasonType", Page.BackForwardCacheNotRestoredReasonType);
2853            BRDPC.checkIAE("reason", reason, "Page.BackForwardCacheNotRestoredReason", Page.BackForwardCacheNotRestoredReason);
2854            
2855            this.type    = type;
2856            this.reason  = reason;
2857        }
2858        
2859        /**
2860         * JSON Object Constructor
2861         * @param jo A Json-Object having data about an instance of {@code 'BackForwardCacheNotRestoredExplanation'}.
2862         */
2863        public BackForwardCacheNotRestoredExplanation (JsonObject jo)
2864        {
2865            this.type    = ReadJSON.getString(jo, "type", false, true);
2866            this.reason  = ReadJSON.getString(jo, "reason", false, true);
2867        }
2868        
2869        
2870        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
2871        public boolean equals(Object other)
2872        {
2873            if (other == null)                       return false;
2874            if (other.getClass() != this.getClass()) return false;
2875        
2876            BackForwardCacheNotRestoredExplanation o = (BackForwardCacheNotRestoredExplanation) other;
2877        
2878            return
2879                    Objects.equals(this.type, o.type)
2880                &&  Objects.equals(this.reason, o.reason);
2881        }
2882        
2883        /** Generates a Hash-Code for {@code 'this'} instance */
2884        public int hashCode()
2885        {
2886            return
2887                    Objects.hashCode(this.type)
2888                +   Objects.hashCode(this.reason);
2889        }
2890    }
2891    
2892    /**
2893     * -
2894     * <BR />
2895     * <BR /><B>EXPERIMENTAL</B>
2896     *
2897     * <BR /><BR />This is Marker-Event.  Marker-Event's are Events that do not posses
2898     * any data, fields or state.  When they are fired, only the event name is supplied.
2899     */
2900    public static class frameResized
2901        extends BrowserEvent
2902        implements java.io.Serializable
2903    {
2904        /** For Object Serialization.  java.io.Serializable */
2905        protected static final long serialVersionUID = 1;
2906    
2907        public boolean[] optionals() { return new boolean[0]; }
2908    
2909        /** JSON Object Constructor */
2910        public frameResized(JsonObject jo)
2911        { super("Page", "frameResized", 0); }
2912    
2913        @Override
2914        public String toString() { return "Page.frameResized Marker Event\n"; }
2915    }
2916    
2917    /**
2918     * Fired when interstitial page was hidden
2919     *
2920     * <BR /><BR />This is Marker-Event.  Marker-Event's are Events that do not posses
2921     * any data, fields or state.  When they are fired, only the event name is supplied.
2922     */
2923    public static class interstitialHidden
2924        extends BrowserEvent
2925        implements java.io.Serializable
2926    {
2927        /** For Object Serialization.  java.io.Serializable */
2928        protected static final long serialVersionUID = 1;
2929    
2930        public boolean[] optionals() { return new boolean[0]; }
2931    
2932        /** JSON Object Constructor */
2933        public interstitialHidden(JsonObject jo)
2934        { super("Page", "interstitialHidden", 0); }
2935    
2936        @Override
2937        public String toString() { return "Page.interstitialHidden Marker Event\n"; }
2938    }
2939    
2940    /**
2941     * Fired when interstitial page was shown
2942     *
2943     * <BR /><BR />This is Marker-Event.  Marker-Event's are Events that do not posses
2944     * any data, fields or state.  When they are fired, only the event name is supplied.
2945     */
2946    public static class interstitialShown
2947        extends BrowserEvent
2948        implements java.io.Serializable
2949    {
2950        /** For Object Serialization.  java.io.Serializable */
2951        protected static final long serialVersionUID = 1;
2952    
2953        public boolean[] optionals() { return new boolean[0]; }
2954    
2955        /** JSON Object Constructor */
2956        public interstitialShown(JsonObject jo)
2957        { super("Page", "interstitialShown", 0); }
2958    
2959        @Override
2960        public String toString() { return "Page.interstitialShown Marker Event\n"; }
2961    }
2962    
2963    /** <CODE>[No Description Provided by Google]</CODE> */
2964    public static class domContentEventFired
2965        extends BrowserEvent
2966        implements java.io.Serializable
2967    {
2968        /** For Object Serialization.  java.io.Serializable */
2969        protected static final long serialVersionUID = 1;
2970        
2971        public boolean[] optionals()
2972        { return new boolean[] { false, }; }
2973        
2974        /** <CODE>[No Description Provided by Google]</CODE> */
2975        public final Number timestamp;
2976        
2977        /**
2978         * Constructor
2979         *
2980         * @param timestamp -
2981         */
2982        public domContentEventFired(Number timestamp)
2983        {
2984            super("Page", "domContentEventFired", 1);
2985            
2986            // Exception-Check(s) to ensure that if any parameters which are not declared as
2987            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
2988            
2989            if (timestamp == null) BRDPC.throwNPE("timestamp");
2990            
2991            this.timestamp  = timestamp;
2992        }
2993        
2994        /**
2995         * JSON Object Constructor
2996         * @param jo A Json-Object having data about an instance of {@code 'domContentEventFired'}.
2997         */
2998        public domContentEventFired (JsonObject jo)
2999        {
3000            super("Page", "domContentEventFired", 1);
3001        
3002            this.timestamp  = ReadNumberJSON.get(jo, "timestamp", false, true);
3003        }
3004        
3005        
3006        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3007        public boolean equals(Object other)
3008        {
3009            if (other == null)                       return false;
3010            if (other.getClass() != this.getClass()) return false;
3011        
3012            domContentEventFired o = (domContentEventFired) other;
3013        
3014            return
3015                    Objects.equals(this.timestamp, o.timestamp);
3016        }
3017        
3018        /** Generates a Hash-Code for {@code 'this'} instance */
3019        public int hashCode()
3020        {
3021            return
3022                    Objects.hashCode(this.timestamp);
3023        }
3024    }
3025    
3026    /** Emitted only when <CODE>page.interceptFileChooser</CODE> is enabled. */
3027    public static class fileChooserOpened
3028        extends BrowserEvent
3029        implements java.io.Serializable
3030    {
3031        /** For Object Serialization.  java.io.Serializable */
3032        protected static final long serialVersionUID = 1;
3033        
3034        public boolean[] optionals()
3035        { return new boolean[] { false, false, false, }; }
3036        
3037        /**
3038         * Id of the frame containing input node.
3039         * <BR />
3040         * <BR /><B>EXPERIMENTAL</B>
3041         */
3042        public final String frameId;
3043        
3044        /**
3045         * Input node id.
3046         * <BR />
3047         * <BR /><B>EXPERIMENTAL</B>
3048         */
3049        public final int backendNodeId;
3050        
3051        /** Input mode. */
3052        public final String mode;
3053        
3054        /**
3055         * Constructor
3056         *
3057         * @param frameId Id of the frame containing input node.
3058         * <BR /><B>EXPERIMENTAL</B>
3059         * 
3060         * @param backendNodeId Input node id.
3061         * <BR /><B>EXPERIMENTAL</B>
3062         * 
3063         * @param mode Input mode.
3064         * <BR />Acceptable Values: ["selectSingle", "selectMultiple"]
3065         */
3066        public fileChooserOpened(String frameId, int backendNodeId, String mode)
3067        {
3068            super("Page", "fileChooserOpened", 3);
3069            
3070            // Exception-Check(s) to ensure that if any parameters which are not declared as
3071            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3072            
3073            if (frameId == null) BRDPC.throwNPE("frameId");
3074            if (mode == null)    BRDPC.throwNPE("mode");
3075            
3076            // Exception-Check(s) to ensure that if any parameters which must adhere to a
3077            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
3078            
3079            BRDPC.checkIAE(
3080                "mode", mode,
3081                "selectSingle", "selectMultiple"
3082            );
3083            
3084            this.frameId        = frameId;
3085            this.backendNodeId  = backendNodeId;
3086            this.mode           = mode;
3087        }
3088        
3089        /**
3090         * JSON Object Constructor
3091         * @param jo A Json-Object having data about an instance of {@code 'fileChooserOpened'}.
3092         */
3093        public fileChooserOpened (JsonObject jo)
3094        {
3095            super("Page", "fileChooserOpened", 3);
3096        
3097            this.frameId        = ReadJSON.getString(jo, "frameId", false, true);
3098            this.backendNodeId  = ReadPrimJSON.getInt(jo, "backendNodeId");
3099            this.mode           = ReadJSON.getString(jo, "mode", false, true);
3100        }
3101        
3102        
3103        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3104        public boolean equals(Object other)
3105        {
3106            if (other == null)                       return false;
3107            if (other.getClass() != this.getClass()) return false;
3108        
3109            fileChooserOpened o = (fileChooserOpened) other;
3110        
3111            return
3112                    Objects.equals(this.frameId, o.frameId)
3113                &&  Objects.equals(this.backendNodeId, o.backendNodeId)
3114                &&  Objects.equals(this.mode, o.mode);
3115        }
3116        
3117        /** Generates a Hash-Code for {@code 'this'} instance */
3118        public int hashCode()
3119        {
3120            return
3121                    Objects.hashCode(this.frameId)
3122                +   this.backendNodeId
3123                +   Objects.hashCode(this.mode);
3124        }
3125    }
3126    
3127    /** Fired when frame has been attached to its parent. */
3128    public static class frameAttached
3129        extends BrowserEvent
3130        implements java.io.Serializable
3131    {
3132        /** For Object Serialization.  java.io.Serializable */
3133        protected static final long serialVersionUID = 1;
3134        
3135        public boolean[] optionals()
3136        { return new boolean[] { false, false, true, }; }
3137        
3138        /** Id of the frame that has been attached. */
3139        public final String frameId;
3140        
3141        /** Parent frame identifier. */
3142        public final String parentFrameId;
3143        
3144        /**
3145         * JavaScript stack trace of when frame was attached, only set if frame initiated from script.
3146         * <BR />
3147         * <BR /><B>OPTIONAL</B>
3148         */
3149        public final RunTime.StackTrace stack;
3150        
3151        /**
3152         * Constructor
3153         *
3154         * @param frameId Id of the frame that has been attached.
3155         * 
3156         * @param parentFrameId Parent frame identifier.
3157         * 
3158         * @param stack JavaScript stack trace of when frame was attached, only set if frame initiated from script.
3159         * <BR /><B>OPTIONAL</B>
3160         */
3161        public frameAttached(String frameId, String parentFrameId, RunTime.StackTrace stack)
3162        {
3163            super("Page", "frameAttached", 3);
3164            
3165            // Exception-Check(s) to ensure that if any parameters which are not declared as
3166            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3167            
3168            if (frameId == null)       BRDPC.throwNPE("frameId");
3169            if (parentFrameId == null) BRDPC.throwNPE("parentFrameId");
3170            
3171            this.frameId        = frameId;
3172            this.parentFrameId  = parentFrameId;
3173            this.stack          = stack;
3174        }
3175        
3176        /**
3177         * JSON Object Constructor
3178         * @param jo A Json-Object having data about an instance of {@code 'frameAttached'}.
3179         */
3180        public frameAttached (JsonObject jo)
3181        {
3182            super("Page", "frameAttached", 3);
3183        
3184            this.frameId        = ReadJSON.getString(jo, "frameId", false, true);
3185            this.parentFrameId  = ReadJSON.getString(jo, "parentFrameId", false, true);
3186            this.stack          = ReadJSON.getObject(jo, "stack", RunTime.StackTrace.class, true, false);
3187        }
3188        
3189        
3190        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3191        public boolean equals(Object other)
3192        {
3193            if (other == null)                       return false;
3194            if (other.getClass() != this.getClass()) return false;
3195        
3196            frameAttached o = (frameAttached) other;
3197        
3198            return
3199                    Objects.equals(this.frameId, o.frameId)
3200                &&  Objects.equals(this.parentFrameId, o.parentFrameId)
3201                &&  Objects.equals(this.stack, o.stack);
3202        }
3203        
3204        /** Generates a Hash-Code for {@code 'this'} instance */
3205        public int hashCode()
3206        {
3207            return
3208                    Objects.hashCode(this.frameId)
3209                +   Objects.hashCode(this.parentFrameId)
3210                +   this.stack.hashCode();
3211        }
3212    }
3213    
3214    /**
3215     * Fired when frame no longer has a scheduled navigation.
3216     * <BR />
3217     * <BR /><B>DEPRECATED</B>
3218     */
3219    public static class frameClearedScheduledNavigation
3220        extends BrowserEvent
3221        implements java.io.Serializable
3222    {
3223        /** For Object Serialization.  java.io.Serializable */
3224        protected static final long serialVersionUID = 1;
3225        
3226        public boolean[] optionals()
3227        { return new boolean[] { false, }; }
3228        
3229        /** Id of the frame that has cleared its scheduled navigation. */
3230        public final String frameId;
3231        
3232        /**
3233         * Constructor
3234         *
3235         * @param frameId Id of the frame that has cleared its scheduled navigation.
3236         */
3237        public frameClearedScheduledNavigation(String frameId)
3238        {
3239            super("Page", "frameClearedScheduledNavigation", 1);
3240            
3241            // Exception-Check(s) to ensure that if any parameters which are not declared as
3242            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3243            
3244            if (frameId == null) BRDPC.throwNPE("frameId");
3245            
3246            this.frameId  = frameId;
3247        }
3248        
3249        /**
3250         * JSON Object Constructor
3251         * @param jo A Json-Object having data about an instance of {@code 'frameClearedScheduledNavigation'}.
3252         */
3253        public frameClearedScheduledNavigation (JsonObject jo)
3254        {
3255            super("Page", "frameClearedScheduledNavigation", 1);
3256        
3257            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
3258        }
3259        
3260        
3261        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3262        public boolean equals(Object other)
3263        {
3264            if (other == null)                       return false;
3265            if (other.getClass() != this.getClass()) return false;
3266        
3267            frameClearedScheduledNavigation o = (frameClearedScheduledNavigation) other;
3268        
3269            return
3270                    Objects.equals(this.frameId, o.frameId);
3271        }
3272        
3273        /** Generates a Hash-Code for {@code 'this'} instance */
3274        public int hashCode()
3275        {
3276            return
3277                    Objects.hashCode(this.frameId);
3278        }
3279    }
3280    
3281    /** Fired when frame has been detached from its parent. */
3282    public static class frameDetached
3283        extends BrowserEvent
3284        implements java.io.Serializable
3285    {
3286        /** For Object Serialization.  java.io.Serializable */
3287        protected static final long serialVersionUID = 1;
3288        
3289        public boolean[] optionals()
3290        { return new boolean[] { false, false, }; }
3291        
3292        /** Id of the frame that has been detached. */
3293        public final String frameId;
3294        
3295        /**
3296         * <CODE>[No Description Provided by Google]</CODE>
3297         * <BR />
3298         * <BR /><B>EXPERIMENTAL</B>
3299         */
3300        public final String reason;
3301        
3302        /**
3303         * Constructor
3304         *
3305         * @param frameId Id of the frame that has been detached.
3306         * 
3307         * @param reason -
3308         * <BR />Acceptable Values: ["remove", "swap"]
3309         * <BR /><B>EXPERIMENTAL</B>
3310         */
3311        public frameDetached(String frameId, String reason)
3312        {
3313            super("Page", "frameDetached", 2);
3314            
3315            // Exception-Check(s) to ensure that if any parameters which are not declared as
3316            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3317            
3318            if (frameId == null) BRDPC.throwNPE("frameId");
3319            if (reason == null)  BRDPC.throwNPE("reason");
3320            
3321            // Exception-Check(s) to ensure that if any parameters which must adhere to a
3322            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
3323            
3324            BRDPC.checkIAE(
3325                "reason", reason,
3326                "remove", "swap"
3327            );
3328            
3329            this.frameId  = frameId;
3330            this.reason   = reason;
3331        }
3332        
3333        /**
3334         * JSON Object Constructor
3335         * @param jo A Json-Object having data about an instance of {@code 'frameDetached'}.
3336         */
3337        public frameDetached (JsonObject jo)
3338        {
3339            super("Page", "frameDetached", 2);
3340        
3341            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
3342            this.reason   = ReadJSON.getString(jo, "reason", false, true);
3343        }
3344        
3345        
3346        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3347        public boolean equals(Object other)
3348        {
3349            if (other == null)                       return false;
3350            if (other.getClass() != this.getClass()) return false;
3351        
3352            frameDetached o = (frameDetached) other;
3353        
3354            return
3355                    Objects.equals(this.frameId, o.frameId)
3356                &&  Objects.equals(this.reason, o.reason);
3357        }
3358        
3359        /** Generates a Hash-Code for {@code 'this'} instance */
3360        public int hashCode()
3361        {
3362            return
3363                    Objects.hashCode(this.frameId)
3364                +   Objects.hashCode(this.reason);
3365        }
3366    }
3367    
3368    /** Fired once navigation of the frame has completed. Frame is now associated with the new loader. */
3369    public static class frameNavigated
3370        extends BrowserEvent
3371        implements java.io.Serializable
3372    {
3373        /** For Object Serialization.  java.io.Serializable */
3374        protected static final long serialVersionUID = 1;
3375        
3376        public boolean[] optionals()
3377        { return new boolean[] { false, false, }; }
3378        
3379        /** Frame object. */
3380        public final Page.Frame frame;
3381        
3382        /**
3383         * <CODE>[No Description Provided by Google]</CODE>
3384         * <BR />
3385         * <BR /><B>EXPERIMENTAL</B>
3386         */
3387        public final String type;
3388        
3389        /**
3390         * Constructor
3391         *
3392         * @param frame Frame object.
3393         * 
3394         * @param type -
3395         * <BR /><B>EXPERIMENTAL</B>
3396         */
3397        public frameNavigated(Page.Frame frame, String type)
3398        {
3399            super("Page", "frameNavigated", 2);
3400            
3401            // Exception-Check(s) to ensure that if any parameters which are not declared as
3402            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3403            
3404            if (frame == null) BRDPC.throwNPE("frame");
3405            if (type == null)  BRDPC.throwNPE("type");
3406            
3407            // Exception-Check(s) to ensure that if any parameters which must adhere to a
3408            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
3409            
3410            BRDPC.checkIAE("type", type, "Page.NavigationType", Page.NavigationType);
3411            
3412            this.frame  = frame;
3413            this.type   = type;
3414        }
3415        
3416        /**
3417         * JSON Object Constructor
3418         * @param jo A Json-Object having data about an instance of {@code 'frameNavigated'}.
3419         */
3420        public frameNavigated (JsonObject jo)
3421        {
3422            super("Page", "frameNavigated", 2);
3423        
3424            this.frame  = ReadJSON.getObject(jo, "frame", Page.Frame.class, false, true);
3425            this.type   = ReadJSON.getString(jo, "type", false, true);
3426        }
3427        
3428        
3429        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3430        public boolean equals(Object other)
3431        {
3432            if (other == null)                       return false;
3433            if (other.getClass() != this.getClass()) return false;
3434        
3435            frameNavigated o = (frameNavigated) other;
3436        
3437            return
3438                    Objects.equals(this.frame, o.frame)
3439                &&  Objects.equals(this.type, o.type);
3440        }
3441        
3442        /** Generates a Hash-Code for {@code 'this'} instance */
3443        public int hashCode()
3444        {
3445            return
3446                    this.frame.hashCode()
3447                +   Objects.hashCode(this.type);
3448        }
3449    }
3450    
3451    /**
3452     * Fired when opening document to write to.
3453     * <BR />
3454     * <BR /><B>EXPERIMENTAL</B>
3455     */
3456    public static class documentOpened
3457        extends BrowserEvent
3458        implements java.io.Serializable
3459    {
3460        /** For Object Serialization.  java.io.Serializable */
3461        protected static final long serialVersionUID = 1;
3462        
3463        public boolean[] optionals()
3464        { return new boolean[] { false, }; }
3465        
3466        /** Frame object. */
3467        public final Page.Frame frame;
3468        
3469        /**
3470         * Constructor
3471         *
3472         * @param frame Frame object.
3473         */
3474        public documentOpened(Page.Frame frame)
3475        {
3476            super("Page", "documentOpened", 1);
3477            
3478            // Exception-Check(s) to ensure that if any parameters which are not declared as
3479            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3480            
3481            if (frame == null) BRDPC.throwNPE("frame");
3482            
3483            this.frame  = frame;
3484        }
3485        
3486        /**
3487         * JSON Object Constructor
3488         * @param jo A Json-Object having data about an instance of {@code 'documentOpened'}.
3489         */
3490        public documentOpened (JsonObject jo)
3491        {
3492            super("Page", "documentOpened", 1);
3493        
3494            this.frame  = ReadJSON.getObject(jo, "frame", Page.Frame.class, false, true);
3495        }
3496        
3497        
3498        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3499        public boolean equals(Object other)
3500        {
3501            if (other == null)                       return false;
3502            if (other.getClass() != this.getClass()) return false;
3503        
3504            documentOpened o = (documentOpened) other;
3505        
3506            return
3507                    Objects.equals(this.frame, o.frame);
3508        }
3509        
3510        /** Generates a Hash-Code for {@code 'this'} instance */
3511        public int hashCode()
3512        {
3513            return
3514                    this.frame.hashCode();
3515        }
3516    }
3517    
3518    /**
3519     * Fired when a renderer-initiated navigation is requested.
3520     * Navigation may still be cancelled after the event is issued.
3521     * <BR />
3522     * <BR /><B>EXPERIMENTAL</B>
3523     */
3524    public static class frameRequestedNavigation
3525        extends BrowserEvent
3526        implements java.io.Serializable
3527    {
3528        /** For Object Serialization.  java.io.Serializable */
3529        protected static final long serialVersionUID = 1;
3530        
3531        public boolean[] optionals()
3532        { return new boolean[] { false, false, false, false, }; }
3533        
3534        /** Id of the frame that is being navigated. */
3535        public final String frameId;
3536        
3537        /** The reason for the navigation. */
3538        public final String reason;
3539        
3540        /** The destination URL for the requested navigation. */
3541        public final String url;
3542        
3543        /** The disposition for the navigation. */
3544        public final String disposition;
3545        
3546        /**
3547         * Constructor
3548         *
3549         * @param frameId Id of the frame that is being navigated.
3550         * 
3551         * @param reason The reason for the navigation.
3552         * 
3553         * @param url The destination URL for the requested navigation.
3554         * 
3555         * @param disposition The disposition for the navigation.
3556         */
3557        public frameRequestedNavigation
3558            (String frameId, String reason, String url, String disposition)
3559        {
3560            super("Page", "frameRequestedNavigation", 4);
3561            
3562            // Exception-Check(s) to ensure that if any parameters which are not declared as
3563            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3564            
3565            if (frameId == null)     BRDPC.throwNPE("frameId");
3566            if (reason == null)      BRDPC.throwNPE("reason");
3567            if (url == null)         BRDPC.throwNPE("url");
3568            if (disposition == null) BRDPC.throwNPE("disposition");
3569            
3570            // Exception-Check(s) to ensure that if any parameters which must adhere to a
3571            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
3572            
3573            BRDPC.checkIAE("reason", reason, "Page.ClientNavigationReason", Page.ClientNavigationReason);
3574            BRDPC.checkIAE("disposition", disposition, "Page.ClientNavigationDisposition", Page.ClientNavigationDisposition);
3575            
3576            this.frameId      = frameId;
3577            this.reason       = reason;
3578            this.url          = url;
3579            this.disposition  = disposition;
3580        }
3581        
3582        /**
3583         * JSON Object Constructor
3584         * @param jo A Json-Object having data about an instance of {@code 'frameRequestedNavigation'}.
3585         */
3586        public frameRequestedNavigation (JsonObject jo)
3587        {
3588            super("Page", "frameRequestedNavigation", 4);
3589        
3590            this.frameId      = ReadJSON.getString(jo, "frameId", false, true);
3591            this.reason       = ReadJSON.getString(jo, "reason", false, true);
3592            this.url          = ReadJSON.getString(jo, "url", false, true);
3593            this.disposition  = ReadJSON.getString(jo, "disposition", false, true);
3594        }
3595        
3596        
3597        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3598        public boolean equals(Object other)
3599        {
3600            if (other == null)                       return false;
3601            if (other.getClass() != this.getClass()) return false;
3602        
3603            frameRequestedNavigation o = (frameRequestedNavigation) other;
3604        
3605            return
3606                    Objects.equals(this.frameId, o.frameId)
3607                &&  Objects.equals(this.reason, o.reason)
3608                &&  Objects.equals(this.url, o.url)
3609                &&  Objects.equals(this.disposition, o.disposition);
3610        }
3611        
3612        /** Generates a Hash-Code for {@code 'this'} instance */
3613        public int hashCode()
3614        {
3615            return
3616                    Objects.hashCode(this.frameId)
3617                +   Objects.hashCode(this.reason)
3618                +   Objects.hashCode(this.url)
3619                +   Objects.hashCode(this.disposition);
3620        }
3621    }
3622    
3623    /**
3624     * Fired when frame schedules a potential navigation.
3625     * <BR />
3626     * <BR /><B>DEPRECATED</B>
3627     */
3628    public static class frameScheduledNavigation
3629        extends BrowserEvent
3630        implements java.io.Serializable
3631    {
3632        /** For Object Serialization.  java.io.Serializable */
3633        protected static final long serialVersionUID = 1;
3634        
3635        public boolean[] optionals()
3636        { return new boolean[] { false, false, false, false, }; }
3637        
3638        /** Id of the frame that has scheduled a navigation. */
3639        public final String frameId;
3640        
3641        /**
3642         * Delay (in seconds) until the navigation is scheduled to begin. The navigation is not
3643         * guaranteed to start.
3644         */
3645        public final Number delay;
3646        
3647        /** The reason for the navigation. */
3648        public final String reason;
3649        
3650        /** The destination URL for the scheduled navigation. */
3651        public final String url;
3652        
3653        /**
3654         * Constructor
3655         *
3656         * @param frameId Id of the frame that has scheduled a navigation.
3657         * 
3658         * @param delay 
3659         * Delay (in seconds) until the navigation is scheduled to begin. The navigation is not
3660         * guaranteed to start.
3661         * 
3662         * @param reason The reason for the navigation.
3663         * 
3664         * @param url The destination URL for the scheduled navigation.
3665         */
3666        public frameScheduledNavigation(String frameId, Number delay, String reason, String url)
3667        {
3668            super("Page", "frameScheduledNavigation", 4);
3669            
3670            // Exception-Check(s) to ensure that if any parameters which are not declared as
3671            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3672            
3673            if (frameId == null) BRDPC.throwNPE("frameId");
3674            if (delay == null)   BRDPC.throwNPE("delay");
3675            if (reason == null)  BRDPC.throwNPE("reason");
3676            if (url == null)     BRDPC.throwNPE("url");
3677            
3678            // Exception-Check(s) to ensure that if any parameters which must adhere to a
3679            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
3680            
3681            BRDPC.checkIAE("reason", reason, "Page.ClientNavigationReason", Page.ClientNavigationReason);
3682            
3683            this.frameId  = frameId;
3684            this.delay    = delay;
3685            this.reason   = reason;
3686            this.url      = url;
3687        }
3688        
3689        /**
3690         * JSON Object Constructor
3691         * @param jo A Json-Object having data about an instance of {@code 'frameScheduledNavigation'}.
3692         */
3693        public frameScheduledNavigation (JsonObject jo)
3694        {
3695            super("Page", "frameScheduledNavigation", 4);
3696        
3697            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
3698            this.delay    = ReadNumberJSON.get(jo, "delay", false, true);
3699            this.reason   = ReadJSON.getString(jo, "reason", false, true);
3700            this.url      = ReadJSON.getString(jo, "url", false, true);
3701        }
3702        
3703        
3704        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3705        public boolean equals(Object other)
3706        {
3707            if (other == null)                       return false;
3708            if (other.getClass() != this.getClass()) return false;
3709        
3710            frameScheduledNavigation o = (frameScheduledNavigation) other;
3711        
3712            return
3713                    Objects.equals(this.frameId, o.frameId)
3714                &&  Objects.equals(this.delay, o.delay)
3715                &&  Objects.equals(this.reason, o.reason)
3716                &&  Objects.equals(this.url, o.url);
3717        }
3718        
3719        /** Generates a Hash-Code for {@code 'this'} instance */
3720        public int hashCode()
3721        {
3722            return
3723                    Objects.hashCode(this.frameId)
3724                +   Objects.hashCode(this.delay)
3725                +   Objects.hashCode(this.reason)
3726                +   Objects.hashCode(this.url);
3727        }
3728    }
3729    
3730    /**
3731     * Fired when frame has started loading.
3732     * <BR />
3733     * <BR /><B>EXPERIMENTAL</B>
3734     */
3735    public static class frameStartedLoading
3736        extends BrowserEvent
3737        implements java.io.Serializable
3738    {
3739        /** For Object Serialization.  java.io.Serializable */
3740        protected static final long serialVersionUID = 1;
3741        
3742        public boolean[] optionals()
3743        { return new boolean[] { false, }; }
3744        
3745        /** Id of the frame that has started loading. */
3746        public final String frameId;
3747        
3748        /**
3749         * Constructor
3750         *
3751         * @param frameId Id of the frame that has started loading.
3752         */
3753        public frameStartedLoading(String frameId)
3754        {
3755            super("Page", "frameStartedLoading", 1);
3756            
3757            // Exception-Check(s) to ensure that if any parameters which are not declared as
3758            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3759            
3760            if (frameId == null) BRDPC.throwNPE("frameId");
3761            
3762            this.frameId  = frameId;
3763        }
3764        
3765        /**
3766         * JSON Object Constructor
3767         * @param jo A Json-Object having data about an instance of {@code 'frameStartedLoading'}.
3768         */
3769        public frameStartedLoading (JsonObject jo)
3770        {
3771            super("Page", "frameStartedLoading", 1);
3772        
3773            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
3774        }
3775        
3776        
3777        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3778        public boolean equals(Object other)
3779        {
3780            if (other == null)                       return false;
3781            if (other.getClass() != this.getClass()) return false;
3782        
3783            frameStartedLoading o = (frameStartedLoading) other;
3784        
3785            return
3786                    Objects.equals(this.frameId, o.frameId);
3787        }
3788        
3789        /** Generates a Hash-Code for {@code 'this'} instance */
3790        public int hashCode()
3791        {
3792            return
3793                    Objects.hashCode(this.frameId);
3794        }
3795    }
3796    
3797    /**
3798     * Fired when frame has stopped loading.
3799     * <BR />
3800     * <BR /><B>EXPERIMENTAL</B>
3801     */
3802    public static class frameStoppedLoading
3803        extends BrowserEvent
3804        implements java.io.Serializable
3805    {
3806        /** For Object Serialization.  java.io.Serializable */
3807        protected static final long serialVersionUID = 1;
3808        
3809        public boolean[] optionals()
3810        { return new boolean[] { false, }; }
3811        
3812        /** Id of the frame that has stopped loading. */
3813        public final String frameId;
3814        
3815        /**
3816         * Constructor
3817         *
3818         * @param frameId Id of the frame that has stopped loading.
3819         */
3820        public frameStoppedLoading(String frameId)
3821        {
3822            super("Page", "frameStoppedLoading", 1);
3823            
3824            // Exception-Check(s) to ensure that if any parameters which are not declared as
3825            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3826            
3827            if (frameId == null) BRDPC.throwNPE("frameId");
3828            
3829            this.frameId  = frameId;
3830        }
3831        
3832        /**
3833         * JSON Object Constructor
3834         * @param jo A Json-Object having data about an instance of {@code 'frameStoppedLoading'}.
3835         */
3836        public frameStoppedLoading (JsonObject jo)
3837        {
3838            super("Page", "frameStoppedLoading", 1);
3839        
3840            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
3841        }
3842        
3843        
3844        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3845        public boolean equals(Object other)
3846        {
3847            if (other == null)                       return false;
3848            if (other.getClass() != this.getClass()) return false;
3849        
3850            frameStoppedLoading o = (frameStoppedLoading) other;
3851        
3852            return
3853                    Objects.equals(this.frameId, o.frameId);
3854        }
3855        
3856        /** Generates a Hash-Code for {@code 'this'} instance */
3857        public int hashCode()
3858        {
3859            return
3860                    Objects.hashCode(this.frameId);
3861        }
3862    }
3863    
3864    /**
3865     * Fired when page is about to start a download.
3866     * Deprecated. Use Browser.downloadWillBegin instead.
3867     * <BR />
3868     * <BR /><B>EXPERIMENTAL</B>
3869     * <BR /><B>DEPRECATED</B>
3870     */
3871    public static class downloadWillBegin
3872        extends BrowserEvent
3873        implements java.io.Serializable
3874    {
3875        /** For Object Serialization.  java.io.Serializable */
3876        protected static final long serialVersionUID = 1;
3877        
3878        public boolean[] optionals()
3879        { return new boolean[] { false, false, false, false, }; }
3880        
3881        /** Id of the frame that caused download to begin. */
3882        public final String frameId;
3883        
3884        /** Global unique identifier of the download. */
3885        public final String guid;
3886        
3887        /** URL of the resource being downloaded. */
3888        public final String url;
3889        
3890        /** Suggested file name of the resource (the actual name of the file saved on disk may differ). */
3891        public final String suggestedFilename;
3892        
3893        /**
3894         * Constructor
3895         *
3896         * @param frameId Id of the frame that caused download to begin.
3897         * 
3898         * @param guid Global unique identifier of the download.
3899         * 
3900         * @param url URL of the resource being downloaded.
3901         * 
3902         * @param suggestedFilename Suggested file name of the resource (the actual name of the file saved on disk may differ).
3903         */
3904        public downloadWillBegin
3905            (String frameId, String guid, String url, String suggestedFilename)
3906        {
3907            super("Page", "downloadWillBegin", 4);
3908            
3909            // Exception-Check(s) to ensure that if any parameters which are not declared as
3910            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
3911            
3912            if (frameId == null)           BRDPC.throwNPE("frameId");
3913            if (guid == null)              BRDPC.throwNPE("guid");
3914            if (url == null)               BRDPC.throwNPE("url");
3915            if (suggestedFilename == null) BRDPC.throwNPE("suggestedFilename");
3916            
3917            this.frameId            = frameId;
3918            this.guid               = guid;
3919            this.url                = url;
3920            this.suggestedFilename  = suggestedFilename;
3921        }
3922        
3923        /**
3924         * JSON Object Constructor
3925         * @param jo A Json-Object having data about an instance of {@code 'downloadWillBegin'}.
3926         */
3927        public downloadWillBegin (JsonObject jo)
3928        {
3929            super("Page", "downloadWillBegin", 4);
3930        
3931            this.frameId            = ReadJSON.getString(jo, "frameId", false, true);
3932            this.guid               = ReadJSON.getString(jo, "guid", false, true);
3933            this.url                = ReadJSON.getString(jo, "url", false, true);
3934            this.suggestedFilename  = ReadJSON.getString(jo, "suggestedFilename", false, true);
3935        }
3936        
3937        
3938        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
3939        public boolean equals(Object other)
3940        {
3941            if (other == null)                       return false;
3942            if (other.getClass() != this.getClass()) return false;
3943        
3944            downloadWillBegin o = (downloadWillBegin) other;
3945        
3946            return
3947                    Objects.equals(this.frameId, o.frameId)
3948                &&  Objects.equals(this.guid, o.guid)
3949                &&  Objects.equals(this.url, o.url)
3950                &&  Objects.equals(this.suggestedFilename, o.suggestedFilename);
3951        }
3952        
3953        /** Generates a Hash-Code for {@code 'this'} instance */
3954        public int hashCode()
3955        {
3956            return
3957                    Objects.hashCode(this.frameId)
3958                +   Objects.hashCode(this.guid)
3959                +   Objects.hashCode(this.url)
3960                +   Objects.hashCode(this.suggestedFilename);
3961        }
3962    }
3963    
3964    /**
3965     * Fired when download makes progress. Last call has |done| == true.
3966     * Deprecated. Use Browser.downloadProgress instead.
3967     * <BR />
3968     * <BR /><B>EXPERIMENTAL</B>
3969     * <BR /><B>DEPRECATED</B>
3970     */
3971    public static class downloadProgress
3972        extends BrowserEvent
3973        implements java.io.Serializable
3974    {
3975        /** For Object Serialization.  java.io.Serializable */
3976        protected static final long serialVersionUID = 1;
3977        
3978        public boolean[] optionals()
3979        { return new boolean[] { false, false, false, false, }; }
3980        
3981        /** Global unique identifier of the download. */
3982        public final String guid;
3983        
3984        /** Total expected bytes to download. */
3985        public final Number totalBytes;
3986        
3987        /** Total bytes received. */
3988        public final Number receivedBytes;
3989        
3990        /** Download status. */
3991        public final String state;
3992        
3993        /**
3994         * Constructor
3995         *
3996         * @param guid Global unique identifier of the download.
3997         * 
3998         * @param totalBytes Total expected bytes to download.
3999         * 
4000         * @param receivedBytes Total bytes received.
4001         * 
4002         * @param state Download status.
4003         * <BR />Acceptable Values: ["inProgress", "completed", "canceled"]
4004         */
4005        public downloadProgress
4006            (String guid, Number totalBytes, Number receivedBytes, String state)
4007        {
4008            super("Page", "downloadProgress", 4);
4009            
4010            // Exception-Check(s) to ensure that if any parameters which are not declared as
4011            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4012            
4013            if (guid == null)          BRDPC.throwNPE("guid");
4014            if (totalBytes == null)    BRDPC.throwNPE("totalBytes");
4015            if (receivedBytes == null) BRDPC.throwNPE("receivedBytes");
4016            if (state == null)         BRDPC.throwNPE("state");
4017            
4018            // Exception-Check(s) to ensure that if any parameters which must adhere to a
4019            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
4020            
4021            BRDPC.checkIAE(
4022                "state", state,
4023                "inProgress", "completed", "canceled"
4024            );
4025            
4026            this.guid           = guid;
4027            this.totalBytes     = totalBytes;
4028            this.receivedBytes  = receivedBytes;
4029            this.state          = state;
4030        }
4031        
4032        /**
4033         * JSON Object Constructor
4034         * @param jo A Json-Object having data about an instance of {@code 'downloadProgress'}.
4035         */
4036        public downloadProgress (JsonObject jo)
4037        {
4038            super("Page", "downloadProgress", 4);
4039        
4040            this.guid           = ReadJSON.getString(jo, "guid", false, true);
4041            this.totalBytes     = ReadNumberJSON.get(jo, "totalBytes", false, true);
4042            this.receivedBytes  = ReadNumberJSON.get(jo, "receivedBytes", false, true);
4043            this.state          = ReadJSON.getString(jo, "state", false, true);
4044        }
4045        
4046        
4047        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4048        public boolean equals(Object other)
4049        {
4050            if (other == null)                       return false;
4051            if (other.getClass() != this.getClass()) return false;
4052        
4053            downloadProgress o = (downloadProgress) other;
4054        
4055            return
4056                    Objects.equals(this.guid, o.guid)
4057                &&  Objects.equals(this.totalBytes, o.totalBytes)
4058                &&  Objects.equals(this.receivedBytes, o.receivedBytes)
4059                &&  Objects.equals(this.state, o.state);
4060        }
4061        
4062        /** Generates a Hash-Code for {@code 'this'} instance */
4063        public int hashCode()
4064        {
4065            return
4066                    Objects.hashCode(this.guid)
4067                +   Objects.hashCode(this.totalBytes)
4068                +   Objects.hashCode(this.receivedBytes)
4069                +   Objects.hashCode(this.state);
4070        }
4071    }
4072    
4073    /**
4074     * Fired when a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload) has been
4075     * closed.
4076     */
4077    public static class javascriptDialogClosed
4078        extends BrowserEvent
4079        implements java.io.Serializable
4080    {
4081        /** For Object Serialization.  java.io.Serializable */
4082        protected static final long serialVersionUID = 1;
4083        
4084        public boolean[] optionals()
4085        { return new boolean[] { false, false, }; }
4086        
4087        /** Whether dialog was confirmed. */
4088        public final boolean result;
4089        
4090        /** User input in case of prompt. */
4091        public final String userInput;
4092        
4093        /**
4094         * Constructor
4095         *
4096         * @param result Whether dialog was confirmed.
4097         * 
4098         * @param userInput User input in case of prompt.
4099         */
4100        public javascriptDialogClosed(boolean result, String userInput)
4101        {
4102            super("Page", "javascriptDialogClosed", 2);
4103            
4104            // Exception-Check(s) to ensure that if any parameters which are not declared as
4105            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4106            
4107            if (userInput == null) BRDPC.throwNPE("userInput");
4108            
4109            this.result     = result;
4110            this.userInput  = userInput;
4111        }
4112        
4113        /**
4114         * JSON Object Constructor
4115         * @param jo A Json-Object having data about an instance of {@code 'javascriptDialogClosed'}.
4116         */
4117        public javascriptDialogClosed (JsonObject jo)
4118        {
4119            super("Page", "javascriptDialogClosed", 2);
4120        
4121            this.result     = ReadPrimJSON.getBoolean(jo, "result");
4122            this.userInput  = ReadJSON.getString(jo, "userInput", false, true);
4123        }
4124        
4125        
4126        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4127        public boolean equals(Object other)
4128        {
4129            if (other == null)                       return false;
4130            if (other.getClass() != this.getClass()) return false;
4131        
4132            javascriptDialogClosed o = (javascriptDialogClosed) other;
4133        
4134            return
4135                    (this.result == o.result)
4136                &&  Objects.equals(this.userInput, o.userInput);
4137        }
4138        
4139        /** Generates a Hash-Code for {@code 'this'} instance */
4140        public int hashCode()
4141        {
4142            return
4143                    (this.result ? 1 : 0)
4144                +   Objects.hashCode(this.userInput);
4145        }
4146    }
4147    
4148    /**
4149     * Fired when a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload) is about to
4150     * open.
4151     */
4152    public static class javascriptDialogOpening
4153        extends BrowserEvent
4154        implements java.io.Serializable
4155    {
4156        /** For Object Serialization.  java.io.Serializable */
4157        protected static final long serialVersionUID = 1;
4158        
4159        public boolean[] optionals()
4160        { return new boolean[] { false, false, false, false, true, }; }
4161        
4162        /** Frame url. */
4163        public final String url;
4164        
4165        /** Message that will be displayed by the dialog. */
4166        public final String message;
4167        
4168        /** Dialog type. */
4169        public final String type;
4170        
4171        /**
4172         * True iff browser is capable showing or acting on the given dialog. When browser has no
4173         * dialog handler for given target, calling alert while Page domain is engaged will stall
4174         * the page execution. Execution can be resumed via calling Page.handleJavaScriptDialog.
4175         */
4176        public final boolean hasBrowserHandler;
4177        
4178        /**
4179         * Default dialog prompt.
4180         * <BR />
4181         * <BR /><B>OPTIONAL</B>
4182         */
4183        public final String defaultPrompt;
4184        
4185        /**
4186         * Constructor
4187         *
4188         * @param url Frame url.
4189         * 
4190         * @param message Message that will be displayed by the dialog.
4191         * 
4192         * @param type Dialog type.
4193         * 
4194         * @param hasBrowserHandler 
4195         * True iff browser is capable showing or acting on the given dialog. When browser has no
4196         * dialog handler for given target, calling alert while Page domain is engaged will stall
4197         * the page execution. Execution can be resumed via calling Page.handleJavaScriptDialog.
4198         * 
4199         * @param defaultPrompt Default dialog prompt.
4200         * <BR /><B>OPTIONAL</B>
4201         */
4202        public javascriptDialogOpening(
4203                String url, String message, String type, boolean hasBrowserHandler, 
4204                String defaultPrompt
4205            )
4206        {
4207            super("Page", "javascriptDialogOpening", 5);
4208            
4209            // Exception-Check(s) to ensure that if any parameters which are not declared as
4210            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4211            
4212            if (url == null)     BRDPC.throwNPE("url");
4213            if (message == null) BRDPC.throwNPE("message");
4214            if (type == null)    BRDPC.throwNPE("type");
4215            
4216            // Exception-Check(s) to ensure that if any parameters which must adhere to a
4217            // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
4218            
4219            BRDPC.checkIAE("type", type, "Page.DialogType", Page.DialogType);
4220            
4221            this.url                = url;
4222            this.message            = message;
4223            this.type               = type;
4224            this.hasBrowserHandler  = hasBrowserHandler;
4225            this.defaultPrompt      = defaultPrompt;
4226        }
4227        
4228        /**
4229         * JSON Object Constructor
4230         * @param jo A Json-Object having data about an instance of {@code 'javascriptDialogOpening'}.
4231         */
4232        public javascriptDialogOpening (JsonObject jo)
4233        {
4234            super("Page", "javascriptDialogOpening", 5);
4235        
4236            this.url                = ReadJSON.getString(jo, "url", false, true);
4237            this.message            = ReadJSON.getString(jo, "message", false, true);
4238            this.type               = ReadJSON.getString(jo, "type", false, true);
4239            this.hasBrowserHandler  = ReadPrimJSON.getBoolean(jo, "hasBrowserHandler");
4240            this.defaultPrompt      = ReadJSON.getString(jo, "defaultPrompt", true, false);
4241        }
4242        
4243        
4244        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4245        public boolean equals(Object other)
4246        {
4247            if (other == null)                       return false;
4248            if (other.getClass() != this.getClass()) return false;
4249        
4250            javascriptDialogOpening o = (javascriptDialogOpening) other;
4251        
4252            return
4253                    Objects.equals(this.url, o.url)
4254                &&  Objects.equals(this.message, o.message)
4255                &&  Objects.equals(this.type, o.type)
4256                &&  (this.hasBrowserHandler == o.hasBrowserHandler)
4257                &&  Objects.equals(this.defaultPrompt, o.defaultPrompt);
4258        }
4259        
4260        /** Generates a Hash-Code for {@code 'this'} instance */
4261        public int hashCode()
4262        {
4263            return
4264                    Objects.hashCode(this.url)
4265                +   Objects.hashCode(this.message)
4266                +   Objects.hashCode(this.type)
4267                +   (this.hasBrowserHandler ? 1 : 0)
4268                +   Objects.hashCode(this.defaultPrompt);
4269        }
4270    }
4271    
4272    /** Fired for top level page lifecycle events such as navigation, load, paint, etc. */
4273    public static class lifecycleEvent
4274        extends BrowserEvent
4275        implements java.io.Serializable
4276    {
4277        /** For Object Serialization.  java.io.Serializable */
4278        protected static final long serialVersionUID = 1;
4279        
4280        public boolean[] optionals()
4281        { return new boolean[] { false, false, false, false, }; }
4282        
4283        /** Id of the frame. */
4284        public final String frameId;
4285        
4286        /** Loader identifier. Empty string if the request is fetched from worker. */
4287        public final String loaderId;
4288        
4289        /** <CODE>[No Description Provided by Google]</CODE> */
4290        public final String name;
4291        
4292        /** <CODE>[No Description Provided by Google]</CODE> */
4293        public final Number timestamp;
4294        
4295        /**
4296         * Constructor
4297         *
4298         * @param frameId Id of the frame.
4299         * 
4300         * @param loaderId Loader identifier. Empty string if the request is fetched from worker.
4301         * 
4302         * @param name -
4303         * 
4304         * @param timestamp -
4305         */
4306        public lifecycleEvent(String frameId, String loaderId, String name, Number timestamp)
4307        {
4308            super("Page", "lifecycleEvent", 4);
4309            
4310            // Exception-Check(s) to ensure that if any parameters which are not declared as
4311            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4312            
4313            if (frameId == null)   BRDPC.throwNPE("frameId");
4314            if (loaderId == null)  BRDPC.throwNPE("loaderId");
4315            if (name == null)      BRDPC.throwNPE("name");
4316            if (timestamp == null) BRDPC.throwNPE("timestamp");
4317            
4318            this.frameId    = frameId;
4319            this.loaderId   = loaderId;
4320            this.name       = name;
4321            this.timestamp  = timestamp;
4322        }
4323        
4324        /**
4325         * JSON Object Constructor
4326         * @param jo A Json-Object having data about an instance of {@code 'lifecycleEvent'}.
4327         */
4328        public lifecycleEvent (JsonObject jo)
4329        {
4330            super("Page", "lifecycleEvent", 4);
4331        
4332            this.frameId    = ReadJSON.getString(jo, "frameId", false, true);
4333            this.loaderId   = ReadJSON.getString(jo, "loaderId", false, true);
4334            this.name       = ReadJSON.getString(jo, "name", false, true);
4335            this.timestamp  = ReadNumberJSON.get(jo, "timestamp", false, true);
4336        }
4337        
4338        
4339        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4340        public boolean equals(Object other)
4341        {
4342            if (other == null)                       return false;
4343            if (other.getClass() != this.getClass()) return false;
4344        
4345            lifecycleEvent o = (lifecycleEvent) other;
4346        
4347            return
4348                    Objects.equals(this.frameId, o.frameId)
4349                &&  Objects.equals(this.loaderId, o.loaderId)
4350                &&  Objects.equals(this.name, o.name)
4351                &&  Objects.equals(this.timestamp, o.timestamp);
4352        }
4353        
4354        /** Generates a Hash-Code for {@code 'this'} instance */
4355        public int hashCode()
4356        {
4357            return
4358                    Objects.hashCode(this.frameId)
4359                +   Objects.hashCode(this.loaderId)
4360                +   Objects.hashCode(this.name)
4361                +   Objects.hashCode(this.timestamp);
4362        }
4363    }
4364    
4365    /**
4366     * Fired for failed bfcache history navigations if BackForwardCache feature is enabled. Do
4367     * not assume any ordering with the Page.frameNavigated event. This event is fired only for
4368     * main-frame history navigation where the document changes (non-same-document navigations),
4369     * when bfcache navigation fails.
4370     * <BR />
4371     * <BR /><B>EXPERIMENTAL</B>
4372     */
4373    public static class backForwardCacheNotUsed
4374        extends BrowserEvent
4375        implements java.io.Serializable
4376    {
4377        /** For Object Serialization.  java.io.Serializable */
4378        protected static final long serialVersionUID = 1;
4379        
4380        public boolean[] optionals()
4381        { return new boolean[] { false, false, false, }; }
4382        
4383        /** The loader id for the associated navgation. */
4384        public final String loaderId;
4385        
4386        /** The frame id of the associated frame. */
4387        public final String frameId;
4388        
4389        /** Array of reasons why the page could not be cached. This must not be empty. */
4390        public final Page.BackForwardCacheNotRestoredExplanation[] notRestoredExplanations;
4391        
4392        /**
4393         * Constructor
4394         *
4395         * @param loaderId The loader id for the associated navgation.
4396         * 
4397         * @param frameId The frame id of the associated frame.
4398         * 
4399         * @param notRestoredExplanations Array of reasons why the page could not be cached. This must not be empty.
4400         */
4401        public backForwardCacheNotUsed(
4402                String loaderId, String frameId, 
4403                Page.BackForwardCacheNotRestoredExplanation[] notRestoredExplanations
4404            )
4405        {
4406            super("Page", "backForwardCacheNotUsed", 3);
4407            
4408            // Exception-Check(s) to ensure that if any parameters which are not declared as
4409            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4410            
4411            if (loaderId == null)                BRDPC.throwNPE("loaderId");
4412            if (frameId == null)                 BRDPC.throwNPE("frameId");
4413            if (notRestoredExplanations == null) BRDPC.throwNPE("notRestoredExplanations");
4414            
4415            this.loaderId                 = loaderId;
4416            this.frameId                  = frameId;
4417            this.notRestoredExplanations  = notRestoredExplanations;
4418        }
4419        
4420        /**
4421         * JSON Object Constructor
4422         * @param jo A Json-Object having data about an instance of {@code 'backForwardCacheNotUsed'}.
4423         */
4424        public backForwardCacheNotUsed (JsonObject jo)
4425        {
4426            super("Page", "backForwardCacheNotUsed", 3);
4427        
4428            this.loaderId                 = ReadJSON.getString(jo, "loaderId", false, true);
4429            this.frameId                  = ReadJSON.getString(jo, "frameId", false, true);
4430            this.notRestoredExplanations = (jo.getJsonArray("notRestoredExplanations") == null)
4431                ? null
4432                : RJArrDimN.objArr(jo.getJsonArray("notRestoredExplanations"), null, 0, Page.BackForwardCacheNotRestoredExplanation[].class);
4433        
4434        }
4435        
4436        
4437        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4438        public boolean equals(Object other)
4439        {
4440            if (other == null)                       return false;
4441            if (other.getClass() != this.getClass()) return false;
4442        
4443            backForwardCacheNotUsed o = (backForwardCacheNotUsed) other;
4444        
4445            return
4446                    Objects.equals(this.loaderId, o.loaderId)
4447                &&  Objects.equals(this.frameId, o.frameId)
4448                &&  Arrays.deepEquals(this.notRestoredExplanations, o.notRestoredExplanations);
4449        }
4450        
4451        /** Generates a Hash-Code for {@code 'this'} instance */
4452        public int hashCode()
4453        {
4454            return
4455                    Objects.hashCode(this.loaderId)
4456                +   Objects.hashCode(this.frameId)
4457                +   Arrays.deepHashCode(this.notRestoredExplanations);
4458        }
4459    }
4460    
4461    /** <CODE>[No Description Provided by Google]</CODE> */
4462    public static class loadEventFired
4463        extends BrowserEvent
4464        implements java.io.Serializable
4465    {
4466        /** For Object Serialization.  java.io.Serializable */
4467        protected static final long serialVersionUID = 1;
4468        
4469        public boolean[] optionals()
4470        { return new boolean[] { false, }; }
4471        
4472        /** <CODE>[No Description Provided by Google]</CODE> */
4473        public final Number timestamp;
4474        
4475        /**
4476         * Constructor
4477         *
4478         * @param timestamp -
4479         */
4480        public loadEventFired(Number timestamp)
4481        {
4482            super("Page", "loadEventFired", 1);
4483            
4484            // Exception-Check(s) to ensure that if any parameters which are not declared as
4485            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4486            
4487            if (timestamp == null) BRDPC.throwNPE("timestamp");
4488            
4489            this.timestamp  = timestamp;
4490        }
4491        
4492        /**
4493         * JSON Object Constructor
4494         * @param jo A Json-Object having data about an instance of {@code 'loadEventFired'}.
4495         */
4496        public loadEventFired (JsonObject jo)
4497        {
4498            super("Page", "loadEventFired", 1);
4499        
4500            this.timestamp  = ReadNumberJSON.get(jo, "timestamp", false, true);
4501        }
4502        
4503        
4504        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4505        public boolean equals(Object other)
4506        {
4507            if (other == null)                       return false;
4508            if (other.getClass() != this.getClass()) return false;
4509        
4510            loadEventFired o = (loadEventFired) other;
4511        
4512            return
4513                    Objects.equals(this.timestamp, o.timestamp);
4514        }
4515        
4516        /** Generates a Hash-Code for {@code 'this'} instance */
4517        public int hashCode()
4518        {
4519            return
4520                    Objects.hashCode(this.timestamp);
4521        }
4522    }
4523    
4524    /**
4525     * Fired when same-document navigation happens, e.g. due to history API usage or anchor navigation.
4526     * <BR />
4527     * <BR /><B>EXPERIMENTAL</B>
4528     */
4529    public static class navigatedWithinDocument
4530        extends BrowserEvent
4531        implements java.io.Serializable
4532    {
4533        /** For Object Serialization.  java.io.Serializable */
4534        protected static final long serialVersionUID = 1;
4535        
4536        public boolean[] optionals()
4537        { return new boolean[] { false, false, }; }
4538        
4539        /** Id of the frame. */
4540        public final String frameId;
4541        
4542        /** Frame's new url. */
4543        public final String url;
4544        
4545        /**
4546         * Constructor
4547         *
4548         * @param frameId Id of the frame.
4549         * 
4550         * @param url Frame's new url.
4551         */
4552        public navigatedWithinDocument(String frameId, String url)
4553        {
4554            super("Page", "navigatedWithinDocument", 2);
4555            
4556            // Exception-Check(s) to ensure that if any parameters which are not declared as
4557            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4558            
4559            if (frameId == null) BRDPC.throwNPE("frameId");
4560            if (url == null)     BRDPC.throwNPE("url");
4561            
4562            this.frameId  = frameId;
4563            this.url      = url;
4564        }
4565        
4566        /**
4567         * JSON Object Constructor
4568         * @param jo A Json-Object having data about an instance of {@code 'navigatedWithinDocument'}.
4569         */
4570        public navigatedWithinDocument (JsonObject jo)
4571        {
4572            super("Page", "navigatedWithinDocument", 2);
4573        
4574            this.frameId  = ReadJSON.getString(jo, "frameId", false, true);
4575            this.url      = ReadJSON.getString(jo, "url", false, true);
4576        }
4577        
4578        
4579        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4580        public boolean equals(Object other)
4581        {
4582            if (other == null)                       return false;
4583            if (other.getClass() != this.getClass()) return false;
4584        
4585            navigatedWithinDocument o = (navigatedWithinDocument) other;
4586        
4587            return
4588                    Objects.equals(this.frameId, o.frameId)
4589                &&  Objects.equals(this.url, o.url);
4590        }
4591        
4592        /** Generates a Hash-Code for {@code 'this'} instance */
4593        public int hashCode()
4594        {
4595            return
4596                    Objects.hashCode(this.frameId)
4597                +   Objects.hashCode(this.url);
4598        }
4599    }
4600    
4601    /**
4602     * Compressed image data requested by the <CODE>startScreencast</CODE>.
4603     * <BR />
4604     * <BR /><B>EXPERIMENTAL</B>
4605     */
4606    public static class screencastFrame
4607        extends BrowserEvent
4608        implements java.io.Serializable
4609    {
4610        /** For Object Serialization.  java.io.Serializable */
4611        protected static final long serialVersionUID = 1;
4612        
4613        public boolean[] optionals()
4614        { return new boolean[] { false, false, false, }; }
4615        
4616        /** Base64-encoded compressed image. (Encoded as a base64 string when passed over JSON) */
4617        public final String data;
4618        
4619        /** Screencast frame metadata. */
4620        public final Page.ScreencastFrameMetadata metadata;
4621        
4622        /** Frame number. */
4623        public final int sessionId;
4624        
4625        /**
4626         * Constructor
4627         *
4628         * @param data Base64-encoded compressed image. (Encoded as a base64 string when passed over JSON)
4629         * 
4630         * @param metadata Screencast frame metadata.
4631         * 
4632         * @param sessionId Frame number.
4633         */
4634        public screencastFrame
4635            (String data, Page.ScreencastFrameMetadata metadata, int sessionId)
4636        {
4637            super("Page", "screencastFrame", 3);
4638            
4639            // Exception-Check(s) to ensure that if any parameters which are not declared as
4640            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4641            
4642            if (data == null)     BRDPC.throwNPE("data");
4643            if (metadata == null) BRDPC.throwNPE("metadata");
4644            
4645            this.data       = data;
4646            this.metadata   = metadata;
4647            this.sessionId  = sessionId;
4648        }
4649        
4650        /**
4651         * JSON Object Constructor
4652         * @param jo A Json-Object having data about an instance of {@code 'screencastFrame'}.
4653         */
4654        public screencastFrame (JsonObject jo)
4655        {
4656            super("Page", "screencastFrame", 3);
4657        
4658            this.data       = ReadJSON.getString(jo, "data", false, true);
4659            this.metadata   = ReadJSON.getObject(jo, "metadata", Page.ScreencastFrameMetadata.class, false, true);
4660            this.sessionId  = ReadPrimJSON.getInt(jo, "sessionId");
4661        }
4662        
4663        
4664        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4665        public boolean equals(Object other)
4666        {
4667            if (other == null)                       return false;
4668            if (other.getClass() != this.getClass()) return false;
4669        
4670            screencastFrame o = (screencastFrame) other;
4671        
4672            return
4673                    Objects.equals(this.data, o.data)
4674                &&  Objects.equals(this.metadata, o.metadata)
4675                &&  (this.sessionId == o.sessionId);
4676        }
4677        
4678        /** Generates a Hash-Code for {@code 'this'} instance */
4679        public int hashCode()
4680        {
4681            return
4682                    Objects.hashCode(this.data)
4683                +   this.metadata.hashCode()
4684                +   this.sessionId;
4685        }
4686    }
4687    
4688    /**
4689     * Fired when the page with currently enabled screencast was shown or hidden.
4690     * <BR />
4691     * <BR /><B>EXPERIMENTAL</B>
4692     */
4693    public static class screencastVisibilityChanged
4694        extends BrowserEvent
4695        implements java.io.Serializable
4696    {
4697        /** For Object Serialization.  java.io.Serializable */
4698        protected static final long serialVersionUID = 1;
4699        
4700        public boolean[] optionals()
4701        { return new boolean[] { false, }; }
4702        
4703        /** True if the page is visible. */
4704        public final boolean visible;
4705        
4706        /**
4707         * Constructor
4708         *
4709         * @param visible True if the page is visible.
4710         */
4711        public screencastVisibilityChanged(boolean visible)
4712        {
4713            super("Page", "screencastVisibilityChanged", 1);
4714            
4715            this.visible  = visible;
4716        }
4717        
4718        /**
4719         * JSON Object Constructor
4720         * @param jo A Json-Object having data about an instance of {@code 'screencastVisibilityChanged'}.
4721         */
4722        public screencastVisibilityChanged (JsonObject jo)
4723        {
4724            super("Page", "screencastVisibilityChanged", 1);
4725        
4726            this.visible  = ReadPrimJSON.getBoolean(jo, "visible");
4727        }
4728        
4729        
4730        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4731        public boolean equals(Object other)
4732        {
4733            if (other == null)                       return false;
4734            if (other.getClass() != this.getClass()) return false;
4735        
4736            screencastVisibilityChanged o = (screencastVisibilityChanged) other;
4737        
4738            return
4739                    (this.visible == o.visible);
4740        }
4741        
4742        /** Generates a Hash-Code for {@code 'this'} instance */
4743        public int hashCode()
4744        {
4745            return
4746                    (this.visible ? 1 : 0);
4747        }
4748    }
4749    
4750    /**
4751     * Fired when a new window is going to be opened, via window.open(), link click, form submission,
4752     * etc.
4753     */
4754    public static class windowOpen
4755        extends BrowserEvent
4756        implements java.io.Serializable
4757    {
4758        /** For Object Serialization.  java.io.Serializable */
4759        protected static final long serialVersionUID = 1;
4760        
4761        public boolean[] optionals()
4762        { return new boolean[] { false, false, false, false, }; }
4763        
4764        /** The URL for the new window. */
4765        public final String url;
4766        
4767        /** Window name. */
4768        public final String windowName;
4769        
4770        /** An array of enabled window features. */
4771        public final String[] windowFeatures;
4772        
4773        /** Whether or not it was triggered by user gesture. */
4774        public final boolean userGesture;
4775        
4776        /**
4777         * Constructor
4778         *
4779         * @param url The URL for the new window.
4780         * 
4781         * @param windowName Window name.
4782         * 
4783         * @param windowFeatures An array of enabled window features.
4784         * 
4785         * @param userGesture Whether or not it was triggered by user gesture.
4786         */
4787        public windowOpen
4788            (String url, String windowName, String[] windowFeatures, boolean userGesture)
4789        {
4790            super("Page", "windowOpen", 4);
4791            
4792            // Exception-Check(s) to ensure that if any parameters which are not declared as
4793            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4794            
4795            if (url == null)            BRDPC.throwNPE("url");
4796            if (windowName == null)     BRDPC.throwNPE("windowName");
4797            if (windowFeatures == null) BRDPC.throwNPE("windowFeatures");
4798            
4799            this.url             = url;
4800            this.windowName      = windowName;
4801            this.windowFeatures  = windowFeatures;
4802            this.userGesture     = userGesture;
4803        }
4804        
4805        /**
4806         * JSON Object Constructor
4807         * @param jo A Json-Object having data about an instance of {@code 'windowOpen'}.
4808         */
4809        public windowOpen (JsonObject jo)
4810        {
4811            super("Page", "windowOpen", 4);
4812        
4813            this.url             = ReadJSON.getString(jo, "url", false, true);
4814            this.windowName      = ReadJSON.getString(jo, "windowName", false, true);
4815            this.windowFeatures = (jo.getJsonArray("windowFeatures") == null)
4816                ? null
4817                : RJArrIntoStream.strArr(jo.getJsonArray("windowFeatures"), null, 0).toArray(String[]::new);
4818        
4819            this.userGesture     = ReadPrimJSON.getBoolean(jo, "userGesture");
4820        }
4821        
4822        
4823        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4824        public boolean equals(Object other)
4825        {
4826            if (other == null)                       return false;
4827            if (other.getClass() != this.getClass()) return false;
4828        
4829            windowOpen o = (windowOpen) other;
4830        
4831            return
4832                    Objects.equals(this.url, o.url)
4833                &&  Objects.equals(this.windowName, o.windowName)
4834                &&  Arrays.deepEquals(this.windowFeatures, o.windowFeatures)
4835                &&  (this.userGesture == o.userGesture);
4836        }
4837        
4838        /** Generates a Hash-Code for {@code 'this'} instance */
4839        public int hashCode()
4840        {
4841            return
4842                    Objects.hashCode(this.url)
4843                +   Objects.hashCode(this.windowName)
4844                +   Arrays.deepHashCode(this.windowFeatures)
4845                +   (this.userGesture ? 1 : 0);
4846        }
4847    }
4848    
4849    /**
4850     * Issued for every compilation cache generated. Is only available
4851     * if Page.setGenerateCompilationCache is enabled.
4852     * <BR />
4853     * <BR /><B>EXPERIMENTAL</B>
4854     */
4855    public static class compilationCacheProduced
4856        extends BrowserEvent
4857        implements java.io.Serializable
4858    {
4859        /** For Object Serialization.  java.io.Serializable */
4860        protected static final long serialVersionUID = 1;
4861        
4862        public boolean[] optionals()
4863        { return new boolean[] { false, false, }; }
4864        
4865        /** <CODE>[No Description Provided by Google]</CODE> */
4866        public final String url;
4867        
4868        /** Base64-encoded data (Encoded as a base64 string when passed over JSON) */
4869        public final String data;
4870        
4871        /**
4872         * Constructor
4873         *
4874         * @param url -
4875         * 
4876         * @param data Base64-encoded data (Encoded as a base64 string when passed over JSON)
4877         */
4878        public compilationCacheProduced(String url, String data)
4879        {
4880            super("Page", "compilationCacheProduced", 2);
4881            
4882            // Exception-Check(s) to ensure that if any parameters which are not declared as
4883            // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4884            
4885            if (url == null)  BRDPC.throwNPE("url");
4886            if (data == null) BRDPC.throwNPE("data");
4887            
4888            this.url   = url;
4889            this.data  = data;
4890        }
4891        
4892        /**
4893         * JSON Object Constructor
4894         * @param jo A Json-Object having data about an instance of {@code 'compilationCacheProduced'}.
4895         */
4896        public compilationCacheProduced (JsonObject jo)
4897        {
4898            super("Page", "compilationCacheProduced", 2);
4899        
4900            this.url   = ReadJSON.getString(jo, "url", false, true);
4901            this.data  = ReadJSON.getString(jo, "data", false, true);
4902        }
4903        
4904        
4905        /** Checks whether {@code 'this'} equals an input Java-{@code Object} */
4906        public boolean equals(Object other)
4907        {
4908            if (other == null)                       return false;
4909            if (other.getClass() != this.getClass()) return false;
4910        
4911            compilationCacheProduced o = (compilationCacheProduced) other;
4912        
4913            return
4914                    Objects.equals(this.url, o.url)
4915                &&  Objects.equals(this.data, o.data);
4916        }
4917        
4918        /** Generates a Hash-Code for {@code 'this'} instance */
4919        public int hashCode()
4920        {
4921            return
4922                    Objects.hashCode(this.url)
4923                +   Objects.hashCode(this.data);
4924        }
4925    }
4926    
4927    
4928    // Counter for keeping the WebSocket Request ID's distinct.
4929    private static int counter = 1;
4930    
4931    /**
4932     * Deprecated, please use addScriptToEvaluateOnNewDocument instead.
4933     * <BR /><B>EXPERIMENTAL</B>
4934     * <BR /><B>DEPRECATED</B>
4935     * 
4936     * @param scriptSource -
4937     * 
4938     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
4939     * String&gt;</CODE>
4940     * 
4941     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
4942     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
4943     * String&gt;</CODE> will be returned.
4944     *
4945     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
4946     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
4947      * may be retrieved.</I>
4948     *
4949     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
4950     * <BR /><BR /><UL CLASS=JDUL>
4951     * <LI><CODE>String (<B>identifier</B></CODE>)
4952     *     <BR />Identifier of the added script.
4953     * </LI>
4954     * </UL> */
4955    public static Script<String, JsonObject, String> addScriptToEvaluateOnLoad
4956        (String scriptSource)
4957    {
4958        // Exception-Check(s) to ensure that if any parameters which are not declared as
4959        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
4960        
4961        if (scriptSource == null) BRDPC.throwNPE("scriptSource");
4962        
4963        final int       webSocketID = 32000000 + counter++;
4964        final boolean[] optionals   = { false, };
4965        
4966        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
4967        String requestJSON = WriteJSON.get(
4968            parameterTypes.get("addScriptToEvaluateOnLoad"),
4969            parameterNames.get("addScriptToEvaluateOnLoad"),
4970            optionals, webSocketID,
4971            "Page.addScriptToEvaluateOnLoad",
4972            scriptSource
4973        );
4974        
4975        // 'JSON Binding' ... Converts Browser Response-JSON to 'String'
4976        Function<JsonObject, String> responseProcessor = (JsonObject jo) ->
4977            ReadJSON.getString(jo, "identifier", false, true);
4978        
4979        // Pass the 'defaultSender' to Script-Constructor
4980        // The sender that is used can be changed before executing script.
4981        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
4982    }
4983    
4984    /**
4985     * Evaluates given script in every frame upon creation (before loading frame's scripts).
4986     * 
4987     * @param source -
4988     * 
4989     * @param worldName 
4990     * If specified, creates an isolated world with the given name and evaluates given script in it.
4991     * This world name will be used as the ExecutionContextDescription::name when the corresponding
4992     * event is emitted.
4993     * <BR /><B>OPTIONAL</B>
4994     * <BR /><B>EXPERIMENTAL</B>
4995     * 
4996     * @param includeCommandLineAPI 
4997     * Specifies whether command line API should be available to the script, defaults
4998     * to false.
4999     * <BR /><B>OPTIONAL</B>
5000     * <BR /><B>EXPERIMENTAL</B>
5001     * 
5002     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5003     * String&gt;</CODE>
5004     * 
5005     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5006     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5007     * String&gt;</CODE> will be returned.
5008     *
5009     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5010     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5011      * may be retrieved.</I>
5012     *
5013     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5014     * <BR /><BR /><UL CLASS=JDUL>
5015     * <LI><CODE>String (<B>identifier</B></CODE>)
5016     *     <BR />Identifier of the added script.
5017     * </LI>
5018     * </UL> */
5019    public static Script<String, JsonObject, String> addScriptToEvaluateOnNewDocument
5020        (String source, String worldName, Boolean includeCommandLineAPI)
5021    {
5022        // Exception-Check(s) to ensure that if any parameters which are not declared as
5023        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
5024        
5025        if (source == null) BRDPC.throwNPE("source");
5026        
5027        final int       webSocketID = 32001000 + counter++;
5028        final boolean[] optionals   = { false, true, true, };
5029        
5030        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5031        String requestJSON = WriteJSON.get(
5032            parameterTypes.get("addScriptToEvaluateOnNewDocument"),
5033            parameterNames.get("addScriptToEvaluateOnNewDocument"),
5034            optionals, webSocketID,
5035            "Page.addScriptToEvaluateOnNewDocument",
5036            source, worldName, includeCommandLineAPI
5037        );
5038        
5039        // 'JSON Binding' ... Converts Browser Response-JSON to 'String'
5040        Function<JsonObject, String> responseProcessor = (JsonObject jo) ->
5041            ReadJSON.getString(jo, "identifier", false, true);
5042        
5043        // Pass the 'defaultSender' to Script-Constructor
5044        // The sender that is used can be changed before executing script.
5045        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5046    }
5047    
5048    /**
5049     * Brings page to front (activates tab).
5050     * 
5051     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5052     * {@link Ret0}&gt;</CODE>
5053     *
5054     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5055     * browser receives the invocation-request.
5056     *
5057     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5058     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5059     * {@code >} to ensure the Browser Function has run to completion.
5060     */
5061    public static Script<String, JsonObject, Ret0> bringToFront()
5062    {
5063        final int          webSocketID = 32002000 + counter++;
5064        final boolean[]    optionals   = new boolean[0];
5065        
5066        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5067        String requestJSON = WriteJSON.get(
5068            parameterTypes.get("bringToFront"),
5069            parameterNames.get("bringToFront"),
5070            optionals, webSocketID,
5071            "Page.bringToFront"
5072        );
5073        
5074        // This Remote Command does not have a Return-Value.
5075        return new Script<>
5076            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5077    }
5078    
5079    /**
5080     * Capture page screenshot.
5081     * 
5082     * @param format Image compression format (defaults to png).
5083     * <BR />Acceptable Values: ["jpeg", "png", "webp"]
5084     * <BR /><B>OPTIONAL</B>
5085     * 
5086     * @param quality Compression quality from range [0..100] (jpeg only).
5087     * <BR /><B>OPTIONAL</B>
5088     * 
5089     * @param clip Capture the screenshot of a given region only.
5090     * <BR /><B>OPTIONAL</B>
5091     * 
5092     * @param fromSurface Capture the screenshot from the surface, rather than the view. Defaults to true.
5093     * <BR /><B>OPTIONAL</B>
5094     * <BR /><B>EXPERIMENTAL</B>
5095     * 
5096     * @param captureBeyondViewport Capture the screenshot beyond the viewport. Defaults to false.
5097     * <BR /><B>OPTIONAL</B>
5098     * <BR /><B>EXPERIMENTAL</B>
5099     * 
5100     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5101     * String&gt;</CODE>
5102     * 
5103     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5104     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5105     * String&gt;</CODE> will be returned.
5106     *
5107     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5108     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5109      * may be retrieved.</I>
5110     *
5111     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5112     * <BR /><BR /><UL CLASS=JDUL>
5113     * <LI><CODE>String (<B>data</B></CODE>)
5114     *     <BR />Base64-encoded image data. (Encoded as a base64 string when passed over JSON)
5115     * </LI>
5116     * </UL> */
5117    public static Script<String, JsonObject, String> captureScreenshot(
5118            String format, Integer quality, Page.Viewport clip, Boolean fromSurface, 
5119            Boolean captureBeyondViewport
5120        )
5121    {
5122        // Exception-Check(s) to ensure that if any parameters which must adhere to a
5123        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
5124        
5125        BRDPC.checkIAE(
5126            "format", format,
5127            "jpeg", "png", "webp"
5128        );
5129        
5130        final int       webSocketID = 32003000 + counter++;
5131        final boolean[] optionals   = { true, true, true, true, true, };
5132        
5133        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5134        String requestJSON = WriteJSON.get(
5135            parameterTypes.get("captureScreenshot"),
5136            parameterNames.get("captureScreenshot"),
5137            optionals, webSocketID,
5138            "Page.captureScreenshot",
5139            format, quality, clip, fromSurface, captureBeyondViewport
5140        );
5141        
5142        // 'JSON Binding' ... Converts Browser Response-JSON to 'String'
5143        Function<JsonObject, String> responseProcessor = (JsonObject jo) ->
5144            ReadJSON.getString(jo, "data", false, true);
5145        
5146        // Pass the 'defaultSender' to Script-Constructor
5147        // The sender that is used can be changed before executing script.
5148        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5149    }
5150    
5151    /**
5152     * Returns a snapshot of the page as a string. For MHTML format, the serialization includes
5153     * iframes, shadow DOM, external resources, and element-inline styles.
5154     * <BR /><B>EXPERIMENTAL</B>
5155     * 
5156     * @param format Format (defaults to mhtml).
5157     * <BR />Acceptable Values: ["mhtml"]
5158     * <BR /><B>OPTIONAL</B>
5159     * 
5160     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5161     * String&gt;</CODE>
5162     * 
5163     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5164     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5165     * String&gt;</CODE> will be returned.
5166     *
5167     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5168     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5169      * may be retrieved.</I>
5170     *
5171     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5172     * <BR /><BR /><UL CLASS=JDUL>
5173     * <LI><CODE>String (<B>data</B></CODE>)
5174     *     <BR />Serialized page data.
5175     * </LI>
5176     * </UL> */
5177    public static Script<String, JsonObject, String> captureSnapshot(String format)
5178    {
5179        // Exception-Check(s) to ensure that if any parameters which must adhere to a
5180        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
5181        
5182        BRDPC.checkIAE(
5183            "format", format,
5184            "mhtml"
5185        );
5186        
5187        final int       webSocketID = 32004000 + counter++;
5188        final boolean[] optionals   = { true, };
5189        
5190        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5191        String requestJSON = WriteJSON.get(
5192            parameterTypes.get("captureSnapshot"),
5193            parameterNames.get("captureSnapshot"),
5194            optionals, webSocketID,
5195            "Page.captureSnapshot",
5196            format
5197        );
5198        
5199        // 'JSON Binding' ... Converts Browser Response-JSON to 'String'
5200        Function<JsonObject, String> responseProcessor = (JsonObject jo) ->
5201            ReadJSON.getString(jo, "data", false, true);
5202        
5203        // Pass the 'defaultSender' to Script-Constructor
5204        // The sender that is used can be changed before executing script.
5205        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5206    }
5207    
5208    /**
5209     * Clears the overridden device metrics.
5210     * <BR /><B>EXPERIMENTAL</B>
5211     * <BR /><B>DEPRECATED</B>
5212     * 
5213     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5214     * {@link Ret0}&gt;</CODE>
5215     *
5216     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5217     * browser receives the invocation-request.
5218     *
5219     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5220     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5221     * {@code >} to ensure the Browser Function has run to completion.
5222     */
5223    public static Script<String, JsonObject, Ret0> clearDeviceMetricsOverride()
5224    {
5225        final int          webSocketID = 32005000 + counter++;
5226        final boolean[]    optionals   = new boolean[0];
5227        
5228        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5229        String requestJSON = WriteJSON.get(
5230            parameterTypes.get("clearDeviceMetricsOverride"),
5231            parameterNames.get("clearDeviceMetricsOverride"),
5232            optionals, webSocketID,
5233            "Page.clearDeviceMetricsOverride"
5234        );
5235        
5236        // This Remote Command does not have a Return-Value.
5237        return new Script<>
5238            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5239    }
5240    
5241    /**
5242     * Clears the overridden Device Orientation.
5243     * <BR /><B>EXPERIMENTAL</B>
5244     * <BR /><B>DEPRECATED</B>
5245     * 
5246     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5247     * {@link Ret0}&gt;</CODE>
5248     *
5249     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5250     * browser receives the invocation-request.
5251     *
5252     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5253     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5254     * {@code >} to ensure the Browser Function has run to completion.
5255     */
5256    public static Script<String, JsonObject, Ret0> clearDeviceOrientationOverride()
5257    {
5258        final int          webSocketID = 32006000 + counter++;
5259        final boolean[]    optionals   = new boolean[0];
5260        
5261        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5262        String requestJSON = WriteJSON.get(
5263            parameterTypes.get("clearDeviceOrientationOverride"),
5264            parameterNames.get("clearDeviceOrientationOverride"),
5265            optionals, webSocketID,
5266            "Page.clearDeviceOrientationOverride"
5267        );
5268        
5269        // This Remote Command does not have a Return-Value.
5270        return new Script<>
5271            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5272    }
5273    
5274    /**
5275     * Clears the overridden Geolocation Position and Error.
5276     * <BR /><B>DEPRECATED</B>
5277     * 
5278     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5279     * {@link Ret0}&gt;</CODE>
5280     *
5281     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5282     * browser receives the invocation-request.
5283     *
5284     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5285     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5286     * {@code >} to ensure the Browser Function has run to completion.
5287     */
5288    public static Script<String, JsonObject, Ret0> clearGeolocationOverride()
5289    {
5290        final int          webSocketID = 32007000 + counter++;
5291        final boolean[]    optionals   = new boolean[0];
5292        
5293        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5294        String requestJSON = WriteJSON.get(
5295            parameterTypes.get("clearGeolocationOverride"),
5296            parameterNames.get("clearGeolocationOverride"),
5297            optionals, webSocketID,
5298            "Page.clearGeolocationOverride"
5299        );
5300        
5301        // This Remote Command does not have a Return-Value.
5302        return new Script<>
5303            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5304    }
5305    
5306    /**
5307     * Creates an isolated world for the given frame.
5308     * 
5309     * @param frameId Id of the frame in which the isolated world should be created.
5310     * 
5311     * @param worldName An optional name which is reported in the Execution Context.
5312     * <BR /><B>OPTIONAL</B>
5313     * 
5314     * @param grantUniveralAccess 
5315     * Whether or not universal access should be granted to the isolated world. This is a powerful
5316     * option, use with caution.
5317     * <BR /><B>OPTIONAL</B>
5318     * 
5319     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5320     * Integer&gt;</CODE>
5321     * 
5322     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5323     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5324     * Integer&gt;</CODE> will be returned.
5325     *
5326     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5327     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5328      * may be retrieved.</I>
5329     *
5330     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5331     * <BR /><BR /><UL CLASS=JDUL>
5332     * <LI><CODE>Integer (<B>executionContextId</B></CODE>)
5333     *     <BR />Execution context of the isolated world.
5334     * </LI>
5335     * </UL> */
5336    public static Script<String, JsonObject, Integer> createIsolatedWorld
5337        (String frameId, String worldName, Boolean grantUniveralAccess)
5338    {
5339        // Exception-Check(s) to ensure that if any parameters which are not declared as
5340        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
5341        
5342        if (frameId == null) BRDPC.throwNPE("frameId");
5343        
5344        final int       webSocketID = 32008000 + counter++;
5345        final boolean[] optionals   = { false, true, true, };
5346        
5347        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5348        String requestJSON = WriteJSON.get(
5349            parameterTypes.get("createIsolatedWorld"),
5350            parameterNames.get("createIsolatedWorld"),
5351            optionals, webSocketID,
5352            "Page.createIsolatedWorld",
5353            frameId, worldName, grantUniveralAccess
5354        );
5355        
5356        // 'JSON Binding' ... Converts Browser Response-JSON to 'Integer'
5357        Function<JsonObject, Integer> responseProcessor = (JsonObject jo) ->
5358            ReadBoxedJSON.getInteger(jo, "executionContextId", true);
5359        
5360        // Pass the 'defaultSender' to Script-Constructor
5361        // The sender that is used can be changed before executing script.
5362        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5363    }
5364    
5365    /**
5366     * Deletes browser cookie with given name, domain and path.
5367     * <BR /><B>EXPERIMENTAL</B>
5368     * <BR /><B>DEPRECATED</B>
5369     * 
5370     * @param cookieName Name of the cookie to remove.
5371     * 
5372     * @param url URL to match cooke domain and path.
5373     * 
5374     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5375     * {@link Ret0}&gt;</CODE>
5376     *
5377     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5378     * browser receives the invocation-request.
5379     *
5380     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5381     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5382     * {@code >} to ensure the Browser Function has run to completion.
5383     */
5384    public static Script<String, JsonObject, Ret0> deleteCookie(String cookieName, String url)
5385    {
5386        // Exception-Check(s) to ensure that if any parameters which are not declared as
5387        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
5388        
5389        if (cookieName == null) BRDPC.throwNPE("cookieName");
5390        if (url == null)        BRDPC.throwNPE("url");
5391        
5392        final int       webSocketID = 32009000 + counter++;
5393        final boolean[] optionals   = { false, false, };
5394        
5395        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5396        String requestJSON = WriteJSON.get(
5397            parameterTypes.get("deleteCookie"),
5398            parameterNames.get("deleteCookie"),
5399            optionals, webSocketID,
5400            "Page.deleteCookie",
5401            cookieName, url
5402        );
5403        
5404        // This Remote Command does not have a Return-Value.
5405        return new Script<>
5406            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5407    }
5408    
5409    /**
5410     * Disables page domain notifications.
5411     * 
5412     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5413     * {@link Ret0}&gt;</CODE>
5414     *
5415     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5416     * browser receives the invocation-request.
5417     *
5418     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5419     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5420     * {@code >} to ensure the Browser Function has run to completion.
5421     */
5422    public static Script<String, JsonObject, Ret0> disable()
5423    {
5424        final int          webSocketID = 32010000 + counter++;
5425        final boolean[]    optionals   = new boolean[0];
5426        
5427        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5428        String requestJSON = WriteJSON.get(
5429            parameterTypes.get("disable"),
5430            parameterNames.get("disable"),
5431            optionals, webSocketID,
5432            "Page.disable"
5433        );
5434        
5435        // This Remote Command does not have a Return-Value.
5436        return new Script<>
5437            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5438    }
5439    
5440    /**
5441     * Enables page domain notifications.
5442     * 
5443     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5444     * {@link Ret0}&gt;</CODE>
5445     *
5446     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5447     * browser receives the invocation-request.
5448     *
5449     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5450     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5451     * {@code >} to ensure the Browser Function has run to completion.
5452     */
5453    public static Script<String, JsonObject, Ret0> enable()
5454    {
5455        final int          webSocketID = 32011000 + counter++;
5456        final boolean[]    optionals   = new boolean[0];
5457        
5458        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5459        String requestJSON = WriteJSON.get(
5460            parameterTypes.get("enable"),
5461            parameterNames.get("enable"),
5462            optionals, webSocketID,
5463            "Page.enable"
5464        );
5465        
5466        // This Remote Command does not have a Return-Value.
5467        return new Script<>
5468            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5469    }
5470    
5471    /**
5472     * <CODE>[No Description Provided by Google]</CODE>
5473     * 
5474     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5475     * {@link Ret4}&gt;</CODE>
5476     *
5477     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
5478     * {@link Script#exec()}), and a {@link Promise} returned.
5479     *
5480     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
5481     * (using {@link Promise#await()}), the {@code Ret4} will subsequently
5482     * be returned from that call.
5483     * 
5484     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
5485     * in an instance of <B>{@link Ret4}</B>
5486     *
5487     * <BR /><BR /><UL CLASS=JDUL>
5488     * <LI><CODE><B>Ret4.a:</B> String (<B>url</B>)</CODE>
5489     *     <BR />Manifest location.
5490     *     <BR /><BR /></LI>
5491     * <LI><CODE><B>Ret4.b:</B> {@link Page.AppManifestError}[] (<B>errors</B>)</CODE>
5492     *     <BR />-
5493     *     <BR /><BR /></LI>
5494     * <LI><CODE><B>Ret4.c:</B> String (<B>data</B>)</CODE>
5495     *     <BR />Manifest content.
5496     *     <BR /><BR /></LI>
5497     * <LI><CODE><B>Ret4.d:</B> {@link Page.AppManifestParsedProperties} (<B>parsed</B>)</CODE>
5498     *     <BR />Parsed manifest properties
5499     *     </LI>
5500     * </UL>
5501     */
5502    public static Script<String, JsonObject, Ret4<String, Page.AppManifestError[], String, Page.AppManifestParsedProperties>> 
5503        getAppManifest()
5504    {
5505        final int          webSocketID = 32012000 + counter++;
5506        final boolean[]    optionals   = new boolean[0];
5507        
5508        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5509        String requestJSON = WriteJSON.get(
5510            parameterTypes.get("getAppManifest"),
5511            parameterNames.get("getAppManifest"),
5512            optionals, webSocketID,
5513            "Page.getAppManifest"
5514        );
5515        
5516        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret4'
5517        Function<JsonObject, Ret4<String, Page.AppManifestError[], String, Page.AppManifestParsedProperties>> 
5518            responseProcessor = (JsonObject jo) -> new Ret4<>(
5519                ReadJSON.getString(jo, "url", false, true),
5520                (jo.getJsonArray("errors") == null)
5521                    ? null
5522                    : RJArrDimN.objArr(jo.getJsonArray("errors"), null, 0, Page.AppManifestError[].class),
5523                ReadJSON.getString(jo, "data", true, false),
5524                ReadJSON.getObject(jo, "parsed", Page.AppManifestParsedProperties.class, true, false)
5525            );
5526        
5527        // Pass the 'defaultSender' to Script-Constructor
5528        // The sender that is used can be changed before executing script.
5529        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5530    }
5531    
5532    /**
5533     * <CODE>[No Description Provided by Google]</CODE>
5534     * <BR /><B>EXPERIMENTAL</B>
5535     * 
5536     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5537     * {@link Page.InstallabilityError}[]&gt;</CODE>
5538     * 
5539     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5540     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5541     * {@link Page.InstallabilityError}[]&gt;</CODE> will be returned.
5542     *
5543     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5544     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5545      * may be retrieved.</I>
5546     *
5547     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5548     * <BR /><BR /><UL CLASS=JDUL>
5549     * <LI><CODE>{@link Page.InstallabilityError}[] (<B>installabilityErrors</B></CODE>)
5550     *     <BR />-
5551     * </LI>
5552     * </UL> */
5553    public static Script<String, JsonObject, Page.InstallabilityError[]> getInstallabilityErrors()
5554    {
5555        final int          webSocketID = 32013000 + counter++;
5556        final boolean[]    optionals   = new boolean[0];
5557        
5558        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5559        String requestJSON = WriteJSON.get(
5560            parameterTypes.get("getInstallabilityErrors"),
5561            parameterNames.get("getInstallabilityErrors"),
5562            optionals, webSocketID,
5563            "Page.getInstallabilityErrors"
5564        );
5565        
5566        // 'JSON Binding' ... Converts Browser Response-JSON to 'Page.InstallabilityError[]'
5567        Function<JsonObject, Page.InstallabilityError[]> responseProcessor = (JsonObject jo) ->
5568            (jo.getJsonArray("installabilityErrors") == null)
5569                ? null
5570                : RJArrDimN.objArr(jo.getJsonArray("installabilityErrors"), null, 0, Page.InstallabilityError[].class);
5571        
5572        // Pass the 'defaultSender' to Script-Constructor
5573        // The sender that is used can be changed before executing script.
5574        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5575    }
5576    
5577    /**
5578     * <CODE>[No Description Provided by Google]</CODE>
5579     * <BR /><B>EXPERIMENTAL</B>
5580     * 
5581     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5582     * String&gt;</CODE>
5583     * 
5584     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5585     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5586     * String&gt;</CODE> will be returned.
5587     *
5588     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5589     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5590      * may be retrieved.</I>
5591     *
5592     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5593     * <BR /><BR /><UL CLASS=JDUL>
5594     * <LI><CODE>String (<B>primaryIcon</B></CODE>)
5595     *     <BR />-
5596     * </LI>
5597     * </UL> */
5598    public static Script<String, JsonObject, String> getManifestIcons()
5599    {
5600        final int          webSocketID = 32014000 + counter++;
5601        final boolean[]    optionals   = new boolean[0];
5602        
5603        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5604        String requestJSON = WriteJSON.get(
5605            parameterTypes.get("getManifestIcons"),
5606            parameterNames.get("getManifestIcons"),
5607            optionals, webSocketID,
5608            "Page.getManifestIcons"
5609        );
5610        
5611        // 'JSON Binding' ... Converts Browser Response-JSON to 'String'
5612        Function<JsonObject, String> responseProcessor = (JsonObject jo) ->
5613            ReadJSON.getString(jo, "primaryIcon", true, false);
5614        
5615        // Pass the 'defaultSender' to Script-Constructor
5616        // The sender that is used can be changed before executing script.
5617        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5618    }
5619    
5620    /**
5621     * Returns the unique (PWA) app id.
5622     * Only returns values if the feature flag 'WebAppEnableManifestId' is enabled
5623     * <BR /><B>EXPERIMENTAL</B>
5624     * 
5625     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5626     * {@link Ret2}&gt;</CODE>
5627     *
5628     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
5629     * {@link Script#exec()}), and a {@link Promise} returned.
5630     *
5631     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
5632     * (using {@link Promise#await()}), the {@code Ret2} will subsequently
5633     * be returned from that call.
5634     * 
5635     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
5636     * in an instance of <B>{@link Ret2}</B>
5637     *
5638     * <BR /><BR /><UL CLASS=JDUL>
5639     * <LI><CODE><B>Ret2.a:</B> String (<B>appId</B>)</CODE>
5640     *     <BR />App id, either from manifest's id attribute or computed from start_url
5641     *     <BR /><BR /></LI>
5642     * <LI><CODE><B>Ret2.b:</B> String (<B>recommendedId</B>)</CODE>
5643     *     <BR />Recommendation for manifest's id attribute to match current id computed from start_url
5644     *     </LI>
5645     * </UL>
5646     */
5647    public static Script<String, JsonObject, Ret2<String, String>> getAppId()
5648    {
5649        final int          webSocketID = 32015000 + counter++;
5650        final boolean[]    optionals   = new boolean[0];
5651        
5652        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5653        String requestJSON = WriteJSON.get(
5654            parameterTypes.get("getAppId"),
5655            parameterNames.get("getAppId"),
5656            optionals, webSocketID,
5657            "Page.getAppId"
5658        );
5659        
5660        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret2'
5661        Function<JsonObject, Ret2<String, String>> 
5662            responseProcessor = (JsonObject jo) -> new Ret2<>(
5663                ReadJSON.getString(jo, "appId", true, false),
5664                ReadJSON.getString(jo, "recommendedId", true, false)
5665            );
5666        
5667        // Pass the 'defaultSender' to Script-Constructor
5668        // The sender that is used can be changed before executing script.
5669        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5670    }
5671    
5672    /**
5673     * Returns all browser cookies. Depending on the backend support, will return detailed cookie
5674     * information in the <CODE>cookies</CODE> field.
5675     * <BR /><B>EXPERIMENTAL</B>
5676     * <BR /><B>DEPRECATED</B>
5677     * 
5678     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5679     * {@link Network.Cookie}[]&gt;</CODE>
5680     * 
5681     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5682     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5683     * {@link Network.Cookie}[]&gt;</CODE> will be returned.
5684     *
5685     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5686     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5687      * may be retrieved.</I>
5688     *
5689     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5690     * <BR /><BR /><UL CLASS=JDUL>
5691     * <LI><CODE>{@link Network.Cookie}[] (<B>cookies</B></CODE>)
5692     *     <BR />Array of cookie objects.
5693     * </LI>
5694     * </UL> */
5695    public static Script<String, JsonObject, Network.Cookie[]> getCookies()
5696    {
5697        final int          webSocketID = 32016000 + counter++;
5698        final boolean[]    optionals   = new boolean[0];
5699        
5700        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5701        String requestJSON = WriteJSON.get(
5702            parameterTypes.get("getCookies"),
5703            parameterNames.get("getCookies"),
5704            optionals, webSocketID,
5705            "Page.getCookies"
5706        );
5707        
5708        // 'JSON Binding' ... Converts Browser Response-JSON to 'Network.Cookie[]'
5709        Function<JsonObject, Network.Cookie[]> responseProcessor = (JsonObject jo) ->
5710            (jo.getJsonArray("cookies") == null)
5711                ? null
5712                : RJArrDimN.objArr(jo.getJsonArray("cookies"), null, 0, Network.Cookie[].class);
5713        
5714        // Pass the 'defaultSender' to Script-Constructor
5715        // The sender that is used can be changed before executing script.
5716        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5717    }
5718    
5719    /**
5720     * Returns present frame tree structure.
5721     * 
5722     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5723     * {@link Page.FrameTree}&gt;</CODE>
5724     * 
5725     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5726     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5727     * {@link Page.FrameTree}&gt;</CODE> will be returned.
5728     *
5729     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5730     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5731      * may be retrieved.</I>
5732     *
5733     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5734     * <BR /><BR /><UL CLASS=JDUL>
5735     * <LI><CODE>{@link Page.FrameTree} (<B>frameTree</B></CODE>)
5736     *     <BR />Present frame tree structure.
5737     * </LI>
5738     * </UL> */
5739    public static Script<String, JsonObject, Page.FrameTree> getFrameTree()
5740    {
5741        final int          webSocketID = 32017000 + counter++;
5742        final boolean[]    optionals   = new boolean[0];
5743        
5744        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5745        String requestJSON = WriteJSON.get(
5746            parameterTypes.get("getFrameTree"),
5747            parameterNames.get("getFrameTree"),
5748            optionals, webSocketID,
5749            "Page.getFrameTree"
5750        );
5751        
5752        // 'JSON Binding' ... Converts Browser Response-JSON to 'Page.FrameTree'
5753        Function<JsonObject, Page.FrameTree> responseProcessor = (JsonObject jo) ->
5754            ReadJSON.getObject(jo, "frameTree", Page.FrameTree.class, false, true);
5755        
5756        // Pass the 'defaultSender' to Script-Constructor
5757        // The sender that is used can be changed before executing script.
5758        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5759    }
5760    
5761    /**
5762     * Returns metrics relating to the layouting of the page, such as viewport bounds/scale.
5763     * 
5764     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5765     * {@link Ret6}&gt;</CODE>
5766     *
5767     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
5768     * {@link Script#exec()}), and a {@link Promise} returned.
5769     *
5770     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
5771     * (using {@link Promise#await()}), the {@code Ret6} will subsequently
5772     * be returned from that call.
5773     * 
5774     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
5775     * in an instance of <B>{@link Ret6}</B>
5776     *
5777     * <BR /><BR /><UL CLASS=JDUL>
5778     * <LI><CODE><B>Ret6.a1:</B> {@link Page.LayoutViewport} (<B>layoutViewport</B>)</CODE>
5779     *     <BR />Deprecated metrics relating to the layout viewport. Can be in DP or in CSS pixels depending on the <CODE>enable-use-zoom-for-dsf</CODE> flag. Use <CODE>cssLayoutViewport</CODE> instead.
5780     *     <BR /><BR /></LI>
5781     * <LI><CODE><B>Ret6.b2:</B> {@link Page.VisualViewport} (<B>visualViewport</B>)</CODE>
5782     *     <BR />Deprecated metrics relating to the visual viewport. Can be in DP or in CSS pixels depending on the <CODE>enable-use-zoom-for-dsf</CODE> flag. Use <CODE>cssVisualViewport</CODE> instead.
5783     *     <BR /><BR /></LI>
5784     * <LI><CODE><B>Ret6.c3:</B> {@link DOM.Rect} (<B>contentSize</B>)</CODE>
5785     *     <BR />Deprecated size of scrollable area. Can be in DP or in CSS pixels depending on the <CODE>enable-use-zoom-for-dsf</CODE> flag. Use <CODE>cssContentSize</CODE> instead.
5786     *     <BR /><BR /></LI>
5787     * <LI><CODE><B>Ret6.d4:</B> {@link Page.LayoutViewport} (<B>cssLayoutViewport</B>)</CODE>
5788     *     <BR />Metrics relating to the layout viewport in CSS pixels.
5789     *     <BR /><BR /></LI>
5790     * <LI><CODE><B>Ret6.e5:</B> {@link Page.VisualViewport} (<B>cssVisualViewport</B>)</CODE>
5791     *     <BR />Metrics relating to the visual viewport in CSS pixels.
5792     *     <BR /><BR /></LI>
5793     * <LI><CODE><B>Ret6.f6:</B> {@link DOM.Rect} (<B>cssContentSize</B>)</CODE>
5794     *     <BR />Size of scrollable area in CSS pixels.
5795     *     </LI>
5796     * </UL>
5797     */
5798    public static Script<String, JsonObject, Ret6<Page.LayoutViewport, Page.VisualViewport, DOM.Rect, Page.LayoutViewport, Page.VisualViewport, DOM.Rect>> 
5799        getLayoutMetrics()
5800    {
5801        final int          webSocketID = 32018000 + counter++;
5802        final boolean[]    optionals   = new boolean[0];
5803        
5804        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5805        String requestJSON = WriteJSON.get(
5806            parameterTypes.get("getLayoutMetrics"),
5807            parameterNames.get("getLayoutMetrics"),
5808            optionals, webSocketID,
5809            "Page.getLayoutMetrics"
5810        );
5811        
5812        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret6'
5813        Function<JsonObject, Ret6<Page.LayoutViewport, Page.VisualViewport, DOM.Rect, Page.LayoutViewport, Page.VisualViewport, DOM.Rect>> 
5814            responseProcessor = (JsonObject jo) -> new Ret6<>(
5815                ReadJSON.getObject(jo, "layoutViewport", Page.LayoutViewport.class, false, true),
5816                ReadJSON.getObject(jo, "visualViewport", Page.VisualViewport.class, false, true),
5817                ReadJSON.getObject(jo, "contentSize", DOM.Rect.class, false, true),
5818                ReadJSON.getObject(jo, "cssLayoutViewport", Page.LayoutViewport.class, false, true),
5819                ReadJSON.getObject(jo, "cssVisualViewport", Page.VisualViewport.class, false, true),
5820                ReadJSON.getObject(jo, "cssContentSize", DOM.Rect.class, false, true)
5821            );
5822        
5823        // Pass the 'defaultSender' to Script-Constructor
5824        // The sender that is used can be changed before executing script.
5825        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5826    }
5827    
5828    /**
5829     * Returns navigation history for the current page.
5830     * 
5831     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5832     * {@link Ret2}&gt;</CODE>
5833     *
5834     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
5835     * {@link Script#exec()}), and a {@link Promise} returned.
5836     *
5837     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
5838     * (using {@link Promise#await()}), the {@code Ret2} will subsequently
5839     * be returned from that call.
5840     * 
5841     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
5842     * in an instance of <B>{@link Ret2}</B>
5843     *
5844     * <BR /><BR /><UL CLASS=JDUL>
5845     * <LI><CODE><B>Ret2.a:</B> Integer (<B>currentIndex</B>)</CODE>
5846     *     <BR />Index of the current navigation history entry.
5847     *     <BR /><BR /></LI>
5848     * <LI><CODE><B>Ret2.b:</B> {@link Page.NavigationEntry}[] (<B>entries</B>)</CODE>
5849     *     <BR />Array of navigation history entries.
5850     *     </LI>
5851     * </UL>
5852     */
5853    public static Script<String, JsonObject, Ret2<Integer, Page.NavigationEntry[]>> getNavigationHistory()
5854    {
5855        final int          webSocketID = 32019000 + counter++;
5856        final boolean[]    optionals   = new boolean[0];
5857        
5858        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5859        String requestJSON = WriteJSON.get(
5860            parameterTypes.get("getNavigationHistory"),
5861            parameterNames.get("getNavigationHistory"),
5862            optionals, webSocketID,
5863            "Page.getNavigationHistory"
5864        );
5865        
5866        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret2'
5867        Function<JsonObject, Ret2<Integer, Page.NavigationEntry[]>> 
5868            responseProcessor = (JsonObject jo) -> new Ret2<>(
5869                ReadBoxedJSON.getInteger(jo, "currentIndex", true),
5870                (jo.getJsonArray("entries") == null)
5871                    ? null
5872                    : RJArrDimN.objArr(jo.getJsonArray("entries"), null, 0, Page.NavigationEntry[].class)
5873            );
5874        
5875        // Pass the 'defaultSender' to Script-Constructor
5876        // The sender that is used can be changed before executing script.
5877        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5878    }
5879    
5880    /**
5881     * Resets navigation history for the current page.
5882     * 
5883     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5884     * {@link Ret0}&gt;</CODE>
5885     *
5886     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
5887     * browser receives the invocation-request.
5888     *
5889     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
5890     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
5891     * {@code >} to ensure the Browser Function has run to completion.
5892     */
5893    public static Script<String, JsonObject, Ret0> resetNavigationHistory()
5894    {
5895        final int          webSocketID = 32020000 + counter++;
5896        final boolean[]    optionals   = new boolean[0];
5897        
5898        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5899        String requestJSON = WriteJSON.get(
5900            parameterTypes.get("resetNavigationHistory"),
5901            parameterNames.get("resetNavigationHistory"),
5902            optionals, webSocketID,
5903            "Page.resetNavigationHistory"
5904        );
5905        
5906        // This Remote Command does not have a Return-Value.
5907        return new Script<>
5908            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
5909    }
5910    
5911    /**
5912     * Returns content of the given resource.
5913     * <BR /><B>EXPERIMENTAL</B>
5914     * 
5915     * @param frameId Frame id to get resource for.
5916     * 
5917     * @param url URL of the resource to get content for.
5918     * 
5919     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5920     * {@link Ret2}&gt;</CODE>
5921     *
5922     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
5923     * {@link Script#exec()}), and a {@link Promise} returned.
5924     *
5925     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
5926     * (using {@link Promise#await()}), the {@code Ret2} will subsequently
5927     * be returned from that call.
5928     * 
5929     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
5930     * in an instance of <B>{@link Ret2}</B>
5931     *
5932     * <BR /><BR /><UL CLASS=JDUL>
5933     * <LI><CODE><B>Ret2.a:</B> String (<B>content</B>)</CODE>
5934     *     <BR />Resource content.
5935     *     <BR /><BR /></LI>
5936     * <LI><CODE><B>Ret2.b:</B> Boolean (<B>base64Encoded</B>)</CODE>
5937     *     <BR />True, if content was served as base64.
5938     *     </LI>
5939     * </UL>
5940     */
5941    public static Script<String, JsonObject, Ret2<String, Boolean>> getResourceContent
5942        (String frameId, String url)
5943    {
5944        // Exception-Check(s) to ensure that if any parameters which are not declared as
5945        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
5946        
5947        if (frameId == null) BRDPC.throwNPE("frameId");
5948        if (url == null)     BRDPC.throwNPE("url");
5949        
5950        final int       webSocketID = 32021000 + counter++;
5951        final boolean[] optionals   = { false, false, };
5952        
5953        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
5954        String requestJSON = WriteJSON.get(
5955            parameterTypes.get("getResourceContent"),
5956            parameterNames.get("getResourceContent"),
5957            optionals, webSocketID,
5958            "Page.getResourceContent",
5959            frameId, url
5960        );
5961        
5962        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret2'
5963        Function<JsonObject, Ret2<String, Boolean>> 
5964            responseProcessor = (JsonObject jo) -> new Ret2<>(
5965                ReadJSON.getString(jo, "content", false, true),
5966                ReadBoxedJSON.getBoolean(jo, "base64Encoded", true)
5967            );
5968        
5969        // Pass the 'defaultSender' to Script-Constructor
5970        // The sender that is used can be changed before executing script.
5971        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
5972    }
5973    
5974    /**
5975     * Returns present frame / resource tree structure.
5976     * <BR /><B>EXPERIMENTAL</B>
5977     * 
5978     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
5979     * {@link Page.FrameResourceTree}&gt;</CODE>
5980     * 
5981     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
5982     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
5983     * {@link Page.FrameResourceTree}&gt;</CODE> will be returned.
5984     *
5985     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
5986     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
5987      * may be retrieved.</I>
5988     *
5989     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
5990     * <BR /><BR /><UL CLASS=JDUL>
5991     * <LI><CODE>{@link Page.FrameResourceTree} (<B>frameTree</B></CODE>)
5992     *     <BR />Present frame / resource tree structure.
5993     * </LI>
5994     * </UL> */
5995    public static Script<String, JsonObject, Page.FrameResourceTree> getResourceTree()
5996    {
5997        final int          webSocketID = 32022000 + counter++;
5998        final boolean[]    optionals   = new boolean[0];
5999        
6000        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6001        String requestJSON = WriteJSON.get(
6002            parameterTypes.get("getResourceTree"),
6003            parameterNames.get("getResourceTree"),
6004            optionals, webSocketID,
6005            "Page.getResourceTree"
6006        );
6007        
6008        // 'JSON Binding' ... Converts Browser Response-JSON to 'Page.FrameResourceTree'
6009        Function<JsonObject, Page.FrameResourceTree> responseProcessor = (JsonObject jo) ->
6010            ReadJSON.getObject(jo, "frameTree", Page.FrameResourceTree.class, false, true);
6011        
6012        // Pass the 'defaultSender' to Script-Constructor
6013        // The sender that is used can be changed before executing script.
6014        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6015    }
6016    
6017    /**
6018     * Accepts or dismisses a JavaScript initiated dialog (alert, confirm, prompt, or onbeforeunload).
6019     * 
6020     * @param accept Whether to accept or dismiss the dialog.
6021     * 
6022     * @param promptText 
6023     * The text to enter into the dialog prompt before accepting. Used only if this is a prompt
6024     * dialog.
6025     * <BR /><B>OPTIONAL</B>
6026     * 
6027     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6028     * {@link Ret0}&gt;</CODE>
6029     *
6030     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6031     * browser receives the invocation-request.
6032     *
6033     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6034     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6035     * {@code >} to ensure the Browser Function has run to completion.
6036     */
6037    public static Script<String, JsonObject, Ret0> handleJavaScriptDialog
6038        (boolean accept, String promptText)
6039    {
6040        final int       webSocketID = 32023000 + counter++;
6041        final boolean[] optionals   = { false, true, };
6042        
6043        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6044        String requestJSON = WriteJSON.get(
6045            parameterTypes.get("handleJavaScriptDialog"),
6046            parameterNames.get("handleJavaScriptDialog"),
6047            optionals, webSocketID,
6048            "Page.handleJavaScriptDialog",
6049            accept, promptText
6050        );
6051        
6052        // This Remote Command does not have a Return-Value.
6053        return new Script<>
6054            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6055    }
6056    
6057    /**
6058     * Navigates current page to the given URL.
6059     * 
6060     * @param url URL to navigate the page to.
6061     * 
6062     * @param referrer Referrer URL.
6063     * <BR /><B>OPTIONAL</B>
6064     * 
6065     * @param transitionType Intended transition type.
6066     * <BR /><B>OPTIONAL</B>
6067     * 
6068     * @param frameId Frame id to navigate, if not specified navigates the top frame.
6069     * <BR /><B>OPTIONAL</B>
6070     * 
6071     * @param referrerPolicy Referrer-policy used for the navigation.
6072     * <BR /><B>OPTIONAL</B>
6073     * <BR /><B>EXPERIMENTAL</B>
6074     * 
6075     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6076     * {@link Ret3}&gt;</CODE>
6077     *
6078     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
6079     * {@link Script#exec()}), and a {@link Promise} returned.
6080     *
6081     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
6082     * (using {@link Promise#await()}), the {@code Ret3} will subsequently
6083     * be returned from that call.
6084     * 
6085     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
6086     * in an instance of <B>{@link Ret3}</B>
6087     *
6088     * <BR /><BR /><UL CLASS=JDUL>
6089     * <LI><CODE><B>Ret3.a:</B> String (<B>frameId</B>)</CODE>
6090     *     <BR />Frame id that has navigated (or failed to navigate)
6091     *     <BR /><BR /></LI>
6092     * <LI><CODE><B>Ret3.b:</B> String (<B>loaderId</B>)</CODE>
6093     *     <BR />Loader identifier.
6094     *     <BR /><BR /></LI>
6095     * <LI><CODE><B>Ret3.c:</B> String (<B>errorText</B>)</CODE>
6096     *     <BR />User friendly error message, present if and only if navigation has failed.
6097     *     </LI>
6098     * </UL>
6099     */
6100    public static Script<String, JsonObject, Ret3<String, String, String>> navigate
6101        (String url, String referrer, String transitionType, String frameId, String referrerPolicy)
6102    {
6103        // Exception-Check(s) to ensure that if any parameters which are not declared as
6104        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6105        
6106        if (url == null) BRDPC.throwNPE("url");
6107        
6108        // Exception-Check(s) to ensure that if any parameters which must adhere to a
6109        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
6110        
6111        BRDPC.checkIAE("transitionType", transitionType, "Page.TransitionType", Page.TransitionType);
6112        BRDPC.checkIAE("referrerPolicy", referrerPolicy, "Page.ReferrerPolicy", Page.ReferrerPolicy);
6113        
6114        final int       webSocketID = 32024000 + counter++;
6115        final boolean[] optionals   = { false, true, true, true, true, };
6116        
6117        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6118        String requestJSON = WriteJSON.get(
6119            parameterTypes.get("navigate"),
6120            parameterNames.get("navigate"),
6121            optionals, webSocketID,
6122            "Page.navigate",
6123            url, referrer, transitionType, frameId, referrerPolicy
6124        );
6125        
6126        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret3'
6127        Function<JsonObject, Ret3<String, String, String>> 
6128            responseProcessor = (JsonObject jo) -> new Ret3<>(
6129                ReadJSON.getString(jo, "frameId", false, true),
6130                ReadJSON.getString(jo, "loaderId", true, false),
6131                ReadJSON.getString(jo, "errorText", true, false)
6132            );
6133        
6134        // Pass the 'defaultSender' to Script-Constructor
6135        // The sender that is used can be changed before executing script.
6136        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6137    }
6138    
6139    /**
6140     * Navigates current page to the given history entry.
6141     * 
6142     * @param entryId Unique id of the entry to navigate to.
6143     * 
6144     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6145     * {@link Ret0}&gt;</CODE>
6146     *
6147     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6148     * browser receives the invocation-request.
6149     *
6150     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6151     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6152     * {@code >} to ensure the Browser Function has run to completion.
6153     */
6154    public static Script<String, JsonObject, Ret0> navigateToHistoryEntry(int entryId)
6155    {
6156        final int       webSocketID = 32025000 + counter++;
6157        final boolean[] optionals   = { false, };
6158        
6159        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6160        String requestJSON = WriteJSON.get(
6161            parameterTypes.get("navigateToHistoryEntry"),
6162            parameterNames.get("navigateToHistoryEntry"),
6163            optionals, webSocketID,
6164            "Page.navigateToHistoryEntry",
6165            entryId
6166        );
6167        
6168        // This Remote Command does not have a Return-Value.
6169        return new Script<>
6170            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6171    }
6172    
6173    /**
6174     * Print page as PDF.
6175     * 
6176     * @param landscape Paper orientation. Defaults to false.
6177     * <BR /><B>OPTIONAL</B>
6178     * 
6179     * @param displayHeaderFooter Display header and footer. Defaults to false.
6180     * <BR /><B>OPTIONAL</B>
6181     * 
6182     * @param printBackground Print background graphics. Defaults to false.
6183     * <BR /><B>OPTIONAL</B>
6184     * 
6185     * @param scale Scale of the webpage rendering. Defaults to 1.
6186     * <BR /><B>OPTIONAL</B>
6187     * 
6188     * @param paperWidth Paper width in inches. Defaults to 8.5 inches.
6189     * <BR /><B>OPTIONAL</B>
6190     * 
6191     * @param paperHeight Paper height in inches. Defaults to 11 inches.
6192     * <BR /><B>OPTIONAL</B>
6193     * 
6194     * @param marginTop Top margin in inches. Defaults to 1cm (~0.4 inches).
6195     * <BR /><B>OPTIONAL</B>
6196     * 
6197     * @param marginBottom Bottom margin in inches. Defaults to 1cm (~0.4 inches).
6198     * <BR /><B>OPTIONAL</B>
6199     * 
6200     * @param marginLeft Left margin in inches. Defaults to 1cm (~0.4 inches).
6201     * <BR /><B>OPTIONAL</B>
6202     * 
6203     * @param marginRight Right margin in inches. Defaults to 1cm (~0.4 inches).
6204     * <BR /><B>OPTIONAL</B>
6205     * 
6206     * @param pageRanges 
6207     * Paper ranges to print, e.g., '1-5, 8, 11-13'. Defaults to the empty string, which means
6208     * print all pages.
6209     * <BR /><B>OPTIONAL</B>
6210     * 
6211     * @param ignoreInvalidPageRanges 
6212     * Whether to silently ignore invalid but successfully parsed page ranges, such as '3-2'.
6213     * Defaults to false.
6214     * <BR /><B>OPTIONAL</B>
6215     * 
6216     * @param headerTemplate 
6217     * HTML template for the print header. Should be valid HTML markup with following
6218     * classes used to inject printing values into them:
6219     * - <CODE>date</CODE>: formatted print date
6220     * - <CODE>title</CODE>: document title
6221     * - <CODE>url</CODE>: document location
6222     * - <CODE>pageNumber</CODE>: current page number
6223     * - <CODE>totalPages</CODE>: total pages in the document
6224     * 
6225     * For example, <CODE><span class=title></span></CODE> would generate span containing the title.
6226     * <BR /><B>OPTIONAL</B>
6227     * 
6228     * @param footerTemplate HTML template for the print footer. Should use the same format as the <CODE>headerTemplate</CODE>.
6229     * <BR /><B>OPTIONAL</B>
6230     * 
6231     * @param preferCSSPageSize 
6232     * Whether or not to prefer page size as defined by css. Defaults to false,
6233     * in which case the content will be scaled to fit the paper size.
6234     * <BR /><B>OPTIONAL</B>
6235     * 
6236     * @param transferMode return as stream
6237     * <BR />Acceptable Values: ["ReturnAsBase64", "ReturnAsStream"]
6238     * <BR /><B>OPTIONAL</B>
6239     * <BR /><B>EXPERIMENTAL</B>
6240     * 
6241     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6242     * {@link Ret2}&gt;</CODE>
6243     *
6244     * <BR /><BR />This {@link Script} may be <B STYLE='color:red'>executed</B> (using 
6245     * {@link Script#exec()}), and a {@link Promise} returned.
6246     *
6247     * <BR /><BR />When the {@code Promise} is <B STYLE='color: red'>awaited</B>
6248     * (using {@link Promise#await()}), the {@code Ret2} will subsequently
6249     * be returned from that call.
6250     * 
6251     * <BR /><BR />The <B STYLE='color: red'>returned</B> values are encapsulated
6252     * in an instance of <B>{@link Ret2}</B>
6253     *
6254     * <BR /><BR /><UL CLASS=JDUL>
6255     * <LI><CODE><B>Ret2.a:</B> String (<B>data</B>)</CODE>
6256     *     <BR />Base64-encoded pdf data. Empty if |returnAsStream| is specified. (Encoded as a base64 string when passed over JSON)
6257     *     <BR /><BR /></LI>
6258     * <LI><CODE><B>Ret2.b:</B> String (<B>stream</B>)</CODE>
6259     *     <BR />A handle of the stream that holds resulting PDF data.
6260     *     </LI>
6261     * </UL>
6262     */
6263    public static Script<String, JsonObject, Ret2<String, String>> printToPDF(
6264            Boolean landscape, Boolean displayHeaderFooter, Boolean printBackground, Number scale, 
6265            Number paperWidth, Number paperHeight, Number marginTop, Number marginBottom, 
6266            Number marginLeft, Number marginRight, String pageRanges, 
6267            Boolean ignoreInvalidPageRanges, String headerTemplate, String footerTemplate, 
6268            Boolean preferCSSPageSize, String transferMode
6269        )
6270    {
6271        // Exception-Check(s) to ensure that if any parameters which must adhere to a
6272        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
6273        
6274        BRDPC.checkIAE(
6275            "transferMode", transferMode,
6276            "ReturnAsBase64", "ReturnAsStream"
6277        );
6278        
6279        final int       webSocketID = 32026000 + counter++;
6280        final boolean[] optionals   = { true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, };
6281        
6282        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6283        String requestJSON = WriteJSON.get(
6284            parameterTypes.get("printToPDF"),
6285            parameterNames.get("printToPDF"),
6286            optionals, webSocketID,
6287            "Page.printToPDF",
6288            landscape, displayHeaderFooter, printBackground, scale, paperWidth, paperHeight,
6289            marginTop, marginBottom, marginLeft, marginRight, pageRanges, ignoreInvalidPageRanges,
6290            headerTemplate, footerTemplate, preferCSSPageSize, transferMode
6291        );
6292        
6293        // 'JSON Binding' ... Converts Browser Response-JSON into Java-Type 'Ret2'
6294        Function<JsonObject, Ret2<String, String>> 
6295            responseProcessor = (JsonObject jo) -> new Ret2<>(
6296                ReadJSON.getString(jo, "data", false, true),
6297                ReadJSON.getString(jo, "stream", true, false)
6298            );
6299        
6300        // Pass the 'defaultSender' to Script-Constructor
6301        // The sender that is used can be changed before executing script.
6302        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6303    }
6304    
6305    /**
6306     * Reloads given page optionally ignoring the cache.
6307     * 
6308     * @param ignoreCache If true, browser cache is ignored (as if the user pressed Shift+refresh).
6309     * <BR /><B>OPTIONAL</B>
6310     * 
6311     * @param scriptToEvaluateOnLoad 
6312     * If set, the script will be injected into all frames of the inspected page after reload.
6313     * Argument will be ignored if reloading dataURL origin.
6314     * <BR /><B>OPTIONAL</B>
6315     * 
6316     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6317     * {@link Ret0}&gt;</CODE>
6318     *
6319     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6320     * browser receives the invocation-request.
6321     *
6322     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6323     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6324     * {@code >} to ensure the Browser Function has run to completion.
6325     */
6326    public static Script<String, JsonObject, Ret0> reload
6327        (Boolean ignoreCache, String scriptToEvaluateOnLoad)
6328    {
6329        final int       webSocketID = 32027000 + counter++;
6330        final boolean[] optionals   = { true, true, };
6331        
6332        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6333        String requestJSON = WriteJSON.get(
6334            parameterTypes.get("reload"),
6335            parameterNames.get("reload"),
6336            optionals, webSocketID,
6337            "Page.reload",
6338            ignoreCache, scriptToEvaluateOnLoad
6339        );
6340        
6341        // This Remote Command does not have a Return-Value.
6342        return new Script<>
6343            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6344    }
6345    
6346    /**
6347     * Deprecated, please use removeScriptToEvaluateOnNewDocument instead.
6348     * <BR /><B>EXPERIMENTAL</B>
6349     * <BR /><B>DEPRECATED</B>
6350     * 
6351     * @param identifier -
6352     * 
6353     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6354     * {@link Ret0}&gt;</CODE>
6355     *
6356     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6357     * browser receives the invocation-request.
6358     *
6359     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6360     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6361     * {@code >} to ensure the Browser Function has run to completion.
6362     */
6363    public static Script<String, JsonObject, Ret0> removeScriptToEvaluateOnLoad
6364        (String identifier)
6365    {
6366        // Exception-Check(s) to ensure that if any parameters which are not declared as
6367        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6368        
6369        if (identifier == null) BRDPC.throwNPE("identifier");
6370        
6371        final int       webSocketID = 32028000 + counter++;
6372        final boolean[] optionals   = { false, };
6373        
6374        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6375        String requestJSON = WriteJSON.get(
6376            parameterTypes.get("removeScriptToEvaluateOnLoad"),
6377            parameterNames.get("removeScriptToEvaluateOnLoad"),
6378            optionals, webSocketID,
6379            "Page.removeScriptToEvaluateOnLoad",
6380            identifier
6381        );
6382        
6383        // This Remote Command does not have a Return-Value.
6384        return new Script<>
6385            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6386    }
6387    
6388    /**
6389     * Removes given script from the list.
6390     * 
6391     * @param identifier -
6392     * 
6393     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6394     * {@link Ret0}&gt;</CODE>
6395     *
6396     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6397     * browser receives the invocation-request.
6398     *
6399     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6400     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6401     * {@code >} to ensure the Browser Function has run to completion.
6402     */
6403    public static Script<String, JsonObject, Ret0> removeScriptToEvaluateOnNewDocument
6404        (String identifier)
6405    {
6406        // Exception-Check(s) to ensure that if any parameters which are not declared as
6407        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6408        
6409        if (identifier == null) BRDPC.throwNPE("identifier");
6410        
6411        final int       webSocketID = 32029000 + counter++;
6412        final boolean[] optionals   = { false, };
6413        
6414        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6415        String requestJSON = WriteJSON.get(
6416            parameterTypes.get("removeScriptToEvaluateOnNewDocument"),
6417            parameterNames.get("removeScriptToEvaluateOnNewDocument"),
6418            optionals, webSocketID,
6419            "Page.removeScriptToEvaluateOnNewDocument",
6420            identifier
6421        );
6422        
6423        // This Remote Command does not have a Return-Value.
6424        return new Script<>
6425            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6426    }
6427    
6428    /**
6429     * Acknowledges that a screencast frame has been received by the frontend.
6430     * <BR /><B>EXPERIMENTAL</B>
6431     * 
6432     * @param sessionId Frame number.
6433     * 
6434     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6435     * {@link Ret0}&gt;</CODE>
6436     *
6437     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6438     * browser receives the invocation-request.
6439     *
6440     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6441     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6442     * {@code >} to ensure the Browser Function has run to completion.
6443     */
6444    public static Script<String, JsonObject, Ret0> screencastFrameAck(int sessionId)
6445    {
6446        final int       webSocketID = 32030000 + counter++;
6447        final boolean[] optionals   = { false, };
6448        
6449        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6450        String requestJSON = WriteJSON.get(
6451            parameterTypes.get("screencastFrameAck"),
6452            parameterNames.get("screencastFrameAck"),
6453            optionals, webSocketID,
6454            "Page.screencastFrameAck",
6455            sessionId
6456        );
6457        
6458        // This Remote Command does not have a Return-Value.
6459        return new Script<>
6460            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6461    }
6462    
6463    /**
6464     * Searches for given string in resource content.
6465     * <BR /><B>EXPERIMENTAL</B>
6466     * 
6467     * @param frameId Frame id for resource to search in.
6468     * 
6469     * @param url URL of the resource to search in.
6470     * 
6471     * @param query String to search for.
6472     * 
6473     * @param caseSensitive If true, search is case sensitive.
6474     * <BR /><B>OPTIONAL</B>
6475     * 
6476     * @param isRegex If true, treats string parameter as regex.
6477     * <BR /><B>OPTIONAL</B>
6478     * 
6479     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6480     * {@link Debugger.SearchMatch}[]&gt;</CODE>
6481     * 
6482     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
6483     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
6484     * {@link Debugger.SearchMatch}[]&gt;</CODE> will be returned.
6485     *
6486     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
6487     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
6488      * may be retrieved.</I>
6489     *
6490     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
6491     * <BR /><BR /><UL CLASS=JDUL>
6492     * <LI><CODE>{@link Debugger.SearchMatch}[] (<B>result</B></CODE>)
6493     *     <BR />List of search matches.
6494     * </LI>
6495     * </UL> */
6496    public static Script<String, JsonObject, Debugger.SearchMatch[]> searchInResource
6497        (String frameId, String url, String query, Boolean caseSensitive, Boolean isRegex)
6498    {
6499        // Exception-Check(s) to ensure that if any parameters which are not declared as
6500        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6501        
6502        if (frameId == null) BRDPC.throwNPE("frameId");
6503        if (url == null)     BRDPC.throwNPE("url");
6504        if (query == null)   BRDPC.throwNPE("query");
6505        
6506        final int       webSocketID = 32031000 + counter++;
6507        final boolean[] optionals   = { false, false, false, true, true, };
6508        
6509        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6510        String requestJSON = WriteJSON.get(
6511            parameterTypes.get("searchInResource"),
6512            parameterNames.get("searchInResource"),
6513            optionals, webSocketID,
6514            "Page.searchInResource",
6515            frameId, url, query, caseSensitive, isRegex
6516        );
6517        
6518        // 'JSON Binding' ... Converts Browser Response-JSON to 'Debugger.SearchMatch[]'
6519        Function<JsonObject, Debugger.SearchMatch[]> responseProcessor = (JsonObject jo) ->
6520            (jo.getJsonArray("result") == null)
6521                ? null
6522                : RJArrDimN.objArr(jo.getJsonArray("result"), null, 0, Debugger.SearchMatch[].class);
6523        
6524        // Pass the 'defaultSender' to Script-Constructor
6525        // The sender that is used can be changed before executing script.
6526        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6527    }
6528    
6529    /**
6530     * Enable Chrome's experimental ad filter on all sites.
6531     * <BR /><B>EXPERIMENTAL</B>
6532     * 
6533     * @param enabled Whether to block ads.
6534     * 
6535     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6536     * {@link Ret0}&gt;</CODE>
6537     *
6538     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6539     * browser receives the invocation-request.
6540     *
6541     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6542     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6543     * {@code >} to ensure the Browser Function has run to completion.
6544     */
6545    public static Script<String, JsonObject, Ret0> setAdBlockingEnabled(boolean enabled)
6546    {
6547        final int       webSocketID = 32032000 + counter++;
6548        final boolean[] optionals   = { false, };
6549        
6550        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6551        String requestJSON = WriteJSON.get(
6552            parameterTypes.get("setAdBlockingEnabled"),
6553            parameterNames.get("setAdBlockingEnabled"),
6554            optionals, webSocketID,
6555            "Page.setAdBlockingEnabled",
6556            enabled
6557        );
6558        
6559        // This Remote Command does not have a Return-Value.
6560        return new Script<>
6561            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6562    }
6563    
6564    /**
6565     * Enable page Content Security Policy by-passing.
6566     * <BR /><B>EXPERIMENTAL</B>
6567     * 
6568     * @param enabled Whether to bypass page CSP.
6569     * 
6570     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6571     * {@link Ret0}&gt;</CODE>
6572     *
6573     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6574     * browser receives the invocation-request.
6575     *
6576     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6577     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6578     * {@code >} to ensure the Browser Function has run to completion.
6579     */
6580    public static Script<String, JsonObject, Ret0> setBypassCSP(boolean enabled)
6581    {
6582        final int       webSocketID = 32033000 + counter++;
6583        final boolean[] optionals   = { false, };
6584        
6585        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6586        String requestJSON = WriteJSON.get(
6587            parameterTypes.get("setBypassCSP"),
6588            parameterNames.get("setBypassCSP"),
6589            optionals, webSocketID,
6590            "Page.setBypassCSP",
6591            enabled
6592        );
6593        
6594        // This Remote Command does not have a Return-Value.
6595        return new Script<>
6596            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6597    }
6598    
6599    /**
6600     * Get Permissions Policy state on given frame.
6601     * <BR /><B>EXPERIMENTAL</B>
6602     * 
6603     * @param frameId -
6604     * 
6605     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6606     * {@link Page.PermissionsPolicyFeatureState}[]&gt;</CODE>
6607     * 
6608     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
6609     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
6610     * {@link Page.PermissionsPolicyFeatureState}[]&gt;</CODE> will be returned.
6611     *
6612     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
6613     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
6614      * may be retrieved.</I>
6615     *
6616     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
6617     * <BR /><BR /><UL CLASS=JDUL>
6618     * <LI><CODE>{@link Page.PermissionsPolicyFeatureState}[] (<B>states</B></CODE>)
6619     *     <BR />-
6620     * </LI>
6621     * </UL> */
6622    public static Script<String, JsonObject, Page.PermissionsPolicyFeatureState[]> getPermissionsPolicyState
6623        (String frameId)
6624    {
6625        // Exception-Check(s) to ensure that if any parameters which are not declared as
6626        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6627        
6628        if (frameId == null) BRDPC.throwNPE("frameId");
6629        
6630        final int       webSocketID = 32034000 + counter++;
6631        final boolean[] optionals   = { false, };
6632        
6633        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6634        String requestJSON = WriteJSON.get(
6635            parameterTypes.get("getPermissionsPolicyState"),
6636            parameterNames.get("getPermissionsPolicyState"),
6637            optionals, webSocketID,
6638            "Page.getPermissionsPolicyState",
6639            frameId
6640        );
6641        
6642        // 'JSON Binding' ... Converts Browser Response-JSON to 'Page.PermissionsPolicyFeatureState[]'
6643        Function<JsonObject, Page.PermissionsPolicyFeatureState[]> responseProcessor = (JsonObject jo) ->
6644            (jo.getJsonArray("states") == null)
6645                ? null
6646                : RJArrDimN.objArr(jo.getJsonArray("states"), null, 0, Page.PermissionsPolicyFeatureState[].class);
6647        
6648        // Pass the 'defaultSender' to Script-Constructor
6649        // The sender that is used can be changed before executing script.
6650        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6651    }
6652    
6653    /**
6654     * Get Origin Trials on given frame.
6655     * <BR /><B>EXPERIMENTAL</B>
6656     * 
6657     * @param frameId -
6658     * 
6659     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6660     * {@link Page.OriginTrial}[]&gt;</CODE>
6661     * 
6662     * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using
6663     * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE>&lt;JsonObject,
6664     * {@link Page.OriginTrial}[]&gt;</CODE> will be returned.
6665     *
6666     * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>,
6667     * using {@link Promise#await()}, <I>and the returned result of this Browser Function may
6668      * may be retrieved.</I>
6669     *
6670     * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B>
6671     * <BR /><BR /><UL CLASS=JDUL>
6672     * <LI><CODE>{@link Page.OriginTrial}[] (<B>originTrials</B></CODE>)
6673     *     <BR />-
6674     * </LI>
6675     * </UL> */
6676    public static Script<String, JsonObject, Page.OriginTrial[]> getOriginTrials(String frameId)
6677    {
6678        // Exception-Check(s) to ensure that if any parameters which are not declared as
6679        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6680        
6681        if (frameId == null) BRDPC.throwNPE("frameId");
6682        
6683        final int       webSocketID = 32035000 + counter++;
6684        final boolean[] optionals   = { false, };
6685        
6686        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6687        String requestJSON = WriteJSON.get(
6688            parameterTypes.get("getOriginTrials"),
6689            parameterNames.get("getOriginTrials"),
6690            optionals, webSocketID,
6691            "Page.getOriginTrials",
6692            frameId
6693        );
6694        
6695        // 'JSON Binding' ... Converts Browser Response-JSON to 'Page.OriginTrial[]'
6696        Function<JsonObject, Page.OriginTrial[]> responseProcessor = (JsonObject jo) ->
6697            (jo.getJsonArray("originTrials") == null)
6698                ? null
6699                : RJArrDimN.objArr(jo.getJsonArray("originTrials"), null, 0, Page.OriginTrial[].class);
6700        
6701        // Pass the 'defaultSender' to Script-Constructor
6702        // The sender that is used can be changed before executing script.
6703        return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor);
6704    }
6705    
6706    /**
6707     * Overrides the values of device screen dimensions (window.screen.width, window.screen.height,
6708     * window.innerWidth, window.innerHeight, and "device-width"/"device-height"-related CSS media
6709     * query results).
6710     * <BR /><B>EXPERIMENTAL</B>
6711     * <BR /><B>DEPRECATED</B>
6712     * 
6713     * @param width Overriding width value in pixels (minimum 0, maximum 10000000). 0 disables the override.
6714     * 
6715     * @param height Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override.
6716     * 
6717     * @param deviceScaleFactor Overriding device scale factor value. 0 disables the override.
6718     * 
6719     * @param mobile 
6720     * Whether to emulate mobile device. This includes viewport meta tag, overlay scrollbars, text
6721     * autosizing and more.
6722     * 
6723     * @param scale Scale to apply to resulting view image.
6724     * <BR /><B>OPTIONAL</B>
6725     * 
6726     * @param screenWidth Overriding screen width value in pixels (minimum 0, maximum 10000000).
6727     * <BR /><B>OPTIONAL</B>
6728     * 
6729     * @param screenHeight Overriding screen height value in pixels (minimum 0, maximum 10000000).
6730     * <BR /><B>OPTIONAL</B>
6731     * 
6732     * @param positionX Overriding view X position on screen in pixels (minimum 0, maximum 10000000).
6733     * <BR /><B>OPTIONAL</B>
6734     * 
6735     * @param positionY Overriding view Y position on screen in pixels (minimum 0, maximum 10000000).
6736     * <BR /><B>OPTIONAL</B>
6737     * 
6738     * @param dontSetVisibleSize Do not set visible view size, rely upon explicit setVisibleSize call.
6739     * <BR /><B>OPTIONAL</B>
6740     * 
6741     * @param screenOrientation Screen orientation override.
6742     * <BR /><B>OPTIONAL</B>
6743     * 
6744     * @param viewport The viewport dimensions and scale. If not set, the override is cleared.
6745     * <BR /><B>OPTIONAL</B>
6746     * 
6747     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6748     * {@link Ret0}&gt;</CODE>
6749     *
6750     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6751     * browser receives the invocation-request.
6752     *
6753     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6754     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6755     * {@code >} to ensure the Browser Function has run to completion.
6756     */
6757    public static Script<String, JsonObject, Ret0> setDeviceMetricsOverride(
6758            int width, int height, Number deviceScaleFactor, boolean mobile, Number scale, 
6759            Integer screenWidth, Integer screenHeight, Integer positionX, Integer positionY, 
6760            Boolean dontSetVisibleSize, Emulation.ScreenOrientation screenOrientation, 
6761            Page.Viewport viewport
6762        )
6763    {
6764        // Exception-Check(s) to ensure that if any parameters which are not declared as
6765        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6766        
6767        if (deviceScaleFactor == null) BRDPC.throwNPE("deviceScaleFactor");
6768        
6769        final int       webSocketID = 32036000 + counter++;
6770        final boolean[] optionals   = { false, false, false, false, true, true, true, true, true, true, true, true, };
6771        
6772        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6773        String requestJSON = WriteJSON.get(
6774            parameterTypes.get("setDeviceMetricsOverride"),
6775            parameterNames.get("setDeviceMetricsOverride"),
6776            optionals, webSocketID,
6777            "Page.setDeviceMetricsOverride",
6778            width, height, deviceScaleFactor, mobile, scale, screenWidth, screenHeight, positionX,
6779            positionY, dontSetVisibleSize, screenOrientation, viewport
6780        );
6781        
6782        // This Remote Command does not have a Return-Value.
6783        return new Script<>
6784            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6785    }
6786    
6787    /**
6788     * Overrides the Device Orientation.
6789     * <BR /><B>EXPERIMENTAL</B>
6790     * <BR /><B>DEPRECATED</B>
6791     * 
6792     * @param alpha Mock alpha
6793     * 
6794     * @param beta Mock beta
6795     * 
6796     * @param gamma Mock gamma
6797     * 
6798     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6799     * {@link Ret0}&gt;</CODE>
6800     *
6801     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6802     * browser receives the invocation-request.
6803     *
6804     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6805     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6806     * {@code >} to ensure the Browser Function has run to completion.
6807     */
6808    public static Script<String, JsonObject, Ret0> setDeviceOrientationOverride
6809        (Number alpha, Number beta, Number gamma)
6810    {
6811        // Exception-Check(s) to ensure that if any parameters which are not declared as
6812        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6813        
6814        if (alpha == null) BRDPC.throwNPE("alpha");
6815        if (beta == null)  BRDPC.throwNPE("beta");
6816        if (gamma == null) BRDPC.throwNPE("gamma");
6817        
6818        final int       webSocketID = 32037000 + counter++;
6819        final boolean[] optionals   = { false, false, false, };
6820        
6821        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6822        String requestJSON = WriteJSON.get(
6823            parameterTypes.get("setDeviceOrientationOverride"),
6824            parameterNames.get("setDeviceOrientationOverride"),
6825            optionals, webSocketID,
6826            "Page.setDeviceOrientationOverride",
6827            alpha, beta, gamma
6828        );
6829        
6830        // This Remote Command does not have a Return-Value.
6831        return new Script<>
6832            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6833    }
6834    
6835    /**
6836     * Set generic font families.
6837     * <BR /><B>EXPERIMENTAL</B>
6838     * 
6839     * @param fontFamilies Specifies font families to set. If a font family is not specified, it won't be changed.
6840     * 
6841     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6842     * {@link Ret0}&gt;</CODE>
6843     *
6844     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6845     * browser receives the invocation-request.
6846     *
6847     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6848     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6849     * {@code >} to ensure the Browser Function has run to completion.
6850     */
6851    public static Script<String, JsonObject, Ret0> setFontFamilies
6852        (Page.FontFamilies fontFamilies)
6853    {
6854        // Exception-Check(s) to ensure that if any parameters which are not declared as
6855        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6856        
6857        if (fontFamilies == null) BRDPC.throwNPE("fontFamilies");
6858        
6859        final int       webSocketID = 32038000 + counter++;
6860        final boolean[] optionals   = { false, };
6861        
6862        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6863        String requestJSON = WriteJSON.get(
6864            parameterTypes.get("setFontFamilies"),
6865            parameterNames.get("setFontFamilies"),
6866            optionals, webSocketID,
6867            "Page.setFontFamilies",
6868            fontFamilies
6869        );
6870        
6871        // This Remote Command does not have a Return-Value.
6872        return new Script<>
6873            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6874    }
6875    
6876    /**
6877     * Set default font sizes.
6878     * <BR /><B>EXPERIMENTAL</B>
6879     * 
6880     * @param fontSizes Specifies font sizes to set. If a font size is not specified, it won't be changed.
6881     * 
6882     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6883     * {@link Ret0}&gt;</CODE>
6884     *
6885     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6886     * browser receives the invocation-request.
6887     *
6888     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6889     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6890     * {@code >} to ensure the Browser Function has run to completion.
6891     */
6892    public static Script<String, JsonObject, Ret0> setFontSizes(Page.FontSizes fontSizes)
6893    {
6894        // Exception-Check(s) to ensure that if any parameters which are not declared as
6895        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6896        
6897        if (fontSizes == null) BRDPC.throwNPE("fontSizes");
6898        
6899        final int       webSocketID = 32039000 + counter++;
6900        final boolean[] optionals   = { false, };
6901        
6902        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6903        String requestJSON = WriteJSON.get(
6904            parameterTypes.get("setFontSizes"),
6905            parameterNames.get("setFontSizes"),
6906            optionals, webSocketID,
6907            "Page.setFontSizes",
6908            fontSizes
6909        );
6910        
6911        // This Remote Command does not have a Return-Value.
6912        return new Script<>
6913            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6914    }
6915    
6916    /**
6917     * Sets given markup as the document's HTML.
6918     * 
6919     * @param frameId Frame id to set HTML for.
6920     * 
6921     * @param html HTML content to set.
6922     * 
6923     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6924     * {@link Ret0}&gt;</CODE>
6925     *
6926     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6927     * browser receives the invocation-request.
6928     *
6929     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6930     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6931     * {@code >} to ensure the Browser Function has run to completion.
6932     */
6933    public static Script<String, JsonObject, Ret0> setDocumentContent
6934        (String frameId, String html)
6935    {
6936        // Exception-Check(s) to ensure that if any parameters which are not declared as
6937        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6938        
6939        if (frameId == null) BRDPC.throwNPE("frameId");
6940        if (html == null)    BRDPC.throwNPE("html");
6941        
6942        final int       webSocketID = 32040000 + counter++;
6943        final boolean[] optionals   = { false, false, };
6944        
6945        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
6946        String requestJSON = WriteJSON.get(
6947            parameterTypes.get("setDocumentContent"),
6948            parameterNames.get("setDocumentContent"),
6949            optionals, webSocketID,
6950            "Page.setDocumentContent",
6951            frameId, html
6952        );
6953        
6954        // This Remote Command does not have a Return-Value.
6955        return new Script<>
6956            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
6957    }
6958    
6959    /**
6960     * Set the behavior when downloading a file.
6961     * <BR /><B>EXPERIMENTAL</B>
6962     * <BR /><B>DEPRECATED</B>
6963     * 
6964     * @param behavior 
6965     * Whether to allow all or deny all download requests, or use default Chrome behavior if
6966     * available (otherwise deny).
6967     * <BR />Acceptable Values: ["deny", "allow", "default"]
6968     * 
6969     * @param downloadPath The default path to save downloaded files to. This is required if behavior is set to 'allow'
6970     * <BR /><B>OPTIONAL</B>
6971     * 
6972     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
6973     * {@link Ret0}&gt;</CODE>
6974     *
6975     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
6976     * browser receives the invocation-request.
6977     *
6978     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
6979     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
6980     * {@code >} to ensure the Browser Function has run to completion.
6981     */
6982    public static Script<String, JsonObject, Ret0> setDownloadBehavior
6983        (String behavior, String downloadPath)
6984    {
6985        // Exception-Check(s) to ensure that if any parameters which are not declared as
6986        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
6987        
6988        if (behavior == null) BRDPC.throwNPE("behavior");
6989        
6990        // Exception-Check(s) to ensure that if any parameters which must adhere to a
6991        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
6992        
6993        BRDPC.checkIAE(
6994            "behavior", behavior,
6995            "deny", "allow", "default"
6996        );
6997        
6998        final int       webSocketID = 32041000 + counter++;
6999        final boolean[] optionals   = { false, true, };
7000        
7001        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7002        String requestJSON = WriteJSON.get(
7003            parameterTypes.get("setDownloadBehavior"),
7004            parameterNames.get("setDownloadBehavior"),
7005            optionals, webSocketID,
7006            "Page.setDownloadBehavior",
7007            behavior, downloadPath
7008        );
7009        
7010        // This Remote Command does not have a Return-Value.
7011        return new Script<>
7012            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7013    }
7014    
7015    /**
7016     * Overrides the Geolocation Position or Error. Omitting any of the parameters emulates position
7017     * unavailable.
7018     * <BR /><B>DEPRECATED</B>
7019     * 
7020     * @param latitude Mock latitude
7021     * <BR /><B>OPTIONAL</B>
7022     * 
7023     * @param longitude Mock longitude
7024     * <BR /><B>OPTIONAL</B>
7025     * 
7026     * @param accuracy Mock accuracy
7027     * <BR /><B>OPTIONAL</B>
7028     * 
7029     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7030     * {@link Ret0}&gt;</CODE>
7031     *
7032     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7033     * browser receives the invocation-request.
7034     *
7035     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7036     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7037     * {@code >} to ensure the Browser Function has run to completion.
7038     */
7039    public static Script<String, JsonObject, Ret0> setGeolocationOverride
7040        (Number latitude, Number longitude, Number accuracy)
7041    {
7042        final int       webSocketID = 32042000 + counter++;
7043        final boolean[] optionals   = { true, true, true, };
7044        
7045        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7046        String requestJSON = WriteJSON.get(
7047            parameterTypes.get("setGeolocationOverride"),
7048            parameterNames.get("setGeolocationOverride"),
7049            optionals, webSocketID,
7050            "Page.setGeolocationOverride",
7051            latitude, longitude, accuracy
7052        );
7053        
7054        // This Remote Command does not have a Return-Value.
7055        return new Script<>
7056            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7057    }
7058    
7059    /**
7060     * Controls whether page will emit lifecycle events.
7061     * <BR /><B>EXPERIMENTAL</B>
7062     * 
7063     * @param enabled If true, starts emitting lifecycle events.
7064     * 
7065     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7066     * {@link Ret0}&gt;</CODE>
7067     *
7068     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7069     * browser receives the invocation-request.
7070     *
7071     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7072     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7073     * {@code >} to ensure the Browser Function has run to completion.
7074     */
7075    public static Script<String, JsonObject, Ret0> setLifecycleEventsEnabled(boolean enabled)
7076    {
7077        final int       webSocketID = 32043000 + counter++;
7078        final boolean[] optionals   = { false, };
7079        
7080        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7081        String requestJSON = WriteJSON.get(
7082            parameterTypes.get("setLifecycleEventsEnabled"),
7083            parameterNames.get("setLifecycleEventsEnabled"),
7084            optionals, webSocketID,
7085            "Page.setLifecycleEventsEnabled",
7086            enabled
7087        );
7088        
7089        // This Remote Command does not have a Return-Value.
7090        return new Script<>
7091            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7092    }
7093    
7094    /**
7095     * Toggles mouse event-based touch event emulation.
7096     * <BR /><B>EXPERIMENTAL</B>
7097     * <BR /><B>DEPRECATED</B>
7098     * 
7099     * @param enabled Whether the touch event emulation should be enabled.
7100     * 
7101     * @param configuration Touch/gesture events configuration. Default: current platform.
7102     * <BR />Acceptable Values: ["mobile", "desktop"]
7103     * <BR /><B>OPTIONAL</B>
7104     * 
7105     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7106     * {@link Ret0}&gt;</CODE>
7107     *
7108     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7109     * browser receives the invocation-request.
7110     *
7111     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7112     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7113     * {@code >} to ensure the Browser Function has run to completion.
7114     */
7115    public static Script<String, JsonObject, Ret0> setTouchEmulationEnabled
7116        (boolean enabled, String configuration)
7117    {
7118        // Exception-Check(s) to ensure that if any parameters which must adhere to a
7119        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
7120        
7121        BRDPC.checkIAE(
7122            "configuration", configuration,
7123            "mobile", "desktop"
7124        );
7125        
7126        final int       webSocketID = 32044000 + counter++;
7127        final boolean[] optionals   = { false, true, };
7128        
7129        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7130        String requestJSON = WriteJSON.get(
7131            parameterTypes.get("setTouchEmulationEnabled"),
7132            parameterNames.get("setTouchEmulationEnabled"),
7133            optionals, webSocketID,
7134            "Page.setTouchEmulationEnabled",
7135            enabled, configuration
7136        );
7137        
7138        // This Remote Command does not have a Return-Value.
7139        return new Script<>
7140            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7141    }
7142    
7143    /**
7144     * Starts sending each frame using the <CODE>screencastFrame</CODE> event.
7145     * <BR /><B>EXPERIMENTAL</B>
7146     * 
7147     * @param format Image compression format.
7148     * <BR />Acceptable Values: ["jpeg", "png"]
7149     * <BR /><B>OPTIONAL</B>
7150     * 
7151     * @param quality Compression quality from range [0..100].
7152     * <BR /><B>OPTIONAL</B>
7153     * 
7154     * @param maxWidth Maximum screenshot width.
7155     * <BR /><B>OPTIONAL</B>
7156     * 
7157     * @param maxHeight Maximum screenshot height.
7158     * <BR /><B>OPTIONAL</B>
7159     * 
7160     * @param everyNthFrame Send every n-th frame.
7161     * <BR /><B>OPTIONAL</B>
7162     * 
7163     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7164     * {@link Ret0}&gt;</CODE>
7165     *
7166     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7167     * browser receives the invocation-request.
7168     *
7169     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7170     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7171     * {@code >} to ensure the Browser Function has run to completion.
7172     */
7173    public static Script<String, JsonObject, Ret0> startScreencast
7174        (String format, Integer quality, Integer maxWidth, Integer maxHeight, Integer everyNthFrame)
7175    {
7176        // Exception-Check(s) to ensure that if any parameters which must adhere to a
7177        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
7178        
7179        BRDPC.checkIAE(
7180            "format", format,
7181            "jpeg", "png"
7182        );
7183        
7184        final int       webSocketID = 32045000 + counter++;
7185        final boolean[] optionals   = { true, true, true, true, true, };
7186        
7187        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7188        String requestJSON = WriteJSON.get(
7189            parameterTypes.get("startScreencast"),
7190            parameterNames.get("startScreencast"),
7191            optionals, webSocketID,
7192            "Page.startScreencast",
7193            format, quality, maxWidth, maxHeight, everyNthFrame
7194        );
7195        
7196        // This Remote Command does not have a Return-Value.
7197        return new Script<>
7198            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7199    }
7200    
7201    /**
7202     * Force the page stop all navigations and pending resource fetches.
7203     * 
7204     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7205     * {@link Ret0}&gt;</CODE>
7206     *
7207     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7208     * browser receives the invocation-request.
7209     *
7210     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7211     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7212     * {@code >} to ensure the Browser Function has run to completion.
7213     */
7214    public static Script<String, JsonObject, Ret0> stopLoading()
7215    {
7216        final int          webSocketID = 32046000 + counter++;
7217        final boolean[]    optionals   = new boolean[0];
7218        
7219        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7220        String requestJSON = WriteJSON.get(
7221            parameterTypes.get("stopLoading"),
7222            parameterNames.get("stopLoading"),
7223            optionals, webSocketID,
7224            "Page.stopLoading"
7225        );
7226        
7227        // This Remote Command does not have a Return-Value.
7228        return new Script<>
7229            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7230    }
7231    
7232    /**
7233     * Crashes renderer on the IO thread, generates minidumps.
7234     * <BR /><B>EXPERIMENTAL</B>
7235     * 
7236     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7237     * {@link Ret0}&gt;</CODE>
7238     *
7239     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7240     * browser receives the invocation-request.
7241     *
7242     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7243     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7244     * {@code >} to ensure the Browser Function has run to completion.
7245     */
7246    public static Script<String, JsonObject, Ret0> crash()
7247    {
7248        final int          webSocketID = 32047000 + counter++;
7249        final boolean[]    optionals   = new boolean[0];
7250        
7251        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7252        String requestJSON = WriteJSON.get(
7253            parameterTypes.get("crash"),
7254            parameterNames.get("crash"),
7255            optionals, webSocketID,
7256            "Page.crash"
7257        );
7258        
7259        // This Remote Command does not have a Return-Value.
7260        return new Script<>
7261            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7262    }
7263    
7264    /**
7265     * Tries to close page, running its beforeunload hooks, if any.
7266     * <BR /><B>EXPERIMENTAL</B>
7267     * 
7268     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7269     * {@link Ret0}&gt;</CODE>
7270     *
7271     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7272     * browser receives the invocation-request.
7273     *
7274     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7275     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7276     * {@code >} to ensure the Browser Function has run to completion.
7277     */
7278    public static Script<String, JsonObject, Ret0> close()
7279    {
7280        final int          webSocketID = 32048000 + counter++;
7281        final boolean[]    optionals   = new boolean[0];
7282        
7283        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7284        String requestJSON = WriteJSON.get(
7285            parameterTypes.get("close"),
7286            parameterNames.get("close"),
7287            optionals, webSocketID,
7288            "Page.close"
7289        );
7290        
7291        // This Remote Command does not have a Return-Value.
7292        return new Script<>
7293            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7294    }
7295    
7296    /**
7297     * Tries to update the web lifecycle state of the page.
7298     * It will transition the page to the given state according to:
7299     * https://github.com/WICG/web-lifecycle/
7300     * <BR /><B>EXPERIMENTAL</B>
7301     * 
7302     * @param state Target lifecycle state
7303     * <BR />Acceptable Values: ["frozen", "active"]
7304     * 
7305     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7306     * {@link Ret0}&gt;</CODE>
7307     *
7308     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7309     * browser receives the invocation-request.
7310     *
7311     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7312     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7313     * {@code >} to ensure the Browser Function has run to completion.
7314     */
7315    public static Script<String, JsonObject, Ret0> setWebLifecycleState(String state)
7316    {
7317        // Exception-Check(s) to ensure that if any parameters which are not declared as
7318        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
7319        
7320        if (state == null) BRDPC.throwNPE("state");
7321        
7322        // Exception-Check(s) to ensure that if any parameters which must adhere to a
7323        // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw.
7324        
7325        BRDPC.checkIAE(
7326            "state", state,
7327            "frozen", "active"
7328        );
7329        
7330        final int       webSocketID = 32049000 + counter++;
7331        final boolean[] optionals   = { false, };
7332        
7333        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7334        String requestJSON = WriteJSON.get(
7335            parameterTypes.get("setWebLifecycleState"),
7336            parameterNames.get("setWebLifecycleState"),
7337            optionals, webSocketID,
7338            "Page.setWebLifecycleState",
7339            state
7340        );
7341        
7342        // This Remote Command does not have a Return-Value.
7343        return new Script<>
7344            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7345    }
7346    
7347    /**
7348     * Stops sending each frame in the <CODE>screencastFrame</CODE>.
7349     * <BR /><B>EXPERIMENTAL</B>
7350     * 
7351     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7352     * {@link Ret0}&gt;</CODE>
7353     *
7354     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7355     * browser receives the invocation-request.
7356     *
7357     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7358     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7359     * {@code >} to ensure the Browser Function has run to completion.
7360     */
7361    public static Script<String, JsonObject, Ret0> stopScreencast()
7362    {
7363        final int          webSocketID = 32050000 + counter++;
7364        final boolean[]    optionals   = new boolean[0];
7365        
7366        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7367        String requestJSON = WriteJSON.get(
7368            parameterTypes.get("stopScreencast"),
7369            parameterNames.get("stopScreencast"),
7370            optionals, webSocketID,
7371            "Page.stopScreencast"
7372        );
7373        
7374        // This Remote Command does not have a Return-Value.
7375        return new Script<>
7376            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7377    }
7378    
7379    /**
7380     * Requests backend to produce compilation cache for the specified scripts.
7381     * <CODE>scripts</CODE> are appeneded to the list of scripts for which the cache
7382     * would be produced. The list may be reset during page navigation.
7383     * When script with a matching URL is encountered, the cache is optionally
7384     * produced upon backend discretion, based on internal heuristics.
7385     * See also: <CODE>Page.compilationCacheProduced</CODE>.
7386     * <BR /><B>EXPERIMENTAL</B>
7387     * 
7388     * @param scripts -
7389     * 
7390     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7391     * {@link Ret0}&gt;</CODE>
7392     *
7393     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7394     * browser receives the invocation-request.
7395     *
7396     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7397     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7398     * {@code >} to ensure the Browser Function has run to completion.
7399     */
7400    public static Script<String, JsonObject, Ret0> produceCompilationCache
7401        (Page.CompilationCacheParams[] scripts)
7402    {
7403        // Exception-Check(s) to ensure that if any parameters which are not declared as
7404        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
7405        
7406        if (scripts == null) BRDPC.throwNPE("scripts");
7407        
7408        final int       webSocketID = 32051000 + counter++;
7409        final boolean[] optionals   = { false, };
7410        
7411        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7412        String requestJSON = WriteJSON.get(
7413            parameterTypes.get("produceCompilationCache"),
7414            parameterNames.get("produceCompilationCache"),
7415            optionals, webSocketID,
7416            "Page.produceCompilationCache",
7417            (Object) scripts
7418        );
7419        
7420        // This Remote Command does not have a Return-Value.
7421        return new Script<>
7422            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7423    }
7424    
7425    /**
7426     * Seeds compilation cache for given url. Compilation cache does not survive
7427     * cross-process navigation.
7428     * <BR /><B>EXPERIMENTAL</B>
7429     * 
7430     * @param url -
7431     * 
7432     * @param data Base64-encoded data (Encoded as a base64 string when passed over JSON)
7433     * 
7434     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7435     * {@link Ret0}&gt;</CODE>
7436     *
7437     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7438     * browser receives the invocation-request.
7439     *
7440     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7441     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7442     * {@code >} to ensure the Browser Function has run to completion.
7443     */
7444    public static Script<String, JsonObject, Ret0> addCompilationCache(String url, String data)
7445    {
7446        // Exception-Check(s) to ensure that if any parameters which are not declared as
7447        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
7448        
7449        if (url == null)  BRDPC.throwNPE("url");
7450        if (data == null) BRDPC.throwNPE("data");
7451        
7452        final int       webSocketID = 32052000 + counter++;
7453        final boolean[] optionals   = { false, false, };
7454        
7455        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7456        String requestJSON = WriteJSON.get(
7457            parameterTypes.get("addCompilationCache"),
7458            parameterNames.get("addCompilationCache"),
7459            optionals, webSocketID,
7460            "Page.addCompilationCache",
7461            url, data
7462        );
7463        
7464        // This Remote Command does not have a Return-Value.
7465        return new Script<>
7466            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7467    }
7468    
7469    /**
7470     * Clears seeded compilation cache.
7471     * <BR /><B>EXPERIMENTAL</B>
7472     * 
7473     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7474     * {@link Ret0}&gt;</CODE>
7475     *
7476     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7477     * browser receives the invocation-request.
7478     *
7479     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7480     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7481     * {@code >} to ensure the Browser Function has run to completion.
7482     */
7483    public static Script<String, JsonObject, Ret0> clearCompilationCache()
7484    {
7485        final int          webSocketID = 32053000 + counter++;
7486        final boolean[]    optionals   = new boolean[0];
7487        
7488        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7489        String requestJSON = WriteJSON.get(
7490            parameterTypes.get("clearCompilationCache"),
7491            parameterNames.get("clearCompilationCache"),
7492            optionals, webSocketID,
7493            "Page.clearCompilationCache"
7494        );
7495        
7496        // This Remote Command does not have a Return-Value.
7497        return new Script<>
7498            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7499    }
7500    
7501    /**
7502     * Generates a report for testing.
7503     * <BR /><B>EXPERIMENTAL</B>
7504     * 
7505     * @param message Message to be displayed in the report.
7506     * 
7507     * @param group Specifies the endpoint group to deliver the report to.
7508     * <BR /><B>OPTIONAL</B>
7509     * 
7510     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7511     * {@link Ret0}&gt;</CODE>
7512     *
7513     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7514     * browser receives the invocation-request.
7515     *
7516     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7517     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7518     * {@code >} to ensure the Browser Function has run to completion.
7519     */
7520    public static Script<String, JsonObject, Ret0> generateTestReport
7521        (String message, String group)
7522    {
7523        // Exception-Check(s) to ensure that if any parameters which are not declared as
7524        // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw.
7525        
7526        if (message == null) BRDPC.throwNPE("message");
7527        
7528        final int       webSocketID = 32054000 + counter++;
7529        final boolean[] optionals   = { false, true, };
7530        
7531        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7532        String requestJSON = WriteJSON.get(
7533            parameterTypes.get("generateTestReport"),
7534            parameterNames.get("generateTestReport"),
7535            optionals, webSocketID,
7536            "Page.generateTestReport",
7537            message, group
7538        );
7539        
7540        // This Remote Command does not have a Return-Value.
7541        return new Script<>
7542            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7543    }
7544    
7545    /**
7546     * Pauses page execution. Can be resumed using generic RunTime.runIfWaitingForDebugger.
7547     * <BR /><B>EXPERIMENTAL</B>
7548     * 
7549     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7550     * {@link Ret0}&gt;</CODE>
7551     *
7552     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7553     * browser receives the invocation-request.
7554     *
7555     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7556     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7557     * {@code >} to ensure the Browser Function has run to completion.
7558     */
7559    public static Script<String, JsonObject, Ret0> waitForDebugger()
7560    {
7561        final int          webSocketID = 32055000 + counter++;
7562        final boolean[]    optionals   = new boolean[0];
7563        
7564        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7565        String requestJSON = WriteJSON.get(
7566            parameterTypes.get("waitForDebugger"),
7567            parameterNames.get("waitForDebugger"),
7568            optionals, webSocketID,
7569            "Page.waitForDebugger"
7570        );
7571        
7572        // This Remote Command does not have a Return-Value.
7573        return new Script<>
7574            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7575    }
7576    
7577    /**
7578     * Intercept file chooser requests and transfer control to protocol clients.
7579     * When file chooser interception is enabled, native file chooser dialog is not shown.
7580     * Instead, a protocol event <CODE>Page.fileChooserOpened</CODE> is emitted.
7581     * <BR /><B>EXPERIMENTAL</B>
7582     * 
7583     * @param enabled -
7584     * 
7585     * @return An instance of <CODE>{@link Script}&lt;String, {@link JsonObject},
7586     * {@link Ret0}&gt;</CODE>
7587     *
7588     * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the
7589     * browser receives the invocation-request.
7590     *
7591     * <BR /><BR />This Browser-Function <I>does not have</I> a return-value.  You may choose to
7592     * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0}
7593     * {@code >} to ensure the Browser Function has run to completion.
7594     */
7595    public static Script<String, JsonObject, Ret0> setInterceptFileChooserDialog
7596        (boolean enabled)
7597    {
7598        final int       webSocketID = 32056000 + counter++;
7599        final boolean[] optionals   = { false, };
7600        
7601        // Convert Method Parameters into JSON.  Build the JSON Request-Object (as a String)
7602        String requestJSON = WriteJSON.get(
7603            parameterTypes.get("setInterceptFileChooserDialog"),
7604            parameterNames.get("setInterceptFileChooserDialog"),
7605            optionals, webSocketID,
7606            "Page.setInterceptFileChooserDialog",
7607            enabled
7608        );
7609        
7610        // This Remote Command does not have a Return-Value.
7611        return new Script<>
7612            (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues);
7613    }
7614    
7615}