chromium/chrome/common/extensions/api/webrtc_logging_private.idl

// 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);
  };
};