void NotifyTrackInfoToBrowser(int active_track_id,
const std::string& url,
const std::string& lang) override {}
-#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack() override {}
- void MediaSettingClicked() override {}
#endif
void UpdateTooltipUnderCursor(const std::u16string& tooltip_text,
base::i18n::TextDirection hint) override;
}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void RenderWidgetHostImpl::NotifyHWBack() {
- if (!GetView())
- return;
-
- LOG(INFO) << __func__;
- view_->NotifyHWBack();
-}
-
-void RenderWidgetHostImpl::MediaSettingClicked() {
- if (!GetView())
- return;
-
- LOG(INFO) << __func__;
- view_->MediaSettingClicked();
-}
-#endif
-
void RenderWidgetHostImpl::UpdateTooltipUnderCursor(
const std::u16string& tooltip_text,
base::i18n::TextDirection text_direction_hint) {
void NotifyTrackInfoToBrowser(int active_track_id,
const std::string& url,
const std::string& lang) override;
-#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack() override;
- void MediaSettingClicked() override;
#endif
void UpdateTooltipUnderCursor(
const std::u16string& tooltip_text,
}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void RenderWidgetHostViewAura::NotifyHWBack() {
- if (aura_efl_helper())
- aura_efl_helper()->NotifyHWBack();
-}
-
-void RenderWidgetHostViewAura::MediaSettingClicked() {
- if (aura_efl_helper())
- aura_efl_helper()->MediaSettingClicked();
-}
-#endif
-
void RenderWidgetHostViewAura::OnScrollEvent(ui::ScrollEvent* event) {
event_handler_->OnScrollEvent(event);
}
void NotifyTrackInfoToBrowser(int active_track_id,
const std::string& url,
const std::string& lang) override;
-#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack() override;
- void MediaSettingClicked() override;
#endif
void OnSynchronizedDisplayPropertiesChanged(bool rotation = false) override;
viz::ScopedSurfaceIdAllocator DidUpdateVisualProperties(
const std::string& url,
const std::string& lang) {}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- virtual void NotifyHWBack() {}
-
- virtual void MediaSettingClicked() {}
-#endif
// Calls UpdateTooltip if the view is under the cursor.
virtual void UpdateTooltipUnderCursor(const std::u16string& tooltip_text) {}
virtual void NotifyMediaDeviceConnectionChanged(int device_type) {}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- virtual void NotifyHWBack() {}
- virtual void MediaSettingClicked() {}
-#endif
#if BUILDFLAG(IS_ANDROID)
// Updates information to determine whether a user gesture should carryover to
<include name="IDR_UASTYLE_MARKER_CSS" file="../renderer/core/css/marker.css" type="BINDATA" compress="gzip"/>
<include name="IDR_UASTYLE_MATHML_CSS" file="../renderer/core/css/mathml.css" type="BINDATA" compress="gzip"/>
<include name="IDR_UASTYLE_FULLSCREEN_CSS" file="../renderer/core/css/fullscreen.css" type="BINDATA" compress="gzip"/>
+ <include name="IDR_UASTYLE_FULLSCREEN_CONTENT_NAVIGATOR_CSS" file="../renderer/core/css/fullscreenContentNavigator.css" type="BINDATA" compress="gzip"/>
<include name="IDR_UASTYLE_TRANSITION_CSS" file="../renderer/core/css/transition.css" type="BINDATA" compress="gzip"/>
<include name="IDR_UASTYLE_TRANSITION_ANIMATIONS_CSS" file="../renderer/core/css/transition_animations.css" type="BINDATA" compress="gzip"/>
<include name="IDR_UASTYLE_FORM_CONTROLS_NOT_VERTICAL_CSS" file="../renderer/core/css/form_controls_not_vertical.css" type="BINDATA" compress="gzip"/>
[EnableIf=is_tizen_tv]
NotifyTrackInfoToBrowser(int32 active_track_id, string url, string lang);
- [EnableIf=tizen_content_navigator]
- NotifyHWBack();
-
- [EnableIf=tizen_content_navigator]
- MediaSettingClicked();
-
// Sent by a widget to the browser to set the tooltip text and trigger a
// tooltip to show up, aligned with the bounds (in widget-relative DIPS)
// passed by parameter. An empty |tooltip_text| will hide the tooltip view.
#include "third_party/blink/renderer/platform/wtf/text/string_builder.h"
#if defined(TIZEN_CONTENT_NAVIGATOR)
#include "third_party/blink/public/platform/web_application_type.h"
-#include "third_party/blink/renderer/core/fullscreen/fullscreen.h"
#endif
namespace blink {
svg_style_sheet_.Clear();
mathml_style_sheet_.Clear();
media_controls_style_sheet_.Clear();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- media_controls_fullscreen_style_sheet_.Clear();
-#endif
text_track_style_sheet_.Clear();
forced_colors_style_sheet_.Clear();
fullscreen_style_sheet_.Clear();
void CSSDefaultStyleSheets::VerifyUniversalRuleCount() {
// FIXME: Add runtime flags for content navigator.
-#if !defined(TIZEN_CONTENT_NAVIGATOR)
// Universal bucket rules need to be checked against every single element,
// thus we want avoid them in UA stylesheets.
default_html_style_->CompactRulesIfNeeded();
default_pseudo_element_style_->CompactRulesIfNeeded();
DCHECK_EQ(default_pseudo_element_style_->UniversalRules().size(), 1u);
}
-#endif
}
void CSSDefaultStyleSheets::InitializeDefaultStyles() {
VerifyUniversalRuleCount();
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void CSSDefaultStyleSheets::ClearMediaControlsStyle() {
- default_media_controls_style_ = MakeGarbageCollected<RuleSet>();
-}
-#endif
-
bool CSSDefaultStyleSheets::EnsureDefaultStyleSheetsForElement(
const Element& element) {
bool changed_default_style = false;
changed_default_style = true;
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator() && HasMediaControlsStyleSheetLoader() && IsA<HTMLVideoElement>(element) ||
- IsA<HTMLAudioElement>(element)) {
- if (Fullscreen::IsFullscreenElement(element)) {
- if (!media_controls_fullscreen_style_sheet_) {
- media_controls_fullscreen_style_sheet_ = ParseUASheet(
- media_controls_style_sheet_loader_->GetFullscreenUAStyleSheet());
- }
- ClearMediaControlsStyle();
- AddRulesToDefaultStyleSheets(media_controls_fullscreen_style_sheet_,
- NamespaceType::kMediaControls);
- } else {
- if (!media_controls_style_sheet_) {
- media_controls_style_sheet_ =
- ParseUASheet(media_controls_style_sheet_loader_->GetUAStyleSheet());
- }
- ClearMediaControlsStyle();
- AddRulesToDefaultStyleSheets(media_controls_style_sheet_,
- NamespaceType::kMediaControls);
- }
+ if (!media_controls_style_sheet_ && HasMediaControlsStyleSheetLoader() &&
+ (IsA<HTMLVideoElement>(element) || IsA<HTMLAudioElement>(element))) {
+ // FIXME: We should assert that this sheet only contains rules for <video>
+ // and <audio>.
+ media_controls_style_sheet_ =
+ ParseUASheet(media_controls_style_sheet_loader_->GetUAStyleSheet());
+ AddRulesToDefaultStyleSheets(media_controls_style_sheet_,
+ NamespaceType::kMediaControls);
changed_default_style = true;
- } else
-#else
- {
- if (!media_controls_style_sheet_ && HasMediaControlsStyleSheetLoader() &&
- (IsA<HTMLVideoElement>(element) || IsA<HTMLAudioElement>(element))) {
- // FIXME: We should assert that this sheet only contains rules for <video>
- // and <audio>.
- media_controls_style_sheet_ =
- ParseUASheet(media_controls_style_sheet_loader_->GetUAStyleSheet());
- AddRulesToDefaultStyleSheets(media_controls_style_sheet_,
- NamespaceType::kMediaControls);
- changed_default_style = true;
- }
}
-#endif
if (!permission_element_style_sheet_ && IsA<HTMLPermissionElement>(element)) {
CHECK(RuntimeEnabledFeatures::PermissionElementEnabled());
return;
}
- String fullscreen_rules =
- UncompressResourceAsASCIIString(IDR_UASTYLE_FULLSCREEN_CSS) +
- LayoutTheme::GetTheme().ExtraFullscreenStyleSheet();
+ String fullscreen_rules;
+#if defined(TIZEN_CONTENT_NAVIGATOR)
+ if (IsContentNavigator()) {
+ fullscreen_rules =
+ UncompressResourceAsASCIIString(IDR_UASTYLE_FULLSCREEN_CONTENT_NAVIGATOR_CSS);
+ } else
+#endif
+ {
+ fullscreen_rules =
+ UncompressResourceAsASCIIString(IDR_UASTYLE_FULLSCREEN_CSS) +
+ LayoutTheme::GetTheme().ExtraFullscreenStyleSheet();
+ }
fullscreen_style_sheet_ = ParseUASheet(fullscreen_rules);
default_fullscreen_style_->AddRulesFromSheet(
visitor->Trace(svg_style_sheet_);
visitor->Trace(mathml_style_sheet_);
visitor->Trace(media_controls_style_sheet_);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- visitor->Trace(media_controls_fullscreen_style_sheet_);
-#endif
visitor->Trace(permission_element_style_sheet_);
visitor->Trace(text_track_style_sheet_);
visitor->Trace(forced_colors_style_sheet_);
UAStyleSheetLoader& operator=(const UAStyleSheetLoader&) = delete;
virtual ~UAStyleSheetLoader() = default;
virtual String GetUAStyleSheet() = 0;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- virtual String GetFullscreenUAStyleSheet() = 0;
-#endif
};
CORE_EXPORT void SetMediaControlsStyleSheetLoader(
std::unique_ptr<UAStyleSheetLoader>);
void InitializeDefaultStyles();
void VerifyUniversalRuleCount();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void ClearMediaControlsStyle();
-#endif
-
enum class NamespaceType {
kHTML,
kMathML,
Member<StyleSheetContents> svg_style_sheet_;
Member<StyleSheetContents> mathml_style_sheet_;
Member<StyleSheetContents> media_controls_style_sheet_;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- Member<StyleSheetContents> media_controls_fullscreen_style_sheet_;
-#endif
Member<StyleSheetContents> permission_element_style_sheet_;
Member<StyleSheetContents> text_track_style_sheet_;
Member<StyleSheetContents> fullscreen_style_sheet_;
--- /dev/null
+:not(:root):fullscreen, :xr-overlay {
+ position: fixed !important;
+ inset: 0 !important;
+ margin: 0 !important;
+ box-sizing: border-box !important;
+ min-width: 0 !important;
+ max-width: none !important;
+ min-height: 0 !important;
+ max-height: none !important;
+ width: 100% !important;
+ height: 100% !important;
+ transform: none !important;
+
+ /* intentionally not !important */
+ object-fit: contain;
+ user-select: text;
+}
+
+:fullscreen {
+ z-index: 1 !important;
+ visibility: visible !important;
+}
+
+.content-navigator {
+ z-index: 2147483647 !important;
+ visibility: visible !important;
+}
+
+:not(:fullscreen):not(.content-navigator) {
+ visibility: hidden !important;
+}
+
+iframe:fullscreen {
+ border: none !important;
+ padding: 0 !important;
+}
+
+/* TODO(foolip): In the spec, there's a ::backdrop block with the properties
+ shared with dialog::backdrop (see html.css). */
+:not(:root):fullscreen::backdrop {
+ position: fixed;
+ inset: 0;
+ background: black;
+}
+
+@media (vertical-viewport-segments: 2) {
+ :not(:root):fullscreen {
+ height: env(viewport-segment-bottom 0 0, 100%) !important;
+ width: 100% !important;
+ }
+}
+
+@media (horizontal-viewport-segments: 2) {
+ :not(:root):fullscreen {
+ height: 100% !important;
+ width: env(viewport-segment-right 0 0, 100%) !important;
+ }
+}
+
+/* Anything below are extensions over what the Fullscreen API (29 May 2018) mandates. */
+
+/* This prevents video from overflowing the viewport in
+ virtual/android/fullscreen/video-scrolled-iframe.html (crbug.com/441890) and
+ removes scrollbars caused by html { overflow: scroll } (crbug.com/543946).
+ TODO(foolip): This is done differently in Gecko, find a fix not involving the
+ ancestor selector in https://github.com/whatwg/fullscreen/issues/19. */
+:root:-webkit-full-screen-ancestor {
+ overflow: hidden !important;
+}
+
+:fullscreen:-internal-video-persistent-ancestor :not(:-internal-video-persistent-ancestor) {
+ display: none !important;
+}
+
+:-internal-video-persistent {
+ position: fixed !important;
+ left: 0 !important;
+ top: 0 !important;
+ margin: 0 !important;
+ min-width: 0 !important;
+ max-width: none !important;
+ min-height: 0 !important;
+ max-height: none !important;
+ width: 100% !important;
+ height: 100% !important;
+ transform: none !important;
+
+ background-color: black !important;
+ z-index: 2147483647 !important;
+}
+
+:xr-overlay {
+ /* force a transparent background */
+ background: rgba(0,0,0,0) !important;
+
+ /* act as containing block for descendants */
+ contain: paint !important;
+}
}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void WebFrameWidgetImpl::NotifyHWBack() {
- LOG(INFO) << __func__;
- widget_base_->NotifyHWBack();
-}
-
-void WebFrameWidgetImpl::MediaSettingClicked() {
- LOG(INFO) << __func__;
- widget_base_->MediaSettingClicked();
-}
-#endif
-
#if BUILDFLAG(IS_TIZEN)
void WebFrameWidgetImpl::SetDrawsTransparentBackground(
bool draws_transparent_background) {
const std::string& lang);
void MoveFocusToBrowser(int direction);
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack();
- void MediaSettingClicked();
-#endif
protected:
// WidgetBaseClient overrides:
}
#endif // IS_TIZEN_TV
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void HTMLMediaElement::NotifyHWBack() {
- LOG(INFO) << __func__;
-
- LocalFrame* frame = GetDocument().GetFrame();
- if (!frame) {
- LOG(ERROR) << "frame is null";
- return;
- }
-
- WebFrameWidgetImpl* wfwgt =
- static_cast<WebFrameWidgetImpl*>(frame->GetWidgetForLocalRoot());
- wfwgt->NotifyHWBack();
-}
-
-void HTMLMediaElement::MediaSettingClicked() {
- LOG(INFO) << __func__;
-
- LocalFrame* frame = GetDocument().GetFrame();
- if (!frame) {
- LOG(ERROR) << "frame is null";
- return;
- }
-
- WebFrameWidgetImpl* wfwgt =
- static_cast<WebFrameWidgetImpl*>(frame->GetWidgetForLocalRoot());
- wfwgt->MediaSettingClicked();
-}
-
-std::vector<std::string> ignore_class_list{
- "-ad-", /* youtube ad */
- "tiktok-web-player", /* tiktok player */
- "movieSlider" /* namava trailer */
-};
-
-void HTMLMediaElement::EnterFullscreen() {
- if (AllowAutoFullscreen())
- webkitEnterFullscreen();
-}
-
-bool HTMLMediaElement::AllowAutoFullscreen() {
- if (!IsContentNavigator())
- return false;
-
- if (!IsHTMLVideoElement())
- return false;
-
- // Check NetworkState
- if (network_state_ == 0)
- return false;
-
- // Check ReadyState
- if (ready_state_ == 0)
- return false;
-
- // Ignore videos including some class attributes.
- Element* element = this;
- while (element != nullptr) {
- for (auto& class_list : ignore_class_list) {
- if (element->classList().value().Contains(
- AtomicString(class_list.c_str()))) {
- LOG(INFO) << __func__ << " Ignore fullscreen mode. (maybe ad)";
- return false;
- }
- }
- element = element->parentElement();
- }
-
- // Check the video size
- LocalDOMWindow* window =
- GetDocument() != nullptr ? GetDocument().domWindow() : nullptr;
- if (!window)
- return false;
-
- LOG(INFO) << __func__ << " Offset Size: " << OffsetWidth() << " x "
- << OffsetHeight();
- if (OffsetWidth() > OffsetHeight()) {
- if (OffsetWidth() < window->innerWidth() / 3 ||
- OffsetHeight() < window->innerHeight() / 2) {
- return false;
- }
- } else {
- if (OffsetHeight() < window->innerHeight() / 2) {
- return false;
- }
- }
-
- return true;
-}
-#endif // defined(TIZEN_CONTENT_NAVIGATOR)
-
double HTMLMediaElement::getStartDate() const {
#if BUILDFLAG(IS_TIZEN_TV)
if (!IsHbbTV() || !GetWebMediaPlayer()) {
bool HasEncryptedListener() const override;
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack();
- void MediaSettingClicked();
- void EnterFullscreen();
-#endif
-
#if defined(TIZEN_MULTIMEDIA)
void OnLivePlaybackComplete() override;
#endif
#if defined(TIZEN_CONTENT_NAVIGATOR)
virtual void webkitEnterFullscreen() {}
- bool AllowAutoFullscreen();
#endif
void LoadTimerFired(TimerBase*);
# found in the LICENSE file.
import("//third_party/blink/renderer/modules/modules.gni")
-import("//tizen_src/build/config/tizen_features.gni")
import("//tools/grit/grit_rule.gni")
if (is_android) {
import("//build/config/android/rules.gni")
}
-if (tizen_content_navigator) {
- import(
- "//tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/elements.gni")
-}
-
blink_modules_sources("media_controls") {
sources = [
"elements/media_control_animated_arrow_container_element.cc",
"//third_party/blink/renderer/modules/remoteplayback",
"//third_party/blink/renderer/modules/screen_orientation",
]
-
- if (tizen_content_navigator) {
- sources += external_media_controls_elements_sources
- }
}
grit("media_controls_resources") {
void MediaControlFullscreenButtonElement::DefaultEventHandler(Event& event) {
if (!IsDisabled() && (event.type() == event_type_names::kClick ||
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- event.type() == event_type_names::kKeydown ||
-#endif
event.type() == event_type_names::kGesturetap)) {
RecordClickMetrics();
if (MediaElement().IsFullscreen())
void MediaControlPlayButtonElement::DefaultEventHandler(Event& event) {
if (!IsDisabled() && (event.type() == event_type_names::kClick ||
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- event.type() == event_type_names::kKeydown ||
-#endif
event.type() == event_type_names::kGesturetap)) {
if (MediaElement().paused()) {
Platform::Current()->RecordAction(
void MediaControlPlaybackSpeedButtonElement::DefaultEventHandler(Event& event) {
if (event.type() == event_type_names::kClick ||
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- event.type() == event_type_names::kKeydown ||
-#endif
event.type() == event_type_names::kGesturetap) {
GetMediaControls().TogglePlaybackSpeedList();
}
#include "third_party/blink/renderer/platform/heap/garbage_collected.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-#include "third_party/blink/renderer/modules/media_controls/elements/media_control_playback_speed_button_element.h"
-#endif
-
namespace blink {
namespace {
MediaControlPopupMenuElement::SetIsWanted(wanted);
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-Element* MediaControlPlaybackSpeedListElement::PopupAnchor() const {
- return &GetMediaControls().PlaybackSpeedButton();
-}
-#endif
-
void MediaControlPlaybackSpeedListElement::DefaultEventHandler(Event& event) {
- if (event.type() == event_type_names::kClick
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- || event.type() == event_type_names::kKeydown
-#endif
- ) {
+ if (event.type() == event_type_names::kClick) {
// This handles the back button click. Clicking on a menu item triggers the
// change event instead.
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- SetIsWanted(false);
- if (!MediaElement().IsFullscreen())
-#endif
- GetMediaControls().ToggleOverflowMenu();
+ GetMediaControls().ToggleOverflowMenu();
event.SetDefaultHandled();
} else if (event.type() == event_type_names::kChange) {
// Identify which input element was selected and update playback speed
EventDispatchForbiddenScope::AllowUserAgentEvents allow_events;
RemoveChildren(kOmitSubtreeModifiedEvent);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (!MediaElement().IsFullscreen())
-#endif
- ParserAppendChild(CreatePlaybackSpeedHeaderItem());
+ ParserAppendChild(CreatePlaybackSpeedHeaderItem());
checked_item_ = nullptr;
void SetIsWanted(bool) final;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- Element* PopupAnchor() const override;
-#endif
-
void Trace(Visitor*) const override;
private:
case VKEY_RETURN:
case VKEY_SPACE:
To<Element>(event->target()->ToNode())->DispatchSimulatedClick(event);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (!popup_menu_->MediaElement().IsFullscreen())
-#endif
- popup_menu_->FocusPopupAnchorIfOverflowClosed();
+ popup_menu_->FocusPopupAnchorIfOverflowClosed();
break;
default:
handled = false;
} else if (event->type() == event_type_names::kResize ||
event->type() == event_type_names::kScroll ||
event->type() == event_type_names::kBeforetoggle) {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (!popup_menu_->MediaElement().IsFullscreen())
-#endif
- popup_menu_->SetIsWanted(false);
+ popup_menu_->SetIsWanted(false);
}
}
HidePopoverTransitionBehavior::kNoEventsNoWaiting,
nullptr);
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (MediaElement().IsFullscreen())
-#endif
- MediaElement().Focus();
+ MediaElement().Focus();
}
}
void SetPosition();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- virtual Element* PopupAnchor() const;
-#endif
-
private:
class EventListener;
-#if !defined(TIZEN_CONTENT_NAVIGATOR)
Element* PopupAnchor() const;
-#endif
void HideIfNotFocused();
#include "third_party/blink/public/strings/grit/blink_strings.h"
#include "third_party/blink/renderer/modules/media_controls/media_controls_impl.h"
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-#include "third_party/blink/renderer/core/html/media/html_media_element.h"
-#endif
namespace {
}
String MediaControlRemainingTimeDisplayElement::FormatTime() const {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (MediaElement().IsFullscreen()) {
- return MediaControlTimeDisplayElement::FormatTime();
- } else
-#endif
- // For the duration display, we prepend a "/ " to deliminate the current
- // time from the duration, e.g. "0:12 / 3:45".
- return "/ " + MediaControlTimeDisplayElement::FormatTime();
+ // For the duration display, we prepend a "/ " to deliminate the current
+ // time from the duration, e.g. "0:12 / 3:45".
+ return "/ " + MediaControlTimeDisplayElement::FormatTime();
}
} // namespace blink
#include "third_party/blink/renderer/platform/web_test_support.h"
#include "ui/gfx/geometry/size.h"
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-#include "third_party/blink/public/platform/web_application_type.h"
-#include "third_party/blink/renderer/core/frame/local_dom_window.h"
-#include "third_party/blink/renderer/core/html/html_collection.h"
-#include "third_party/blink/renderer/core/html/html_image_element.h"
-#include "third_party/blink/renderer/core/html/html_style_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_back_button_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_backward_button_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_external_caption_display_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_extra_video_container_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_extra_video_thumbnail_display_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_extra_video_title_display_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_extra_videos_panel_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_forward_button_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_restart_button_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_setting_button_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_time_panel_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_title_display_element.h"
-#include "tizen_src/chromium_impl/third_party/blink/renderer/modules/media_controls/elements/media_control_top_panel_element.h"
-#endif
-
namespace blink {
namespace {
"state-scrubbing", // kScrubbing
};
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-enum class FullscreenElement {
- kBack,
- kRestart,
- kBackward,
- kPlay,
- kForward,
- kSpeed,
- kSetting,
- kFullscreen,
-};
-
-constexpr int kMinThumbnailImageSize = 5600;
-#endif
-
// The padding in pixels inside the button panel.
constexpr int kAudioButtonPadding = 20;
constexpr int kVideoButtonPadding = 26;
}
bool ShouldShowPlaybackSpeedButton(HTMLMediaElement& media_element) {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator() && media_element.IsFullscreen())
- return true;
-#endif
// The page disabled the button via the controlsList attribute.
if (media_element.ControlsListInternal()->ShouldHidePlaybackRate() &&
!media_element.UserWantsControlsVisible()) {
// If you change this value, then also update the corresponding value in
// web_tests/media/media-controls.js.
constexpr base::TimeDelta kTimeWithoutMouseMovementBeforeHidingMediaControls =
-// TODO: Need to add a runtime flag.
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- base::Seconds(3.0);
-#else
base::Seconds(2.5);
-#endif
base::TimeDelta GetTimeWithoutMouseMovementBeforeHidingMediaControls() {
return kTimeWithoutMouseMovementBeforeHidingMediaControls;
fullscreen_button_(nullptr),
display_cutout_fullscreen_button_(nullptr),
download_button_(nullptr),
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- back_button_(nullptr),
- backward_button_(nullptr),
- extra_videos_panel_(nullptr),
- forward_button_(nullptr),
- restart_button_(nullptr),
- setting_button_(nullptr),
- time_panel_(nullptr),
- title_display_(nullptr),
- top_panel_(nullptr),
- caption_panel_(nullptr),
- caption_element_(nullptr),
- fullscreen_style_element_(nullptr),
- previous_parent_element_(nullptr),
- caption_scroll_timer_(
- media_element.GetDocument().GetTaskRunner(TaskType::kInternalMedia),
- this,
- &MediaControlsImpl::CaptionScrollTimerFired),
-#endif
media_event_listener_(
MakeGarbageCollected<MediaControlsMediaEventListener>(this)),
orientation_lock_delegate_(nullptr),
panel_ = MakeGarbageCollected<MediaControlPanelElement>(*this);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator()) {
- time_panel_ = MakeGarbageCollected<MediaControlTimePanelElement>(*this);
-
- title_display_ = MakeGarbageCollected<MediaControlTitleDisplayElement>(*this);
-
- top_panel_ = MakeGarbageCollected<MediaControlTopPanelElement>(*this);
-
- back_button_ = MakeGarbageCollected<MediaControlBackButtonElement>(*this);
- backward_button_ =
- MakeGarbageCollected<MediaControlBackwardButtonElement>(*this);
- forward_button_ =
- MakeGarbageCollected<MediaControlForwardButtonElement>(*this);
- restart_button_ =
- MakeGarbageCollected<MediaControlRestartButtonElement>(*this);
- setting_button_ =
- MakeGarbageCollected<MediaControlSettingButtonElement>(*this);
-
- caption_panel_ = MakeGarbageCollected<MediaControlExternalCaptionDisplayElement>(*this);
- enclosure_->ParserAppendChild(caption_panel_);
-
- fullscreen_style_element_ =
- MakeGarbageCollected<HTMLStyleElement>(GetDocument(), CreateElementFlags());
- fullscreen_style_element_->setInnerHTML(
- MediaControlsResourceLoader::GetFullscreenSheet());
- }
-#endif
-
// On the video controls, the buttons belong to a separate button panel. This
// is because they are displayed in two lines.
if (ShouldShowVideoControls()) {
AttachHoverBackground(overflow_menu_);
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void MediaControlsImpl::PopulateFullscreenPanel() {
- LOG(INFO) << __func__;
- navigation_map_.clear();
-
- // Clear the panels.
- panel_->setInnerHTML("");
- if (media_button_panel_) {
- media_button_panel_->setInnerHTML("");
- }
-
- top_panel_->setInnerHTML("");
- panel_->ParserAppendChild(top_panel_);
- top_panel_->ParserAppendChild(title_display_);
- title_display_->setInnerHTML("");
- auto* parent_window = MediaElement().GetDocument().domWindow()->parent();
- auto* parent_document = static_cast<LocalDOMWindow*>(parent_window)->document();
- title_display_->setInnerHTML(parent_document->title());
-
- caption_element_ = FindExternalCaption();
- if (caption_element_) {
- previous_parent_element_ = caption_element_->parentElement();
- caption_panel_->ParserAppendChild(caption_element_);
- caption_panel_->setScrollTop(caption_panel_->scrollHeight());
- caption_scroll_timer_.StartRepeating(
- base::Seconds(1.0), FROM_HERE);
- }
-
- time_panel_->setInnerHTML("");
- panel_->ParserAppendChild(time_panel_);
- time_panel_->ParserAppendChild(current_time_display_);
- MediaControlElementsHelper::CreateDiv(
- AtomicString("-internal-media-controls-button-spacer"), time_panel_);
- time_panel_->ParserAppendChild(duration_display_);
-
- panel_->ParserAppendChild(timeline_);
-
- Element* button_panel = panel_;
-
- panel_->ParserAppendChild(media_button_panel_);
- button_panel = media_button_panel_;
-
- button_panel->ParserAppendChild(back_button_);
- MediaControlElementsHelper::CreateDiv(
- AtomicString("-internal-media-controls-button-spacer"), button_panel);
- button_panel->ParserAppendChild(restart_button_);
- button_panel->ParserAppendChild(backward_button_);
- button_panel->ParserAppendChild(play_button_);
- button_panel->ParserAppendChild(forward_button_);
- MediaControlElementsHelper::CreateDiv(
- AtomicString("-internal-media-controls-button-spacer"), button_panel);
- button_panel->ParserAppendChild(playback_speed_button_);
- button_panel->ParserAppendChild(setting_button_);
- button_panel->ParserAppendChild(fullscreen_button_);
-
- extra_videos_panel_ =
- MakeGarbageCollected<MediaControlExtraVideosPanelElement>(*this);
- panel_->ParserAppendChild(extra_videos_panel_);
-
- // Attach hover background divs.
- AttachHoverBackground(back_button_);
- AttachHoverBackground(play_button_);
- AttachHoverBackground(restart_button_);
- AttachHoverBackground(forward_button_);
- AttachHoverBackground(backward_button_);
- AttachHoverBackground(playback_speed_button_);
- AttachHoverBackground(setting_button_);
- AttachHoverBackground(fullscreen_button_);
-
- navigation_map_.push_back(back_button_);
- navigation_map_.push_back(restart_button_);
- navigation_map_.push_back(backward_button_);
- navigation_map_.push_back(play_button_);
- navigation_map_.push_back(forward_button_);
- navigation_map_.push_back(playback_speed_button_);
- navigation_map_.push_back(setting_button_);
- navigation_map_.push_back(fullscreen_button_);
-}
-
-bool ValidateExtraThumbnail(Element* image) {
- if (image->FastGetAttribute(html_names::kAriaHiddenAttr) == "true")
- return false;
-
- int image_size = image->OffsetWidth() * image->OffsetHeight();
- if (image_size < kMinThumbnailImageSize)
- return false;
-
- if (image->tagName() == "IMG") {
- int natural_size = To<HTMLImageElement>(image)->naturalWidth() *
- To<HTMLImageElement>(image)->naturalHeight();
- if (natural_size < 100)
- return false;
- }
-
- return true;
-}
-
-void MediaControlsImpl::GetImagesFromDocument(Document& document,
- HeapVector<Member<Element>>& elements) {
- auto* image_elements = document.QuerySelectorAll(AtomicString("img"));
- for (unsigned int i = 0; i < image_elements->length(); i++) {
- Element* image = image_elements->item(i);
- // Find valid thumbnail
- if (!ValidateExtraThumbnail(image))
- continue;
-
- elements.push_back(image);
- }
-
- auto* other_elements =
- document.QuerySelectorAll(AtomicString("[style*='background-image']"));
- for (unsigned int i = 0; i < other_elements->length(); i++) {
- Element* element = other_elements->item(i);
- // Find valid thumbnail
- if (!ValidateExtraThumbnail(element))
- continue;
-
- elements.push_back(element);
- }
-}
-
-HeapVector<Member<Element>> MediaControlsImpl::GetImagesForExtraVideos() {
- HeapVector<Member<Element>> elements;
- GetImagesFromDocument(GetDocument(), elements);
-
- auto* parent_window = MediaElement().GetDocument().domWindow()->parent();
- if (parent_window) {
- auto* parent_document = static_cast<LocalDOMWindow*>(parent_window)->document();
- // Check whether the video is placed in iframe.
- if (parent_document != GetDocument()) {
- GetImagesFromDocument(*parent_document, elements);
- }
- }
-
- return elements;
-}
-
-Element* FindAnchorElement(Element* image) {
- Element* parent = image->parentElement();
- while (parent != nullptr) {
- if (parent->tagName() == "A") {
- return parent;
- } else {
- auto* children = parent->QuerySelectorAll(AtomicString("a"));
- // Multiple anchors in descendatnts mean that
- // anchors doesn't match with image.
- if (children->length() > 1)
- return nullptr;
-
- else if (children->length() == 1)
- return children->item(0);
- }
- parent = parent->parentElement();
- }
- return nullptr;
-}
-
-void MediaControlsImpl::PopulateExtraVideos() {
- LOG(INFO) << __func__;
- extra_video_cnt_ = 0;
- extra_container_list_.clear();
- extra_thumbnail_list_.clear();
- extra_title_list_.clear();
- extra_videos_panel_->RemoveChildren();
-
- auto image_elements = GetImagesForExtraVideos();
- for (Element* image : image_elements) {
- Element* anchor = FindAnchorElement(image);
-
- // If there is no valid thumbnail
- if (anchor == nullptr)
- continue;
-
- // Set thumbnail
- String url;
- if (image->tagName() == "IMG") {
- url = "url(" + To<HTMLImageElement>(image)->currentSrc() + ")";
- } else {
- url = image->InlineStyle()->GetPropertyValue(CSSPropertyID::kBackgroundImage);
- }
- if (url == "url()")
- continue;
- LOG(INFO) << __func__ << " image src: " << url;
-
- Member<MediaControlExtraVideoThumbnailDisplayElement> thumbnail =
- MakeGarbageCollected<MediaControlExtraVideoThumbnailDisplayElement>(
- *this);
- thumbnail->SetInlineStyleProperty(CSSPropertyID::kBackgroundImage, url,
- false);
- extra_thumbnail_list_.push_back(thumbnail);
-
- // Set thumbnail title
- extra_video_cnt_++;
- Member<MediaControlExtraVideoTitleDisplayElement> title =
- MakeGarbageCollected<MediaControlExtraVideoTitleDisplayElement>(*this);
- title->setInnerText(FindThumbnailTitle(anchor));
- extra_title_list_.push_back(title);
-
- // Set extra video container
- Member<MediaControlExtraVideoContainerElement> extra_container =
- MakeGarbageCollected<MediaControlExtraVideoContainerElement>(*this);
- extra_container->ParserAppendChild(thumbnail);
- extra_container->ParserAppendChild(title);
- const AtomicString& link = anchor->getAttribute(html_names::kHrefAttr);
- LOG(INFO) << __func__ << " thumbnail link: " << link;
- extra_container->SetLink(link);
- extra_container_list_.push_back(extra_container);
-
- extra_videos_panel_->ParserAppendChild(extra_container);
- }
-
- extra_videos_panel_->scrollBy(404 * (last_hovered_thumbnail_position_ - 2),
- 0);
-}
-
-String MediaControlsImpl::FindThumbnailTitle(Node* anchor) {
- bool find = false;
- String result;
- while (!find) {
- result = "";
- FindThumbnailTitleRecursively(anchor, result);
- if (result == "") {
- anchor = anchor->parentElement();
- } else {
- find = true;
- }
- }
- return result;
-}
-
-bool MediaControlsImpl::IsValidElementForTitle(Node* node) {
- if (!node->IsElementNode())
- return false;
-
- String text = To<Element>(node)->innerText();
- int new_line_index = text.find('\n');
- if (new_line_index != -1)
- text = text.Substring(0, new_line_index);
- if (text == "")
- return false;
-
- // if (To<Element>(node)->HasClassName("badge-shape"))
- // return false;
-
- // if (To<Element>(node)->HasClassName("timeElem"))
- // return false;
-
- Element* element = nullptr;
- // cda.pl
- element = To<Element>(node)->QuerySelector(AtomicString(".media-show-head"));
- if (element != nullptr)
- return false;
- if (To<Element>(node)->HasClassName(AtomicString("media-show-head")))
- return false;
-
- // youtube.com
- element = To<Element>(node)->QuerySelector(AtomicString(".ytd-thumbnail-overlay-now-playing-renderer"));
- if (element != nullptr) {
- return false;
- }
-
- if (To<Element>(node)->HasClassName(AtomicString("ytd-thumbnail-overlay-now-playing-renderer"))) {
- return false;
- }
-
- // tv.kakao.com
- element = To<Element>(node)->QuerySelector(AtomicString(".screen_out"));
- if (element != nullptr) {
- return false;
- }
-
- if (To<Element>(node)->HasClassName(AtomicString("screen_out"))) {
- return false;
- }
-
- // daum.net
- element = To<Element>(node)->QuerySelector(AtomicString(".dimmed_g"));
- if (element != nullptr) {
- return false;
- }
-
- if (To<Element>(node)->HasClassName(AtomicString("dimmed_g"))) {
- return false;
- }
-
- if (text.length() >= 5 || text.length() <= 8) {
- if (text[text.length() - 3] == ':')
- return false;
- }
-
- return true;
-}
-
-Node* MediaControlsImpl::FindThumbnailTitleRecursively(Node* node, String& result) {
- auto* children = node->childNodes();
- for (unsigned int i = 0; i < children->length(); i++) {
- auto* child = children->item(i);
- if (IsValidElementForTitle(child)) {
- String text = To<Element>(child)->innerText();
- int new_line_index = text.find('\n');
- if (new_line_index != -1)
- result = text.Substring(0, new_line_index);
- else
- result = text;
- return child;
- } else if (child->hasChildren()) {
- Node* next = FindThumbnailTitleRecursively(child, result);
- if (next)
- return next;
- }
- }
- return nullptr;
-}
-
-Element* MediaControlsImpl::FindExternalCaption() {
- {
- // youtube
- auto* captions = MediaElement().GetDocument().getElementsByClassName(AtomicString("ytp-caption-window-container"));
- if (captions->length() > 0) {
- return captions->item(0);
- }
- }
-
- {
- // naver tv
- auto* captions = MediaElement().GetDocument().getElementsByClassName(AtomicString("pzp-subtitle-text"));
- if (captions->length() > 0) {
- VLOG(0)<<__func__<<" Find Naver TV caption!";
- return captions->item(0);
- }
- }
- return nullptr;
-}
-
-void MediaControlsImpl::HideBottomPanels() {
- time_panel_->classList().Remove(AtomicString("show"));
- timeline_->classList().Remove(AtomicString("show"));
- media_button_panel_->classList().Remove(AtomicString("show"));
-
- time_panel_->classList().Add(AtomicString("hide"));
- timeline_->classList().Add(AtomicString("hide"));
- media_button_panel_->classList().Add(AtomicString("hide"));
-}
-
-void MediaControlsImpl::ShowBottomPanels() {
- time_panel_->classList().Remove(AtomicString("hide"));
- timeline_->classList().Remove(AtomicString("hide"));
- media_button_panel_->classList().Remove(AtomicString("hide"));
-
- if (IsVisible()) {
- time_panel_->classList().Add(AtomicString("show"));
- timeline_->classList().Add(AtomicString("show"));
- media_button_panel_->classList().Add(AtomicString("show"));
- }
-}
-#endif
-
void MediaControlsImpl::AttachHoverBackground(Element* element) {
MediaControlElementsHelper::CreateDiv(
AtomicString("-internal-media-controls-button-hover-background"),
UpdateCSSClassFromState();
UpdateSizingCSSClass();
OnControlsListUpdated();
-
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- LOG(INFO) << __func__;
- if (IsContentNavigator())
- InitializeFocus();
-#endif
}
void MediaControlsImpl::UpdateTimeIndicators(bool suppress_aria) {
}
void MediaControlsImpl::MakeOpaque() {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator() && MediaElement().IsFullscreen() && vertical_hover_position_ == 0)
- InitializeFocus();
-#endif
ShowCursor();
panel_->MakeOpaque();
MaybeShowOverlayPlayButton();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- MediaElement().Focus();
-#endif
}
void MediaControlsImpl::MakeOpaqueFromPointerEvent() {
if (MediaElement().ShouldShowControls())
HideCursor();
panel_->MakeTransparent();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator()) {
- vertical_hover_position_ = 0;
- if (extra_videos_panel_)
- extra_videos_panel_->Hide();
-
- caption_panel_->classList().Remove(AtomicString("show-extra-panel"));
- caption_panel_->classList().Remove(AtomicString("show-control-panel"));
- }
-#endif
}
bool MediaControlsImpl::ShouldHideMediaControls(unsigned behavior_flags) const {
}
void MediaControlsImpl::EnterFullscreen() {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- LOG(INFO) << __func__;
- is_fullscreen_ = true;
-#endif
Fullscreen::RequestFullscreen(MediaElement());
}
void MediaControlsImpl::ExitFullscreen() {
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- is_fullscreen_ = false;
-#endif
Fullscreen::ExitFullscreen(GetDocument());
}
std::make_pair(cast_button_.Get(), false),
std::make_pair(download_button_.Get(), false),
std::make_pair(toggle_closed_captions_button_.Get(), false),
-#if !defined(TIZEN_CONTENT_NAVIGATOR)
std::make_pair(playback_speed_button_.Get(), false),
-#endif
};
// These are the elements in order of priority that take up vertical room.
!IsSpatialNavigationEnabled(GetDocument().GetFrame())) {
const String& key = keyboard_event->key();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsMediaFullscreenMode()) {
- FullscreenFocusMove(event);
- event.stopImmediatePropagation();
- ResetHideMediaControlsTimer();
- return;
- }
-#endif
-
if (key == "Enter" || keyboard_event->keyCode() == ' ') {
if (overlay_play_button_) {
overlay_play_button_->OnMediaKeyboardEvent(&event);
// This will fix the issue that when mouse out event happen while video is
// focused, control never hides.
if (!MediaElement().paused() && ShouldHideMediaControls(kIgnoreFocus))
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator())
- StartHideMediaControlsTimer();
- else
-#endif
MakeTransparent();
}
} else if (event->type() == event_type_names::kPointermove) {
MakeOpaque();
return;
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- // Don't make transparent in content navigator.
- if (IsContentNavigator() && is_fullscreen_)
- return;
-#endif
if (IsVisible() && ShouldHideMediaControls())
MakeTransparent();
const double duration = MediaElement().duration();
bool was_finite_duration = std::isfinite(duration_display_->CurrentValue());
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (std::isinf(duration))
- is_live_ = true;
- else
- is_live_ = false;
-#endif
-
// Update the displayed current time/duration.
duration_display_->SetCurrentValue(duration);
Reset();
UpdateCSSClassFromState();
UpdateActingAsAudioControls();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- MediaElement().Focus();
-#endif
}
void MediaControlsImpl::OnEnteredFullscreen() {
if (display_cutout_fullscreen_button_)
display_cutout_fullscreen_button_->SetIsWanted(true);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator()) {
- LOG(INFO) << __func__;
- is_fullscreen_ = true;
-
- ShadowRoot* shadow_root = MediaElement().GetShadowRoot();
- shadow_root->ParserAppendChild(fullscreen_style_element_);
-
- PopulateFullscreenPanel();
- Reset();
-
- // Store video element's class attribute and remove it to apply
- // new media controls and behaviors.
- video_class_attribute_ = MediaElement().getAttribute(html_names::kClassAttr);
- MediaElement().removeAttribute(html_names::kClassAttr);
-
- // Focus the video element to control media controls using a remote control.
- MediaElement().Focus();
-
- if (MediaElement().IsFullscreen() && vertical_hover_position_ == 0)
- InitializeFocus();
-
- // Auto play in the fullscreen mode.
- if (MediaElement().paused()) {
- MediaElement().Play();
- }
- }
-#endif
-
StopHideMediaControlsTimer();
StartHideMediaControlsTimer();
}
if (display_cutout_fullscreen_button_)
display_cutout_fullscreen_button_->SetIsWanted(false);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- if (IsContentNavigator()) {
- LOG(INFO) << __func__;
- is_fullscreen_ = false;
-
- if (caption_element_ && previous_parent_element_) {
- previous_parent_element_->ParserAppendChild(caption_element_);
- if (caption_scroll_timer_.IsActive())
- caption_scroll_timer_.Stop();
- }
-
- ShadowRoot* shadow_root = MediaElement().GetShadowRoot();
- shadow_root->ParserRemoveChild(*fullscreen_style_element_);
-
- PopulatePanel();
- Reset();
-
- // Set the stored video element's class attribute to apply
- // what the original content wants to do.
- MediaElement().setAttribute(html_names::kClassAttr, video_class_attribute_);
- }
-#endif
-
HidePopupMenu();
StopHideMediaControlsTimer();
StartHideMediaControlsTimer();
download_button_->ShouldDisplayDownloadButton());
UpdateCSSClassFromState();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- MediaElement().Focus();
-#endif
}
void MediaControlsImpl::OpenOverflowMenu() {
UpdateCSSClassFromState();
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-const MediaControlPlaybackSpeedButtonElement&
-MediaControlsImpl::PlaybackSpeedButton() const {
- return *playback_speed_button_;
-}
-
-MediaControlPlaybackSpeedButtonElement&
-MediaControlsImpl::PlaybackSpeedButton() {
- return *playback_speed_button_;
-}
-
-bool MediaControlsImpl::IsMediaFullscreenMode() {
- if (!IsContentNavigator()) {
- return false;
- }
-
- if (is_fullscreen_) {
- return true;
- }
-
- if (MediaElement().IsFullscreen()) {
- return true;
- }
-
- return false;
-}
-
-void MediaControlsImpl::InitializeFocus() {
- if (!is_fullscreen_)
- return;
- LOG(INFO) << __func__;
- ShowBottomPanels();
- if (extra_videos_panel_)
- extra_videos_panel_->Hide();
-
- caption_panel_->classList().Remove(AtomicString("show-extra-panel"));
- caption_panel_->classList().Add(AtomicString("show-control-panel"));
-
- timeline_->SetHovered(false);
- if (last_hovered_button_position_ > -1)
- navigation_map_[last_hovered_button_position_]->SetHovered(false);
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(false);
- current_time_display_->SetHovered(false);
- duration_display_->SetHovered(false);
-
- last_hovered_thumbnail_position_ = 0;
- last_hovered_button_position_ = static_cast<int>(FullscreenElement::kPlay);
- play_button_->SetHovered(true);
- vertical_hover_position_ = 1;
- MediaElement().Focus();
-}
-
-void MediaControlsImpl::FullscreenFocusMove(Event& event) {
- auto* keyboard_event = DynamicTo<KeyboardEvent>(event);
- if (!keyboard_event || event.defaultPrevented() ||
- event.type() != event_type_names::kKeydown) {
- return;
- }
-
- const String& key = keyboard_event->key();
- LOG(INFO) << __func__ << " key: " << key;
- if (!IsVisible()) {
- if (key == "ArrowDown" || key == "ArrowUp" || key == "ArrowLeft" ||
- key == "ArrowRight" || key == "Enter") {
- MakeOpaque();
-
- StartHideMediaControlsIfNecessary();
- }
-
- if (key == "XF86Back") {
- MediaElement().NotifyHWBack();
- }
- return;
- }
-
- if (key == "XF86Back") {
- MakeTransparent();
- return;
- }
-
- if (vertical_hover_position_ == 0) {
- last_hovered_button_position_ = static_cast<int>(FullscreenElement::kPlay);
- play_button_->SetHovered(true);
- vertical_hover_position_ = 1;
- StartHideMediaControlsIfNecessary();
- return;
- }
-
- if (key == "Enter" || keyboard_event->keyCode() == ' ') {
- if (vertical_hover_position_ == 1) {
- VLOG(0)<<__func__<<" call Enter";
- navigation_map_[last_hovered_button_position_]->DefaultEventHandler(
- event);
- } else if (vertical_hover_position_ == -1)
- extra_container_list_[last_hovered_thumbnail_position_]
- ->DefaultEventHandler(event);
- }
-
- if (key == "ArrowUp") {
- if (vertical_hover_position_ == -1) {
- extra_videos_panel_->Hide();
- caption_panel_->classList().Remove(AtomicString("show-extra-panel"));
- caption_panel_->classList().Add(AtomicString("show-control-panel"));
- ShowBottomPanels();
- }
-
- if (vertical_hover_position_ < 2)
- vertical_hover_position_++;
-
- if (vertical_hover_position_ == 0)
- vertical_hover_position_++;
-
- if (is_live_ && vertical_hover_position_ == 2) {
- vertical_hover_position_ = 1;
- StartHideMediaControlsIfNecessary();
- return;
- }
- } else if (key == "ArrowDown") {
- if (vertical_hover_position_ > -1)
- vertical_hover_position_--;
-
- PopulateExtraVideos();
- if (vertical_hover_position_ == 0 && !extra_container_list_.empty())
- vertical_hover_position_--;
-
- if (vertical_hover_position_ == -1) {
- extra_videos_panel_->Show();
- caption_panel_->classList().Add(AtomicString("show-extra-panel"));
- caption_panel_->classList().Remove(AtomicString("show-control-panel"));
- HideBottomPanels();
- }
-
- if (vertical_hover_position_ == 0) {
- vertical_hover_position_ = 1;
- StartHideMediaControlsIfNecessary();
- return;
- }
- }
-
- switch (vertical_hover_position_) {
- case 1:
- timeline_->SetHovered(false);
- current_time_display_->SetHovered(false);
- duration_display_->SetHovered(false);
- navigation_map_[last_hovered_button_position_]->SetHovered(true);
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(
- false);
- break;
- case 2:
- timeline_->SetHovered(true);
- current_time_display_->SetHovered(true);
- duration_display_->SetHovered(true);
- navigation_map_[last_hovered_button_position_]->SetHovered(false);
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(
- false);
- break;
- case -1:
- timeline_->SetHovered(false);
- current_time_display_->SetHovered(false);
- duration_display_->SetHovered(false);
- navigation_map_[last_hovered_button_position_]->SetHovered(false);
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(
- true);
- default:
- break;
- }
-
- if (key == "ArrowLeft" || key == "ArrowRight") {
- if (vertical_hover_position_ == 2) {
- timeline_->OnMediaKeyboardEvent(&event);
- } else if (vertical_hover_position_ == 1) {
- navigation_map_[last_hovered_button_position_]->SetHovered(false);
- if (key == "ArrowLeft") {
- if (last_hovered_button_position_ >
- static_cast<int>(FullscreenElement::kBack)) {
- last_hovered_button_position_--;
- }
- } else {
- if (last_hovered_button_position_ <
- static_cast<int>(FullscreenElement::kFullscreen)) {
- last_hovered_button_position_++;
- }
- }
- navigation_map_[last_hovered_button_position_]->SetHovered(true);
- } else if (vertical_hover_position_ == -1) {
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(
- false);
- if (key == "ArrowLeft") {
- if (last_hovered_thumbnail_position_ > 0) {
- last_hovered_thumbnail_position_--;
- }
-
- if (last_hovered_thumbnail_position_ < extra_video_cnt_ - 3)
- extra_videos_panel_->scrollBy(-404, 0);
-
- } else {
- if (last_hovered_thumbnail_position_ < extra_video_cnt_ - 1) {
- last_hovered_thumbnail_position_++;
- }
-
- if (last_hovered_thumbnail_position_ > 2)
- extra_videos_panel_->scrollBy(404, 0);
- }
- if (!extra_thumbnail_list_.empty())
- extra_thumbnail_list_[last_hovered_thumbnail_position_]->SetHovered(
- true);
- }
- }
-
- StartHideMediaControlsIfNecessary();
-}
-
-void MediaControlsImpl::CaptionScrollTimerFired(TimerBase*) {
- caption_panel_->setScrollTop(caption_panel_->scrollHeight());
-}
-#endif
-
HTMLVideoElement& MediaControlsImpl::VideoElement() {
return *To<HTMLVideoElement>(&MediaElement());
}
visitor->Trace(display_cutout_fullscreen_button_);
visitor->Trace(volume_control_container_);
visitor->Trace(text_track_manager_);
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- visitor->Trace(back_button_);
- visitor->Trace(backward_button_);
- visitor->Trace(extra_container_list_);
- visitor->Trace(extra_thumbnail_list_);
- visitor->Trace(extra_title_list_);
- visitor->Trace(extra_videos_panel_);
- visitor->Trace(forward_button_);
- visitor->Trace(navigation_map_);
- visitor->Trace(restart_button_);
- visitor->Trace(setting_button_);
- visitor->Trace(title_display_);
- visitor->Trace(time_panel_);
- visitor->Trace(top_panel_);
- visitor->Trace(caption_panel_);
- visitor->Trace(caption_element_);
- visitor->Trace(fullscreen_style_element_);
- visitor->Trace(previous_parent_element_);
-#endif
MediaControls::Trace(visitor);
HTMLDivElement::Trace(visitor);
}
class MediaControlVolumeSliderElement;
class ShadowRoot;
class TextTrack;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-class MediaControlBackButtonElement;
-class MediaControlBackwardButtonElement;
-class MediaControlExternalCaptionDisplayElement;
-class MediaControlExtraVideosPanelElement;
-class MediaControlExtraVideoContainerElement;
-class MediaControlExtraVideoThumbnailDisplayElement;
-class MediaControlExtraVideoTitleDisplayElement;
-class MediaControlForwardButtonElement;
-class MediaControlRestartButtonElement;
-class MediaControlSettingButtonElement;
-class MediaControlTimePanelElement;
-class MediaControlTitleDisplayElement;
-class MediaControlTopPanelElement;
-#endif
// Default implementation of the core/ MediaControls interface used by
// HTMLMediaElement.
// Methods used for Download In-product help.
const MediaControlOverflowMenuButtonElement& OverflowButton() const;
MediaControlOverflowMenuButtonElement& OverflowButton();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- const MediaControlPlaybackSpeedButtonElement& PlaybackSpeedButton() const;
- MediaControlPlaybackSpeedButtonElement& PlaybackSpeedButton();
-#endif
// Accessors for UI elements.
const MediaControlCurrentTimeDisplayElement& CurrentTimeDisplay() const;
void InitializeControls();
void PopulatePanel();
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void PopulateFullscreenPanel();
- void PopulateExtraVideos();
-
- bool IsVideoInsideIframe();
- void GetImagesFromDocument(Document& document, HeapVector<Member<Element>>& elements);
- HeapVector<Member<Element>> GetImagesForExtraVideos();
- String FindThumbnailTitle(Node* node);
- Node* FindThumbnailTitleRecursively(Node* node, String& result);
- bool IsValidElementForTitle(Node* node);
-
- Element* FindExternalCaption();
-
- void HideBottomPanels();
- void ShowBottomPanels();
-
- bool IsMediaFullscreenMode();
- void InitializeFocus();
- void FullscreenFocusMove(Event& event);
-
- void CaptionScrollTimerFired(TimerBase*);
-#endif
-
// Attach hover background div to buttons
void AttachHoverBackground(Element*);
rotate_to_fullscreen_delegate_;
Member<MediaControlsDisplayCutoutDelegate> display_cutout_delegate_;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- Member<MediaControlBackButtonElement> back_button_;
- Member<MediaControlBackwardButtonElement> backward_button_;
- Member<MediaControlExtraVideosPanelElement> extra_videos_panel_;
- Member<MediaControlForwardButtonElement> forward_button_;
- Member<MediaControlRestartButtonElement> restart_button_;
- Member<MediaControlSettingButtonElement> setting_button_;
- Member<MediaControlTimePanelElement> time_panel_;
- Member<MediaControlTitleDisplayElement> title_display_;
- Member<MediaControlTopPanelElement> top_panel_;
- Member<MediaControlExternalCaptionDisplayElement> caption_panel_;
- Member<Element> caption_element_;
- Member<Element> fullscreen_style_element_;
- Member<Element> previous_parent_element_;
-
- bool is_live_ = false;
-
- bool is_fullscreen_ = false;
- HeapVector<Member<Element>> navigation_map_;
- HeapVector<Member<MediaControlExtraVideoContainerElement>>
- extra_container_list_;
- HeapVector<Member<MediaControlExtraVideoThumbnailDisplayElement>>
- extra_thumbnail_list_;
- HeapVector<Member<MediaControlExtraVideoTitleDisplayElement>>
- extra_title_list_;
- int last_hovered_button_position_ = -1;
- int last_hovered_thumbnail_position_ = 0;
- int vertical_hover_position_ = 0;
-
- int extra_video_cnt_ = 0;
-
- HeapTaskRunnerTimer<MediaControlsImpl> caption_scroll_timer_;
-
- AtomicString video_class_attribute_;
-#endif
-
HeapTaskRunnerTimer<MediaControlsImpl> hide_media_controls_timer_;
unsigned hide_timer_behavior_flags_;
bool is_mouse_over_controls_ : 1;
return GetMediaControlsCSS() + GetMediaInterstitialsStyleSheet();
}
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-// static
-String MediaControlsResourceLoader::GetMediaControlsFullscreenCSS() {
- return UncompressResourceAsString(IDR_UASTYLE_MEDIA_CONTROLS_FULLSCREEN_CSS);
-}
-
-String MediaControlsResourceLoader::GetFullscreenUAStyleSheet() {
- return GetMediaControlsFullscreenCSS() + GetMediaInterstitialsStyleSheet();
-}
-
-// static
-String MediaControlsResourceLoader::GetFullscreenSheet() {
- return GetMediaControlsFullscreenCSS() + GetMediaInterstitialsStyleSheet();
-}
-#endif
-
void MediaControlsResourceLoader::InjectMediaControlsUAStyleSheet() {
CSSDefaultStyleSheets& default_style_sheets =
CSSDefaultStyleSheets::Instance();
static String GetMediaInterstitialsStyleSheet();
String GetUAStyleSheet() override;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- String GetFullscreenUAStyleSheet() override;
- static String GetFullscreenSheet();
-#endif
MediaControlsResourceLoader();
private:
String GetMediaControlsCSS() const;
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- static String GetMediaControlsFullscreenCSS();
-#endif
String GetMediaControlsAndroidCSS() const;
};
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M30 45.5C29.1716 45.5 28.5 46.1716 28.5 47C28.5 47.8284 29.1716 48.5 30 48.5L30 45.5ZM13 30L26.9044 19.672L11.0079 12.7944L13 30ZM30 14.5C38.5604 14.5 45.5 21.4396 45.5 30L48.5 30C48.5 19.7827 40.2173 11.5 30 11.5L30 14.5ZM45.5 30C45.5 38.5604 38.5604 45.5 30 45.5L30 48.5C40.2173 48.5 48.5 40.2173 48.5 30L45.5 30ZM19.388 18.7023C22.1626 16.0951 25.8934 14.5 30 14.5L30 11.5C25.1001 11.5 20.6423 13.4069 17.3336 16.5161L19.388 18.7023Z" fill="#4F4B4B"/>
-<path d="M30 47C25.6886 47 21.7521 45.395 18.7552 42.75" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round"/>
-<path d="M25.2378 27.2L22.6458 28.72L21.7178 26.816L26.0378 24.624H27.4618V36H25.2378V27.2ZM29.7353 30.304C29.7353 29.0987 29.8953 28.0533 30.2153 27.168C30.5459 26.2827 31.0259 25.6 31.6553 25.12C32.2953 24.64 33.0686 24.4 33.9753 24.4C34.8819 24.4 35.6499 24.64 36.2793 25.12C36.9086 25.6 37.3833 26.2827 37.7033 27.168C38.0339 28.0533 38.1993 29.0987 38.1993 30.304C38.1993 31.5093 38.0339 32.5547 37.7033 33.44C37.3833 34.3253 36.9086 35.0133 36.2793 35.504C35.6499 35.984 34.8819 36.224 33.9753 36.224C33.0686 36.224 32.2953 35.984 31.6553 35.504C31.0259 35.0133 30.5459 34.3253 30.2153 33.44C29.8953 32.5547 29.7353 31.5093 29.7353 30.304ZM32.0233 30.304C32.0233 31.52 32.1726 32.4587 32.4713 33.12C32.7806 33.7813 33.2819 34.112 33.9753 34.112C34.6686 34.112 35.1646 33.7813 35.4633 33.12C35.7619 32.4587 35.9113 31.52 35.9113 30.304C35.9113 29.088 35.7619 28.1547 35.4633 27.504C35.1646 26.8427 34.6686 26.512 33.9753 26.512C33.2819 26.512 32.7806 26.8427 32.4713 27.504C32.1726 28.1547 32.0233 29.088 32.0233 30.304Z" fill="#4F4B4B"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M30 45.5C29.1716 45.5 28.5 46.1716 28.5 47C28.5 47.8284 29.1716 48.5 30 48.5L30 45.5ZM13 30L26.9044 19.672L11.0079 12.7944L13 30ZM30 14.5C38.5604 14.5 45.5 21.4396 45.5 30L48.5 30C48.5 19.7827 40.2173 11.5 30 11.5L30 14.5ZM45.5 30C45.5 38.5604 38.5604 45.5 30 45.5L30 48.5C40.2173 48.5 48.5 40.2173 48.5 30L45.5 30ZM19.388 18.7023C22.1626 16.0951 25.8934 14.5 30 14.5L30 11.5C25.1001 11.5 20.6423 13.4069 17.3336 16.5161L19.388 18.7023Z" fill="white"/>
-<path d="M30 47C25.6886 47 21.7521 45.395 18.7552 42.75" stroke="white" stroke-width="3" stroke-linecap="round"/>
-<path d="M25.2378 27.2L22.6458 28.72L21.7178 26.816L26.0378 24.624H27.4618V36H25.2378V27.2ZM29.7353 30.304C29.7353 29.0987 29.8953 28.0533 30.2153 27.168C30.5459 26.2827 31.0259 25.6 31.6553 25.12C32.2953 24.64 33.0686 24.4 33.9753 24.4C34.8819 24.4 35.6499 24.64 36.2793 25.12C36.9086 25.6 37.3833 26.2827 37.7033 27.168C38.0339 28.0533 38.1993 29.0987 38.1993 30.304C38.1993 31.5093 38.0339 32.5547 37.7033 33.44C37.3833 34.3253 36.9086 35.0133 36.2793 35.504C35.6499 35.984 34.8819 36.224 33.9753 36.224C33.0686 36.224 32.2953 35.984 31.6553 35.504C31.0259 35.0133 30.5459 34.3253 30.2153 33.44C29.8953 32.5547 29.7353 31.5093 29.7353 30.304ZM32.0233 30.304C32.0233 31.52 32.1726 32.4587 32.4713 33.12C32.7806 33.7813 33.2819 34.112 33.9753 34.112C34.6686 34.112 35.1646 33.7813 35.4633 33.12C35.7619 32.4587 35.9113 31.52 35.9113 30.304C35.9113 29.088 35.7619 28.1547 35.4633 27.504C35.1646 26.8427 34.6686 26.512 33.9753 26.512C33.2819 26.512 32.7806 26.8427 32.4713 27.504C32.1726 28.1547 32.0233 29.088 32.0233 30.304Z" fill="white"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M45 31.5C45.8284 31.5 46.5 30.8284 46.5 30C46.5 29.1716 45.8284 28.5 45 28.5L45 31.5ZM13.9393 28.9393C13.3536 29.5251 13.3536 30.4749 13.9393 31.0607L23.4853 40.6066C24.0711 41.1924 25.0208 41.1924 25.6066 40.6066C26.1924 40.0208 26.1924 39.0711 25.6066 38.4853L17.1213 30L25.6066 21.5147C26.1924 20.9289 26.1924 19.9792 25.6066 19.3934C25.0208 18.8076 24.0711 18.8076 23.4853 19.3934L13.9393 28.9393ZM45 28.5L15 28.5L15 31.5L45 31.5L45 28.5Z" fill="#4F4B4B"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M45 31.5C45.8284 31.5 46.5 30.8284 46.5 30C46.5 29.1716 45.8284 28.5 45 28.5L45 31.5ZM13.9393 28.9393C13.3536 29.5251 13.3536 30.4749 13.9393 31.0607L23.4853 40.6066C24.0711 41.1924 25.0208 41.1924 25.6066 40.6066C26.1924 40.0208 26.1924 39.0711 25.6066 38.4853L17.1213 30L25.6066 21.5147C26.1924 20.9289 26.1924 19.9792 25.6066 19.3934C25.0208 18.8076 24.0711 18.8076 23.4853 19.3934L13.9393 28.9393ZM45 28.5L15 28.5L15 31.5L45 31.5L45 28.5Z" fill="white"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M30 45.5C30.8284 45.5 31.5 46.1716 31.5 47C31.5 47.8284 30.8284 48.5 30 48.5L30 45.5ZM47 30L33.0956 19.672L48.9921 12.7944L47 30ZM30 14.5C21.4396 14.5 14.5 21.4396 14.5 30L11.5 30C11.5 19.7827 19.7827 11.5 30 11.5L30 14.5ZM14.5 30C14.5 38.5604 21.4396 45.5 30 45.5L30 48.5C19.7827 48.5 11.5 40.2173 11.5 30L14.5 30ZM40.612 18.7023C37.8374 16.0951 34.1066 14.5 30 14.5L30 11.5C34.8999 11.5 39.3577 13.4069 42.6664 16.5161L40.612 18.7023Z" fill="#4F4B4B"/>
-<path d="M30 47C34.3114 47 38.2479 45.395 41.2448 42.75" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round"/>
-<path d="M24.2378 27.2L21.6458 28.72L20.7178 26.816L25.0378 24.624H26.4618V36H24.2378V27.2ZM28.7353 30.304C28.7353 29.0987 28.8953 28.0533 29.2153 27.168C29.5459 26.2827 30.0259 25.6 30.6553 25.12C31.2953 24.64 32.0686 24.4 32.9753 24.4C33.8819 24.4 34.6499 24.64 35.2793 25.12C35.9086 25.6 36.3833 26.2827 36.7033 27.168C37.0339 28.0533 37.1993 29.0987 37.1993 30.304C37.1993 31.5093 37.0339 32.5547 36.7033 33.44C36.3833 34.3253 35.9086 35.0133 35.2793 35.504C34.6499 35.984 33.8819 36.224 32.9753 36.224C32.0686 36.224 31.2953 35.984 30.6553 35.504C30.0259 35.0133 29.5459 34.3253 29.2153 33.44C28.8953 32.5547 28.7353 31.5093 28.7353 30.304ZM31.0233 30.304C31.0233 31.52 31.1726 32.4587 31.4713 33.12C31.7806 33.7813 32.2819 34.112 32.9753 34.112C33.6686 34.112 34.1646 33.7813 34.4633 33.12C34.7619 32.4587 34.9113 31.52 34.9113 30.304C34.9113 29.088 34.7619 28.1547 34.4633 27.504C34.1646 26.8427 33.6686 26.512 32.9753 26.512C32.2819 26.512 31.7806 26.8427 31.4713 27.504C31.1726 28.1547 31.0233 29.088 31.0233 30.304Z" fill="#4F4B4B"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M30 45.5C30.8284 45.5 31.5 46.1716 31.5 47C31.5 47.8284 30.8284 48.5 30 48.5L30 45.5ZM47 30L33.0956 19.672L48.9921 12.7944L47 30ZM30 14.5C21.4396 14.5 14.5 21.4396 14.5 30L11.5 30C11.5 19.7827 19.7827 11.5 30 11.5L30 14.5ZM14.5 30C14.5 38.5604 21.4396 45.5 30 45.5L30 48.5C19.7827 48.5 11.5 40.2173 11.5 30L14.5 30ZM40.612 18.7023C37.8374 16.0951 34.1066 14.5 30 14.5L30 11.5C34.8999 11.5 39.3577 13.4069 42.6664 16.5161L40.612 18.7023Z" fill="white"/>
-<path d="M30 47C34.3114 47 38.2479 45.395 41.2448 42.75" stroke="white" stroke-width="3" stroke-linecap="round"/>
-<path d="M24.2378 27.2L21.6458 28.72L20.7178 26.816L25.0378 24.624H26.4618V36H24.2378V27.2ZM28.7353 30.304C28.7353 29.0987 28.8953 28.0533 29.2153 27.168C29.5459 26.2827 30.0259 25.6 30.6553 25.12C31.2953 24.64 32.0686 24.4 32.9753 24.4C33.8819 24.4 34.6499 24.64 35.2793 25.12C35.9086 25.6 36.3833 26.2827 36.7033 27.168C37.0339 28.0533 37.1993 29.0987 37.1993 30.304C37.1993 31.5093 37.0339 32.5547 36.7033 33.44C36.3833 34.3253 35.9086 35.0133 35.2793 35.504C34.6499 35.984 33.8819 36.224 32.9753 36.224C32.0686 36.224 31.2953 35.984 30.6553 35.504C30.0259 35.0133 29.5459 34.3253 29.2153 33.44C28.8953 32.5547 28.7353 31.5093 28.7353 30.304ZM31.0233 30.304C31.0233 31.52 31.1726 32.4587 31.4713 33.12C31.7806 33.7813 32.2819 34.112 32.9753 34.112C33.6686 34.112 34.1646 33.7813 34.4633 33.12C34.7619 32.4587 34.9113 31.52 34.9113 30.304C34.9113 29.088 34.7619 28.1547 34.4633 27.504C34.1646 26.8427 33.6686 26.512 32.9753 26.512C32.2819 26.512 31.7806 26.8427 31.4713 27.504C31.1726 28.1547 31.0233 29.088 31.0233 30.304Z" fill="white"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M18 49L18 37L6 37" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M41 11L41 23L53 23" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18 11L18 23L6 23" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M41 49L41 37L53 37" stroke="#4F4B4B" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M18 49L18 37L6 37" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M41 11L41 23L53 23" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M18 11L18 23L6 23" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M41 49L41 37L53 37" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M7 37L7 49H19" stroke="#838383" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M54 23L54 11L42 11" stroke="#838383" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M7 23L7 11L19 11" stroke="#838383" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M54 37L54 49L42 49" stroke="#838383" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M7 37L7 49H19" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M54 23L54 11L42 11" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M7 23L7 11L19 11" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-<path d="M54 37L54 49L42 49" stroke="white" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"/>
-</svg>
+++ /dev/null
-<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="35" cy="35" r="30" fill="#4F4B4B"/>
-<path d="M30 24L30 46" stroke="#171717" stroke-width="4" stroke-linecap="round"/>
-<path d="M40 24L40 46" stroke="#171717" stroke-width="4" stroke-linecap="round"/>
-</svg>
+++ /dev/null
-<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="35" cy="35" r="30" fill="white"/>
-<path d="M30 24L30 46" stroke="#171717" stroke-width="4" stroke-linecap="round"/>
-<path d="M40 24L40 46" stroke="#171717" stroke-width="4" stroke-linecap="round"/>
-</svg>
+++ /dev/null
-<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="35" cy="35" r="30" fill="#4F4B4B"/>
-<path d="M46.6545 35.7148L30.2064 47.8556C29.8498 48.1188 29.368 48.0121 29.1303 47.6174C29.0453 47.4762 29 47.3104 29 47.1408V22.8591C29 22.3846 29.3474 22 29.776 22C29.9291 22 30.0789 22.0502 30.2064 22.1443L46.6545 34.285C47.0109 34.5483 47.1073 35.0818 46.8696 35.4765C46.8128 35.5708 46.7397 35.6519 46.6545 35.7148Z" fill="#171717"/>
-</svg>
+++ /dev/null
-<svg width="70" height="70" viewBox="0 0 70 70" fill="none" xmlns="http://www.w3.org/2000/svg">
-<circle cx="35" cy="35" r="30" fill="white"/>
-<path d="M46.6545 35.7148L30.2064 47.8556C29.8498 48.1188 29.368 48.0121 29.1303 47.6174C29.0453 47.4762 29 47.3104 29 47.1408V22.8591C29 22.3846 29.3474 22 29.776 22C29.9291 22 30.0789 22.0502 30.2064 22.1443L46.6545 34.285C47.0109 34.5483 47.1073 35.0818 46.8696 35.4765C46.8128 35.5708 46.7397 35.6519 46.6545 35.7148Z" fill="#171717"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M22.4404 29.1752L43.4036 15.1666C43.8581 14.8629 44.4721 14.986 44.7751 15.4414C44.8834 15.6044 44.9412 15.7957 44.9412 15.9914L44.9412 44.0087C44.9412 44.5562 44.4984 45 43.9522 45C43.757 45 43.5661 44.9421 43.4036 44.8335L22.4404 30.8249C21.9861 30.5212 21.8632 29.9056 22.1662 29.4502C22.2386 29.3414 22.3318 29.2478 22.4404 29.1752Z" fill="#4F4B4B"/>
-<rect x="15" y="15" width="2.64706" height="30" rx="0.882353" fill="#4F4B4B"/>
-</svg>
+++ /dev/null
-<svg width="60" height="60" viewBox="0 0 60 60" fill="none" xmlns="http://www.w3.org/2000/svg">
-<path d="M22.4404 29.1752L43.4036 15.1666C43.8581 14.8629 44.4721 14.986 44.7751 15.4414C44.8834 15.6044 44.9412 15.7957 44.9412 15.9914L44.9412 44.0087C44.9412 44.5562 44.4984 45 43.9522 45C43.757 45 43.5661 44.9421 43.4036 44.8335L22.4404 30.8249C21.9861 30.5212 21.8632 29.9056 22.1662 29.4502C22.2386 29.3414 22.3318 29.2478 22.4404 29.1752Z" fill="white"/>
-<rect x="15" y="15" width="2.64706" height="30" rx="0.882353" fill="white"/>
-</svg>
+++ /dev/null
-/* Copyright 2024 Samsung Electronics Inc. All rights reserved.
- Use of this source code is governed by a BSD-style license that can be
- found in the LICENSE file. */
-
-@namespace "http://www.w3.org/1999/xhtml";
-
-/**
- * Panel Structure
- */
-
-div[pseudo="-webkit-media-controls"] {
- writing-mode: horizontal-tb;
- width: inherit;
- height: inherit;
- contain: paint !important;
- direction: ltr;
- display: flex;
- flex-direction: column;
- font-family: 'Roboto', 'Noto', sans-serif;
- color: #000;
- justify-content: flex-end;
- align-items: center;
- font-size: 14px;
-
- margin-top: env(safe-area-inset-top);
- margin-left: env(safe-area-inset-left);
- margin-right: env(safe-area-inset-right);
- margin-bottom: env(safe-area-inset-bottom);
-}
-
-div[pseudo="-webkit-media-controls-enclosure"] {
- bottom: 0;
- text-indent: 0;
- padding: 0;
- margin: 0;
- box-sizing: border-box;
-
- display: flex;
- justify-content: flex-end;
- flex: 1;
- width: 100%;
-}
-
-div[pseudo="-webkit-media-controls-panel"] {
-
- display: flex;
- flex-direction: column;
- justify-content: flex-end;
- user-select: none;
- z-index: 0;
- overflow: hidden;
- bottom: auto;
-
- min-width: 48px;
- flex: 1;
-
- font-size: 12px;
- font-weight: normal; /* Make sure that we don't inherit non-defaults. */
- font-style: normal;
-
- opacity: 1;
- transition: opacity 0.25s cubic-bezier(0.25, 0.1, 0.25, 1);
-}
-
-div[pseudo="-webkit-media-controls-panel"].transparent {
- opacity: 0;
- transition: opacity 1s cubic-bezier(0.25, 0.1, 0.25, 1);
-}
-
-div[pseudo="-webkit-media-controls-panel" i] {
- position: absolute;
- width: 100%;
- height: 100%;
-}
-
-div[pseudo="-webkit-media-controls"].sizing-small div[pseudo="-webkit-media-controls-panel" i] {
- background-size: auto 112px;
-}
-
-div[pseudo="-webkit-media-controls"].sizing-large div[pseudo="-webkit-media-controls-panel" i] {
- background-size: auto 222px;
-}
-
-div[pseudo="-internal-media-controls-top-panel"] {
- background-color: rgba(0, 0, 0, 0.75);
- position: absolute;
- display: flex;
- justify-content: space-between;
- align-items: center;
- width: 100%;
- height: 100px;
- top: 0px;
-
-}
-
-div[pseudo="-internal-media-controls-title-display"] {
- width: 100%;
- height: 100px;
- font-family: Roboto-Regular, Roboto, sans-serif;
- font-size: 30px;
- color: #E3E3E3;
- position: relative;
- margin-left: 30px;
- margin-right: 90px;
-
- display: flex;
- align-items: center;
- justify-content: center;
- text-align: center;
- white-space: pre-wrap;
- overflow: hidden;
- letter-spacing: 0;
-
- padding-left: 50px;
- padding-right: 50px;
-
-}
-
-@keyframes slide {
- from { transform: translateX(0); }
- to { transform: translateX(-100%); }
-}
-
-div[pseudo="-internal-media-controls-time-panel"] {
-
- bottom: 0px;
- flex-direction: row;
- align-items: flex-end;
- display: flex;
- background-color: rgba(0, 0, 0, 0.75);
-
- /* We use flex-start here to ensure that the play button is visible even
- * if we are too small to show all controls.
- */
- justify-content: flex-start;
- user-select: none;
- position: relative;
- width: 100%;
- height: 52px;
- z-index: 0;
- overflow: hidden;
- text-align: right;
- min-width: 48px;
- box-sizing: border-box;
- padding-bottom: 6px;
-}
-
-div[pseudo="-internal-media-controls-button-panel"] {
- flex-direction: row;
- align-items: flex-end;
- display: flex;
- background-color: rgba(0, 0, 0, 0.75);
-
- /* We use flex-start here to ensure that the play button is visible even
- * if we are too small to show all controls.
- */
- justify-content: flex-start;
- user-select: none;
- position: relative;
- width: 100%;
- height: 120px;
- z-index: 0;
- overflow: hidden;
- text-align: right;
- min-width: 48px;
- box-sizing: border-box;
- padding-bottom: 46px;
-}
-
-div[pseudo="-internal-media-controls-time-panel"].show,
-input[pseudo="-webkit-media-controls-timeline"].show,
-div[pseudo="-internal-media-controls-button-panel"].show {
- transform: translateY(0px);
- transition: all 0.3s ease-in-out;
- opacity: 1;
-}
-
-div[pseudo="-internal-media-controls-time-panel"].hide,
-input[pseudo="-webkit-media-controls-timeline"].hide,
-div[pseudo="-internal-media-controls-button-panel"].hide {
- transform: translateY(-340px);
- transition: all 0.3s ease-in-out;
- opacity: 0;
-}
-
-div[pseudo="-internal-media-controls-button-spacer"] {
- opacity: 1;
- flex: 1;
-}
-
-div[pseudo="-internal-media-controls-extra-videos-panel"] {
- position: absolute;
- bottom: 0;
- transition: transform 0.3s ease-in-out;
- transform: translateY(100%);
- display: flex;
-
- width: 100%;
- height: 340px;
- overflow: hidden;
-
- flex-direction: row;
- align-items: flex-end;
- display: flex;
- justify-content: flex-start;
- user-select: none;
-
- background-color: rgba(0, 0, 0, 0.85);
-}
-
-div[pseudo="-internal-media-controls-extra-videos-panel"].show {
- transform: translateY(0);
-}
-
-div[pseudo="-internal-media-controls-extra-video-container"] {
- position: relative;
-
- width: 371px;
- height: 300px;
- margin-top: 10px;
- margin-bottom: 10px;
- margin-left: 30px;
-
-}
-
-
-div[pseudo="-internal-media-controls-extra-video-thumbnail-display"] {
- position: relative;
-
- width: 371px;
- height: 214px;
- background-repeat: no-repeat;
- background-position: center center;
- border-radius: 12px;
- background-size: 357px 200px;
- box-sizing: border-box;
-}
-
-div[pseudo="-internal-media-controls-extra-video-thumbnail-display"]:hover {
- border: solid white 7px;
- border-radius: 12px;
- cursor: pointer;
-}
-
-div[pseudo="-internal-media-controls-extra-video-title-display"] {
- position: relative;
-
- width: 348px;
- height: 82px;
- display: flex;
-
- font-family: Roboto-Regular, Roboto, sans-serif;
- font-size: 20px;
- color: #E3E3E3;
- text-align: start;
- justify-content: center;
- vertical-align: top;
- letter-spacing: 0;
- overflow: hidden;
- padding-top: 7px;
- padding-left: 5px;
- padding-right: 5px;
-}
-
-/*
- * Each hover background div's positioning rules
- * are relative to their parent.
- */
-input[pseudo="-webkit-media-controls-back-button" i],
-input[pseudo="-webkit-media-controls-restart-button" i],
-input[pseudo="-webkit-media-controls-forward-button" i],
-input[pseudo="-webkit-media-controls-backward-button" i],
-input[pseudo="-webkit-media-controls-play-button" i],
-input[pseudo="-internal-media-controls-playback-speed-button" i],
-input[pseudo="-webkit-media-controls-setting-button" i],
-input[pseudo="-webkit-media-controls-fullscreen-button" i] {
- appearance: -internal-media-control;
-
- background-size: 60px;
- background-repeat: no-repeat;
- background-position: center center;
- position: relative;
-
- width: 70px;
- height: 70px;
- min-width: 32px;
- padding: 0;
- border-width: 0;
- background-color: initial;
- margin-right: 60px;
- margin-left: 20px;
-
- left: 15px;
- color: inherit;
- cursor: pointer;
-
- /* Cursor: pointer will cause a highlight when touch on it, this will disable it */
- -webkit-tap-highlight-color: transparent;
-}
-
-input[pseudo="-webkit-media-controls-back-button"] {
- left: 30px;
-}
-
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-back-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-restart-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-forward-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-backward-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-setting-button" i]::-internal-media-controls-button-hover-background,
-div[pseudo="-webkit-media-controls"] input[pseudo="-internal-media-controls-playback-speed-button" i]::-internal-media-controls-button-hover-background {
- background-repeat: no-repeat;
- background-position: center center;
- position: absolute;
- width: 70px;
- height: 70px;
- background-size: 60px;
- left: 0px;
- top: 0px;
- pointer-events: none;
- z-index: 0;
-}
-
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button" i]::-internal-media-controls-button-hover-background {
- left: 0px;
- top: 0px;
- background-size: 70px;
-}
-
-
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-back-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-back-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-restart-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-restart-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-forward-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-forward-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-backward-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-backward-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-setting-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-setting-button" i]:enabled:focus,
-div[pseudo="-webkit-media-controls"] input[pseudo="-internal-media-controls-playback-speed-button" i]:enabled:hover,
-div[pseudo="-webkit-media-controls"] input[pseudo="-internal-media-controls-playback-speed-button" i]:enabled:focus {
- width: 70px;
- height: 70px;
- background-size: 60px;
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-back-button"] {
- background-image: url(btn_player_back__off.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-back-button"]:enabled:hover {
- background-image: url(btn_player_back__on.svg);
-}
-
-[pseudo="-webkit-media-controls"].state-scrubbing [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-play-button"],
-[pseudo="-webkit-media-controls"].state-stopped [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-play-button"] {
- background-image: url(btn_player_play__off.svg);
-}
-
-[pseudo="-webkit-media-controls"].state-scrubbing [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-play-button"]:enabled:hover,
-[pseudo="-webkit-media-controls"].state-stopped [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-play-button"]:enabled:hover {
- background-image: url(btn_player_play__on.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-restart-button"] {
- background-image: url(btn_player_rewind__off.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-restart-button"]:enabled:hover {
- background-image: url(btn_player_rewind__on.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-forward-button"] {
- background-image: url(btn_player_forward_10__off.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-forward-button"]:enabled:hover {
- background-image: url(btn_player_forward_10__on.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-backward-button"] {
- background-image: url(btn_player_back_10__off.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-backward-button"]:enabled:hover {
- background-image: url(btn_player_back_10__on.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-fullscreen-button"] {
- background-image: url(btn_player_fullscreen_ex_off.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-fullscreen-button"]:enabled:hover {
- background-image: url(btn_player_fullscreen_ex_on.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-internal-media-controls-overflow-button"] {
- background-image: url(ic_menu_white.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-internal-media-controls-playback-speed-button"] {
- background-image: url(ic_playback_speed.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-internal-media-controls-playback-speed-button"]:enabled:hover {
- background-image: url(ic_playback_speed_white.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-setting-button"] {
- background-image: url(ic_menu.svg);
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-setting-button"]:enabled:hover {
- background-image: url(ic_menu_white.svg);
-}
-
-[pseudo="-webkit-media-controls"].state-playing input[pseudo="-webkit-media-controls-play-button" i],
-[pseudo="-webkit-media-controls"].state-loading-metadata-playing input[pseudo="-webkit-media-controls-play-button" i],
-[pseudo="-webkit-media-controls"].state-buffering input[pseudo="-webkit-media-controls-play-button" i] {
- background-image: light-dark(url(ic_pause.svg), url(ic_pause_white.svg));
-}
-
-/* For the play button inside the button panel, we want to use a white icon
- * instead. */
-[pseudo="-webkit-media-controls"].state-buffering [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i],
-[pseudo="-webkit-media-controls"].state-loading-metadata-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i],
-[pseudo="-webkit-media-controls"].state-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i] {
- background-image: url(btn_player_pause__off.svg);
-}
-
-[pseudo="-webkit-media-controls"].state-buffering [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
-[pseudo="-webkit-media-controls"].state-loading-metadata-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
-[pseudo="-webkit-media-controls"].state-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover {
- background-image: url(btn_player_pause__on.svg);
-}
-
-[pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button"] {
- /* Undo the extra 16px of left padding on the button panel. We only want that
- * extra padding when the current time is the leftmost item, and not when the
- * play button is leftmost. */
- width: 70px;
- height: 70px;
- background-size: 70px;
- margin-bottom: -5px;
-}
-
-
-/**
- * Timeline
- */
-
-[pseudo="-webkit-media-controls-timeline"] {
- appearance: none;
-
- height: 20px;
- padding-left: 60px;
- padding-right: 60px;
- margin: 0px;
- background-color: rgba(0, 0, 0, 0.75);
- cursor: pointer;
-
- /* Cursor: pointer will cause a highlight when touch on it, this will disable it */
- -webkit-tap-highlight-color: transparent;
-
- /* This prevents layout issues in quirks mode */
- box-sizing: unset !important;
- z-index: 0;
-}
-
-[pseudo="-webkit-media-controls-timeline"]:disabled {
- cursor: default;
-}
-
-[pseudo="-internal-track-segment-highlight-before"],
-[pseudo="-internal-track-segment-highlight-after"],
-[pseudo="-internal-track-segment-background"] {
- height: 6px;
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-timeline" i]::-webkit-slider-thumb {
- transition: opacity 0.3s;
- opacity: 1;
- width: 14px;
- height: 14px;
- margin-top: -4px;
- position: relative;
- z-index: 3;
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-timeline" i]::[pseudo="-webkit-slider-thumb"] {
- transition: opacity 0.3s;
- opacity: 1;
- width: 100px;
- height: 14px;
- margin-top: -4px;
- position: relative;
- z-index: 3;
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-timeline" i] [pseudo="-webkit-slider-thumb"] {
- transition: opacity 0.3s;
- opacity: 1;
- width: 14px;
- height: 100px;
- margin-top: -4px;
- position: relative;
- z-index: 3;
-}
-
-[pseudo="-webkit-slider-thumb"] {
- transition: opacity 0.3s;
- opacity: 1;
- width: 300px;
- height: 300px;
- margin-top: -4px;
- position: relative;
- z-index: 3;
-}
-
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-timeline" i]:hover::-webkit-slider-thumb,
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-timeline" i]:focus::-webkit-slider-thumb {
- opacity: 1;
- box-shadow: 0px 0px 0px 9px rgba(125, 125, 125, 0.5);
- z-index: 5;
-}
-
-[pseudo="-internal-track-segment-highlight-after"],
-input[pseudo="-webkit-media-controls-timeline" i]::-internal-media-controls-segmented-track {
- border-radius: 2px;
-}
-
-[pseudo="-internal-media-controls-segmented-track"] {
- appearance: -internal-media-control;
-
- position: relative;
- height: 6px;
- background: rgba(255, 255, 255, .25);
- flex: 1;
-}
-
-input[pseudo="-webkit-media-controls-timeline" i]::-webkit-slider-thumb {
- appearance: -internal-media-control;
-
- border-radius: 50%;
- background-color: white;
-}
-
-[pseudo="-webkit-slider-thumb"] {
- appearance: -internal-media-control;
-
- border-radius: 50%;
- background-color: orange;
-}
-
-.state-no-source input[pseudo="-webkit-media-controls-timeline" i]::-webkit-slider-thumb {
- display: none;
-}
-
-input[pseudo="-webkit-media-controls-timeline" i]::[pseudo="-internal-track-segment-background"] {
- position: absolute;
- width: 100%;
- top: 0;
- height: 6px;
- overflow: hidden;
-}
-
-[pseudo="-internal-track-segment-highlight-before"],
-[pseudo="-internal-track-segment-highlight-after"] {
- position: absolute;
- top: 0;
- box-shadow: unset;
-}
-
-[pseudo="-internal-track-segment-highlight-before"] {
- background: rgba(255, 255, 255, 1);
-}
-
-[pseudo="-internal-track-segment-highlight-after"] {
- background: rgba(255, 255, 255, 0);
-}
-
-/**
- * Time Display
- */
-
-[pseudo="-webkit-media-controls-current-time-display"],
-[pseudo="-webkit-media-controls-time-remaining-display"],
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-current-time-display"],
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-time-remaining-display"] {
- position: relative;
- color: #A3A3A7;
- font-family: Roboto-Regular, Roboto, sans-serif;
- font-size: 20px;
- z-index: 2;
- height: 27px;
- text-align: right;
- overflow: hidden;
-
- line-height: 27px;
- vertical-align: middle;
-}
-
-[pseudo="-webkit-media-controls-current-time-display"] {
- margin-left: 60px;
-}
-[pseudo="-webkit-media-controls-time-remaining-display"] {
- margin-right: 60px;
-}
-
-[pseudo="-webkit-media-controls-current-time-display"]:hover,
-[pseudo="-webkit-media-controls-time-remaining-display"]:hover,
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-current-time-display"]:hover,
-[pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-time-remaining-display"]:hover {
- color: #FFFFFF;
- font-weight: bold;
-}
-
-/**
- * Overflow Menu
- */
-
-[pseudo="-internal-media-controls-text-track-list"],
-[pseudo="-internal-media-controls-playback-speed-list"],
-[pseudo="-internal-media-controls-overflow-menu-list"] {
- max-height: 250px;
- width: 200px;
- overflow-x: hidden;
- overflow-y: auto;
- white-space: nowrap;
- font-size: 20px;
- background-color: rgba(0, 0, 0, 0);
- box-shadow: 0 1px 9px 0 rgba(0,0,0,0.40);
- border-radius: 2px;
- transition: transform .3s ease-out, opacity .2s linear;
- transform-origin: bottom right;
- border:0;
- padding: 0;
-}
-
-[pseudo="-internal-media-controls-playback-speed-list"] {
- position: fixed;
-}
-
-[pseudo="-internal-media-controls-overflow-menu-list"].closed {
- transform: scale(0);
- opacity: 0;
-}
-
-[pseudo="-internal-media-controls-text-track-list-header"],
-[pseudo="-internal-media-controls-playback-speed-list-header"],
-[pseudo="-internal-media-controls-text-track-list-item"],
-[pseudo="-internal-media-controls-playback-speed-list-item"],
-[pseudo="-internal-media-controls-overflow-menu-list-item"] {
- display: flex;
- align-items: center;
- justify-content: flex-start;
-
- font-family: Roboto-Regular, Roboto, sans-serif;
- font-size: 20px;
- background-color: rgba(0, 0, 0, 0.75);
- color: #E3E3E3;
- letter-spacing: 0;
-
- line-height: 48px;
- padding-left: 16px;
- padding-right: 16px;
- cursor: pointer;
- /* Cursor: pointer will cause a highlight when touch on it, this will disable it */
- -webkit-tap-highlight-color: transparent;
-
- /*
- * Avoid slight text movement after item transition ends.
- * By setting translateZ, we are using hardware acceleration,
- * which allows a smoother transition.
- */
- transform: translateZ(0);
-}
-
-[pseudo="-webkit-media-controls"].sizing-small label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input,
-[pseudo="-webkit-media-controls"].sizing-large label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input {
- margin-left: 0;
- margin-right: 16px;
- width: 24px;
- height: 24px;
- min-width: 24px;
- background-size: 24px;
-}
-
-label[pseudo="-internal-media-controls-overflow-menu-list-item"] input {
- margin-left: -9px;
- margin-right: 6px;
- pointer-events: none;
-}
-
-label[pseudo="-internal-media-controls-overflow-menu-list-item"] div {
- display: inline-grid;
- margin: 16px 0 16px 0;
- overflow: hidden;
-}
-
-label[pseudo="-internal-media-controls-overflow-menu-list-item"] div.with-subtitle {
- margin: 8px 0 8px 0;
-}
-
-label[pseudo="-internal-media-controls-overflow-menu-list-item"] div span {
- line-height: normal;
- overflow: hidden;
- text-overflow: ellipsis;
-}
-
-label[pseudo="-internal-media-controls-text-track-list-item"] span,
-label[pseudo="-internal-media-controls-playback-speed-list-item"] span {
- line-height: normal;
- overflow: hidden;
- text-overflow: ellipsis;
- /*
- * We need to make sure the blue tick has enough space to render. The blue tick needs at least 18px
- * so the max width the span can go is 200(list) - 58(left-padding of list-item)
- * - 16(right-padding of list-item) -30(left and right margin of the checkbox) - 18(blue tick) = 78px
- */
- max-width: 78px;
-}
-
-label[pseudo="-internal-media-controls-overflow-menu-list-item"] div span.subtitle {
- color: rgba(0,0,0,0.54);
-}
-
-/*
- * Overflow menu list item animation
- */
-[pseudo="-webkit-media-controls"] div[pseudo="-internal-media-controls-overflow-menu-list" i].closed > label {
- transform: translate(0px, 15px);
- opacity: 0;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i] {
- transition: transform .2s, opacity .4s;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-0 {
- transition: opacity .4s .1s ease-in;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-1 {
- transition-delay: .15s;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-2 {
- transition-delay: .2s;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-3 {
- transition-delay: .25s;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-4 {
- transition-delay: .3s;
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-5 {
- transition-delay: .35s
-}
-
-[pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i].animated-6 {
- transition-delay: .4s
-}
-
-[pseudo="-internal-media-controls-overflow-menu-list-item"]:active {
- background-color: light-dark(#e0e0e0, #454545);
-}
-
-[pseudo="-internal-media-controls-text-track-list-header"],
-[pseudo="-internal-media-controls-playback-speed-list-header"],
-[pseudo="-internal-media-controls-text-track-list-item"],
-[pseudo="-internal-media-controls-playback-speed-list-item "]{
- padding-left: 58px;
- justify-content: space-between;
-}
-
-[pseudo="-internal-media-controls-playback-speed-list-item"]:focus {
- background-color: rgba(100, 100, 100, 0.75);
- outline: none;
-}
-
-[pseudo="-internal-media-controls-text-track-list-header"],
-[pseudo="-internal-media-controls-playback-speed-list-header"] {
- background-size: 18px;
- background-position: 20px center;
- background-repeat: no-repeat;
- background-image: light-dark(url(ic_arrow_back.svg), url(ic_arrow_back_white.svg));
-}
-
-label[pseudo="-internal-media-controls-text-track-list-item"] *,
-label[pseudo="-internal-media-controls-playback-speed-list-item"] * {
- pointer-events: none;
-}
-
-label[pseudo="-internal-media-controls-text-track-list-item"] input,
-label[pseudo="-internal-media-controls-playback-speed-list-item"] input {
- appearance: none;
- width: 18px;
- height: 18px;
- margin: 15px;
- float: right;
-}
-
-label[pseudo="-internal-media-controls-text-track-list-item"] input:checked,
-label[pseudo="-internal-media-controls-playback-speed-list-item"] input:checked {
- background: url(ic_check_blue.svg) no-repeat center center;
-}
-
-/**
- * Preload state
- */
-
-.use-default-poster {
- background: #333;
-}
-
-/**
- * Animated Arrow Container
- */
-
-video::-internal-media-controls-animated-arrow-container {
- position: absolute;
- display: flex;
- align-items: center;
- left: 0;
- top: 0;
- right: 0;
- bottom: 0;
- overflow: hidden;
- z-index: 1;
- pointer-events: none;
-}
-
-/**
- * Text Tracks
- */
-video::-webkit-media-text-track-container {
- position: relative !important;
- width: inherit;
- height: inherit;
- overflow: hidden;
- contain: paint !important;
-
- font: 22px sans-serif;
- text-align: center;
- color: rgba(255, 255, 255, 1);
-
- letter-spacing: normal;
- word-spacing: normal;
- text-transform: none;
- text-indent: 0;
- text-decoration: none;
- pointer-events: none;
- user-select: none;
- word-break: break-word;
-}
-
-video::cue {
- display: inline;
-
- background-color: rgba(0, 0, 0, 0.8);
- padding: 2px 2px;
-}
-
-video::-webkit-media-text-track-region {
- position: absolute;
- line-height: 5.33vh;
- writing-mode: horizontal-tb;
- background: rgba(0, 0, 0, 0.8);
- color: rgba(255, 255, 255, 1);
- word-wrap: break-word;
- overflow-wrap: break-word;
- overflow: hidden;
-}
-
-video::-webkit-media-text-track-region-container {
- position: relative;
-
- display: flex;
- flex-flow: column;
- flex-direction: column;
-}
-
-video::-webkit-media-text-track-region-container.scrolling {
- transition: top 433ms linear;
-}
-
-video::-webkit-media-text-track-display {
- position: absolute;
- overflow: hidden;
- white-space: pre-wrap;
- box-sizing: border-box;
- flex: 0 0 auto;
-}
-
-video::cue(:future) {
- color: gray;
-}
-
-video::cue(b) {
- font-weight: bold;
-}
-
-video::cue(u) {
- text-decoration: underline;
-}
-
-video::cue(i) {
- font-style: italic;
-}
-
-video::cue(rt) {
- display: block;
- font-size: 50%;
- line-height: normal;
- text-align: start;
- text-emphasis: none;
- text-indent: 0;
-}
-
-
-/**
- * Overlay cast button
- */
-
-video::-internal-media-controls-overlay-cast-button {
- appearance: none;
- background-image: url(default_100_percent/mediaplayer_overlay_cast_off.png);
- background-size: cover;
- background-repeat: no-repeat;
- background-position: center center;
- display: flex;
- position: absolute;
- top: 8px;
- left: 8px;
- margin-left: 0px;
- margin-top: 0px;
- border-width: 0px;
- background-color: transparent;
- width: 48px;
- height: 48px;
- padding: 0;
- transition: opacity 0.3s;
-}
-
-video::-internal-media-controls-overlay-cast-button.on {
- background-image: url(default_100_percent/mediaplayer_overlay_cast_on.png);
-}
-
-/**
- * Scrubbing
- */
-
-video::-internal-media-controls-scrubbing-message {
- position: absolute;
- top: 12px;
- text-align: center;
- width: 100%;
- color: #FFFFFF;
-}
-
-video::-internal-media-controls-text-track-list-kind-captions {
- appearance: none;
- background-image: light-dark(url(ic_closed_caption.svg), url(ic_closed_caption_white.svg));
- background-size: 18px;
- background-repeat: no-repeat;
- background-position: center center;
- height: 18px;
- width: 18px;
- vertical-align: middle;
-}
-
-video::-internal-media-controls-text-track-list-kind-descriptions {
- appearance: none;
- background-image: light-dark(url(ic_audio_descriptions.svg), url(ic_audio_descriptions.svg));
- background-size: 18px;
- background-repeat: no-repeat;
- background-position: center center;
- height: 18px;
- width: 18px;
- vertical-align: middle;
-}
-
-video::-internal-media-controls-text-track-list-kind-subtitles {
- appearance: none;
- background-image: light-dark(url(ic_subtitles.svg), url(ic_subtitles_white.svg));
- background-size: 18px;
- background-repeat: no-repeat;
- background-position: center center;
- height: 18px;
- width: 18px;
- vertical-align: middle;
-}
-
-video::-internal-media-controls-overflow-menu-list,
-video::-internal-media-controls-playback-speed-list,
-video::-internal-media-controls-text-track-list {
- /* Ideally, overlay should only be set to 'auto' when IsWanted() is true,
- but there is currently no way to match that with a selector. If IsWanted()
- is false we force a display:none in the code, which means we will not
- render these pseudo elements in the top layer anyway. */
- overlay: auto !important;
-}
-
-video::-internal-media-controls-external-caption-display {
- position: fixed;
- left: 50%;
- transform: translateX(-50%);
- bottom: 10px;
- z-index: 10;
- min-height: 50px;
- overflow: hidden;
- max-height: 125px;
- background-color: rgba(0, 0, 0, 0.75);
- font-size: 32px;
- color: white;
- text-align: center;
-}
-
-video::-internal-media-controls-external-caption-display.show-control-panel {
- bottom: 192px;
-}
-
-video::-internal-media-controls-external-caption-display.show-extra-panel {
- bottom: 340px;
-}
-
-@media ua-forced-colors {
-
- /* The backplate of the main controls */
- [pseudo="-webkit-media-controls"] div[pseudo="-webkit-media-controls-panel" i] {
- background: url('background_line.svg') repeat-x bottom left;
- }
-
- /* The background for hovered icons */
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:focus,
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:focus,
- [pseudo="-webkit-media-controls"] input[pseudo="-internal-media-controls-overflow-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"] input[pseudo="-internal-media-controls-overflow-button" i]:enabled:focus {
- background-color: highlight;
- transition: background-color 0s;
- }
-
- /* In high contrast mode, the icons are inverted, i.e. non-white svgs become white svgs, white become non-white. */
- [pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-play-button"] {
- background-image: url(ic_play_arrow.svg);
- }
- [pseudo="-webkit-media-controls"].state-playing input[pseudo="-webkit-media-controls-play-button" i],
- [pseudo="-webkit-media-controls"].state-loading-metadata-playing input[pseudo="-webkit-media-controls-play-button" i],
- [pseudo="-webkit-media-controls"].state-buffering input[pseudo="-webkit-media-controls-play-button" i] {
- background-image: url(ic_pause_white.svg);
- }
- [pseudo="-webkit-media-controls"].state-buffering [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i],
- [pseudo="-webkit-media-controls"].state-loading-metadata-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i],
- [pseudo="-webkit-media-controls"].state-playing [pseudo="-internal-media-controls-button-panel"] input[pseudo="-webkit-media-controls-play-button" i] {
- background-image: url(ic_pause.svg);
- }
- [pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-fullscreen-button"] {
- background-image: url(ic_fullscreen.svg);
- }
- [pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-fullscreen-button"].fullscreen {
- background-image: url(ic_fullscreen_exit.svg);
- }
-
- /* Change icons' color when hovered in the main UI */
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover {
- background-image: url(ic_play_arrow_white.svg);
- }
- [pseudo="-webkit-media-controls"].state-buffering input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"].state-loading-metadata-playing input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"].state-playing input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover {
- background-image: url(ic_pause_white.svg);
- }
- [pseudo="-webkit-media-controls"] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:hover {
- background-image: url(ic_fullscreen_white.svg);
- }
- [pseudo="-webkit-media-controls"] [pseudo="-webkit-media-controls-panel"] [pseudo="-webkit-media-controls-fullscreen-button"].fullscreen:enabled:hover {
- background-image: url(ic_fullscreen_exit_white.svg);
- }
-
- /* Icons shouldn't change color when hovered in the overflow menu */
- [pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover {
- background-image: url(ic_play_arrow.svg);
- }
- [pseudo="-webkit-media-controls"].state-buffering label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"].state-loading-metadata-playing label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover,
- [pseudo="-webkit-media-controls"].state-playing label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input[pseudo="-webkit-media-controls-play-button" i]:enabled:hover {
- background-image: url(ic_pause.svg);
- }
- [pseudo="-webkit-media-controls"] label[pseudo="-internal-media-controls-overflow-menu-list-item" i] input[pseudo="-webkit-media-controls-fullscreen-button" i]:enabled:hover {
- background-image: url(ic_fullscreen.svg);
- }
-
- /* Overflow menu */
- video::-internal-media-controls-text-track-list,
- video::-internal-media-controls-overflow-menu-list {
- background: Window;
- border-color: WindowText;
- border: 1px solid WindowText;
- box-shadow: unset;
- }
- video::-internal-media-controls-text-track-list-header,
- video::-internal-media-controls-text-track-list-item,
- video::-internal-media-controls-overflow-menu-list-item {
- background-color: Window;
- color: WindowText;
- }
- video::-internal-media-controls-overflow-menu-list-item {
- border: 1px solid Window;
- margin: 2px;
- }
- label[pseudo="-internal-media-controls-overflow-menu-list-item"] div span.subtitle {
- color: WindowText;
- }
-}
<release seq="1">
<structures fallback_to_low_resolution="true">
<structure type="chrome_html" name="IDR_UASTYLE_MEDIA_CONTROLS_CSS" file="mediaControls.css" flattenhtml="true" />
- <structure type="chrome_html" name="IDR_UASTYLE_MEDIA_CONTROLS_FULLSCREEN_CSS" file="mediaControls_fullscreen.css" flattenhtml="true" />
<structure type="chrome_html" name="IDR_UASTYLE_MEDIA_INTERSTITIALS_CSS" file="mediaInterstitials.css" flattenhtml="true" />
<structure type="chrome_html" name="IDR_SHADOWSTYLE_MEDIA_CONTROLS_LOADING_CSS" file="mediaControls_loading.css" flattenhtml="true" />
</structures>
}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void WidgetBase::NotifyHWBack() {
- if (widget_host_)
- widget_host_->NotifyHWBack();
-}
-
-void WidgetBase::MediaSettingClicked() {
- if (widget_host_)
- widget_host_->MediaSettingClicked();
-}
-#endif
-
void WidgetBase::UpdateTooltipUnderCursor(const String& tooltip_text,
TextDirection dir) {
widget_host_->UpdateTooltipUnderCursor(
const std::string& url,
const std::string& lang);
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack();
- void MediaSettingClicked();
-#endif
void UpdateTooltipUnderCursor(const String& tooltip_text, TextDirection dir);
// This function allows us to trigger a tooltip to show from a keypress. The
}
#endif // IS_TIZEN_TV
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void RWHVAuraCommonHelperEfl::NotifyHWBack() {
- LOG(INFO) << __func__;
- if (web_contents_)
- web_contents_->GetDelegate()->NotifyHWBack();
-}
-
-void RWHVAuraCommonHelperEfl::MediaSettingClicked() {
- LOG(INFO) << __func__;
- if (web_contents_)
- web_contents_->GetDelegate()->MediaSettingClicked();
-}
-#endif
-
void RWHVAuraCommonHelperEfl::OnGetMainFrameScrollbarVisible(
int callback_id, bool visible) {
web_contents_->GetDelegate()->OnGetMainFrameScrollbarVisible(callback_id,
void UpdateCustomCursor(const ui::Cursor& cursor);
void UpdateCursorName(const WebCursor& cursor);
ui::ImeStyle GetImeStyle();
-#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack();
- void MediaSettingClicked();
#endif
void SetCursor(const WebCursor& cursor);
void UpdateCursor(const WebCursor&);
#endif
#if defined(TIZEN_CONTENT_NAVIGATOR)
-void EWebView::NotifyHWBack() {
- LOG(INFO) << __func__;
- SmartCallback<EWebViewCallbacks::HWBackUnhandled>().call();
-}
-
-void EWebView::MediaSettingClicked() {
- LOG(INFO) << __func__;
- SmartCallback<EWebViewCallbacks::MediaSettingClicked>().call();
-}
-
void EWebView::SetIMERecommendedWords(const char* words) {
if (!rwhva() || !rwhva()->offscreen_helper())
return;
#endif // IS_TIZEN_TV
#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack();
- void MediaSettingClicked();
void SetIMERecommendedWords(const char* words);
void SetContentNavigatorEnabled(bool enabled);
bool GetContentNavigatorEnabled();
DRMInitComplete,
DRMError,
#endif
-#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- MediaSettingClicked,
#endif
OverscrolledLeft,
OverscrolledRight,
DECLARE_EWK_VIEW_CALLBACK(DRMError, "drm,error", void*);
#endif
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-DECLARE_EWK_VIEW_CALLBACK(MediaSettingClicked, "media,setting,clicked", void);
-#endif
DECLARE_EWK_VIEW_CALLBACK(OverscrolledLeft, "overscrolled,left", void);
DECLARE_EWK_VIEW_CALLBACK(OverscrolledRight, "overscrolled,right", void);
DECLARE_EWK_VIEW_CALLBACK(OverscrolledTop, "overscrolled,top", void);
}
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
-void WebContentsDelegateEfl::NotifyHWBack() {
- web_view_->NotifyHWBack();
-}
-
-void WebContentsDelegateEfl::MediaSettingClicked() {
- web_view_->MediaSettingClicked();
-}
-#endif
-
void WebContentsDelegateEfl::NavigationStateChanged(
WebContents* source, InvalidateTypes changed_flags) {
// We always notfiy clients about title invalidation, even if its text
void NotifyDRMError(int error_code, const std::string& error_string) override;
#endif
#endif
-#if defined(TIZEN_CONTENT_NAVIGATOR)
- void NotifyHWBack() override;
- void MediaSettingClicked() override;
-#endif
#if defined(TIZEN_AUTOFILL)
void UpdateAutofillIfRequired();