blob: fc2e1b83fe2a1fa9de1ffdf746ce5fc10f8df6c5 [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) {
DCHECK(name == HTMLNames::disableremoteplaybackAttr);
return element.FastHasAttribute(name);
}
// static
void HTMLMediaElementRemotePlayback::SetBooleanAttribute(
const QualifiedName& name,
HTMLMediaElement& element,
bool value) {
DCHECK(name == HTMLNames::disableremoteplaybackAttr);
element.SetBooleanAttribute(name, value);
HTMLMediaElementRemotePlayback& self =
HTMLMediaElementRemotePlayback::From(element);
if (self.remote_ && value)
self.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.GetDocument();
if (!document.GetFrame())
return nullptr;
if (!self.remote_)
self.remote_ = RemotePlayback::Create(element);
return self.remote_;
}
// static
const char* HTMLMediaElementRemotePlayback::SupplementName() {
return "HTMLMediaElementRemotePlayback";
}
DEFINE_TRACE(HTMLMediaElementRemotePlayback) {
visitor->Trace(remote_);
Supplement<HTMLMediaElement>::Trace(visitor);
}
} // namespace blink