Bug 1430317: Add memory reporter to show basic information about active WebExtensions. r=erahm

MozReview-Commit-ID: FR8F30bhhA4

--HG--
extra : rebase_source : 651b3d1f5b6b6a646a89301dc236a7e10924a500
This commit is contained in:
Kris Maglione 2018-01-12 16:01:18 -08:00
parent 993bcbdbba
commit f08a241760
2 changed files with 51 additions and 1 deletions

View File

@ -9,6 +9,7 @@
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/Preferences.h"
#include "mozilla/ResultExtensions.h"
#include "mozilla/Services.h"
#include "mozilla/dom/ContentChild.h"
#include "mozilla/dom/ContentParent.h"
@ -67,6 +68,7 @@ ExtensionPolicyService::GetSingleton()
if (MOZ_UNLIKELY(!sExtensionPolicyService)) {
sExtensionPolicyService = new ExtensionPolicyService();
RegisterWeakMemoryReporter(sExtensionPolicyService);
ClearOnShutdown(&sExtensionPolicyService);
}
return *sExtensionPolicyService.get();
@ -82,6 +84,11 @@ ExtensionPolicyService::ExtensionPolicyService()
RegisterObservers();
}
ExtensionPolicyService::~ExtensionPolicyService()
{
UnregisterWeakMemoryReporter(this);
}
bool
ExtensionPolicyService::UseRemoteExtensions() const
{
@ -174,6 +181,45 @@ ExtensionPolicyService::DefaultCSP(nsAString& aDefaultCSP) const
}
/*****************************************************************************
* nsIMemoryReporter
*****************************************************************************/
NS_IMETHODIMP
ExtensionPolicyService::CollectReports(nsIHandleReportCallback* aHandleReport,
nsISupports* aData, bool aAnonymize)
{
for (auto iter = mExtensions.Iter(); !iter.Done(); iter.Next()) {
auto& ext = iter.Data();
nsAtomCString id(ext->Id());
NS_ConvertUTF16toUTF8 name(ext->Name());
name.ReplaceSubstring("\"", "");
name.ReplaceSubstring("\\", "");
nsString url;
MOZ_TRY_VAR(url, ext->GetURL(NS_LITERAL_STRING("")));
nsPrintfCString desc("Extension(id=%s, name=\"%s\", baseURL=%s)",
id.get(), name.get(),
NS_ConvertUTF16toUTF8(url).get());
desc.ReplaceChar('/', '\\');
nsCString path("extensions/");
path.Append(desc);
aHandleReport->Callback(
EmptyCString(), path,
KIND_NONHEAP, UNITS_COUNT, 1,
NS_LITERAL_CSTRING("WebExtensions that are active in this session"),
aData);
}
return NS_OK;
}
/*****************************************************************************
* Content script management
*****************************************************************************/

View File

@ -6,12 +6,14 @@
#ifndef mozilla_ExtensionPolicyService_h
#define mozilla_ExtensionPolicyService_h
#include "mozilla/MemoryReporting.h"
#include "mozilla/extensions/WebExtensionPolicy.h"
#include "nsCOMPtr.h"
#include "nsCycleCollectionParticipant.h"
#include "nsHashKeys.h"
#include "nsIAddonPolicyService.h"
#include "nsAtom.h"
#include "nsIMemoryReporter.h"
#include "nsIObserver.h"
#include "nsIObserverService.h"
#include "nsISupports.h"
@ -33,6 +35,7 @@ using extensions::WebExtensionPolicy;
class ExtensionPolicyService final : public nsIAddonPolicyService
, public nsIObserver
, public nsIMemoryReporter
{
public:
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(ExtensionPolicyService,
@ -40,6 +43,7 @@ public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_NSIADDONPOLICYSERVICE
NS_DECL_NSIOBSERVER
NS_DECL_NSIMEMORYREPORTER
static ExtensionPolicyService& GetSingleton();
@ -79,7 +83,7 @@ public:
bool IsExtensionProcess() const;
protected:
virtual ~ExtensionPolicyService() = default;
virtual ~ExtensionPolicyService();
private:
ExtensionPolicyService();