83bef53d4c6115ed56d96716fa78f47e751c3936
[WebKit-https.git] / Source / WebCore / Modules / modern-media-controls / media / media-controller.js
1 /*
2  * Copyright (C) 2016 Apple Inc. All Rights Reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 class MediaController
27 {
28
29     constructor(shadowRoot, media, host)
30     {
31         this.shadowRoot = shadowRoot;
32         this.media = media;
33         this.host = host;
34
35         // FIXME: This should get set dynamically based on the current environment.
36         this.layoutTraits = LayoutTraits.macOS;
37
38         this.controls = new MacOSInlineMediaControls
39         shadowRoot.appendChild(this.controls.element);        
40
41         new AirplaySupport(this);
42         new ElapsedTimeSupport(this);
43         new FullscreenSupport(this);
44         new MuteSupport(this);
45         new PiPSupport(this);
46         new PlacardSupport(this);
47         new PlaybackSupport(this);
48         new RemainingTimeSupport(this);
49         new ScrubbingSupport(this);
50         new SkipBackSupport(this);
51         new StartSupport(this);
52         new StatusSupport(this);
53         new VolumeSupport(this);
54
55         this._updateControlsSize();
56         media.addEventListener("resize", this);
57     }
58
59     // Protected
60
61     set pageScaleFactor(pageScaleFactor)
62     {
63         // FIXME: To be implemented.
64     }
65
66     set usesLTRUserInterfaceLayoutDirection(flag)
67     {
68         // FIXME: To be implemented.
69     }
70
71     handleEvent(event)
72     {
73         if (event.type === "resize" && event.currentTarget === this.media)
74             this._updateControlsSize();
75     }
76
77     // Private
78
79     _updateControlsSize()
80     {
81         this.controls.width = this.media.offsetWidth;
82         this.controls.height = this.media.offsetHeight;
83     }
84
85 }