blob: 780c4dd05d72cccec8ca3568122bae15d91cc02c [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_MEDIA_CONTROLS_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_MEDIA_CONTROLS_H_
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/heap/handle.h"
#include "third_party/blink/renderer/platform/heap/visitor.h"
namespace blink {
class HTMLDivElement;
class HTMLMediaElement;
class LayoutObject;
// MediaControls is an interface to abstract the HTMLMediaElement controls. The
// implementation will be used using a Factory (see below).
class CORE_EXPORT MediaControls : public GarbageCollectedMixin {
public:
MediaControls(HTMLMediaElement&);
virtual ~MediaControls() = default;
HTMLMediaElement& MediaElement() const;
// Enables showing of the controls - only shows if appropriate.
virtual void MaybeShow() = 0;
// Disables showing of the controls - immediately hides.
virtual void Hide() = 0;
virtual void Reset() = 0;
// Notify the media controls that the controlsList attribute has changed.
virtual void OnControlsListUpdated() = 0;
// TODO(mlamouri): this is temporary to notify the controls that an
// HTMLTrackElement failed to load because there is no web exposed way to
// be notified on the TextTrack object. See https://crbug.com/669977
virtual void OnTrackElementFailedToLoad() = 0;
// TODO(mlamouri): this method should be moved away from the interface to
// become an implementation detail.
virtual void NetworkStateChanged() = 0;
// Returns the layout object for the part of the controls that should be
// used for overlap checking during text track layout. May be null.
// TODO(mlamouri): required by LayoutVTTCue.
virtual LayoutObject* PanelLayoutObject() = 0;
virtual LayoutObject* TimelineLayoutObject() = 0;
virtual LayoutObject* ButtonPanelLayoutObject() = 0;
// Returns the layout object of the media controls container. Maybe null.
// TODO(mlamouri): required by LayoutVTTCue.
virtual LayoutObject* ContainerLayoutObject() = 0;
// Used for layout tests to disable some animations.
virtual void SetTestMode(bool) = 0;
// TODO: the following are required by other parts of the media controls
// implementation and could be removed when the full implementation has moved
// to modules.
virtual HTMLDivElement* PanelElement() = 0;
virtual void OnMediaControlsEnabledChange() = 0;
void Trace(blink::Visitor*) override;
private:
Member<HTMLMediaElement> media_element_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_HTML_MEDIA_MEDIA_CONTROLS_H_