Bug 1475511: Introduce nsIDocument::MediaDocumentKind. r=xidorn
MozReview-Commit-ID: BGG0vinXdad
--- a/dom/base/nsIDocument.h
+++ b/dom/base/nsIDocument.h
@@ -2794,16 +2794,30 @@ public:
* Returns Doc_Theme_None if there is no lightweight theme specified,
* Doc_Theme_Dark for a dark theme, Doc_Theme_Bright for a light theme, and
* Doc_Theme_Neutral for any other theme. This is used to determine the state
* of the pseudoclasses :-moz-lwtheme and :-moz-lwtheme-text.
*/
virtual DocumentTheme GetDocumentLWTheme() { return Doc_Theme_None; }
virtual DocumentTheme ThreadSafeGetDocumentLWTheme() const { return Doc_Theme_None; }
+ // Whether we're a media document or not.
+ enum class MediaDocumentKind
+ {
+ None,
+ Video,
+ Image,
+ Plugin,
+ };
+
+ virtual enum MediaDocumentKind MediaDocumentKind() const
+ {
+ return MediaDocumentKind::None;
+ }
+
/**
* Returns the document state.
* Document state bits have the form NS_DOCUMENT_STATE_* and are declared in
* nsIDocument.h.
*/
mozilla::EventStates GetDocumentState() const
{
return mDocumentState;
--- a/dom/html/ImageDocument.h
+++ b/dom/html/ImageDocument.h
@@ -20,16 +20,21 @@ class ImageDocument final : public Media
public imgINotificationObserver,
public nsIDOMEventListener
{
public:
ImageDocument();
NS_DECL_ISUPPORTS_INHERITED
+ enum MediaDocumentKind MediaDocumentKind() const override
+ {
+ return MediaDocumentKind::Image;
+ }
+
virtual nsresult Init() override;
virtual nsresult StartDocumentLoad(const char* aCommand,
nsIChannel* aChannel,
nsILoadGroup* aLoadGroup,
nsISupports* aContainer,
nsIStreamListener** aDocListener,
bool aReset = true,
--- a/dom/html/MediaDocument.h
+++ b/dom/html/MediaDocument.h
@@ -19,16 +19,19 @@ namespace mozilla {
namespace dom {
class MediaDocument : public nsHTMLDocument
{
public:
MediaDocument();
virtual ~MediaDocument();
+ // Subclasses need to override this.
+ enum MediaDocumentKind MediaDocumentKind() const override = 0;
+
virtual nsresult Init() override;
virtual nsresult StartDocumentLoad(const char* aCommand,
nsIChannel* aChannel,
nsILoadGroup* aLoadGroup,
nsISupports* aContainer,
nsIStreamListener** aDocListener,
bool aReset = true,
--- a/dom/html/PluginDocument.cpp
+++ b/dom/html/PluginDocument.cpp
@@ -27,16 +27,21 @@ class PluginDocument final : public Medi
, public nsIPluginDocument
{
public:
PluginDocument();
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_NSIPLUGINDOCUMENT
+ enum MediaDocumentKind MediaDocumentKind() const override
+ {
+ return MediaDocumentKind::Plugin;
+ }
+
nsresult StartDocumentLoad(const char* aCommand,
nsIChannel* aChannel,
nsILoadGroup* aLoadGroup,
nsISupports* aContainer,
nsIStreamListener** aDocListener,
bool aReset = true,
nsIContentSink* aSink = nullptr) override;
--- a/dom/html/VideoDocument.cpp
+++ b/dom/html/VideoDocument.cpp
@@ -14,16 +14,21 @@
#include "mozilla/dom/Element.h"
namespace mozilla {
namespace dom {
class VideoDocument final : public MediaDocument
{
public:
+ enum MediaDocumentKind MediaDocumentKind() const override
+ {
+ return MediaDocumentKind::Video;
+ }
+
virtual nsresult StartDocumentLoad(const char* aCommand,
nsIChannel* aChannel,
nsILoadGroup* aLoadGroup,
nsISupports* aContainer,
nsIStreamListener** aDocListener,
bool aReset = true,
nsIContentSink* aSink = nullptr) override;
virtual void SetScriptGlobalObject(nsIScriptGlobalObject* aScriptGlobalObject) override;