Bug 1876987 - Move ConsoleInstance to dom/chrome-webidl. r=webidl,emilio

Differential Revision: https://phabricator.services.mozilla.com/D202617
This commit is contained in:
Mark Banner 2024-02-23 23:34:35 +00:00
Родитель 5319ac8b89
Коммит cd8f1f907b
5 изменённых файлов: 183 добавлений и 171 удалений

Просмотреть файл

@ -0,0 +1,179 @@
/* -*- Mode: IDL; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=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/.
*
* For more information on this interface, please see
* https://console.spec.whatwg.org/#console-namespace
*/
// This is used to propagate console events to the observers.
[GenerateConversionToJS]
dictionary ConsoleEvent {
(unsigned long long or DOMString) ID;
(unsigned long long or DOMString) innerID;
DOMString consoleID = "";
DOMString addonId = "";
DOMString level = "";
DOMString filename = "";
// Unique identifier within the process for the script source this event is
// associated with, or zero.
unsigned long sourceId = 0;
unsigned long lineNumber = 0;
unsigned long columnNumber = 0;
DOMString functionName = "";
double timeStamp = 0;
double microSecondTimeStamp = 0;
sequence<any> arguments;
sequence<DOMString?> styles;
boolean private = false;
// stacktrace is handled via a getter in some cases so we can construct it
// lazily. Note that we're not making this whole thing an interface because
// consumers expect to see own properties on it, which would mean making the
// props unforgeable, which means lots of JSFunction allocations. Maybe we
// should fix those consumers, of course....
// sequence<ConsoleStackEntry> stacktrace;
DOMString groupName = "";
any timer = null;
any counter = null;
DOMString prefix = "";
boolean chromeContext = false;
};
// Event for profile operations
[GenerateConversionToJS]
dictionary ConsoleProfileEvent {
DOMString action = "";
sequence<any> arguments;
boolean chromeContext = false;
};
// This dictionary is used to manage stack trace data.
[GenerateConversionToJS]
dictionary ConsoleStackEntry {
DOMString filename = "";
// Unique identifier within the process for the script source this entry is
// associated with, or zero.
unsigned long sourceId = 0;
unsigned long lineNumber = 0;
unsigned long columnNumber = 0;
DOMString functionName = "";
DOMString? asyncCause;
};
[GenerateConversionToJS]
dictionary ConsoleTimerStart {
DOMString name = "";
};
[GenerateConversionToJS]
dictionary ConsoleTimerLogOrEnd {
DOMString name = "";
double duration = 0;
};
[GenerateConversionToJS]
dictionary ConsoleTimerError {
DOMString error = "";
DOMString name = "";
};
[GenerateConversionToJS]
dictionary ConsoleCounter {
DOMString label = "";
unsigned long count = 0;
};
[GenerateConversionToJS]
dictionary ConsoleCounterError {
DOMString label = "";
DOMString error = "";
};
[ChromeOnly,
Exposed=(Window,Worker,WorkerDebugger,Worklet)]
// This is basically a copy of the console namespace.
interface ConsoleInstance {
// Logging
undefined assert(optional boolean condition = false, any... data);
undefined clear();
undefined count(optional DOMString label = "default");
undefined countReset(optional DOMString label = "default");
undefined debug(any... data);
undefined error(any... data);
undefined info(any... data);
undefined log(any... data);
undefined table(any... data); // FIXME: The spec is still unclear about this.
undefined trace(any... data);
undefined warn(any... data);
undefined dir(any... data); // FIXME: This doesn't follow the spec yet.
undefined dirxml(any... data);
// Grouping
undefined group(any... data);
undefined groupCollapsed(any... data);
undefined groupEnd();
// Timing
undefined time(optional DOMString label = "default");
undefined timeLog(optional DOMString label = "default", any... data);
undefined timeEnd(optional DOMString label = "default");
// Mozilla only or Webcompat methods
undefined _exception(any... data);
undefined timeStamp(optional any data);
undefined profile(any... data);
undefined profileEnd(any... data);
// Returns true if the given level would log a message. Used for avoiding
// long/significant processing when logging messages.
boolean shouldLog(ConsoleLogLevel level);
};
callback ConsoleInstanceDumpCallback = undefined (DOMString message);
enum ConsoleLogLevel {
"All", "Debug", "Log", "Info", "Clear", "Trace", "TimeLog", "TimeEnd", "Time",
"Group", "GroupEnd", "Profile", "ProfileEnd", "Dir", "Dirxml", "Warn", "Error",
"Off"
};
dictionary ConsoleInstanceOptions {
// An optional function to intercept all strings written to stdout.
ConsoleInstanceDumpCallback dump;
// An optional prefix string to be printed before the actual logged message.
DOMString prefix = "";
// An ID representing the source of the message. Normally the inner ID of a
// DOM window.
DOMString innerID = "";
// String identified for the console, this will be passed through the console
// notifications.
DOMString consoleID = "";
// Identifier that allows to filter which messages are logged based on their
// log level.
ConsoleLogLevel maxLogLevel;
// String pref name which contains the level to use for maxLogLevel. If the
// pref doesn't exist, gets removed or it is used in workers, the maxLogLevel
// will default to the value passed to this constructor (or "all" if it wasn't
// specified).
DOMString maxLogLevelPref = "";
};
enum ConsoleLevel { "log", "warning", "error" };
// this interface is just for testing
partial interface ConsoleInstance {
[ChromeOnly]
undefined reportForServiceWorkerScope(DOMString scope, DOMString message,
DOMString filename, unsigned long lineNumber,
unsigned long columnNumber,
ConsoleLevel level);
};

Просмотреть файл

@ -50,6 +50,7 @@ WEBIDL_FILES = [
"ChromeNodeList.webidl",
"ClonedErrorHolder.webidl",
"CommandEvent.webidl",
"ConsoleInstance.webidl",
"CSSCustomPropertyRegisteredEvent.webidl",
"DebuggerNotification.webidl",
"DebuggerNotificationObserver.webidl",

Просмотреть файл

@ -9,6 +9,7 @@
#include "domstubs.h"
#include "mozilla/dom/ConsoleBinding.h"
#include "mozilla/dom/ConsoleInstanceBinding.h"
#include "mozilla/TimeStamp.h"
#include "nsCycleCollectionParticipant.h"
#include "nsTHashMap.h"

Просмотреть файл

@ -14,6 +14,7 @@
#include "mozilla/ClearOnShutdown.h"
#include "mozilla/NullPrincipal.h"
#include "mozilla/dom/ConsoleBinding.h"
#include "mozilla/dom/ConsoleInstanceBinding.h"
#include "mozilla/dom/RootedDictionary.h"
#include "mozilla/dom/ScriptSettings.h"
#include "js/PropertyAndElement.h" // JS_DefineProperty

Просмотреть файл

@ -14,7 +14,7 @@
namespace console {
// NOTE: if you touch this namespace, remember to update the ConsoleInstance
// interface as well!
// interface as well! - dom/chrome-webidl/ConsoleInstance.webidl
// Logging
[UseCounter]
@ -78,173 +78,3 @@ namespace console {
[ChromeOnly, NewObject]
ConsoleInstance createInstance(optional ConsoleInstanceOptions options = {});
};
// This is used to propagate console events to the observers.
[GenerateConversionToJS]
dictionary ConsoleEvent {
(unsigned long long or DOMString) ID;
(unsigned long long or DOMString) innerID;
DOMString consoleID = "";
DOMString addonId = "";
DOMString level = "";
DOMString filename = "";
// Unique identifier within the process for the script source this event is
// associated with, or zero.
unsigned long sourceId = 0;
unsigned long lineNumber = 0;
unsigned long columnNumber = 0;
DOMString functionName = "";
double timeStamp = 0;
double microSecondTimeStamp = 0;
sequence<any> arguments;
sequence<DOMString?> styles;
boolean private = false;
// stacktrace is handled via a getter in some cases so we can construct it
// lazily. Note that we're not making this whole thing an interface because
// consumers expect to see own properties on it, which would mean making the
// props unforgeable, which means lots of JSFunction allocations. Maybe we
// should fix those consumers, of course....
// sequence<ConsoleStackEntry> stacktrace;
DOMString groupName = "";
any timer = null;
any counter = null;
DOMString prefix = "";
boolean chromeContext = false;
};
// Event for profile operations
[GenerateConversionToJS]
dictionary ConsoleProfileEvent {
DOMString action = "";
sequence<any> arguments;
boolean chromeContext = false;
};
// This dictionary is used to manage stack trace data.
[GenerateConversionToJS]
dictionary ConsoleStackEntry {
DOMString filename = "";
// Unique identifier within the process for the script source this entry is
// associated with, or zero.
unsigned long sourceId = 0;
unsigned long lineNumber = 0;
unsigned long columnNumber = 0;
DOMString functionName = "";
DOMString? asyncCause;
};
[GenerateConversionToJS]
dictionary ConsoleTimerStart {
DOMString name = "";
};
[GenerateConversionToJS]
dictionary ConsoleTimerLogOrEnd {
DOMString name = "";
double duration = 0;
};
[GenerateConversionToJS]
dictionary ConsoleTimerError {
DOMString error = "";
DOMString name = "";
};
[GenerateConversionToJS]
dictionary ConsoleCounter {
DOMString label = "";
unsigned long count = 0;
};
[GenerateConversionToJS]
dictionary ConsoleCounterError {
DOMString label = "";
DOMString error = "";
};
[ChromeOnly,
Exposed=(Window,Worker,WorkerDebugger,Worklet)]
// This is basically a copy of the console namespace.
interface ConsoleInstance {
// Logging
undefined assert(optional boolean condition = false, any... data);
undefined clear();
undefined count(optional DOMString label = "default");
undefined countReset(optional DOMString label = "default");
undefined debug(any... data);
undefined error(any... data);
undefined info(any... data);
undefined log(any... data);
undefined table(any... data); // FIXME: The spec is still unclear about this.
undefined trace(any... data);
undefined warn(any... data);
undefined dir(any... data); // FIXME: This doesn't follow the spec yet.
undefined dirxml(any... data);
// Grouping
undefined group(any... data);
undefined groupCollapsed(any... data);
undefined groupEnd();
// Timing
undefined time(optional DOMString label = "default");
undefined timeLog(optional DOMString label = "default", any... data);
undefined timeEnd(optional DOMString label = "default");
// Mozilla only or Webcompat methods
undefined _exception(any... data);
undefined timeStamp(optional any data);
undefined profile(any... data);
undefined profileEnd(any... data);
// Returns true if the given level would log a message. Used for avoiding
// long/significant processing when logging messages.
boolean shouldLog(ConsoleLogLevel level);
};
callback ConsoleInstanceDumpCallback = undefined (DOMString message);
enum ConsoleLogLevel {
"All", "Debug", "Log", "Info", "Clear", "Trace", "TimeLog", "TimeEnd", "Time",
"Group", "GroupEnd", "Profile", "ProfileEnd", "Dir", "Dirxml", "Warn", "Error",
"Off"
};
dictionary ConsoleInstanceOptions {
// An optional function to intercept all strings written to stdout.
ConsoleInstanceDumpCallback dump;
// An optional prefix string to be printed before the actual logged message.
DOMString prefix = "";
// An ID representing the source of the message. Normally the inner ID of a
// DOM window.
DOMString innerID = "";
// String identified for the console, this will be passed through the console
// notifications.
DOMString consoleID = "";
// Identifier that allows to filter which messages are logged based on their
// log level.
ConsoleLogLevel maxLogLevel;
// String pref name which contains the level to use for maxLogLevel. If the
// pref doesn't exist, gets removed or it is used in workers, the maxLogLevel
// will default to the value passed to this constructor (or "all" if it wasn't
// specified).
DOMString maxLogLevelPref = "";
};
enum ConsoleLevel { "log", "warning", "error" };
// this interface is just for testing
partial interface ConsoleInstance {
[ChromeOnly]
undefined reportForServiceWorkerScope(DOMString scope, DOMString message,
DOMString filename, unsigned long lineNumber,
unsigned long columnNumber,
ConsoleLevel level);
};