Bug 1407810 - Implement HTMLMediaElement::Moz{Enable,Request}DebugLog - r=jwwang draft
authorGerald Squelart <gsquelart@mozilla.com>
Mon, 16 Oct 2017 16:18:58 +1100
changeset 708716 6a7b0120b715697eb74c93a819729b7cd92fd22a
parent 708715 bacf05323ce51184976c71081b5d82b65e7a9fef
child 708717 86192c42611a93ba0b13989cb53894d358399492
push id92413
push usergsquelart@mozilla.com
push dateWed, 06 Dec 2017 23:54:05 +0000
reviewersjwwang
bugs1407810
milestone59.0a1
Bug 1407810 - Implement HTMLMediaElement::Moz{Enable,Request}DebugLog - r=jwwang MozReview-Commit-ID: 7Hhy6qBVjDk
dom/html/HTMLMediaElement.cpp
dom/html/HTMLMediaElement.h
--- a/dom/html/HTMLMediaElement.cpp
+++ b/dom/html/HTMLMediaElement.cpp
@@ -93,16 +93,17 @@
 #include "mozilla/dom/AudioTrackList.h"
 #include "mozilla/dom/MediaErrorBinding.h"
 #include "mozilla/dom/VideoTrack.h"
 #include "mozilla/dom/VideoTrackList.h"
 #include "mozilla/dom/TextTrack.h"
 #include "nsIContentPolicy.h"
 #include "mozilla/Telemetry.h"
 #include "DecoderDoctorDiagnostics.h"
+#include "DecoderDoctorLogger.h"
 #include "DecoderTraits.h"
 #include "MediaContainerType.h"
 #include "MP4Decoder.h"
 #include "FrameStatistics.h"
 
 #include "nsIFrame.h"
 #include "nsDisplayList.h"
 #include "SVGObserverUtils.h"
@@ -1603,16 +1604,41 @@ HTMLMediaElement::MozRequestDebugInfo(Er
       });
   } else {
     promise->MaybeResolve(result);
   }
 
   return promise.forget();
 }
 
+/* static */ void
+HTMLMediaElement::MozEnableDebugLog(const GlobalObject&)
+{
+  DecoderDoctorLogger::EnableLogging();
+}
+
+already_AddRefed<Promise>
+HTMLMediaElement::MozRequestDebugLog(ErrorResult& aRv)
+{
+  RefPtr<Promise> promise = CreateDOMPromise(aRv);
+  if (NS_WARN_IF(aRv.Failed())) {
+    return nullptr;
+  }
+
+  DecoderDoctorLogger::RetrieveMessages(this)->Then(
+    mAbstractMainThread,
+    __func__,
+    [promise](const nsACString& aString) {
+      promise->MaybeResolve(NS_ConvertUTF8toUTF16(aString));
+    },
+    [promise](nsresult rv) { promise->MaybeReject(rv); });
+
+  return promise.forget();
+}
+
 already_AddRefed<Promise>
 HTMLMediaElement::MozDumpDebugInfo()
 {
   ErrorResult rv;
   RefPtr<Promise> promise = CreateDOMPromise(rv);
   if (NS_WARN_IF(rv.Failed())) {
     return nullptr;
   }
--- a/dom/html/HTMLMediaElement.h
+++ b/dom/html/HTMLMediaElement.h
@@ -626,16 +626,23 @@ public:
   // Returns a string describing the state of the media player internal
   // data. Used for debugging purposes.
   void GetMozDebugReaderData(nsAString& aString);
 
   // Returns a promise which will be resolved after collecting debugging
   // data from decoder/reader/MDSM. Used for debugging purposes.
   already_AddRefed<Promise> MozRequestDebugInfo(ErrorResult& aRv);
 
+  // Enables DecoderDoctorLogger logging. Used for debugging purposes.
+  static void MozEnableDebugLog(const GlobalObject&);
+
+  // Returns a promise which will be resolved after collecting debugging
+  // log associated with this element. Used for debugging purposes.
+  already_AddRefed<Promise> MozRequestDebugLog(ErrorResult& aRv);
+
   already_AddRefed<Promise> MozDumpDebugInfo();
 
   // For use by mochitests. Enabling pref "media.test.video-suspend"
   void SetVisible(bool aVisible);
 
   // For use by mochitests. Enabling pref "media.test.video-suspend"
   bool HasSuspendTaint() const;