Bug 1475511: Introduce nsIDocument::MediaDocumentKind. r=xidorn draft
authorEmilio Cobos Álvarez <emilio@crisal.io>
Thu, 19 Jul 2018 13:36:20 +0200
changeset 820834 f51649498047a4a340341f83c5125dcbf41593b0
parent 820833 b9d8472c1cf56e1a496f3dff35062aa172533ade
child 820835 533cc7054254ef69e7ebbe145e0843c6374afaef
push id116953
push userbmo:emilio@crisal.io
push dateFri, 20 Jul 2018 13:44:17 +0000
reviewersxidorn
bugs1475511
milestone63.0a1
Bug 1475511: Introduce nsIDocument::MediaDocumentKind. r=xidorn MozReview-Commit-ID: BGG0vinXdad
dom/base/nsIDocument.h
dom/html/ImageDocument.h
dom/html/MediaDocument.h
dom/html/PluginDocument.cpp
dom/html/VideoDocument.cpp
--- 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;