// Copyright 2013 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Use the <code>chrome.webrtcLoggingPrivate</code> API to control diagnostic
// WebRTC logging.
namespace webrtcLoggingPrivate {
dictionary MetaDataEntry {
// The meta data entry key.
DOMString key;
// The meta data entry value.
DOMString value;
};
dictionary UploadResult {
// The report ID for the uploaded log. Will be empty if not successful.
DOMString reportId;
};
dictionary RequestInfo {
// The tab identifier from the chrome.tabs API, if the request is from a
// tab.
long? tabId;
// The guest process id for the requester, if the request is from a
// webview.
long? guestProcessId;
// Use the render process of the webview in the current page. This allows an
// app to make a request for a webview it contains. If there are more or
// less than 1 webview, this will fail with a runtime error.
boolean? targetWebview;
};
// This contains information about the result of audio debug recordings.
dictionary RecordingInfo {
// Absolute path prefix for the files with the audio debug recordings.
DOMString prefixPath;
// Indicates if recording was stopped (either by a timed callback after the
// time limit has elapsed, or by a manual call).
boolean didStop;
// Indicates if recording was stopped manually through a
// stopAudioDebugRecordings() call.
boolean didManualStop;
};
dictionary StartEventLoggingResult {
// The log ID. Non-empty if and only if StartEventLogging() was successful.
DOMString logId;
};
callback GenericDoneCallback = void ();
callback RecordingDoneCallback = void (RecordingInfo info);
callback UploadDoneCallback = void (UploadResult result);
callback GetLogsDirectoryCallback = void ([instanceOf = DirectoryEntry] object entry);
callback StartEventLoggingCallback = void (StartEventLoggingResult result);
interface Functions {
// For all functions, |request| determines which render process to apply
// the operation on. |request| identifies the requesting process.
// |securityOrigin| is the security origin for the tab identified by |tabId|
// and is used for verifying that the tab is the correct one and has not
// been navigated away from.
// Sets additional custom meta data that will be uploaded along with the
// log. |metaData| is a dictionary of the metadata (key, value).
static void setMetaData(RequestInfo request,
DOMString securityOrigin,
MetaDataEntry[] metaData,
GenericDoneCallback callback);
// Starts logging. If logging has already been started for this render
// process, the call will be ignored. |appSessionId| is the unique session
// ID which will be added to the log.
static void start(RequestInfo request,
DOMString securityOrigin,
GenericDoneCallback callback);
// Sets whether the log should be uploaded automatically for the case when
// the render process goes away (tab is closed or crashes) and stop has not
// been called before that. If |shouldUpload| is true it will be uploaded,
// otherwise it will be discarded. The default setting is to discard it.
static void setUploadOnRenderClose(RequestInfo request,
DOMString securityOrigin,
boolean shouldUpload);
// Stops logging. After stop has finished, either upload() or discard()
// should be called, otherwise the log will be kept in memory until the
// render process is closed or logging restarted.
static void stop(RequestInfo request,
DOMString securityOrigin,
GenericDoneCallback callback);
// Stores the current log without uploading. The log may stay around for
// as much as 5 days. The application has the option of supplying an id
// for uniquely identifying the log for later upload via a call to
// uploadStored().
static void store(RequestInfo request,
DOMString securityOrigin,
DOMString logId,
GenericDoneCallback callback);
// Uploads a previously kept log that was stored via a call to store().
// The caller needs to know the logId as was originally provided in the
// call to store().
static void uploadStored(RequestInfo request,
DOMString securityOrigin,
DOMString logId,
UploadDoneCallback callback);
// Uploads the log and the RTP dumps, if they exist. Logging and RTP dumping
// must be stopped before this function is called.
static void upload(RequestInfo request,
DOMString securityOrigin,
UploadDoneCallback callback);
// Discards the log. Logging must be stopped before this function is called.
static void discard(RequestInfo request,
DOMString securityOrigin,
GenericDoneCallback callback);
// Starts RTP dumping. If it has already been started for this render
// process, the call will be ignored.
static void startRtpDump(RequestInfo request,
DOMString securityOrigin,
boolean incoming,
boolean outgoing,
GenericDoneCallback callback);
// Stops RTP dumping. After stop has finished, the dumps will be
// uploaded with the log if upload is called. Otherwise, the dumps will be
// discarded.
static void stopRtpDump(RequestInfo request,
DOMString securityOrigin,
boolean incoming,
boolean outgoing,
GenericDoneCallback callback);
// Starts audio debug recordings.
// |seconds| indicates how many seconds of audio to record. |callback|
// is invoked once recording stops.
// If |seconds| is zero, recording will continue until
// stopAudioDebugRecordings() is explicitly called. In this case,
// |callback| is invoked once recording starts and will report
// that recording has not stopped.
// If |seconds| is negative, startAudioDebugRecordings() fails.
static void startAudioDebugRecordings(RequestInfo request,
DOMString securityOrigin,
long seconds,
RecordingDoneCallback callback);
// Stops audio debug recordings. |callback| is invoked once recording
// stops. If there is no recording in progress, stopAudioDebugRecordings()
// fails.
static void stopAudioDebugRecordings(RequestInfo request,
DOMString securityOrigin,
RecordingDoneCallback callback);
// Start remote-bound event logging for a specific peer connection,
// indicated by its session description's ID.
// If successful, the callback will carry the ID of the log.
// * |webAppId| must be a number between 1 and 99 (inclusive), which will be
// incorporated into the uploaded log, so as to help distinugish logs
// captured by different web-apps.
// * |outputPeriodMs| refers to the time between emissions of logs.
// Only non-negative values are allowed. If set to zero, logs will be
// produced as soon as an event occurs. If positive, events will be
// batched together and emitted approximately every |outputPeriodMs| ms.
static void startEventLogging(RequestInfo request,
DOMString securityOrigin,
DOMString sessionId,
long maxLogSizeBytes,
long outputPeriodMs,
long webAppId,
StartEventLoggingCallback callback);
// Returns the directory entry for the "WebRTC Logs" directory. If the
// directory doesn't exist yet, this will create it. If the directory
// cannot be created, this call will fail with a runtime error.
[doesNotSupportPromises="Custom hook sets lastError crbug.com/1504349"]
static void getLogsDirectory(GetLogsDirectoryCallback callback);
};
};