Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / Source / core / html / shadow / MediaControls.h
1 /*
2  * Copyright (C) 2011, 2012 Apple Inc. All rights reserved.
3  * Copyright (C) 2011, 2012 Google Inc. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25  */
26
27 #ifndef MediaControls_h
28 #define MediaControls_h
29
30 #include "core/html/HTMLDivElement.h"
31 #include "core/html/shadow/MediaControlElements.h"
32
33 namespace blink {
34
35 class Document;
36 class Event;
37
38 class MediaControls FINAL : public HTMLDivElement {
39 public:
40     static PassRefPtrWillBeRawPtr<MediaControls> create(HTMLMediaElement&);
41
42     HTMLMediaElement& mediaElement() const { return *m_mediaElement; }
43
44     void reset();
45
46     void show();
47     void hide();
48
49     void playbackStarted();
50     void playbackProgressed();
51     void playbackStopped();
52
53     void beginScrubbing();
54     void endScrubbing();
55
56     void updateCurrentTimeDisplay();
57
58     void updateVolume();
59
60     void changedClosedCaptionsVisibility();
61     void refreshClosedCaptionsButtonVisibility();
62     void closedCaptionTracksChanged();
63
64     void enteredFullscreen();
65     void exitedFullscreen();
66
67     void updateTextTrackDisplay();
68
69     void mediaElementFocused();
70
71     virtual void trace(Visitor*) OVERRIDE;
72
73 private:
74     explicit MediaControls(HTMLMediaElement&);
75
76     bool initializeControls();
77
78     void makeOpaque();
79     void makeTransparent();
80
81     void updatePlayState();
82
83     enum HideBehaviorFlags {
84         IgnoreVideoHover = 1 << 0,
85         IgnoreFocus = 1 << 1
86     };
87
88     bool shouldHideMediaControls(unsigned behaviorFlags = 0) const;
89     void hideMediaControlsTimerFired(Timer<MediaControls>*);
90     void startHideMediaControlsTimer();
91     void stopHideMediaControlsTimer();
92
93     void createTextTrackDisplay();
94     void showTextTrackDisplay();
95     void hideTextTrackDisplay();
96
97     // Node
98     virtual bool isMediaControls() const OVERRIDE { return true; }
99     virtual bool willRespondToMouseMoveEvents() OVERRIDE { return true; }
100     virtual void defaultEventHandler(Event*) OVERRIDE;
101     bool containsRelatedTarget(Event*);
102
103     // Element
104     virtual const AtomicString& shadowPseudoId() const OVERRIDE;
105
106     RawPtrWillBeMember<HTMLMediaElement> m_mediaElement;
107
108     // Container for the media control elements.
109     RawPtrWillBeMember<MediaControlPanelElement> m_panel;
110
111     // Container for the text track cues.
112     RawPtrWillBeMember<MediaControlTextTrackContainerElement> m_textDisplayContainer;
113
114     // Media control elements.
115     RawPtrWillBeMember<MediaControlOverlayPlayButtonElement> m_overlayPlayButton;
116     RawPtrWillBeMember<MediaControlOverlayEnclosureElement> m_overlayEnclosure;
117     RawPtrWillBeMember<MediaControlPlayButtonElement> m_playButton;
118     RawPtrWillBeMember<MediaControlCurrentTimeDisplayElement> m_currentTimeDisplay;
119     RawPtrWillBeMember<MediaControlTimelineElement> m_timeline;
120     RawPtrWillBeMember<MediaControlMuteButtonElement> m_muteButton;
121     RawPtrWillBeMember<MediaControlVolumeSliderElement> m_volumeSlider;
122     RawPtrWillBeMember<MediaControlToggleClosedCaptionsButtonElement> m_toggleClosedCaptionsButton;
123     RawPtrWillBeMember<MediaControlFullscreenButtonElement> m_fullScreenButton;
124     RawPtrWillBeMember<MediaControlTimeRemainingDisplayElement> m_durationDisplay;
125     RawPtrWillBeMember<MediaControlPanelEnclosureElement> m_enclosure;
126
127     Timer<MediaControls> m_hideMediaControlsTimer;
128     bool m_isMouseOverControls : 1;
129     bool m_isPausedForScrubbing : 1;
130 };
131
132 DEFINE_ELEMENT_TYPE_CASTS(MediaControls, isMediaControls());
133
134 }
135
136 #endif