12daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch/*
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
32daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved.
42daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch *
52daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Redistribution and use in source and binary forms, with or without
62daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * modification, are permitted provided that the following conditions
72daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * are met:
82daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 1. Redistributions of source code must retain the above copyright
92daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch *    notice, this list of conditions and the following disclaimer.
102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * 2. Redistributions in binary form must reproduce the above copyright
112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch *    notice, this list of conditions and the following disclaimer in the
122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch *    documentation and/or other materials provided with the distribution.
132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch *
142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch */
262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#ifndef MediaControlRootElement_h
282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#define MediaControlRootElement_h
292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#if ENABLE(VIDEO)
312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include "MediaControls.h"
332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#include <wtf/RefPtr.h>
342daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
352daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochnamespace WebCore {
362daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
372daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass HTMLInputElement;
382daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass HTMLMediaElement;
392daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass Event;
402daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlPanelMuteButtonElement;
412daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlPlayButtonElement;
422daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlSeekButtonElement;
432daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlRewindButtonElement;
442daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlReturnToRealtimeButtonElement;
452daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlToggleClosedCaptionsButtonElement;
462daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlCurrentTimeDisplayElement;
472daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlTimelineElement;
482daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlTimeRemainingDisplayElement;
492daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlVolumeSliderElement;
502daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlFullscreenButtonElement;
512daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlTimeDisplayElement;
522daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlStatusDisplayElement;
532daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlTimelineContainerElement;
542daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlSeekBackButtonElement;
552daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlSeekForwardButtonElement;
562daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlMuteButtonElement;
572daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlVolumeSliderElement;
582daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlVolumeSliderMuteButtonElement;
592daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlVolumeSliderContainerElement;
602daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlFullscreenVolumeMinButtonElement;
612daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlFullscreenVolumeSliderElement;
622daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlFullscreenVolumeMaxButtonElement;
632daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlPanelElement;
642daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaPlayer;
652daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
662daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass RenderBox;
672daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass RenderMedia;
682daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
692daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochclass MediaControlRootElement : public MediaControls {
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochpublic:
712daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    static PassRefPtr<MediaControlRootElement> create(HTMLMediaElement*);
722daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
732daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    // MediaControls implementation.
742daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void show();
752daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void hide();
762daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void makeOpaque();
772daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void makeTransparent();
782daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
792daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void reset();
802daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
812daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void playbackProgressed();
822daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void playbackStarted();
832daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void playbackStopped();
842daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
852daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void changedMute();
862daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void changedVolume();
872daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
882daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void enteredFullscreen();
892daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void exitedFullscreen();
902daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
912daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void reportedError();
922daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void changedNetworkState();
932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void loadedMetadata();
942daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void changedClosedCaptionsVisibility();
952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
962daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void showVolumeSlider();
972daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    void updateTimeDisplay();
982daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
992daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochprivate:
1002daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlRootElement(HTMLMediaElement*);
1012daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1022daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    virtual const AtomicString& shadowPseudoId() const;
1032daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1042daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    HTMLMediaElement* m_mediaElement;
1052daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1062daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlRewindButtonElement* m_rewindButton;
1072daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlPlayButtonElement* m_playButton;
1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlReturnToRealtimeButtonElement* m_returnToRealTimeButton;
1092daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlStatusDisplayElement* m_statusDisplay;
1102daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlCurrentTimeDisplayElement* m_currentTimeDisplay;
1112daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlTimelineElement* m_timeline;
1122daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlTimeRemainingDisplayElement* m_timeRemainingDisplay;
1132daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlTimelineContainerElement* m_timelineContainer;
1142daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlSeekBackButtonElement* m_seekBackButton;
1152daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlSeekForwardButtonElement* m_seekForwardButton;
1162daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlToggleClosedCaptionsButtonElement* m_toggleClosedCaptionsButton;
1172daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlPanelMuteButtonElement* m_panelMuteButton;
1182daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlVolumeSliderElement* m_volumeSlider;
1192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlVolumeSliderMuteButtonElement* m_volumeSliderMuteButton;
1202daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlVolumeSliderContainerElement* m_volumeSliderContainer;
1212daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlFullscreenButtonElement* m_fullScreenButton;
1222daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlFullscreenVolumeMinButtonElement* m_fullScreenMinVolumeButton;
1232daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlFullscreenVolumeSliderElement* m_fullScreenVolumeSlider;
1242daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlFullscreenVolumeMaxButtonElement* m_fullScreenMaxVolumeButton;
1252daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    MediaControlPanelElement* m_panel;
1262daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1272daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch    bool m_opaque;
1282daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch};
1292daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1302daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch}
1312daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch
1322daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
1332daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch#endif
134