001package Torello.Browser; 002 003import java.util.*; 004import javax.json.*; 005import javax.json.stream.*; 006import java.io.*; 007 008import java.lang.reflect.Method; 009import java.lang.reflect.Parameter; 010import java.util.function.Function; 011 012import Torello.Java.Additional.*; 013import Torello.Java.JSON.*; 014 015import static Torello.Java.JSON.JFlag.*; 016 017import Torello.Java.StrCmpr; 018import Torello.JavaDoc.StaticFunctional; 019import Torello.JavaDoc.JDHeaderBackgroundImg; 020import Torello.JavaDoc.Excuse; 021 022/** 023 * <SPAN CLASS=COPIEDJDK><B>This domain emulates different environments for the page.</B></SPAN> 024 * 025 * <EMBED CLASS='external-html' DATA-FILE-ID=CODE_GEN_NOTE> 026 */ 027@StaticFunctional(Excused={"counter"}, Excuses={Excuse.CONFIGURATION}) 028@JDHeaderBackgroundImg(EmbedTagFileID="WOOD_PLANK_NOTE") 029public class Emulation 030{ 031 // ******************************************************************************************** 032 // ******************************************************************************************** 033 // Class Header Stuff 034 // ******************************************************************************************** 035 // ******************************************************************************************** 036 037 038 // No Pubic Constructors 039 private Emulation () { } 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 : Emulation.class.getMethods()) 056 { 057 // This doesn't work! The parameter names are all "arg0" ... "argN" 058 // It works for java.lang.reflect.Field, BUT NOT java.lang.reflect.Parameter! 059 // 060 // Vector<String> parameterNamesList = new Vector<>(); -- NOPE! 061 062 Vector<Class<?>> parameterTypesList = new Vector<>(); 063 064 for (Parameter p : m.getParameters()) parameterTypesList.add(p.getType()); 065 066 parameterTypes.put( 067 m.getName(), 068 (parameterTypesList.size() > 0) ? parameterTypesList : EMPTY_VEC_CLASS 069 ); 070 } 071 } 072 073 static 074 { 075 Vector<String> v = null; 076 077 parameterNames.put("canEmulate", EMPTY_VEC_STR); 078 079 parameterNames.put("clearDeviceMetricsOverride", EMPTY_VEC_STR); 080 081 parameterNames.put("clearGeolocationOverride", EMPTY_VEC_STR); 082 083 parameterNames.put("resetPageScaleFactor", EMPTY_VEC_STR); 084 085 v = new Vector<String>(1); 086 parameterNames.put("setFocusEmulationEnabled", v); 087 Collections.addAll(v, new String[] 088 { "enabled", }); 089 090 v = new Vector<String>(1); 091 parameterNames.put("setAutoDarkModeOverride", v); 092 Collections.addAll(v, new String[] 093 { "enabled", }); 094 095 v = new Vector<String>(1); 096 parameterNames.put("setCPUThrottlingRate", v); 097 Collections.addAll(v, new String[] 098 { "rate", }); 099 100 v = new Vector<String>(1); 101 parameterNames.put("setDefaultBackgroundColorOverride", v); 102 Collections.addAll(v, new String[] 103 { "color", }); 104 105 v = new Vector<String>(13); 106 parameterNames.put("setDeviceMetricsOverride", v); 107 Collections.addAll(v, new String[] 108 { "width", "height", "deviceScaleFactor", "mobile", "scale", "screenWidth", "screenHeight", "positionX", "positionY", "dontSetVisibleSize", "screenOrientation", "viewport", "displayFeature", }); 109 110 v = new Vector<String>(1); 111 parameterNames.put("setScrollbarsHidden", v); 112 Collections.addAll(v, new String[] 113 { "hidden", }); 114 115 v = new Vector<String>(1); 116 parameterNames.put("setDocumentCookieDisabled", v); 117 Collections.addAll(v, new String[] 118 { "disabled", }); 119 120 v = new Vector<String>(2); 121 parameterNames.put("setEmitTouchEventsForMouse", v); 122 Collections.addAll(v, new String[] 123 { "enabled", "configuration", }); 124 125 v = new Vector<String>(2); 126 parameterNames.put("setEmulatedMedia", v); 127 Collections.addAll(v, new String[] 128 { "media", "features", }); 129 130 v = new Vector<String>(1); 131 parameterNames.put("setEmulatedVisionDeficiency", v); 132 Collections.addAll(v, new String[] 133 { "type", }); 134 135 v = new Vector<String>(3); 136 parameterNames.put("setGeolocationOverride", v); 137 Collections.addAll(v, new String[] 138 { "latitude", "longitude", "accuracy", }); 139 140 v = new Vector<String>(2); 141 parameterNames.put("setIdleOverride", v); 142 Collections.addAll(v, new String[] 143 { "isUserActive", "isScreenUnlocked", }); 144 145 parameterNames.put("clearIdleOverride", EMPTY_VEC_STR); 146 147 v = new Vector<String>(1); 148 parameterNames.put("setNavigatorOverrides", v); 149 Collections.addAll(v, new String[] 150 { "platform", }); 151 152 v = new Vector<String>(1); 153 parameterNames.put("setPageScaleFactor", v); 154 Collections.addAll(v, new String[] 155 { "pageScaleFactor", }); 156 157 v = new Vector<String>(1); 158 parameterNames.put("setScriptExecutionDisabled", v); 159 Collections.addAll(v, new String[] 160 { "value", }); 161 162 v = new Vector<String>(2); 163 parameterNames.put("setTouchEmulationEnabled", v); 164 Collections.addAll(v, new String[] 165 { "enabled", "maxTouchPoints", }); 166 167 v = new Vector<String>(5); 168 parameterNames.put("setVirtualTimePolicy", v); 169 Collections.addAll(v, new String[] 170 { "policy", "budget", "maxVirtualTimeTaskStarvationCount", "waitForNavigation", "initialVirtualTime", }); 171 172 v = new Vector<String>(1); 173 parameterNames.put("setLocaleOverride", v); 174 Collections.addAll(v, new String[] 175 { "locale", }); 176 177 v = new Vector<String>(1); 178 parameterNames.put("setTimezoneOverride", v); 179 Collections.addAll(v, new String[] 180 { "timezoneId", }); 181 182 v = new Vector<String>(2); 183 parameterNames.put("setVisibleSize", v); 184 Collections.addAll(v, new String[] 185 { "width", "height", }); 186 187 v = new Vector<String>(1); 188 parameterNames.put("setDisabledImageTypes", v); 189 Collections.addAll(v, new String[] 190 { "imageTypes", }); 191 192 v = new Vector<String>(4); 193 parameterNames.put("setUserAgentOverride", v); 194 Collections.addAll(v, new String[] 195 { "userAgent", "acceptLanguage", "platform", "userAgentMetadata", }); 196 } 197 198 199 // ******************************************************************************************** 200 // ******************************************************************************************** 201 // Types - Static Inner Classes 202 // ******************************************************************************************** 203 // ******************************************************************************************** 204 205 /** 206 * advance: If the scheduler runs out of immediate work, the virtual time base may fast forward to 207 * allow the next delayed task (if any) to run; pause: The virtual time base may not advance; 208 * pauseIfNetworkFetchesPending: The virtual time base may not advance if there are any pending 209 * resource fetches. 210 * <BR /> 211 * <BR /><B>EXPERIMENTAL</B> 212 */ 213 public static final String[] VirtualTimePolicy = 214 { "advance", "pause", "pauseIfNetworkFetchesPending", }; 215 216 /** 217 * Enum of image types that can be disabled. 218 * <BR /> 219 * <BR /><B>EXPERIMENTAL</B> 220 */ 221 public static final String[] DisabledImageType = 222 { "avif", "jxl", "webp", }; 223 224 /** Screen orientation. */ 225 public static class ScreenOrientation 226 extends BaseType 227 implements java.io.Serializable 228 { 229 /** For Object Serialization. java.io.Serializable */ 230 protected static final long serialVersionUID = 1; 231 232 public boolean[] optionals() 233 { return new boolean[] { false, false, }; } 234 235 /** Orientation type. */ 236 public final String type; 237 238 /** Orientation angle. */ 239 public final int angle; 240 241 /** 242 * Constructor 243 * 244 * @param type Orientation type. 245 * <BR />Acceptable Values: ["portraitPrimary", "portraitSecondary", "landscapePrimary", "landscapeSecondary"] 246 * 247 * @param angle Orientation angle. 248 */ 249 public ScreenOrientation(String type, int angle) 250 { 251 // Exception-Check(s) to ensure that if any parameters which are not declared as 252 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 253 254 if (type == null) BRDPC.throwNPE("type"); 255 256 // Exception-Check(s) to ensure that if any parameters which must adhere to a 257 // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw. 258 259 BRDPC.checkIAE( 260 "type", type, 261 "portraitPrimary", "portraitSecondary", "landscapePrimary", "landscapeSecondary" 262 ); 263 264 this.type = type; 265 this.angle = angle; 266 } 267 268 /** 269 * JSON Object Constructor 270 * @param jo A Json-Object having data about an instance of {@code 'ScreenOrientation'}. 271 */ 272 public ScreenOrientation (JsonObject jo) 273 { 274 this.type = ReadJSON.getString(jo, "type", false, true); 275 this.angle = ReadPrimJSON.getInt(jo, "angle"); 276 } 277 278 279 /** Checks whether {@code 'this'} equals an input Java-{@code Object} */ 280 public boolean equals(Object other) 281 { 282 if (other == null) return false; 283 if (other.getClass() != this.getClass()) return false; 284 285 ScreenOrientation o = (ScreenOrientation) other; 286 287 return 288 Objects.equals(this.type, o.type) 289 && (this.angle == o.angle); 290 } 291 292 /** Generates a Hash-Code for {@code 'this'} instance */ 293 public int hashCode() 294 { 295 return 296 Objects.hashCode(this.type) 297 + this.angle; 298 } 299 } 300 301 /** <CODE>[No Description Provided by Google]</CODE> */ 302 public static class DisplayFeature 303 extends BaseType 304 implements java.io.Serializable 305 { 306 /** For Object Serialization. java.io.Serializable */ 307 protected static final long serialVersionUID = 1; 308 309 public boolean[] optionals() 310 { return new boolean[] { false, false, false, }; } 311 312 /** Orientation of a display feature in relation to screen */ 313 public final String orientation; 314 315 /** 316 * The offset from the screen origin in either the x (for vertical 317 * orientation) or y (for horizontal orientation) direction. 318 */ 319 public final int offset; 320 321 /** 322 * A display feature may mask content such that it is not physically 323 * displayed - this length along with the offset describes this area. 324 * A display feature that only splits content will have a 0 mask_length. 325 */ 326 public final int maskLength; 327 328 /** 329 * Constructor 330 * 331 * @param orientation Orientation of a display feature in relation to screen 332 * <BR />Acceptable Values: ["vertical", "horizontal"] 333 * 334 * @param offset 335 * The offset from the screen origin in either the x (for vertical 336 * orientation) or y (for horizontal orientation) direction. 337 * 338 * @param maskLength 339 * A display feature may mask content such that it is not physically 340 * displayed - this length along with the offset describes this area. 341 * A display feature that only splits content will have a 0 mask_length. 342 */ 343 public DisplayFeature(String orientation, int offset, int maskLength) 344 { 345 // Exception-Check(s) to ensure that if any parameters which are not declared as 346 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 347 348 if (orientation == null) BRDPC.throwNPE("orientation"); 349 350 // Exception-Check(s) to ensure that if any parameters which must adhere to a 351 // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw. 352 353 BRDPC.checkIAE( 354 "orientation", orientation, 355 "vertical", "horizontal" 356 ); 357 358 this.orientation = orientation; 359 this.offset = offset; 360 this.maskLength = maskLength; 361 } 362 363 /** 364 * JSON Object Constructor 365 * @param jo A Json-Object having data about an instance of {@code 'DisplayFeature'}. 366 */ 367 public DisplayFeature (JsonObject jo) 368 { 369 this.orientation = ReadJSON.getString(jo, "orientation", false, true); 370 this.offset = ReadPrimJSON.getInt(jo, "offset"); 371 this.maskLength = ReadPrimJSON.getInt(jo, "maskLength"); 372 } 373 374 375 /** Checks whether {@code 'this'} equals an input Java-{@code Object} */ 376 public boolean equals(Object other) 377 { 378 if (other == null) return false; 379 if (other.getClass() != this.getClass()) return false; 380 381 DisplayFeature o = (DisplayFeature) other; 382 383 return 384 Objects.equals(this.orientation, o.orientation) 385 && (this.offset == o.offset) 386 && (this.maskLength == o.maskLength); 387 } 388 389 /** Generates a Hash-Code for {@code 'this'} instance */ 390 public int hashCode() 391 { 392 return 393 Objects.hashCode(this.orientation) 394 + this.offset 395 + this.maskLength; 396 } 397 } 398 399 /** <CODE>[No Description Provided by Google]</CODE> */ 400 public static class MediaFeature 401 extends BaseType 402 implements java.io.Serializable 403 { 404 /** For Object Serialization. java.io.Serializable */ 405 protected static final long serialVersionUID = 1; 406 407 public boolean[] optionals() 408 { return new boolean[] { false, false, }; } 409 410 /** <CODE>[No Description Provided by Google]</CODE> */ 411 public final String name; 412 413 /** <CODE>[No Description Provided by Google]</CODE> */ 414 public final String value; 415 416 /** 417 * Constructor 418 * 419 * @param name - 420 * 421 * @param value - 422 */ 423 public MediaFeature(String name, String value) 424 { 425 // Exception-Check(s) to ensure that if any parameters which are not declared as 426 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 427 428 if (name == null) BRDPC.throwNPE("name"); 429 if (value == null) BRDPC.throwNPE("value"); 430 431 this.name = name; 432 this.value = value; 433 } 434 435 /** 436 * JSON Object Constructor 437 * @param jo A Json-Object having data about an instance of {@code 'MediaFeature'}. 438 */ 439 public MediaFeature (JsonObject jo) 440 { 441 this.name = ReadJSON.getString(jo, "name", false, true); 442 this.value = ReadJSON.getString(jo, "value", false, true); 443 } 444 445 446 /** Checks whether {@code 'this'} equals an input Java-{@code Object} */ 447 public boolean equals(Object other) 448 { 449 if (other == null) return false; 450 if (other.getClass() != this.getClass()) return false; 451 452 MediaFeature o = (MediaFeature) other; 453 454 return 455 Objects.equals(this.name, o.name) 456 && Objects.equals(this.value, o.value); 457 } 458 459 /** Generates a Hash-Code for {@code 'this'} instance */ 460 public int hashCode() 461 { 462 return 463 Objects.hashCode(this.name) 464 + Objects.hashCode(this.value); 465 } 466 } 467 468 /** 469 * Used to specify User Agent Cient Hints to emulate. See https://wicg.github.io/ua-client-hints 470 * <BR /> 471 * <BR /><B>EXPERIMENTAL</B> 472 */ 473 public static class UserAgentBrandVersion 474 extends BaseType 475 implements java.io.Serializable 476 { 477 /** For Object Serialization. java.io.Serializable */ 478 protected static final long serialVersionUID = 1; 479 480 public boolean[] optionals() 481 { return new boolean[] { false, false, }; } 482 483 /** <CODE>[No Description Provided by Google]</CODE> */ 484 public final String brand; 485 486 /** <CODE>[No Description Provided by Google]</CODE> */ 487 public final String version; 488 489 /** 490 * Constructor 491 * 492 * @param brand - 493 * 494 * @param version - 495 */ 496 public UserAgentBrandVersion(String brand, String version) 497 { 498 // Exception-Check(s) to ensure that if any parameters which are not declared as 499 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 500 501 if (brand == null) BRDPC.throwNPE("brand"); 502 if (version == null) BRDPC.throwNPE("version"); 503 504 this.brand = brand; 505 this.version = version; 506 } 507 508 /** 509 * JSON Object Constructor 510 * @param jo A Json-Object having data about an instance of {@code 'UserAgentBrandVersion'}. 511 */ 512 public UserAgentBrandVersion (JsonObject jo) 513 { 514 this.brand = ReadJSON.getString(jo, "brand", false, true); 515 this.version = ReadJSON.getString(jo, "version", false, true); 516 } 517 518 519 /** Checks whether {@code 'this'} equals an input Java-{@code Object} */ 520 public boolean equals(Object other) 521 { 522 if (other == null) return false; 523 if (other.getClass() != this.getClass()) return false; 524 525 UserAgentBrandVersion o = (UserAgentBrandVersion) other; 526 527 return 528 Objects.equals(this.brand, o.brand) 529 && Objects.equals(this.version, o.version); 530 } 531 532 /** Generates a Hash-Code for {@code 'this'} instance */ 533 public int hashCode() 534 { 535 return 536 Objects.hashCode(this.brand) 537 + Objects.hashCode(this.version); 538 } 539 } 540 541 /** 542 * Used to specify User Agent Cient Hints to emulate. See https://wicg.github.io/ua-client-hints 543 * Missing optional values will be filled in by the target with what it would normally use. 544 * <BR /> 545 * <BR /><B>EXPERIMENTAL</B> 546 */ 547 public static class UserAgentMetadata 548 extends BaseType 549 implements java.io.Serializable 550 { 551 /** For Object Serialization. java.io.Serializable */ 552 protected static final long serialVersionUID = 1; 553 554 public boolean[] optionals() 555 { return new boolean[] { true, true, false, false, false, false, false, }; } 556 557 /** 558 * <CODE>[No Description Provided by Google]</CODE> 559 * <BR /> 560 * <BR /><B>OPTIONAL</B> 561 */ 562 public final Emulation.UserAgentBrandVersion[] brands; 563 564 /** 565 * <CODE>[No Description Provided by Google]</CODE> 566 * <BR /> 567 * <BR /><B>OPTIONAL</B> 568 */ 569 public final String fullVersion; 570 571 /** <CODE>[No Description Provided by Google]</CODE> */ 572 public final String platform; 573 574 /** <CODE>[No Description Provided by Google]</CODE> */ 575 public final String platformVersion; 576 577 /** <CODE>[No Description Provided by Google]</CODE> */ 578 public final String architecture; 579 580 /** <CODE>[No Description Provided by Google]</CODE> */ 581 public final String model; 582 583 /** <CODE>[No Description Provided by Google]</CODE> */ 584 public final boolean mobile; 585 586 /** 587 * Constructor 588 * 589 * @param brands - 590 * <BR /><B>OPTIONAL</B> 591 * 592 * @param fullVersion - 593 * <BR /><B>OPTIONAL</B> 594 * 595 * @param platform - 596 * 597 * @param platformVersion - 598 * 599 * @param architecture - 600 * 601 * @param model - 602 * 603 * @param mobile - 604 */ 605 public UserAgentMetadata( 606 Emulation.UserAgentBrandVersion[] brands, String fullVersion, String platform, 607 String platformVersion, String architecture, String model, boolean mobile 608 ) 609 { 610 // Exception-Check(s) to ensure that if any parameters which are not declared as 611 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 612 613 if (platform == null) BRDPC.throwNPE("platform"); 614 if (platformVersion == null) BRDPC.throwNPE("platformVersion"); 615 if (architecture == null) BRDPC.throwNPE("architecture"); 616 if (model == null) BRDPC.throwNPE("model"); 617 618 this.brands = brands; 619 this.fullVersion = fullVersion; 620 this.platform = platform; 621 this.platformVersion = platformVersion; 622 this.architecture = architecture; 623 this.model = model; 624 this.mobile = mobile; 625 } 626 627 /** 628 * JSON Object Constructor 629 * @param jo A Json-Object having data about an instance of {@code 'UserAgentMetadata'}. 630 */ 631 public UserAgentMetadata (JsonObject jo) 632 { 633 this.brands = (jo.getJsonArray("brands") == null) 634 ? null 635 : RJArrDimN.objArr(jo.getJsonArray("brands"), null, 0, Emulation.UserAgentBrandVersion[].class); 636 637 this.fullVersion = ReadJSON.getString(jo, "fullVersion", true, false); 638 this.platform = ReadJSON.getString(jo, "platform", false, true); 639 this.platformVersion = ReadJSON.getString(jo, "platformVersion", false, true); 640 this.architecture = ReadJSON.getString(jo, "architecture", false, true); 641 this.model = ReadJSON.getString(jo, "model", false, true); 642 this.mobile = ReadPrimJSON.getBoolean(jo, "mobile"); 643 } 644 645 646 /** Checks whether {@code 'this'} equals an input Java-{@code Object} */ 647 public boolean equals(Object other) 648 { 649 if (other == null) return false; 650 if (other.getClass() != this.getClass()) return false; 651 652 UserAgentMetadata o = (UserAgentMetadata) other; 653 654 return 655 Arrays.deepEquals(this.brands, o.brands) 656 && Objects.equals(this.fullVersion, o.fullVersion) 657 && Objects.equals(this.platform, o.platform) 658 && Objects.equals(this.platformVersion, o.platformVersion) 659 && Objects.equals(this.architecture, o.architecture) 660 && Objects.equals(this.model, o.model) 661 && (this.mobile == o.mobile); 662 } 663 664 /** Generates a Hash-Code for {@code 'this'} instance */ 665 public int hashCode() 666 { 667 return 668 Arrays.deepHashCode(this.brands) 669 + Objects.hashCode(this.fullVersion) 670 + Objects.hashCode(this.platform) 671 + Objects.hashCode(this.platformVersion) 672 + Objects.hashCode(this.architecture) 673 + Objects.hashCode(this.model) 674 + (this.mobile ? 1 : 0); 675 } 676 } 677 678 /** 679 * Notification sent after the virtual time budget for the current VirtualTimePolicy has run out. 680 * <BR /> 681 * <BR /><B>EXPERIMENTAL</B> 682 * 683 * <BR /><BR />This is Marker-Event. Marker-Event's are Events that do not posses 684 * any data, fields or state. When they are fired, only the event name is supplied. 685 */ 686 public static class virtualTimeBudgetExpired 687 extends BrowserEvent 688 implements java.io.Serializable 689 { 690 /** For Object Serialization. java.io.Serializable */ 691 protected static final long serialVersionUID = 1; 692 693 public boolean[] optionals() { return new boolean[0]; } 694 695 /** JSON Object Constructor */ 696 public virtualTimeBudgetExpired(JsonObject jo) 697 { super("Emulation", "virtualTimeBudgetExpired", 0); } 698 699 @Override 700 public String toString() { return "Emulation.virtualTimeBudgetExpired Marker Event\n"; } 701 } 702 703 704 // Counter for keeping the WebSocket Request ID's distinct. 705 private static int counter = 1; 706 707 /** 708 * Tells whether emulation is supported. 709 * 710 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 711 * Boolean></CODE> 712 * 713 * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using 714 * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE><JsonObject, 715 * Boolean></CODE> will be returned. 716 * 717 * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>, 718 * using {@link Promise#await()}, <I>and the returned result of this Browser Function may 719 * may be retrieved.</I> 720 * 721 * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B> 722 * <BR /><BR /><UL CLASS=JDUL> 723 * <LI><CODE>Boolean (<B>result</B></CODE>) 724 * <BR />True if emulation is supported. 725 * </LI> 726 * </UL> */ 727 public static Script<String, JsonObject, Boolean> canEmulate() 728 { 729 final int webSocketID = 21000000 + counter++; 730 final boolean[] optionals = new boolean[0]; 731 732 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 733 String requestJSON = WriteJSON.get( 734 parameterTypes.get("canEmulate"), 735 parameterNames.get("canEmulate"), 736 optionals, webSocketID, 737 "Emulation.canEmulate" 738 ); 739 740 // 'JSON Binding' ... Converts Browser Response-JSON to 'Boolean' 741 Function<JsonObject, Boolean> responseProcessor = (JsonObject jo) -> 742 ReadPrimJSON.getBoolean(jo, "result"); 743 744 // Pass the 'defaultSender' to Script-Constructor 745 // The sender that is used can be changed before executing script. 746 return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor); 747 } 748 749 /** 750 * Clears the overridden device metrics. 751 * 752 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 753 * {@link Ret0}></CODE> 754 * 755 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 756 * browser receives the invocation-request. 757 * 758 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 759 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 760 * {@code >} to ensure the Browser Function has run to completion. 761 */ 762 public static Script<String, JsonObject, Ret0> clearDeviceMetricsOverride() 763 { 764 final int webSocketID = 21001000 + counter++; 765 final boolean[] optionals = new boolean[0]; 766 767 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 768 String requestJSON = WriteJSON.get( 769 parameterTypes.get("clearDeviceMetricsOverride"), 770 parameterNames.get("clearDeviceMetricsOverride"), 771 optionals, webSocketID, 772 "Emulation.clearDeviceMetricsOverride" 773 ); 774 775 // This Remote Command does not have a Return-Value. 776 return new Script<> 777 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 778 } 779 780 /** 781 * Clears the overridden Geolocation Position and Error. 782 * 783 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 784 * {@link Ret0}></CODE> 785 * 786 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 787 * browser receives the invocation-request. 788 * 789 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 790 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 791 * {@code >} to ensure the Browser Function has run to completion. 792 */ 793 public static Script<String, JsonObject, Ret0> clearGeolocationOverride() 794 { 795 final int webSocketID = 21002000 + counter++; 796 final boolean[] optionals = new boolean[0]; 797 798 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 799 String requestJSON = WriteJSON.get( 800 parameterTypes.get("clearGeolocationOverride"), 801 parameterNames.get("clearGeolocationOverride"), 802 optionals, webSocketID, 803 "Emulation.clearGeolocationOverride" 804 ); 805 806 // This Remote Command does not have a Return-Value. 807 return new Script<> 808 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 809 } 810 811 /** 812 * Requests that page scale factor is reset to initial values. 813 * <BR /><B>EXPERIMENTAL</B> 814 * 815 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 816 * {@link Ret0}></CODE> 817 * 818 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 819 * browser receives the invocation-request. 820 * 821 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 822 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 823 * {@code >} to ensure the Browser Function has run to completion. 824 */ 825 public static Script<String, JsonObject, Ret0> resetPageScaleFactor() 826 { 827 final int webSocketID = 21003000 + counter++; 828 final boolean[] optionals = new boolean[0]; 829 830 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 831 String requestJSON = WriteJSON.get( 832 parameterTypes.get("resetPageScaleFactor"), 833 parameterNames.get("resetPageScaleFactor"), 834 optionals, webSocketID, 835 "Emulation.resetPageScaleFactor" 836 ); 837 838 // This Remote Command does not have a Return-Value. 839 return new Script<> 840 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 841 } 842 843 /** 844 * Enables or disables simulating a focused and active page. 845 * <BR /><B>EXPERIMENTAL</B> 846 * 847 * @param enabled Whether to enable to disable focus emulation. 848 * 849 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 850 * {@link Ret0}></CODE> 851 * 852 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 853 * browser receives the invocation-request. 854 * 855 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 856 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 857 * {@code >} to ensure the Browser Function has run to completion. 858 */ 859 public static Script<String, JsonObject, Ret0> setFocusEmulationEnabled(boolean enabled) 860 { 861 final int webSocketID = 21004000 + counter++; 862 final boolean[] optionals = { false, }; 863 864 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 865 String requestJSON = WriteJSON.get( 866 parameterTypes.get("setFocusEmulationEnabled"), 867 parameterNames.get("setFocusEmulationEnabled"), 868 optionals, webSocketID, 869 "Emulation.setFocusEmulationEnabled", 870 enabled 871 ); 872 873 // This Remote Command does not have a Return-Value. 874 return new Script<> 875 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 876 } 877 878 /** 879 * Automatically render all web contents using a dark theme. 880 * <BR /><B>EXPERIMENTAL</B> 881 * 882 * @param enabled 883 * Whether to enable or disable automatic dark mode. 884 * If not specified, any existing override will be cleared. 885 * <BR /><B>OPTIONAL</B> 886 * 887 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 888 * {@link Ret0}></CODE> 889 * 890 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 891 * browser receives the invocation-request. 892 * 893 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 894 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 895 * {@code >} to ensure the Browser Function has run to completion. 896 */ 897 public static Script<String, JsonObject, Ret0> setAutoDarkModeOverride(Boolean enabled) 898 { 899 final int webSocketID = 21005000 + counter++; 900 final boolean[] optionals = { true, }; 901 902 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 903 String requestJSON = WriteJSON.get( 904 parameterTypes.get("setAutoDarkModeOverride"), 905 parameterNames.get("setAutoDarkModeOverride"), 906 optionals, webSocketID, 907 "Emulation.setAutoDarkModeOverride", 908 enabled 909 ); 910 911 // This Remote Command does not have a Return-Value. 912 return new Script<> 913 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 914 } 915 916 /** 917 * Enables CPU throttling to emulate slow CPUs. 918 * <BR /><B>EXPERIMENTAL</B> 919 * 920 * @param rate Throttling rate as a slowdown factor (1 is no throttle, 2 is 2x slowdown, etc). 921 * 922 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 923 * {@link Ret0}></CODE> 924 * 925 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 926 * browser receives the invocation-request. 927 * 928 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 929 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 930 * {@code >} to ensure the Browser Function has run to completion. 931 */ 932 public static Script<String, JsonObject, Ret0> setCPUThrottlingRate(Number rate) 933 { 934 // Exception-Check(s) to ensure that if any parameters which are not declared as 935 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 936 937 if (rate == null) BRDPC.throwNPE("rate"); 938 939 final int webSocketID = 21006000 + counter++; 940 final boolean[] optionals = { false, }; 941 942 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 943 String requestJSON = WriteJSON.get( 944 parameterTypes.get("setCPUThrottlingRate"), 945 parameterNames.get("setCPUThrottlingRate"), 946 optionals, webSocketID, 947 "Emulation.setCPUThrottlingRate", 948 rate 949 ); 950 951 // This Remote Command does not have a Return-Value. 952 return new Script<> 953 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 954 } 955 956 /** 957 * Sets or clears an override of the default background color of the frame. This override is used 958 * if the content does not specify one. 959 * 960 * @param color 961 * RGBA of the default background color. If not specified, any existing override will be 962 * cleared. 963 * <BR /><B>OPTIONAL</B> 964 * 965 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 966 * {@link Ret0}></CODE> 967 * 968 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 969 * browser receives the invocation-request. 970 * 971 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 972 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 973 * {@code >} to ensure the Browser Function has run to completion. 974 */ 975 public static Script<String, JsonObject, Ret0> setDefaultBackgroundColorOverride 976 (DOM.RGBA color) 977 { 978 final int webSocketID = 21007000 + counter++; 979 final boolean[] optionals = { true, }; 980 981 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 982 String requestJSON = WriteJSON.get( 983 parameterTypes.get("setDefaultBackgroundColorOverride"), 984 parameterNames.get("setDefaultBackgroundColorOverride"), 985 optionals, webSocketID, 986 "Emulation.setDefaultBackgroundColorOverride", 987 color 988 ); 989 990 // This Remote Command does not have a Return-Value. 991 return new Script<> 992 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 993 } 994 995 /** 996 * Overrides the values of device screen dimensions (window.screen.width, window.screen.height, 997 * window.innerWidth, window.innerHeight, and "device-width"/"device-height"-related CSS media 998 * query results). 999 * 1000 * @param width Overriding width value in pixels (minimum 0, maximum 10000000). 0 disables the override. 1001 * 1002 * @param height Overriding height value in pixels (minimum 0, maximum 10000000). 0 disables the override. 1003 * 1004 * @param deviceScaleFactor Overriding device scale factor value. 0 disables the override. 1005 * 1006 * @param mobile 1007 * Whether to emulate mobile device. This includes viewport meta tag, overlay scrollbars, text 1008 * autosizing and more. 1009 * 1010 * @param scale Scale to apply to resulting view image. 1011 * <BR /><B>OPTIONAL</B> 1012 * <BR /><B>EXPERIMENTAL</B> 1013 * 1014 * @param screenWidth Overriding screen width value in pixels (minimum 0, maximum 10000000). 1015 * <BR /><B>OPTIONAL</B> 1016 * <BR /><B>EXPERIMENTAL</B> 1017 * 1018 * @param screenHeight Overriding screen height value in pixels (minimum 0, maximum 10000000). 1019 * <BR /><B>OPTIONAL</B> 1020 * <BR /><B>EXPERIMENTAL</B> 1021 * 1022 * @param positionX Overriding view X position on screen in pixels (minimum 0, maximum 10000000). 1023 * <BR /><B>OPTIONAL</B> 1024 * <BR /><B>EXPERIMENTAL</B> 1025 * 1026 * @param positionY Overriding view Y position on screen in pixels (minimum 0, maximum 10000000). 1027 * <BR /><B>OPTIONAL</B> 1028 * <BR /><B>EXPERIMENTAL</B> 1029 * 1030 * @param dontSetVisibleSize Do not set visible view size, rely upon explicit setVisibleSize call. 1031 * <BR /><B>OPTIONAL</B> 1032 * <BR /><B>EXPERIMENTAL</B> 1033 * 1034 * @param screenOrientation Screen orientation override. 1035 * <BR /><B>OPTIONAL</B> 1036 * 1037 * @param viewport 1038 * If set, the visible area of the page will be overridden to this viewport. This viewport 1039 * change is not observed by the page, e.g. viewport-relative elements do not change positions. 1040 * <BR /><B>OPTIONAL</B> 1041 * <BR /><B>EXPERIMENTAL</B> 1042 * 1043 * @param displayFeature 1044 * If set, the display feature of a multi-segment screen. If not set, multi-segment support 1045 * is turned-off. 1046 * <BR /><B>OPTIONAL</B> 1047 * <BR /><B>EXPERIMENTAL</B> 1048 * 1049 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1050 * {@link Ret0}></CODE> 1051 * 1052 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1053 * browser receives the invocation-request. 1054 * 1055 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1056 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1057 * {@code >} to ensure the Browser Function has run to completion. 1058 */ 1059 public static Script<String, JsonObject, Ret0> setDeviceMetricsOverride( 1060 int width, int height, Number deviceScaleFactor, boolean mobile, Number scale, 1061 Integer screenWidth, Integer screenHeight, Integer positionX, Integer positionY, 1062 Boolean dontSetVisibleSize, Emulation.ScreenOrientation screenOrientation, 1063 Page.Viewport viewport, Emulation.DisplayFeature displayFeature 1064 ) 1065 { 1066 // Exception-Check(s) to ensure that if any parameters which are not declared as 1067 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1068 1069 if (deviceScaleFactor == null) BRDPC.throwNPE("deviceScaleFactor"); 1070 1071 final int webSocketID = 21008000 + counter++; 1072 final boolean[] optionals = { false, false, false, false, true, true, true, true, true, true, true, true, true, }; 1073 1074 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1075 String requestJSON = WriteJSON.get( 1076 parameterTypes.get("setDeviceMetricsOverride"), 1077 parameterNames.get("setDeviceMetricsOverride"), 1078 optionals, webSocketID, 1079 "Emulation.setDeviceMetricsOverride", 1080 width, height, deviceScaleFactor, mobile, scale, screenWidth, screenHeight, positionX, 1081 positionY, dontSetVisibleSize, screenOrientation, viewport, displayFeature 1082 ); 1083 1084 // This Remote Command does not have a Return-Value. 1085 return new Script<> 1086 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1087 } 1088 1089 /** 1090 * <CODE>[No Description Provided by Google]</CODE> 1091 * <BR /><B>EXPERIMENTAL</B> 1092 * 1093 * @param hidden Whether scrollbars should be always hidden. 1094 * 1095 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1096 * {@link Ret0}></CODE> 1097 * 1098 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1099 * browser receives the invocation-request. 1100 * 1101 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1102 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1103 * {@code >} to ensure the Browser Function has run to completion. 1104 */ 1105 public static Script<String, JsonObject, Ret0> setScrollbarsHidden(boolean hidden) 1106 { 1107 final int webSocketID = 21009000 + counter++; 1108 final boolean[] optionals = { false, }; 1109 1110 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1111 String requestJSON = WriteJSON.get( 1112 parameterTypes.get("setScrollbarsHidden"), 1113 parameterNames.get("setScrollbarsHidden"), 1114 optionals, webSocketID, 1115 "Emulation.setScrollbarsHidden", 1116 hidden 1117 ); 1118 1119 // This Remote Command does not have a Return-Value. 1120 return new Script<> 1121 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1122 } 1123 1124 /** 1125 * <CODE>[No Description Provided by Google]</CODE> 1126 * <BR /><B>EXPERIMENTAL</B> 1127 * 1128 * @param disabled Whether document.coookie API should be disabled. 1129 * 1130 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1131 * {@link Ret0}></CODE> 1132 * 1133 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1134 * browser receives the invocation-request. 1135 * 1136 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1137 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1138 * {@code >} to ensure the Browser Function has run to completion. 1139 */ 1140 public static Script<String, JsonObject, Ret0> setDocumentCookieDisabled(boolean disabled) 1141 { 1142 final int webSocketID = 21010000 + counter++; 1143 final boolean[] optionals = { false, }; 1144 1145 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1146 String requestJSON = WriteJSON.get( 1147 parameterTypes.get("setDocumentCookieDisabled"), 1148 parameterNames.get("setDocumentCookieDisabled"), 1149 optionals, webSocketID, 1150 "Emulation.setDocumentCookieDisabled", 1151 disabled 1152 ); 1153 1154 // This Remote Command does not have a Return-Value. 1155 return new Script<> 1156 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1157 } 1158 1159 /** 1160 * <CODE>[No Description Provided by Google]</CODE> 1161 * <BR /><B>EXPERIMENTAL</B> 1162 * 1163 * @param enabled Whether touch emulation based on mouse input should be enabled. 1164 * 1165 * @param configuration Touch/gesture events configuration. Default: current platform. 1166 * <BR />Acceptable Values: ["mobile", "desktop"] 1167 * <BR /><B>OPTIONAL</B> 1168 * 1169 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1170 * {@link Ret0}></CODE> 1171 * 1172 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1173 * browser receives the invocation-request. 1174 * 1175 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1176 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1177 * {@code >} to ensure the Browser Function has run to completion. 1178 */ 1179 public static Script<String, JsonObject, Ret0> setEmitTouchEventsForMouse 1180 (boolean enabled, String configuration) 1181 { 1182 // Exception-Check(s) to ensure that if any parameters which must adhere to a 1183 // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw. 1184 1185 BRDPC.checkIAE( 1186 "configuration", configuration, 1187 "mobile", "desktop" 1188 ); 1189 1190 final int webSocketID = 21011000 + counter++; 1191 final boolean[] optionals = { false, true, }; 1192 1193 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1194 String requestJSON = WriteJSON.get( 1195 parameterTypes.get("setEmitTouchEventsForMouse"), 1196 parameterNames.get("setEmitTouchEventsForMouse"), 1197 optionals, webSocketID, 1198 "Emulation.setEmitTouchEventsForMouse", 1199 enabled, configuration 1200 ); 1201 1202 // This Remote Command does not have a Return-Value. 1203 return new Script<> 1204 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1205 } 1206 1207 /** 1208 * Emulates the given media type or media feature for CSS media queries. 1209 * 1210 * @param media Media type to emulate. Empty string disables the override. 1211 * <BR /><B>OPTIONAL</B> 1212 * 1213 * @param features Media features to emulate. 1214 * <BR /><B>OPTIONAL</B> 1215 * 1216 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1217 * {@link Ret0}></CODE> 1218 * 1219 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1220 * browser receives the invocation-request. 1221 * 1222 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1223 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1224 * {@code >} to ensure the Browser Function has run to completion. 1225 */ 1226 public static Script<String, JsonObject, Ret0> setEmulatedMedia 1227 (String media, Emulation.MediaFeature[] features) 1228 { 1229 final int webSocketID = 21012000 + counter++; 1230 final boolean[] optionals = { true, true, }; 1231 1232 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1233 String requestJSON = WriteJSON.get( 1234 parameterTypes.get("setEmulatedMedia"), 1235 parameterNames.get("setEmulatedMedia"), 1236 optionals, webSocketID, 1237 "Emulation.setEmulatedMedia", 1238 media, features 1239 ); 1240 1241 // This Remote Command does not have a Return-Value. 1242 return new Script<> 1243 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1244 } 1245 1246 /** 1247 * Emulates the given vision deficiency. 1248 * <BR /><B>EXPERIMENTAL</B> 1249 * 1250 * @param type Vision deficiency to emulate. 1251 * <BR />Acceptable Values: ["none", "achromatopsia", "blurredVision", "deuteranopia", "protanopia", "tritanopia"] 1252 * 1253 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1254 * {@link Ret0}></CODE> 1255 * 1256 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1257 * browser receives the invocation-request. 1258 * 1259 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1260 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1261 * {@code >} to ensure the Browser Function has run to completion. 1262 */ 1263 public static Script<String, JsonObject, Ret0> setEmulatedVisionDeficiency(String type) 1264 { 1265 // Exception-Check(s) to ensure that if any parameters which are not declared as 1266 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1267 1268 if (type == null) BRDPC.throwNPE("type"); 1269 1270 // Exception-Check(s) to ensure that if any parameters which must adhere to a 1271 // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw. 1272 1273 BRDPC.checkIAE( 1274 "type", type, 1275 "none", "achromatopsia", "blurredVision", "deuteranopia", "protanopia", "tritanopia" 1276 ); 1277 1278 final int webSocketID = 21013000 + counter++; 1279 final boolean[] optionals = { false, }; 1280 1281 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1282 String requestJSON = WriteJSON.get( 1283 parameterTypes.get("setEmulatedVisionDeficiency"), 1284 parameterNames.get("setEmulatedVisionDeficiency"), 1285 optionals, webSocketID, 1286 "Emulation.setEmulatedVisionDeficiency", 1287 type 1288 ); 1289 1290 // This Remote Command does not have a Return-Value. 1291 return new Script<> 1292 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1293 } 1294 1295 /** 1296 * Overrides the Geolocation Position or Error. Omitting any of the parameters emulates position 1297 * unavailable. 1298 * 1299 * @param latitude Mock latitude 1300 * <BR /><B>OPTIONAL</B> 1301 * 1302 * @param longitude Mock longitude 1303 * <BR /><B>OPTIONAL</B> 1304 * 1305 * @param accuracy Mock accuracy 1306 * <BR /><B>OPTIONAL</B> 1307 * 1308 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1309 * {@link Ret0}></CODE> 1310 * 1311 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1312 * browser receives the invocation-request. 1313 * 1314 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1315 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1316 * {@code >} to ensure the Browser Function has run to completion. 1317 */ 1318 public static Script<String, JsonObject, Ret0> setGeolocationOverride 1319 (Number latitude, Number longitude, Number accuracy) 1320 { 1321 final int webSocketID = 21014000 + counter++; 1322 final boolean[] optionals = { true, true, true, }; 1323 1324 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1325 String requestJSON = WriteJSON.get( 1326 parameterTypes.get("setGeolocationOverride"), 1327 parameterNames.get("setGeolocationOverride"), 1328 optionals, webSocketID, 1329 "Emulation.setGeolocationOverride", 1330 latitude, longitude, accuracy 1331 ); 1332 1333 // This Remote Command does not have a Return-Value. 1334 return new Script<> 1335 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1336 } 1337 1338 /** 1339 * Overrides the Idle state. 1340 * <BR /><B>EXPERIMENTAL</B> 1341 * 1342 * @param isUserActive Mock isUserActive 1343 * 1344 * @param isScreenUnlocked Mock isScreenUnlocked 1345 * 1346 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1347 * {@link Ret0}></CODE> 1348 * 1349 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1350 * browser receives the invocation-request. 1351 * 1352 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1353 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1354 * {@code >} to ensure the Browser Function has run to completion. 1355 */ 1356 public static Script<String, JsonObject, Ret0> setIdleOverride 1357 (boolean isUserActive, boolean isScreenUnlocked) 1358 { 1359 final int webSocketID = 21015000 + counter++; 1360 final boolean[] optionals = { false, false, }; 1361 1362 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1363 String requestJSON = WriteJSON.get( 1364 parameterTypes.get("setIdleOverride"), 1365 parameterNames.get("setIdleOverride"), 1366 optionals, webSocketID, 1367 "Emulation.setIdleOverride", 1368 isUserActive, isScreenUnlocked 1369 ); 1370 1371 // This Remote Command does not have a Return-Value. 1372 return new Script<> 1373 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1374 } 1375 1376 /** 1377 * Clears Idle state overrides. 1378 * <BR /><B>EXPERIMENTAL</B> 1379 * 1380 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1381 * {@link Ret0}></CODE> 1382 * 1383 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1384 * browser receives the invocation-request. 1385 * 1386 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1387 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1388 * {@code >} to ensure the Browser Function has run to completion. 1389 */ 1390 public static Script<String, JsonObject, Ret0> clearIdleOverride() 1391 { 1392 final int webSocketID = 21016000 + counter++; 1393 final boolean[] optionals = new boolean[0]; 1394 1395 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1396 String requestJSON = WriteJSON.get( 1397 parameterTypes.get("clearIdleOverride"), 1398 parameterNames.get("clearIdleOverride"), 1399 optionals, webSocketID, 1400 "Emulation.clearIdleOverride" 1401 ); 1402 1403 // This Remote Command does not have a Return-Value. 1404 return new Script<> 1405 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1406 } 1407 1408 /** 1409 * Overrides value returned by the javascript navigator object. 1410 * <BR /><B>EXPERIMENTAL</B> 1411 * <BR /><B>DEPRECATED</B> 1412 * 1413 * @param platform The platform navigator.platform should return. 1414 * 1415 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1416 * {@link Ret0}></CODE> 1417 * 1418 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1419 * browser receives the invocation-request. 1420 * 1421 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1422 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1423 * {@code >} to ensure the Browser Function has run to completion. 1424 */ 1425 public static Script<String, JsonObject, Ret0> setNavigatorOverrides(String platform) 1426 { 1427 // Exception-Check(s) to ensure that if any parameters which are not declared as 1428 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1429 1430 if (platform == null) BRDPC.throwNPE("platform"); 1431 1432 final int webSocketID = 21017000 + counter++; 1433 final boolean[] optionals = { false, }; 1434 1435 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1436 String requestJSON = WriteJSON.get( 1437 parameterTypes.get("setNavigatorOverrides"), 1438 parameterNames.get("setNavigatorOverrides"), 1439 optionals, webSocketID, 1440 "Emulation.setNavigatorOverrides", 1441 platform 1442 ); 1443 1444 // This Remote Command does not have a Return-Value. 1445 return new Script<> 1446 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1447 } 1448 1449 /** 1450 * Sets a specified page scale factor. 1451 * <BR /><B>EXPERIMENTAL</B> 1452 * 1453 * @param pageScaleFactor Page scale factor. 1454 * 1455 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1456 * {@link Ret0}></CODE> 1457 * 1458 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1459 * browser receives the invocation-request. 1460 * 1461 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1462 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1463 * {@code >} to ensure the Browser Function has run to completion. 1464 */ 1465 public static Script<String, JsonObject, Ret0> setPageScaleFactor(Number pageScaleFactor) 1466 { 1467 // Exception-Check(s) to ensure that if any parameters which are not declared as 1468 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1469 1470 if (pageScaleFactor == null) BRDPC.throwNPE("pageScaleFactor"); 1471 1472 final int webSocketID = 21018000 + counter++; 1473 final boolean[] optionals = { false, }; 1474 1475 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1476 String requestJSON = WriteJSON.get( 1477 parameterTypes.get("setPageScaleFactor"), 1478 parameterNames.get("setPageScaleFactor"), 1479 optionals, webSocketID, 1480 "Emulation.setPageScaleFactor", 1481 pageScaleFactor 1482 ); 1483 1484 // This Remote Command does not have a Return-Value. 1485 return new Script<> 1486 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1487 } 1488 1489 /** 1490 * Switches script execution in the page. 1491 * 1492 * @param value Whether script execution should be disabled in the page. 1493 * 1494 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1495 * {@link Ret0}></CODE> 1496 * 1497 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1498 * browser receives the invocation-request. 1499 * 1500 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1501 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1502 * {@code >} to ensure the Browser Function has run to completion. 1503 */ 1504 public static Script<String, JsonObject, Ret0> setScriptExecutionDisabled(boolean value) 1505 { 1506 final int webSocketID = 21019000 + counter++; 1507 final boolean[] optionals = { false, }; 1508 1509 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1510 String requestJSON = WriteJSON.get( 1511 parameterTypes.get("setScriptExecutionDisabled"), 1512 parameterNames.get("setScriptExecutionDisabled"), 1513 optionals, webSocketID, 1514 "Emulation.setScriptExecutionDisabled", 1515 value 1516 ); 1517 1518 // This Remote Command does not have a Return-Value. 1519 return new Script<> 1520 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1521 } 1522 1523 /** 1524 * Enables touch on platforms which do not support them. 1525 * 1526 * @param enabled Whether the touch event emulation should be enabled. 1527 * 1528 * @param maxTouchPoints Maximum touch points supported. Defaults to one. 1529 * <BR /><B>OPTIONAL</B> 1530 * 1531 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1532 * {@link Ret0}></CODE> 1533 * 1534 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1535 * browser receives the invocation-request. 1536 * 1537 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1538 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1539 * {@code >} to ensure the Browser Function has run to completion. 1540 */ 1541 public static Script<String, JsonObject, Ret0> setTouchEmulationEnabled 1542 (boolean enabled, Integer maxTouchPoints) 1543 { 1544 final int webSocketID = 21020000 + counter++; 1545 final boolean[] optionals = { false, true, }; 1546 1547 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1548 String requestJSON = WriteJSON.get( 1549 parameterTypes.get("setTouchEmulationEnabled"), 1550 parameterNames.get("setTouchEmulationEnabled"), 1551 optionals, webSocketID, 1552 "Emulation.setTouchEmulationEnabled", 1553 enabled, maxTouchPoints 1554 ); 1555 1556 // This Remote Command does not have a Return-Value. 1557 return new Script<> 1558 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1559 } 1560 1561 /** 1562 * Turns on virtual time for all frames (replacing real-time with a synthetic time source) and sets 1563 * the current virtual time policy. Note this supersedes any previous time budget. 1564 * <BR /><B>EXPERIMENTAL</B> 1565 * 1566 * @param policy - 1567 * 1568 * @param budget 1569 * If set, after this many virtual milliseconds have elapsed virtual time will be paused and a 1570 * virtualTimeBudgetExpired event is sent. 1571 * <BR /><B>OPTIONAL</B> 1572 * 1573 * @param maxVirtualTimeTaskStarvationCount 1574 * If set this specifies the maximum number of tasks that can be run before virtual is forced 1575 * forwards to prevent deadlock. 1576 * <BR /><B>OPTIONAL</B> 1577 * 1578 * @param waitForNavigation 1579 * If set the virtual time policy change should be deferred until any frame starts navigating. 1580 * Note any previous deferred policy change is superseded. 1581 * <BR /><B>OPTIONAL</B> 1582 * 1583 * @param initialVirtualTime If set, base::Time::Now will be overridden to initially return this value. 1584 * <BR /><B>OPTIONAL</B> 1585 * 1586 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1587 * Number></CODE> 1588 * 1589 * <BR /><BR />This <B>script</B> may be <B STYLE='color: red'>executed</B>, using 1590 * {@link Script#exec()}, and afterwards, a {@link Promise}<CODE><JsonObject, 1591 * Number></CODE> will be returned. 1592 * 1593 * <BR /><BR />Finally, the <B>{@code Promise}</B> may be <B STYLE='color: red'>awaited</B>, 1594 * using {@link Promise#await()}, <I>and the returned result of this Browser Function may 1595 * may be retrieved.</I> 1596 * 1597 * <BR /><BR />This Browser Function <B STYLE='color: red'>returns</B> 1598 * <BR /><BR /><UL CLASS=JDUL> 1599 * <LI><CODE>Number (<B>virtualTimeTicksBase</B></CODE>) 1600 * <BR />Absolute timestamp at which virtual time was first enabled (up time in milliseconds). 1601 * </LI> 1602 * </UL> */ 1603 public static Script<String, JsonObject, Number> setVirtualTimePolicy( 1604 String policy, Number budget, Integer maxVirtualTimeTaskStarvationCount, 1605 Boolean waitForNavigation, Number initialVirtualTime 1606 ) 1607 { 1608 // Exception-Check(s) to ensure that if any parameters which are not declared as 1609 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1610 1611 if (policy == null) BRDPC.throwNPE("policy"); 1612 1613 // Exception-Check(s) to ensure that if any parameters which must adhere to a 1614 // provided List of Enumerated Values, fails, then IllegalArgumentException shall throw. 1615 1616 BRDPC.checkIAE("policy", policy, "Emulation.VirtualTimePolicy", Emulation.VirtualTimePolicy); 1617 1618 final int webSocketID = 21021000 + counter++; 1619 final boolean[] optionals = { false, true, true, true, true, }; 1620 1621 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1622 String requestJSON = WriteJSON.get( 1623 parameterTypes.get("setVirtualTimePolicy"), 1624 parameterNames.get("setVirtualTimePolicy"), 1625 optionals, webSocketID, 1626 "Emulation.setVirtualTimePolicy", 1627 policy, budget, maxVirtualTimeTaskStarvationCount, waitForNavigation, initialVirtualTime 1628 ); 1629 1630 // 'JSON Binding' ... Converts Browser Response-JSON to 'Number' 1631 Function<JsonObject, Number> responseProcessor = (JsonObject jo) -> 1632 ReadNumberJSON.get(jo, "virtualTimeTicksBase", false, true); 1633 1634 // Pass the 'defaultSender' to Script-Constructor 1635 // The sender that is used can be changed before executing script. 1636 return new Script<>(BRDPC.defaultSender, webSocketID, requestJSON, responseProcessor); 1637 } 1638 1639 /** 1640 * Overrides default host system locale with the specified one. 1641 * <BR /><B>EXPERIMENTAL</B> 1642 * 1643 * @param locale 1644 * ICU style C locale (e.g. "en_US"). If not specified or empty, disables the override and 1645 * restores default host system locale. 1646 * <BR /><B>OPTIONAL</B> 1647 * 1648 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1649 * {@link Ret0}></CODE> 1650 * 1651 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1652 * browser receives the invocation-request. 1653 * 1654 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1655 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1656 * {@code >} to ensure the Browser Function has run to completion. 1657 */ 1658 public static Script<String, JsonObject, Ret0> setLocaleOverride(String locale) 1659 { 1660 final int webSocketID = 21022000 + counter++; 1661 final boolean[] optionals = { true, }; 1662 1663 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1664 String requestJSON = WriteJSON.get( 1665 parameterTypes.get("setLocaleOverride"), 1666 parameterNames.get("setLocaleOverride"), 1667 optionals, webSocketID, 1668 "Emulation.setLocaleOverride", 1669 locale 1670 ); 1671 1672 // This Remote Command does not have a Return-Value. 1673 return new Script<> 1674 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1675 } 1676 1677 /** 1678 * Overrides default host system timezone with the specified one. 1679 * <BR /><B>EXPERIMENTAL</B> 1680 * 1681 * @param timezoneId 1682 * The timezone identifier. If empty, disables the override and 1683 * restores default host system timezone. 1684 * 1685 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1686 * {@link Ret0}></CODE> 1687 * 1688 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1689 * browser receives the invocation-request. 1690 * 1691 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1692 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1693 * {@code >} to ensure the Browser Function has run to completion. 1694 */ 1695 public static Script<String, JsonObject, Ret0> setTimezoneOverride(String timezoneId) 1696 { 1697 // Exception-Check(s) to ensure that if any parameters which are not declared as 1698 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1699 1700 if (timezoneId == null) BRDPC.throwNPE("timezoneId"); 1701 1702 final int webSocketID = 21023000 + counter++; 1703 final boolean[] optionals = { false, }; 1704 1705 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1706 String requestJSON = WriteJSON.get( 1707 parameterTypes.get("setTimezoneOverride"), 1708 parameterNames.get("setTimezoneOverride"), 1709 optionals, webSocketID, 1710 "Emulation.setTimezoneOverride", 1711 timezoneId 1712 ); 1713 1714 // This Remote Command does not have a Return-Value. 1715 return new Script<> 1716 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1717 } 1718 1719 /** 1720 * Resizes the frame/viewport of the page. Note that this does not affect the frame's container 1721 * (e.g. browser window). Can be used to produce screenshots of the specified size. Not supported 1722 * on Android. 1723 * <BR /><B>EXPERIMENTAL</B> 1724 * <BR /><B>DEPRECATED</B> 1725 * 1726 * @param width Frame width (DIP). 1727 * 1728 * @param height Frame height (DIP). 1729 * 1730 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1731 * {@link Ret0}></CODE> 1732 * 1733 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1734 * browser receives the invocation-request. 1735 * 1736 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1737 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1738 * {@code >} to ensure the Browser Function has run to completion. 1739 */ 1740 public static Script<String, JsonObject, Ret0> setVisibleSize(int width, int height) 1741 { 1742 final int webSocketID = 21024000 + counter++; 1743 final boolean[] optionals = { false, false, }; 1744 1745 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1746 String requestJSON = WriteJSON.get( 1747 parameterTypes.get("setVisibleSize"), 1748 parameterNames.get("setVisibleSize"), 1749 optionals, webSocketID, 1750 "Emulation.setVisibleSize", 1751 width, height 1752 ); 1753 1754 // This Remote Command does not have a Return-Value. 1755 return new Script<> 1756 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1757 } 1758 1759 /** 1760 * <CODE>[No Description Provided by Google]</CODE> 1761 * <BR /><B>EXPERIMENTAL</B> 1762 * 1763 * @param imageTypes Image types to disable. 1764 * 1765 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1766 * {@link Ret0}></CODE> 1767 * 1768 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1769 * browser receives the invocation-request. 1770 * 1771 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1772 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1773 * {@code >} to ensure the Browser Function has run to completion. 1774 */ 1775 public static Script<String, JsonObject, Ret0> setDisabledImageTypes(String[] imageTypes) 1776 { 1777 // Exception-Check(s) to ensure that if any parameters which are not declared as 1778 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1779 1780 if (imageTypes == null) BRDPC.throwNPE("imageTypes"); 1781 1782 final int webSocketID = 21025000 + counter++; 1783 final boolean[] optionals = { false, }; 1784 1785 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1786 String requestJSON = WriteJSON.get( 1787 parameterTypes.get("setDisabledImageTypes"), 1788 parameterNames.get("setDisabledImageTypes"), 1789 optionals, webSocketID, 1790 "Emulation.setDisabledImageTypes", 1791 (Object) imageTypes 1792 ); 1793 1794 // This Remote Command does not have a Return-Value. 1795 return new Script<> 1796 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1797 } 1798 1799 /** 1800 * Allows overriding user agent with the given string. 1801 * 1802 * @param userAgent User agent to use. 1803 * 1804 * @param acceptLanguage Browser langugage to emulate. 1805 * <BR /><B>OPTIONAL</B> 1806 * 1807 * @param platform The platform navigator.platform should return. 1808 * <BR /><B>OPTIONAL</B> 1809 * 1810 * @param userAgentMetadata To be sent in Sec-CH-UA-* headers and returned in navigator.userAgentData 1811 * <BR /><B>OPTIONAL</B> 1812 * <BR /><B>EXPERIMENTAL</B> 1813 * 1814 * @return An instance of <CODE>{@link Script}<String, {@link JsonObject}, 1815 * {@link Ret0}></CODE> 1816 * 1817 * <BR /><BR />This {@code Script} instance must be <B STYLE='color:red'>executed</B> before the 1818 * browser receives the invocation-request. 1819 * 1820 * <BR /><BR />This Browser-Function <I>does not have</I> a return-value. You may choose to 1821 * <B STYLE='color: red'>await</B> the {@link Promise}{@code <JsonObject,} {@link Ret0} 1822 * {@code >} to ensure the Browser Function has run to completion. 1823 */ 1824 public static Script<String, JsonObject, Ret0> setUserAgentOverride( 1825 String userAgent, String acceptLanguage, String platform, 1826 Emulation.UserAgentMetadata userAgentMetadata 1827 ) 1828 { 1829 // Exception-Check(s) to ensure that if any parameters which are not declared as 1830 // 'Optional', but have a 'null' value anyway, that a NullPointerException shall throw. 1831 1832 if (userAgent == null) BRDPC.throwNPE("userAgent"); 1833 1834 final int webSocketID = 21026000 + counter++; 1835 final boolean[] optionals = { false, true, true, true, }; 1836 1837 // Convert Method Parameters into JSON. Build the JSON Request-Object (as a String) 1838 String requestJSON = WriteJSON.get( 1839 parameterTypes.get("setUserAgentOverride"), 1840 parameterNames.get("setUserAgentOverride"), 1841 optionals, webSocketID, 1842 "Emulation.setUserAgentOverride", 1843 userAgent, acceptLanguage, platform, userAgentMetadata 1844 ); 1845 1846 // This Remote Command does not have a Return-Value. 1847 return new Script<> 1848 (BRDPC.defaultSender, webSocketID, requestJSON, BRDPC.NoReturnValues); 1849 } 1850 1851}