xref: /plugin/combo/vendor/php-webdriver/webdriver/lib/WebDriverDispatcher.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace Facebook\WebDriver;
4*04fd306cSNickeau
5*04fd306cSNickeauuse Facebook\WebDriver\Support\Events\EventFiringWebDriver;
6*04fd306cSNickeau
7*04fd306cSNickeauclass WebDriverDispatcher
8*04fd306cSNickeau{
9*04fd306cSNickeau    /**
10*04fd306cSNickeau     * @var array
11*04fd306cSNickeau     */
12*04fd306cSNickeau    protected $listeners = [];
13*04fd306cSNickeau    /**
14*04fd306cSNickeau     * @var EventFiringWebDriver
15*04fd306cSNickeau     */
16*04fd306cSNickeau    protected $driver;
17*04fd306cSNickeau
18*04fd306cSNickeau    /**
19*04fd306cSNickeau     * this is needed so that EventFiringWebElement can pass the driver to the
20*04fd306cSNickeau     * exception handling
21*04fd306cSNickeau     *
22*04fd306cSNickeau     * @param EventFiringWebDriver $driver
23*04fd306cSNickeau     * @return $this
24*04fd306cSNickeau     */
25*04fd306cSNickeau    public function setDefaultDriver(EventFiringWebDriver $driver)
26*04fd306cSNickeau    {
27*04fd306cSNickeau        $this->driver = $driver;
28*04fd306cSNickeau
29*04fd306cSNickeau        return $this;
30*04fd306cSNickeau    }
31*04fd306cSNickeau
32*04fd306cSNickeau    /**
33*04fd306cSNickeau     * @return null|EventFiringWebDriver
34*04fd306cSNickeau     */
35*04fd306cSNickeau    public function getDefaultDriver()
36*04fd306cSNickeau    {
37*04fd306cSNickeau        return $this->driver;
38*04fd306cSNickeau    }
39*04fd306cSNickeau
40*04fd306cSNickeau    /**
41*04fd306cSNickeau     * @param WebDriverEventListener $listener
42*04fd306cSNickeau     * @return $this
43*04fd306cSNickeau     */
44*04fd306cSNickeau    public function register(WebDriverEventListener $listener)
45*04fd306cSNickeau    {
46*04fd306cSNickeau        $this->listeners[] = $listener;
47*04fd306cSNickeau
48*04fd306cSNickeau        return $this;
49*04fd306cSNickeau    }
50*04fd306cSNickeau
51*04fd306cSNickeau    /**
52*04fd306cSNickeau     * @param WebDriverEventListener $listener
53*04fd306cSNickeau     * @return $this
54*04fd306cSNickeau     */
55*04fd306cSNickeau    public function unregister(WebDriverEventListener $listener)
56*04fd306cSNickeau    {
57*04fd306cSNickeau        $key = array_search($listener, $this->listeners, true);
58*04fd306cSNickeau        if ($key !== false) {
59*04fd306cSNickeau            unset($this->listeners[$key]);
60*04fd306cSNickeau        }
61*04fd306cSNickeau
62*04fd306cSNickeau        return $this;
63*04fd306cSNickeau    }
64*04fd306cSNickeau
65*04fd306cSNickeau    /**
66*04fd306cSNickeau     * @param mixed $method
67*04fd306cSNickeau     * @param mixed $arguments
68*04fd306cSNickeau     * @return $this
69*04fd306cSNickeau     */
70*04fd306cSNickeau    public function dispatch($method, $arguments)
71*04fd306cSNickeau    {
72*04fd306cSNickeau        foreach ($this->listeners as $listener) {
73*04fd306cSNickeau            call_user_func_array([$listener, $method], $arguments);
74*04fd306cSNickeau        }
75*04fd306cSNickeau
76*04fd306cSNickeau        return $this;
77*04fd306cSNickeau    }
78*04fd306cSNickeau}
79