Bug 1407040 - Change HTMLMediaElement QIs to FromContent calls; r=bz
MozReview-Commit-ID: JoHA0LbJnu9
--- a/dom/base/nsDocument.cpp
+++ b/dom/base/nsDocument.cpp
@@ -4808,21 +4808,18 @@ nsDocument::SetScopeObject(nsIGlobalObje
}
}
}
}
static void
CheckIfContainsEMEContent(nsISupports* aSupports, void* aContainsEME)
{
- nsCOMPtr<nsIDOMHTMLMediaElement> domMediaElem(do_QueryInterface(aSupports));
- if (domMediaElem) {
- nsCOMPtr<nsIContent> content(do_QueryInterface(domMediaElem));
- MOZ_ASSERT(content, "aSupports is not a content");
- HTMLMediaElement* mediaElem = static_cast<HTMLMediaElement*>(content.get());
+ nsCOMPtr<nsIContent> content(do_QueryInterface(aSupports));
+ if (auto mediaElem = HTMLMediaElement::FromContentOrNull(content)) {
bool* contains = static_cast<bool*>(aContainsEME);
if (mediaElem->GetMediaKeys()) {
*contains = true;
}
}
}
bool
@@ -4832,21 +4829,18 @@ nsDocument::ContainsEMEContent()
EnumerateActivityObservers(CheckIfContainsEMEContent,
static_cast<void*>(&containsEME));
return containsEME;
}
static void
CheckIfContainsMSEContent(nsISupports* aSupports, void* aContainsMSE)
{
- nsCOMPtr<nsIDOMHTMLMediaElement> domMediaElem(do_QueryInterface(aSupports));
- if (domMediaElem) {
- nsCOMPtr<nsIContent> content(do_QueryInterface(domMediaElem));
- MOZ_ASSERT(content, "aSupports is not a content");
- HTMLMediaElement* mediaElem = static_cast<HTMLMediaElement*>(content.get());
+ nsCOMPtr<nsIContent> content(do_QueryInterface(aSupports));
+ if (auto mediaElem = HTMLMediaElement::FromContentOrNull(content)) {
bool* contains = static_cast<bool*>(aContainsMSE);
RefPtr<MediaSource> ms = mediaElem->GetMozMediaSourceObject();
if (ms) {
*contains = true;
}
}
}
@@ -4857,21 +4851,18 @@ nsDocument::ContainsMSEContent()
EnumerateActivityObservers(CheckIfContainsMSEContent,
static_cast<void*>(&containsMSE));
return containsMSE;
}
static void
NotifyActivityChanged(nsISupports *aSupports, void *aUnused)
{
- nsCOMPtr<nsIDOMHTMLMediaElement> domMediaElem(do_QueryInterface(aSupports));
- if (domMediaElem) {
- nsCOMPtr<nsIContent> content(do_QueryInterface(domMediaElem));
- MOZ_ASSERT(content, "aSupports is not a content");
- HTMLMediaElement* mediaElem = static_cast<HTMLMediaElement*>(content.get());
+ nsCOMPtr<nsIContent> content(do_QueryInterface(aSupports));
+ if (auto mediaElem = HTMLMediaElement::FromContentOrNull(content)) {
mediaElem->NotifyOwnerDocumentActivityChanged();
}
nsCOMPtr<nsIObjectLoadingContent> objectLoadingContent(do_QueryInterface(aSupports));
if (objectLoadingContent) {
nsObjectLoadingContent* olc = static_cast<nsObjectLoadingContent*>(objectLoadingContent.get());
olc->NotifyOwnerDocumentActivityChanged();
}
nsCOMPtr<nsIDocumentActivity> objectDocumentActivity(do_QueryInterface(aSupports));
--- a/dom/base/nsNodeUtils.cpp
+++ b/dom/base/nsNodeUtils.cpp
@@ -600,19 +600,18 @@ nsNodeUtils::CloneAndAdopt(nsINode *aNod
if (elm->MayHaveSelectionChangeEventListener()) {
window->SetHasSelectionChangeEventListeners();
}
}
}
}
if (wasRegistered && oldDoc != newDoc) {
- nsCOMPtr<nsIDOMHTMLMediaElement> domMediaElem(do_QueryInterface(aNode));
- if (domMediaElem) {
- HTMLMediaElement* mediaElem = static_cast<HTMLMediaElement*>(aNode);
+ nsIContent* content = aNode->AsContent();
+ if (auto mediaElem = HTMLMediaElement::FromContentOrNull(content)) {
mediaElem->NotifyOwnerDocumentActivityChanged();
}
nsCOMPtr<nsIObjectLoadingContent> objectLoadingContent(do_QueryInterface(aNode));
if (objectLoadingContent) {
nsObjectLoadingContent* olc = static_cast<nsObjectLoadingContent*>(objectLoadingContent.get());
olc->NotifyOwnerDocumentActivityChanged();
}
}
--- a/dom/html/HTMLAudioElement.h
+++ b/dom/html/HTMLAudioElement.h
@@ -16,16 +16,18 @@ typedef uint16_t nsMediaReadyState;
namespace mozilla {
namespace dom {
class HTMLAudioElement final : public HTMLMediaElement
{
public:
typedef mozilla::dom::NodeInfo NodeInfo;
+ NS_IMPL_FROMCONTENT_HTML_WITH_TAG(HTMLAudioElement, audio)
+
explicit HTMLAudioElement(already_AddRefed<NodeInfo>& aNodeInfo);
// Element
virtual bool IsInteractiveHTMLContent(bool aIgnoreTabindex) const override;
// nsIDOMHTMLMediaElement
using HTMLMediaElement::GetPaused;
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -2,16 +2,18 @@
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "mozilla/dom/HTMLMediaElement.h"
#include "mozilla/dom/HTMLMediaElementBinding.h"
#include "mozilla/dom/HTMLSourceElement.h"
+#include "mozilla/dom/HTMLAudioElement.h"
+#include "mozilla/dom/HTMLVideoElement.h"
#include "mozilla/dom/ElementInlines.h"
#include "mozilla/dom/Promise.h"
#include "mozilla/ArrayUtils.h"
#include "mozilla/NotNull.h"
#include "mozilla/MathAlgorithms.h"
#include "mozilla/AsyncEventDispatcher.h"
#include "mozilla/dom/MediaEncryptedEvent.h"
#include "mozilla/EMEUtils.h"
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -139,16 +139,19 @@ public:
// nsIDOMHTMLMediaElement
NS_DECL_NSIDOMHTMLMEDIAELEMENT
// nsISupports
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLMediaElement,
nsGenericHTMLElement)
+ NS_IMPL_FROMCONTENT_HELPER(HTMLMediaElement,
+ IsAnyOfHTMLElements(nsGkAtoms::video,
+ nsGkAtoms::audio))
// nsIDOMEventTarget
virtual nsresult
GetEventTargetParent(EventChainPreVisitor& aVisitor) override;
virtual bool ParseAttribute(int32_t aNamespaceID,
nsAtom* aAttribute,
const nsAString& aValue,
--- a/layout/generic/nsVideoFrame.cpp
+++ b/layout/generic/nsVideoFrame.cpp
@@ -804,43 +804,38 @@ nsVideoFrame::AttributeChanged(int32_t a
aModType);
}
void
nsVideoFrame::OnVisibilityChange(Visibility aNewVisibility,
const Maybe<OnNonvisible>& aNonvisibleAction)
{
if (HasVideoElement()) {
- nsCOMPtr<nsIDOMHTMLMediaElement> mediaDomElement = do_QueryInterface(mContent);
- mediaDomElement->OnVisibilityChange(aNewVisibility);
+ static_cast<HTMLMediaElement*>(mContent)->OnVisibilityChange(aNewVisibility);
}
nsCOMPtr<nsIImageLoadingContent> imageLoader = do_QueryInterface(mPosterImage);
if (imageLoader) {
imageLoader->OnVisibilityChange(aNewVisibility,
aNonvisibleAction);
}
nsContainerFrame::OnVisibilityChange(aNewVisibility, aNonvisibleAction);
}
bool nsVideoFrame::HasVideoElement() {
- nsCOMPtr<nsIDOMHTMLMediaElement> mediaDomElement = do_QueryInterface(mContent);
- return mediaDomElement->IsVideo();
+ return static_cast<HTMLMediaElement*>(mContent)->IsVideo();
}
bool nsVideoFrame::HasVideoData()
{
if (!HasVideoElement())
return false;
HTMLVideoElement* element = static_cast<HTMLVideoElement*>(GetContent());
nsIntSize size(0, 0);
element->GetVideoSize(&size);
return size != nsIntSize(0,0);
}
void nsVideoFrame::UpdateTextTrack()
{
- HTMLMediaElement* element = static_cast<HTMLMediaElement*>(GetContent());
- if (element) {
- element->NotifyCueDisplayStatesChanged();
- }
+ static_cast<HTMLMediaElement*>(mContent)->NotifyCueDisplayStatesChanged();
}