blob: 84d56ac51ef1c904a632297175ae66c58b35ef53 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "third_party/blink/renderer/modules/media_controls/elements/media_control_scrubbing_message_element.h"
#include "third_party/blink/public/strings/grit/blink_strings.h"
#include "third_party/blink/renderer/core/dom/shadow_root.h"
#include "third_party/blink/renderer/core/html/html_style_element.h"
#include "third_party/blink/renderer/core/html/media/html_media_element.h"
#include "third_party/blink/renderer/modules/media_controls/elements/media_control_elements_helper.h"
#include "third_party/blink/renderer/modules/media_controls/media_controls_resource_loader.h"
#include "third_party/blink/renderer/platform/bindings/exception_state.h"
#include "third_party/blink/renderer/platform/heap/heap.h"
#include "third_party/blink/renderer/platform/text/platform_locale.h"
namespace blink {
MediaControlScrubbingMessageElement::MediaControlScrubbingMessageElement(
MediaControlsImpl& media_controls)
: MediaControlDivElement(media_controls) {
SetShadowPseudoId(AtomicString("-internal-media-controls-scrubbing-message"));
CreateUserAgentShadowRoot();
SetIsWanted(false);
}
void MediaControlScrubbingMessageElement::PopulateChildren() {
ShadowRoot* shadow_root = GetShadowRoot();
// This stylesheet element will contain rules that are specific to the
// scrubbing message. The shadow DOM protects these rules from bleeding
// across to the parent DOM.
auto* style = MakeGarbageCollected<HTMLStyleElement>(GetDocument(),
CreateElementFlags());
style->setTextContent(
MediaControlsResourceLoader::GetScrubbingMessageStyleSheet());
shadow_root->ParserAppendChild(style);
HTMLDivElement* arrow_left_div1 =
MediaControlElementsHelper::CreateDivWithId("arrow-left1", shadow_root);
HTMLDivElement* arrow_left_div2 =
MediaControlElementsHelper::CreateDivWithId("arrow-left2", shadow_root);
HTMLDivElement* message_div =
MediaControlElementsHelper::CreateDivWithId("message", shadow_root);
HTMLDivElement* arrow_right_div1 =
MediaControlElementsHelper::CreateDivWithId("arrow-right1", shadow_root);
HTMLDivElement* arrow_right_div2 =
MediaControlElementsHelper::CreateDivWithId("arrow-right2", shadow_root);
arrow_left_div1->setInnerHTML(
MediaControlsResourceLoader::GetArrowLeftSVGImage());
arrow_left_div2->setInnerHTML(
MediaControlsResourceLoader::GetArrowLeftSVGImage());
message_div->setInnerText(
MediaElement().GetLocale().QueryString(IDS_MEDIA_SCRUBBING_MESSAGE_TEXT),
ASSERT_NO_EXCEPTION);
arrow_right_div1->setInnerHTML(
MediaControlsResourceLoader::GetArrowRightSVGImage());
arrow_right_div2->setInnerHTML(
MediaControlsResourceLoader::GetArrowRightSVGImage());
}
void MediaControlScrubbingMessageElement::SetIsWanted(bool wanted) {
// Populate the DOM on demand.
if (wanted && !GetShadowRoot()->firstChild())
PopulateChildren();
MediaControlDivElement::SetIsWanted(wanted);
}
} // namespace blink