xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/Firefox/FirefoxOptions.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace Facebook\WebDriver\Firefox;
4*04fd306cSNickeau
5*04fd306cSNickeauuse ReturnTypeWillChange;
6*04fd306cSNickeau
7*04fd306cSNickeau/**
8*04fd306cSNickeau * Class to manage Firefox-specific capabilities
9*04fd306cSNickeau *
10*04fd306cSNickeau * @see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions
11*04fd306cSNickeau */
12*04fd306cSNickeauclass FirefoxOptions implements \JsonSerializable
13*04fd306cSNickeau{
14*04fd306cSNickeau    /** @var string The key of FirefoxOptions in desired capabilities */
15*04fd306cSNickeau    const CAPABILITY = 'moz:firefoxOptions';
16*04fd306cSNickeau    /** @var string */
17*04fd306cSNickeau    const OPTION_ARGS = 'args';
18*04fd306cSNickeau    /** @var string */
19*04fd306cSNickeau    const OPTION_PREFS = 'prefs';
20*04fd306cSNickeau
21*04fd306cSNickeau    /** @var array */
22*04fd306cSNickeau    private $options = [];
23*04fd306cSNickeau    /** @var array */
24*04fd306cSNickeau    private $arguments = [];
25*04fd306cSNickeau    /** @var array */
26*04fd306cSNickeau    private $preferences = [];
27*04fd306cSNickeau
28*04fd306cSNickeau    public function __construct()
29*04fd306cSNickeau    {
30*04fd306cSNickeau        // Set default preferences:
31*04fd306cSNickeau        // disable the "Reader View" help tooltip, which can hide elements in the window.document
32*04fd306cSNickeau        $this->setPreference(FirefoxPreferences::READER_PARSE_ON_LOAD_ENABLED, false);
33*04fd306cSNickeau        // disable JSON viewer and let JSON be rendered as raw data
34*04fd306cSNickeau        $this->setPreference(FirefoxPreferences::DEVTOOLS_JSONVIEW, false);
35*04fd306cSNickeau    }
36*04fd306cSNickeau
37*04fd306cSNickeau    /**
38*04fd306cSNickeau     * Directly set firefoxOptions.
39*04fd306cSNickeau     * Use `addArguments` to add command line arguments and `setPreference` to set Firefox about:config entry.
40*04fd306cSNickeau     *
41*04fd306cSNickeau     * @param string $name
42*04fd306cSNickeau     * @param mixed $value
43*04fd306cSNickeau     * @return self
44*04fd306cSNickeau     */
45*04fd306cSNickeau    public function setOption($name, $value)
46*04fd306cSNickeau    {
47*04fd306cSNickeau        if ($name === self::OPTION_PREFS) {
48*04fd306cSNickeau            throw new \InvalidArgumentException('Use setPreference() method to set Firefox preferences');
49*04fd306cSNickeau        }
50*04fd306cSNickeau        if ($name === self::OPTION_ARGS) {
51*04fd306cSNickeau            throw new \InvalidArgumentException('Use addArguments() method to add Firefox arguments');
52*04fd306cSNickeau        }
53*04fd306cSNickeau
54*04fd306cSNickeau        $this->options[$name] = $value;
55*04fd306cSNickeau
56*04fd306cSNickeau        return $this;
57*04fd306cSNickeau    }
58*04fd306cSNickeau
59*04fd306cSNickeau    /**
60*04fd306cSNickeau     * Command line arguments to pass to the Firefox binary.
61*04fd306cSNickeau     * These must include the leading dash (-) where required, e.g. ['-headless'].
62*04fd306cSNickeau     *
63*04fd306cSNickeau     * @see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions#args
64*04fd306cSNickeau     * @param string[] $arguments
65*04fd306cSNickeau     * @return self
66*04fd306cSNickeau     */
67*04fd306cSNickeau    public function addArguments(array $arguments)
68*04fd306cSNickeau    {
69*04fd306cSNickeau        $this->arguments = array_merge($this->arguments, $arguments);
70*04fd306cSNickeau
71*04fd306cSNickeau        return $this;
72*04fd306cSNickeau    }
73*04fd306cSNickeau
74*04fd306cSNickeau    /**
75*04fd306cSNickeau     * Set Firefox preference (about:config entry).
76*04fd306cSNickeau     *
77*04fd306cSNickeau     * @see http://kb.mozillazine.org/About:config_entries
78*04fd306cSNickeau     * @see https://developer.mozilla.org/en-US/docs/Web/WebDriver/Capabilities/firefoxOptions#prefs
79*04fd306cSNickeau     * @param string $name
80*04fd306cSNickeau     * @param string|bool|int $value
81*04fd306cSNickeau     * @return self
82*04fd306cSNickeau     */
83*04fd306cSNickeau    public function setPreference($name, $value)
84*04fd306cSNickeau    {
85*04fd306cSNickeau        $this->preferences[$name] = $value;
86*04fd306cSNickeau
87*04fd306cSNickeau        return $this;
88*04fd306cSNickeau    }
89*04fd306cSNickeau
90*04fd306cSNickeau    /**
91*04fd306cSNickeau     * @return array
92*04fd306cSNickeau     */
93*04fd306cSNickeau    public function toArray()
94*04fd306cSNickeau    {
95*04fd306cSNickeau        $array = $this->options;
96*04fd306cSNickeau        if (!empty($this->arguments)) {
97*04fd306cSNickeau            $array[self::OPTION_ARGS] = $this->arguments;
98*04fd306cSNickeau        }
99*04fd306cSNickeau        if (!empty($this->preferences)) {
100*04fd306cSNickeau            $array[self::OPTION_PREFS] = $this->preferences;
101*04fd306cSNickeau        }
102*04fd306cSNickeau
103*04fd306cSNickeau        return $array;
104*04fd306cSNickeau    }
105*04fd306cSNickeau
106*04fd306cSNickeau    #[ReturnTypeWillChange]
107*04fd306cSNickeau    public function jsonSerialize()
108*04fd306cSNickeau    {
109*04fd306cSNickeau        return new \ArrayObject($this->toArray());
110*04fd306cSNickeau    }
111*04fd306cSNickeau}
112