Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  MMPrinter.cpp

  Sprache: C
 

/* 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"

#include "Logging.h"
#include "jsapi.h"
#include "mozilla/Bootstrap.h"
#include "mozilla/ErrorResult.h"
#include "mozilla/RandomNum.h"
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/dom/ipc/StructuredCloneData.h"
#include "nsFrameMessageManager.h"
#include "nsJSUtils.h"
#include "prenv.h"

namespace mozilla::dom {

LazyLogModule MMPrinter::sMMLog("MessageManager");

// You can use
// https://gist.github.com/tomrittervg/adb8688426a9a5340da96004e2c8af79 to parse
// the output of the logs into logs more friendly to reading.

/* static */
Maybe<uint64_t> MMPrinter::PrintHeader(char const* aLocation,
                                       const nsAString& aMsg) {
  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 Nothing();
  }

  uint64_t aMsgId = RandomUint64OrDie();

  MOZ_LOG(MMPrinter::sMMLog, LogLevel::Debug,
          ("%" PRIu64 " %s Message: %s in process type: %s", aMsgId, aLocation,
           charMsg.get(), XRE_GetProcessTypeString()));

  return Some(aMsgId);
}

/* static */
void MMPrinter::PrintData(uint64_t aMsgId, ipc::StructuredCloneData* aData) {
  if (!MOZ_LOG_TEST(sMMLog, LogLevel::Verbose)) {
    return;
  }

  if (!aData) {
    MOZ_LOG(MMPrinter::sMMLog, LogLevel::Verbose,
            ("%" PRIu64 " (No Data)", aMsgId));
    return;
  }

  // If aData->SupportsTransferring(), we cannot call Read() more than once.
  //
  // NOTE(Jan 2026): This is true for almost every StructuredCloneData passed in
  // here, which greatly limits PrintData's usability. It _may_ be possible to
  // dynamically clear the SupportsTransferring flag for instances which did not
  // use any transferables when constructed, but that would require changes to
  // StructuredCloneHolder's internals.
  if (aData->SupportsTransferring()) {
    MOZ_LOG(MMPrinter::sMMLog, LogLevel::Verbose,
            ("%" PRIu64 " (Supports Transferring)", aMsgId));
    return;
  }

  AutoJSAPI jsapi;
  // We're using this context to deserialize, stringify, and print a message
  // manager message here. Since the messages are always sent from and to system
  // scopes, we need to do this in a system scope, or attempting to deserialize
  // certain privileged objects will fail.
  MOZ_ALWAYS_TRUE(jsapi.Init(xpc::PrivilegedJunkScope()));
  JSContext* cx = jsapi.cx();

  /* Read original StructuredCloneData. */
  IgnoredErrorResult rv;
  JS::Rooted<JS::Value> scdContent(cx);
  aData->Read(cx, &scdContent, rv);
  if (rv.Failed()) {
    // In testing, the only reason this would fail was if there was no data in
    // the message; so it seems like this is safe-ish.
    MOZ_LOG(MMPrinter::sMMLog, LogLevel::Verbose,
            ("%" PRIu64 " (Read Failed)", aMsgId));
    return;
  }

  JS::Rooted<JSString*> unevalObj(cx, JS_ValueToSource(cx, scdContent));
  nsAutoJSString srcString;
  if (!srcString.init(cx, unevalObj)) return;

  MOZ_LOG(MMPrinter::sMMLog, LogLevel::Verbose,
          ("%" PRIu64 " %s", aMsgId, NS_ConvertUTF16toUTF8(srcString).get()));
}

}  // namespace mozilla::dom

Messung V0.5 in Prozent
C=81 H=100 G=90

¤ Dauer der Verarbeitung: 0.14 Sekunden  (vorverarbeitet am  2026-08-24) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=141584
#Domains=738142