gecko-dev/dom/ipc/MMPrinter.cpp
Tom Ritter bb57f44268 Bug 1512690 - Add a mechanism to omit logging specified Message Manager topics r=tjr
The topic will be skipped if the topic name appears anywhere as a substring
of the env var MOZ_LOG_MESSAGEMANAGER_SKIP.

Example:
  MOZ_LOG_MESSAGEMANAGER_SKIP="foobar|extension"
    Will match the topics 'foobar', 'foo', 'bar', and 'ten' (even though you may not
    have intended to match the latter three) and it will not match the topics
    'extensionresult' or 'Foo'.

--HG--
extra : histedit_source : 911b7572481c618551c6faeacfd4a46b6873ed8d
2018-12-11 13:28:26 -06:00

70 lines
2.1 KiB
C++

/* -*- 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 "MMPrinter.h"
namespace mozilla {
namespace dom {
LazyLogModule MMPrinter::sMMLog("MessageManager");
/* static */
void MMPrinter::PrintImpl(char const* aLocation, const nsAString& aMsg,
ClonedMessageData const& aData) {
NS_ConvertUTF16toUTF8 charMsg(aMsg);
/*
* The topic will be skipped if the topic name appears anywhere as a substring
* of the filter.
*
* Example:
* MOZ_LOG_MESSAGEMANAGER_SKIP="foobar|extension"
* Will match the topics 'foobar', 'foo', 'bar', and 'ten' (even though
* you may not have intended to match the latter three) and it will not match
* the topics 'extensionresult' or 'Foo'.
*/
char* mmSkipLog = PR_GetEnv("MOZ_LOG_MESSAGEMANAGER_SKIP");
if (mmSkipLog && strstr(mmSkipLog, charMsg.get())) {
return;
}
MOZ_LOG(MMPrinter::sMMLog, LogLevel::Debug,
("%s Message: %s in process type: %s", aLocation, charMsg.get(),
XRE_ChildProcessTypeToString(XRE_GetProcessType())));
if (!MOZ_LOG_TEST(sMMLog, LogLevel::Verbose)) {
return;
}
ErrorResult rv;
AutoJSAPI jsapi;
MOZ_ALWAYS_TRUE(jsapi.Init(xpc::UnprivilegedJunkScope()));
JSContext* cx = jsapi.cx();
ipc::StructuredCloneData data;
ipc::UnpackClonedMessageDataForChild(aData, data);
/* Read original StructuredCloneData. */
JS::RootedValue scdContent(cx);
data.Read(cx, &scdContent, rv);
if (NS_WARN_IF(rv.Failed())) {
rv.SuppressException();
return;
}
JS::RootedString unevalObj(cx, JS_ValueToSource(cx, scdContent));
nsAutoJSString srcString;
if (!srcString.init(cx, unevalObj)) return;
MOZ_LOG(MMPrinter::sMMLog, LogLevel::Verbose,
(" %s", NS_ConvertUTF16toUTF8(srcString).get()));
return;
}
} // namespace dom
} // namespace mozilla