зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1412981 - Remove nsIStatusReporter as it is unused. r=froydnj
--HG-- extra : rebase_source : 9b917d55005e90abe26a61a58368ff82bf103c3f
This commit is contained in:
Родитель
ede9d9fd21
Коммит
ecf5ddbf21
|
@ -21,7 +21,6 @@ XPIDL_SOURCES += [
|
|||
'nsIMessageLoop.idl',
|
||||
'nsIMutable.idl',
|
||||
'nsISecurityConsoleMessage.idl',
|
||||
'nsIStatusReporter.idl',
|
||||
'nsISupports.idl',
|
||||
'nsIUUIDGenerator.idl',
|
||||
'nsIVersionComparator.idl',
|
||||
|
@ -160,7 +159,6 @@ UNIFIED_SOURCES += [
|
|||
'nsMessageLoop.cpp',
|
||||
'NSPRLogModulesParser.cpp',
|
||||
'nsSecurityConsoleMessage.cpp',
|
||||
'nsStatusReporterManager.cpp',
|
||||
'nsSystemInfo.cpp',
|
||||
'nsTraceRefcnt.cpp',
|
||||
'nsUUIDGenerator.cpp',
|
||||
|
|
|
@ -1,90 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsISupports.idl"
|
||||
|
||||
interface nsISimpleEnumerator;
|
||||
|
||||
/*
|
||||
* Status reporters show Firefox's service status.
|
||||
*/
|
||||
|
||||
[scriptable, uuid(ffcb716c-deeb-44ea-9d9d-ab25dc6980a8)]
|
||||
interface nsIStatusReporter : nsISupports
|
||||
{
|
||||
readonly attribute ACString name;
|
||||
/*
|
||||
* The name of the process containing this reporter. Each reporter initially
|
||||
* has "" in this field, indicating that it applies to the current process.
|
||||
*/
|
||||
readonly attribute ACString process;
|
||||
/*
|
||||
* A human-readable status description.
|
||||
*/
|
||||
readonly attribute AUTF8String description;
|
||||
};
|
||||
|
||||
[scriptable, uuid(fd531273-3319-4fcd-90f2-9f53876c3828)]
|
||||
interface nsIStatusReporterManager : nsISupports
|
||||
{
|
||||
|
||||
/*
|
||||
* Return an enumerator of nsIStatusReporters that are currently registered.
|
||||
*/
|
||||
nsISimpleEnumerator enumerateReporters();
|
||||
|
||||
/*
|
||||
* Register the given nsIStatusReporter. After a reporter is registered,
|
||||
* it will be available via enumerateReporters(). The Manager service
|
||||
* will hold a strong reference to the given reporter.
|
||||
*/
|
||||
void registerReporter(in nsIStatusReporter reporter);
|
||||
|
||||
/*
|
||||
* Unregister the given status reporter.
|
||||
*/
|
||||
void unregisterReporter(in nsIStatusReporter reporter);
|
||||
|
||||
/*
|
||||
* Initialize.
|
||||
*/
|
||||
void init();
|
||||
|
||||
/*
|
||||
* Dump service status as a json file
|
||||
*/
|
||||
void dumpReports();
|
||||
};
|
||||
|
||||
%{C++
|
||||
|
||||
/*
|
||||
* Note that this defaults 'process' to "", which is usually what's desired.
|
||||
*/
|
||||
#define NS_STATUS_REPORTER_IMPLEMENT(_classname, _name, _desc_Function) \
|
||||
class StatusReporter_##_classname final : public nsIStatusReporter { \
|
||||
~StatusReporter_##_classname() {} \
|
||||
public: \
|
||||
NS_DECL_ISUPPORTS \
|
||||
NS_IMETHOD GetName(nsACString &name) override \
|
||||
{ name.AssignLiteral(_name); return NS_OK; } \
|
||||
NS_IMETHOD GetProcess(nsACString &process) override \
|
||||
{ process.Truncate(); return NS_OK; } \
|
||||
NS_IMETHOD GetDescription(nsACString &desc) override \
|
||||
{ _desc_Function(desc); return NS_OK; } \
|
||||
}; \
|
||||
NS_IMPL_ISUPPORTS(StatusReporter_##_classname, nsIStatusReporter)
|
||||
|
||||
#define NS_STATUS_REPORTER_NAME(_classname) StatusReporter_##_classname
|
||||
|
||||
nsresult NS_RegisterStatusReporter(nsIStatusReporter *reporter);
|
||||
nsresult NS_UnregisterStatusReporter(nsIStatusReporter *reporter);
|
||||
nsresult NS_DumpStatusReporter();
|
||||
|
||||
#define NS_STATUS_REPORTER_MANAGER_CID \
|
||||
{ 0xe8eb4e7e, 0xf2cf, 0x45e5, \
|
||||
{ 0xb8, 0xa4, 0x6a, 0x0f, 0x50, 0x18, 0x84, 0x63 } }
|
||||
%}
|
|
@ -1,321 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "nsStatusReporterManager.h"
|
||||
#include "nsCOMPtr.h"
|
||||
#include "nsDirectoryServiceDefs.h"
|
||||
#include "nsArrayEnumerator.h"
|
||||
#include "nsISimpleEnumerator.h"
|
||||
#include "nsIFile.h"
|
||||
#include "nsDumpUtils.h"
|
||||
#include "nsIFileStreams.h"
|
||||
#include "nsPrintfCString.h"
|
||||
|
||||
#ifdef XP_WIN
|
||||
#include <process.h>
|
||||
#define getpid _getpid
|
||||
#else
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#ifdef XP_UNIX
|
||||
#define DO_STATUS_REPORT 1
|
||||
#endif
|
||||
|
||||
#ifdef DO_STATUS_REPORT // {
|
||||
namespace {
|
||||
|
||||
class DumpStatusInfoToTempDirRunnable : public mozilla::Runnable
|
||||
{
|
||||
public:
|
||||
DumpStatusInfoToTempDirRunnable()
|
||||
: mozilla::Runnable("DumpStatusInfoToTempDirRunnable")
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run() override
|
||||
{
|
||||
nsCOMPtr<nsIStatusReporterManager> mgr =
|
||||
do_GetService("@mozilla.org/status-reporter-manager;1");
|
||||
mgr->DumpReports();
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
doStatusReport(const nsCString& aInputStr)
|
||||
{
|
||||
LOG("FifoWatcher(%s) dispatching status report runnable.", aInputStr.get());
|
||||
RefPtr<DumpStatusInfoToTempDirRunnable> runnable =
|
||||
new DumpStatusInfoToTempDirRunnable();
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
|
||||
} //anonymous namespace
|
||||
#endif // DO_STATUS_REPORT }
|
||||
|
||||
static bool gStatusReportProgress = 0;
|
||||
static int gNumReporters = 0;
|
||||
|
||||
nsresult
|
||||
getStatus(nsACString& aDesc)
|
||||
{
|
||||
if (!gStatusReportProgress) {
|
||||
aDesc.AssignLiteral("Init");
|
||||
} else {
|
||||
aDesc.AssignLiteral("Running: There are ");
|
||||
aDesc.AppendInt(gNumReporters);
|
||||
aDesc.AppendLiteral(" reporters");
|
||||
}
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_STATUS_REPORTER_IMPLEMENT(StatusReporter, "StatusReporter State", getStatus)
|
||||
|
||||
#define DUMP(o, s) \
|
||||
do { \
|
||||
const char* s2 = (s); \
|
||||
uint32_t dummy; \
|
||||
nsresult rvDump = (o)->Write((s2), strlen(s2), &dummy); \
|
||||
if (NS_WARN_IF(NS_FAILED(rvDump))) \
|
||||
return rvDump; \
|
||||
} while (0)
|
||||
|
||||
static nsresult
|
||||
DumpReport(nsIFileOutputStream* aOStream, const nsCString& aProcess,
|
||||
const nsCString& aName, const nsCString& aDescription)
|
||||
{
|
||||
if (aProcess.IsEmpty()) {
|
||||
int pid = getpid();
|
||||
nsPrintfCString pidStr("PID %u", pid);
|
||||
DUMP(aOStream, "\n {\n \"Process\": \"");
|
||||
DUMP(aOStream, pidStr.get());
|
||||
} else {
|
||||
DUMP(aOStream, "\n { \"Unknown Process\": \"");
|
||||
}
|
||||
|
||||
DUMP(aOStream, "\",\n \"Reporter name\": \"");
|
||||
DUMP(aOStream, aName.get());
|
||||
|
||||
DUMP(aOStream, "\",\n \"Status Description\": [\"");
|
||||
nsCString desc = aDescription;
|
||||
desc.ReplaceSubstring("|", "\",\"");
|
||||
DUMP(aOStream, desc.get());
|
||||
|
||||
DUMP(aOStream, "\"]\n }");
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
/**
|
||||
** nsStatusReporterManager implementation
|
||||
**/
|
||||
|
||||
NS_IMPL_ISUPPORTS(nsStatusReporterManager, nsIStatusReporterManager)
|
||||
|
||||
nsStatusReporterManager::nsStatusReporterManager()
|
||||
{
|
||||
}
|
||||
|
||||
nsStatusReporterManager::~nsStatusReporterManager()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsStatusReporterManager::Init()
|
||||
{
|
||||
RegisterReporter(new NS_STATUS_REPORTER_NAME(StatusReporter));
|
||||
gStatusReportProgress = 1;
|
||||
|
||||
#ifdef DO_STATUS_REPORT
|
||||
if (FifoWatcher::MaybeCreate()) {
|
||||
FifoWatcher* fw = FifoWatcher::GetSingleton();
|
||||
fw->RegisterCallback(NS_LITERAL_CSTRING("status report"), doStatusReport);
|
||||
}
|
||||
#endif
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsStatusReporterManager::DumpReports()
|
||||
{
|
||||
static unsigned number = 1;
|
||||
nsresult rv;
|
||||
|
||||
nsCString filename("status-reports-");
|
||||
filename.AppendInt((uint32_t)getpid());
|
||||
filename.Append('-');
|
||||
filename.AppendInt(number++);
|
||||
filename.AppendLiteral(".json");
|
||||
|
||||
// Open a file in NS_OS_TEMP_DIR for writing.
|
||||
// The file is initialized as "incomplete-status-reports-pid-number.json" in the
|
||||
// begining, it will be rename as "status-reports-pid-number.json" in the end.
|
||||
nsCOMPtr<nsIFile> tmpFile;
|
||||
rv = nsDumpUtils::OpenTempFile(NS_LITERAL_CSTRING("incomplete-") +
|
||||
filename,
|
||||
getter_AddRefs(tmpFile),
|
||||
NS_LITERAL_CSTRING("status-reports"));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIFileOutputStream> ostream =
|
||||
do_CreateInstance("@mozilla.org/network/file-output-stream;1");
|
||||
rv = ostream->Init(tmpFile, -1, -1, 0);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
//Write the reports to the file
|
||||
|
||||
DUMP(ostream, "{\n\"subject\":\"about:service reports\",\n");
|
||||
DUMP(ostream, "\"reporters\": [ ");
|
||||
|
||||
nsCOMPtr<nsISimpleEnumerator> e;
|
||||
bool more, first = true;
|
||||
EnumerateReporters(getter_AddRefs(e));
|
||||
while (NS_SUCCEEDED(e->HasMoreElements(&more)) && more) {
|
||||
nsCOMPtr<nsISupports> supports;
|
||||
e->GetNext(getter_AddRefs(supports));
|
||||
nsCOMPtr<nsIStatusReporter> r = do_QueryInterface(supports);
|
||||
|
||||
nsCString process;
|
||||
rv = r->GetProcess(process);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCString name;
|
||||
rv = r->GetName(name);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsCString description;
|
||||
rv = r->GetDescription(description);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
if (first) {
|
||||
first = false;
|
||||
} else {
|
||||
DUMP(ostream, ",");
|
||||
}
|
||||
|
||||
rv = DumpReport(ostream, process, name, description);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
DUMP(ostream, "\n]\n}\n");
|
||||
|
||||
rv = ostream->Close();
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
// Rename the status reports file
|
||||
nsCOMPtr<nsIFile> srFinalFile;
|
||||
rv = NS_GetSpecialDirectory(NS_OS_TEMP_DIR, getter_AddRefs(srFinalFile));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
#ifdef ANDROID
|
||||
rv = srFinalFile->AppendNative(NS_LITERAL_CSTRING("status-reports"));
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
#endif
|
||||
|
||||
rv = srFinalFile->AppendNative(filename);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = srFinalFile->CreateUnique(nsIFile::NORMAL_FILE_TYPE, 0600);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
nsAutoString srActualFinalFilename;
|
||||
rv = srFinalFile->GetLeafName(srActualFinalFilename);
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
rv = tmpFile->MoveTo(/* directory */ nullptr, srActualFinalFilename);
|
||||
|
||||
if (NS_WARN_IF(NS_FAILED(rv))) {
|
||||
return rv;
|
||||
}
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsStatusReporterManager::EnumerateReporters(nsISimpleEnumerator** aResult)
|
||||
{
|
||||
return NS_NewArrayEnumerator(aResult, mReporters);
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsStatusReporterManager::RegisterReporter(nsIStatusReporter* aReporter)
|
||||
{
|
||||
if (mReporters.IndexOf(aReporter) != -1) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
|
||||
mReporters.AppendObject(aReporter);
|
||||
gNumReporters++;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
nsStatusReporterManager::UnregisterReporter(nsIStatusReporter* aReporter)
|
||||
{
|
||||
if (!mReporters.RemoveObject(aReporter)) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
gNumReporters--;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_RegisterStatusReporter(nsIStatusReporter* aReporter)
|
||||
{
|
||||
nsCOMPtr<nsIStatusReporterManager> mgr =
|
||||
do_GetService("@mozilla.org/status-reporter-manager;1");
|
||||
if (!mgr) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
return mgr->RegisterReporter(aReporter);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_UnregisterStatusReporter(nsIStatusReporter* aReporter)
|
||||
{
|
||||
nsCOMPtr<nsIStatusReporterManager> mgr =
|
||||
do_GetService("@mozilla.org/status-reporter-manager;1");
|
||||
if (!mgr) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
return mgr->UnregisterReporter(aReporter);
|
||||
}
|
||||
|
||||
nsresult
|
||||
NS_DumpStatusReporter()
|
||||
{
|
||||
nsCOMPtr<nsIStatusReporterManager> mgr =
|
||||
do_GetService("@mozilla.org/status-reporter-manager;1");
|
||||
if (!mgr) {
|
||||
return NS_ERROR_FAILURE;
|
||||
}
|
||||
return mgr->DumpReports();
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
|
||||
#include "nsIStatusReporter.h"
|
||||
#include "nsCOMArray.h"
|
||||
#include "nsString.h"
|
||||
|
||||
class nsStatusReporter final : public nsIStatusReporter
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISTATUSREPORTER
|
||||
|
||||
nsStatusReporter(nsACString& aProcess, nsACString& aDesc);
|
||||
|
||||
private:
|
||||
nsCString sProcess;
|
||||
nsCString sName;
|
||||
nsCString sDesc;
|
||||
|
||||
virtual ~nsStatusReporter();
|
||||
};
|
||||
|
||||
|
||||
class nsStatusReporterManager : public nsIStatusReporterManager
|
||||
{
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSISTATUSREPORTERMANAGER
|
||||
|
||||
nsStatusReporterManager();
|
||||
|
||||
private:
|
||||
nsCOMArray<nsIStatusReporter> mReporters;
|
||||
|
||||
virtual ~nsStatusReporterManager();
|
||||
};
|
|
@ -104,8 +104,6 @@ extern nsresult nsStringInputStreamConstructor(nsISupports*, REFNSIID, void**);
|
|||
#include "nsSecurityConsoleMessage.h"
|
||||
#include "nsMessageLoop.h"
|
||||
|
||||
#include "nsStatusReporterManager.h"
|
||||
|
||||
#include <locale.h>
|
||||
#include "mozilla/Services.h"
|
||||
#include "mozilla/Omnijar.h"
|
||||
|
@ -228,8 +226,6 @@ NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsMemoryReporterManager, Init)
|
|||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsMemoryInfoDumper)
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR_INIT(nsStatusReporterManager, Init)
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsIOUtil)
|
||||
|
||||
NS_GENERIC_FACTORY_CONSTRUCTOR(nsSecurityConsoleMessage)
|
||||
|
|
|
@ -75,4 +75,3 @@
|
|||
COMPONENT(IOUTIL, nsIOUtilConstructor)
|
||||
COMPONENT(CYCLE_COLLECTOR_LOGGER, nsCycleCollectorLoggerConstructor)
|
||||
COMPONENT(MESSAGE_LOOP, nsMessageLoopConstructor)
|
||||
COMPONENT(STATUS_REPORTER_MANAGER, nsStatusReporterManagerConstructor)
|
||||
|
|
|
@ -76,11 +76,6 @@
|
|||
*/
|
||||
#define NS_MEMORY_INFO_DUMPER_CONTRACTID "@mozilla.org/memory-info-dumper;1"
|
||||
|
||||
/**
|
||||
* Status reporter service CID
|
||||
*/
|
||||
#define NS_STATUS_REPORTER_MANAGER_CONTRACTID "@mozilla.org/status-reporter-manager;1"
|
||||
|
||||
/**
|
||||
* Cycle collector logger contract id
|
||||
*/
|
||||
|
|
Загрузка…
Ссылка в новой задаче