1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 7 #ifndef mozilla_ConsoleReportCollector_h 8 #define mozilla_ConsoleReportCollector_h 9 10 #include "mozilla/Mutex.h" 11 #include "nsIConsoleReportCollector.h" 12 #include "nsTArray.h" 13 14 namespace mozilla { 15 16 namespace net { 17 class ConsoleReportCollected; 18 } 19 20 class ConsoleReportCollector final : public nsIConsoleReportCollector { 21 public: 22 ConsoleReportCollector(); 23 24 void AddConsoleReport(uint32_t aErrorFlags, const nsACString& aCategory, 25 nsContentUtils::PropertiesFile aPropertiesFile, 26 const nsACString& aSourceFileURI, uint32_t aLineNumber, 27 uint32_t aColumnNumber, const nsACString& aMessageName, 28 const nsTArray<nsString>& aStringParams) override; 29 30 void FlushReportsToConsole( 31 uint64_t aInnerWindowID, 32 ReportAction aAction = ReportAction::Forget) override; 33 34 void FlushReportsToConsoleForServiceWorkerScope( 35 const nsACString& aScope, 36 ReportAction aAction = ReportAction::Forget) override; 37 38 void FlushConsoleReports( 39 dom::Document* aDocument, 40 ReportAction aAction = ReportAction::Forget) override; 41 42 void FlushConsoleReports( 43 nsILoadGroup* aLoadGroup, 44 ReportAction aAction = ReportAction::Forget) override; 45 46 void FlushConsoleReports(nsIConsoleReportCollector* aCollector) override; 47 48 void StealConsoleReports( 49 nsTArray<net::ConsoleReportCollected>& aReports) override; 50 51 void ClearConsoleReports() override; 52 53 private: 54 ~ConsoleReportCollector(); 55 56 struct PendingReport { PendingReportPendingReport57 PendingReport(uint32_t aErrorFlags, const nsACString& aCategory, 58 nsContentUtils::PropertiesFile aPropertiesFile, 59 const nsACString& aSourceFileURI, uint32_t aLineNumber, 60 uint32_t aColumnNumber, const nsACString& aMessageName, 61 const nsTArray<nsString>& aStringParams) 62 : mErrorFlags(aErrorFlags), 63 mCategory(aCategory), 64 mPropertiesFile(aPropertiesFile), 65 mSourceFileURI(aSourceFileURI), 66 mLineNumber(aLineNumber), 67 mColumnNumber(aColumnNumber), 68 mMessageName(aMessageName), 69 mStringParams(aStringParams.Clone()) {} 70 71 const uint32_t mErrorFlags; 72 const nsCString mCategory; 73 const nsContentUtils::PropertiesFile mPropertiesFile; 74 const nsCString mSourceFileURI; 75 const uint32_t mLineNumber; 76 const uint32_t mColumnNumber; 77 const nsCString mMessageName; 78 const CopyableTArray<nsString> mStringParams; 79 }; 80 81 Mutex mMutex; 82 83 // protected by mMutex 84 nsTArray<PendingReport> mPendingReports; 85 86 public: 87 NS_DECL_THREADSAFE_ISUPPORTS 88 }; 89 90 } // namespace mozilla 91 92 #endif // mozilla_ConsoleReportCollector_h 93