blob: c7195f8cb5025f41cdb5ea583cb91ceb66ad2435 [file] [log] [blame]
// Copyright 2015 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 "modules/remoteplayback/HTMLMediaElementRemotePlayback.h"
#include "core/dom/DOMException.h"
#include "core/dom/Document.h"
#include "core/dom/QualifiedName.h"
#include "core/html/HTMLMediaElement.h"
#include "modules/remoteplayback/RemotePlayback.h"
namespace blink {
// static
bool HTMLMediaElementRemotePlayback::fastHasAttribute(
const QualifiedName& name,
const HTMLMediaElement& element) {
ASSERT(name == HTMLNames::disableremoteplaybackAttr);
return element.fastHasAttribute(name);
}
// static
void HTMLMediaElementRemotePlayback::setBooleanAttribute(
const QualifiedName& name,
HTMLMediaElement& element,
bool value) {
ASSERT(name == HTMLNames::disableremoteplaybackAttr);
element.setBooleanAttribute(name, value);
HTMLMediaElementRemotePlayback& self =
HTMLMediaElementRemotePlayback::from(element);
if (self.m_remote && value)
self.m_remote->remotePlaybackDisabled();
}
// static
HTMLMediaElementRemotePlayback& HTMLMediaElementRemotePlayback::from(
HTMLMediaElement& element) {
HTMLMediaElementRemotePlayback* supplement =
static_cast<HTMLMediaElementRemotePlayback*>(
Supplement<HTMLMediaElement>::from(element, supplementName()));
if (!supplement) {
supplement = new HTMLMediaElementRemotePlayback();
provideTo(element, supplementName(), supplement);
}
return *supplement;
}
// static
RemotePlayback* HTMLMediaElementRemotePlayback::remote(
HTMLMediaElement& element) {
HTMLMediaElementRemotePlayback& self =
HTMLMediaElementRemotePlayback::from(element);
Document& document = element.document();
if (!document.frame())
return nullptr;
if (!self.m_remote)
self.m_remote = RemotePlayback::create(element);
return self.m_remote;
}
// static
const char* HTMLMediaElementRemotePlayback::supplementName() {
return "HTMLMediaElementRemotePlayback";
}
DEFINE_TRACE(HTMLMediaElementRemotePlayback) {
visitor->trace(m_remote);
Supplement<HTMLMediaElement>::trace(visitor);
}
} // namespace blink