blob: 60eea6b70af355a7dc648a791691a648c089b661 [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// NOTE: Througout this file, we use constructors instead of @typedefs to
// declare object properties. This prevents the JSCompiler from renaming these
// properties. These can be converted to shorter @typedef declarations when the
// JSCompiler adds full support for @typedef in externs.
//////////////////////////////////////////////////////////////////////////////
// Externs for WebRTC PeerConnection as in
// http://www.w3.org/TR/2012/WD-webrtc-20120821/
//////////////////////////////////////////////////////////////////////////////
/** @type {string} */
MediaStreamEvent.prototype.type;
/** @type {string} */
RTCPeerConnection.prototype.iceConnectionState;
//////////////////////////////////////////////////////////////////////////////
// Externs for processes API
// See: https://developer.chrome.com/extensions/processes
//////////////////////////////////////////////////////////////////////////////
/**
* @const
*/
chrome.processes = {};
/**
* @param {number} tabId
* @param {Function} callback
*/
chrome.processes.getProcessIdForTab = function(tabId, callback) {};
/**
* @const
*/
chrome.processes.onUpdated = {};
/**
* @param {Function} callback
*/
chrome.processes.onUpdated.addListener = function(callback) {};
/**
* @param {Function} callback
*/
chrome.processes.onUpdated.removeListener = function(callback) {};
//////////////////////////////////////////////////////////////////////////////
// Externs for Tab Capture API
// See: https://developer.chrome.com/extensions/tabCapture.html
//////////////////////////////////////////////////////////////////////////////
/** @const {*} */
chrome.tabCapture = {};
/**
* @param {MediaConstraints} constraints
* @param {function(MediaStream)} callback
*/
chrome.tabCapture.capture = function(constraints, callback) {};
/**
* @param {string} startUrl
* @param {MediaConstraints} constraints
* @param {function(MediaStream)} callback
*/
chrome.tabCapture.captureOffscreenTab = function(
startUrl, constraints, callback) {};
/**
* @type {ChromeEvent}
*/
chrome.tabCapture.onStatusChanged;
//////////////////////////////////////////////////////////////////////////////
// Externs for Desktop Capture API
// See: https://developer.chrome.com/extensions/desktopCapture.html
//////////////////////////////////////////////////////////////////////////////
/** @const */
chrome.desktopCapture = {};
/**
* @param {Array<string>} sources
* @param {function(string)} callback
* @return {number} desktopMediaRequestId
*/
chrome.desktopCapture.chooseDesktopMedia = function(sources, callback) {};
/**
* @param {number} desktopMediaRequestId
*/
chrome.desktopCapture.cancelChooseDesktopMedia = function(
desktopMediaRequestId) {};
//////////////////////////////////////////////////////////////////////////////
// Externs for chrome.dial API
// IDL: http://goo.gl/qmKqro
//////////////////////////////////////////////////////////////////////////////
/** @const {*} */
chrome.dial = {};
/** @constructor */
chrome.dial.DialDevice = function() {};
/** @type {string} */
chrome.dial.DialDevice.prototype.deviceLabel;
/** @type {string} */
chrome.dial.DialDevice.prototype.deviceDescriptionUrl;
/** @type {number} */
chrome.dial.DialDevice.prototype.configId;
/** @constructor */
chrome.dial.DialDeviceDescription = function() {};
/** @type {string} */
chrome.dial.DialDeviceDescription.prototype.deviceLabel;
/** @type {string} */
chrome.dial.DialDeviceDescription.prototype.appUrl;
/** @type {string} */
chrome.dial.DialDeviceDescription.prototype.deviceDescription;
/** @constructor */
chrome.dial.DialError = function() {};
/** @type {string} */
chrome.dial.DialError.prototype.code;
/**
* @param {function(boolean)} callback The result (true if successful).
*/
chrome.dial.discoverNow = function(callback) {};
/**
* @param {string} deviceLabel
* @param {function(?chrome.dial.DialDeviceDescription)} callback
*/
chrome.dial.fetchDeviceDescription = function(deviceLabel, callback) {};
/** @type {ChromeEvent} */
chrome.dial.onDeviceList;
/** @type {ChromeEvent} */
chrome.dial.onError;
//////////////////////////////////////////////////////////////////////////////
// Externs for the chrome.cast.channel API
// IDL: http://goo.gl/G1hmAI
//////////////////////////////////////////////////////////////////////////////
/** @const */
chrome.cast = chrome.cast || {};
/** @const */
chrome.cast.channel = {};
/** @constructor */
chrome.cast.channel.ChannelInfo = function() {};
/** @type {number} */
chrome.cast.channel.ChannelInfo.prototype.channelId;
/** @type {string} */
chrome.cast.channel.ChannelInfo.prototype.readyState;
/** @type {?string} */
chrome.cast.channel.ChannelInfo.prototype.errorState;
/** @type {?boolean} */
chrome.cast.channel.ChannelInfo.prototype.keepAlive;
/** @type {?boolean} */
chrome.cast.channel.ChannelInfo.prototype.audioOnly;
/** @constructor */
chrome.cast.channel.MessageInfo = function() {};
/** @type {string} */
chrome.cast.channel.MessageInfo.prototype.namespace_;
/** @type {*} */
chrome.cast.channel.MessageInfo.prototype.data;
/** @type {string} */
chrome.cast.channel.MessageInfo.prototype.sourceId;
/** @type {string} */
chrome.cast.channel.MessageInfo.prototype.destinationId;
/** @constructor */
chrome.cast.channel.ConnectInfo = function() {};
/** @type {string} */
chrome.cast.channel.ConnectInfo.prototype.ipAddress;
/** @type {number} */
chrome.cast.channel.ConnectInfo.prototype.port;
/** @type {string} */
chrome.cast.channel.ConnectInfo.prototype.auth;
/** @type {number} */
chrome.cast.channel.ConnectInfo.prototype.timeout;
/** @type {number} */
chrome.cast.channel.ConnectInfo.prototype.livenessTimeout;
/** @type {number} */
chrome.cast.channel.ConnectInfo.prototype.pingInterval;
/** @constructor */
chrome.cast.channel.ErrorInfo = function() {};
/** @type {string} */
chrome.cast.channel.ErrorInfo.prototype.errorState;
/** @type {?number} */
chrome.cast.channel.ErrorInfo.prototype.eventType;
/** @type {?number} */
chrome.cast.channel.ErrorInfo.prototype.challengeReplyErrorType;
/** @type {?number} */
chrome.cast.channel.ErrorInfo.prototype.netReturnValue;
/** @type {?number} */
chrome.cast.channel.ErrorInfo.prototype.nssErrorCode;
/**
* @param {!chrome.cast.channel.ConnectInfo} connectInfo
* @param {function(!chrome.cast.channel.ChannelInfo=)} callback
*/
chrome.cast.channel.open = function(connectInfo, callback) {};
/**
* @param {!chrome.cast.channel.ChannelInfo} channel
* @param {!chrome.cast.channel.MessageInfo} message
* @param {function(!chrome.cast.channel.ChannelInfo=)} callback
*/
chrome.cast.channel.send = function(channel, message, callback) {};
/**
* @param {!chrome.cast.channel.ChannelInfo} channel
* @param {function(!chrome.cast.channel.ChannelInfo=)} callback
*/
chrome.cast.channel.close = function(channel, callback) {};
/** @const */
chrome.cast.channel.onMessage;
/**
* @param {!function(!chrome.cast.channel.ChannelInfo,
* !chrome.cast.channel.MessageInfo)} listener
*/
chrome.cast.channel.onMessage.addListener = function(listener) {};
/**
* @param {!function(!chrome.cast.channel.ChannelInfo,
* !chrome.cast.channel.MessageInfo)} listener
*/
chrome.cast.channel.onMessage.removeListener = function(listener) {};
/** @const */
chrome.cast.channel.onError;
/**
* @param {!function(!chrome.cast.channel.ChannelInfo,
* (!chrome.cast.channel.ErrorInfo|undefined))} listener
*/
chrome.cast.channel.onError.addListener = function(listener) {};
/**
* @param {!function(!chrome.cast.channel.ChannelInfo,
* (!chrome.cast.channel.ErrorInfo|undefined))} listener
*/
chrome.cast.channel.onError.removeListener = function(listener) {};
/** @const */
chrome.cast.media = {};
/**
* @param {function(ChromeWindow)} callback
*/
chrome.browserAction.openPopup = function(callback) {};
//////////////////////////////////////////////////////////////////////////////
// Externs for the chrome.cast.streaming APIs
// See: http://goo.gl/yInHUU
//////////////////////////////////////////////////////////////////////////////
/** @const {*} */
chrome.cast.streaming = {};
/** @const {*} */
chrome.cast.streaming.session = {};
/**
* @param {?MediaStreamTrack} audio
* @param {?MediaStreamTrack} video
* @param {!function(?number, ?number, !number)} callback
*/
chrome.cast.streaming.session.create = function(audio, video, callback) {};
/** @const {*} */
chrome.cast.streaming.rtpStream = {};
/** @constructor */
chrome.cast.streaming.rtpStream.CodecSpecificParams = function() {};
/** @constructor */
chrome.cast.streaming.rtpStream.RtpPayloadParams = function() {};
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.maxLatency;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.minLatency;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.animatedLatency;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.payloadType;
/** @type {string} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.codecName;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.ssrc;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.feedbackSsrc;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.clockRate;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.minBitrate;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.maxBitrate;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.channels;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.maxFrameRate;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.width;
/** @type {number} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.height;
/** @type {string} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.aesKey;
/** @type {string} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.aesIvMask;
/** @type {Array.<chrome.cast.streaming.rtpStream.CodecSpecificParams>} */
chrome.cast.streaming.rtpStream.RtpPayloadParams.prototype.codecSpecificParams;
/** @constructor */
chrome.cast.streaming.rtpStream.RtpParams = function() {};
/** @type {chrome.cast.streaming.rtpStream.RtpPayloadParams} */
chrome.cast.streaming.rtpStream.RtpParams.prototype.payload;
/** @type {Array.<string>} */
chrome.cast.streaming.rtpStream.RtpParams.prototype.rtcpFeatures;
/**
* @param {!number} streamId
*/
chrome.cast.streaming.rtpStream.destroy = function(streamId) {};
/**
* @param {!number} streamId
* @return {!Array.<!chrome.cast.streaming.rtpStream.RtpParams>}
*/
chrome.cast.streaming.rtpStream.getSupportedParams = function(streamId) {
return [new chrome.cast.streaming.rtpStream.RtpParams];
};
/**
* @param {!number} streamId
* @param {!chrome.cast.streaming.rtpStream.RtpParams} params
*/
chrome.cast.streaming.rtpStream.start = function(streamId, params) {};
/**
* @param {!number} streamId
*/
chrome.cast.streaming.rtpStream.stop = function(streamId) {};
/**
* @param {!number} streamId
* @param {!boolean} enable
*/
chrome.cast.streaming.rtpStream.toggleLogging = function(streamId, enable) {};
/**
* @param {!number} streamId
* @param {!string} extraData
* @param {!function(ArrayBuffer)} callback
*/
chrome.cast.streaming.rtpStream.getRawEvents = function(
streamId, extraData, callback) {};
/**
* @param {!number} streamId
* @param {!function(Object)} callback
*/
chrome.cast.streaming.rtpStream.getStats = function(streamId, callback) {};
/** @const {*} */
chrome.cast.streaming.rtpStream.onStarted = {};
/**
* @param {!function(!number)} listener
*/
chrome.cast.streaming.rtpStream.onStarted.addListener = function(listener) {};
/**
* @param {!function(!number)} listener
*/
chrome.cast.streaming.rtpStream.onStarted.removeListener = function(listener) {
};
/** @const {*} */
chrome.cast.streaming.rtpStream.onStopped = {};
/**
* @param {!function(!number)} listener
*/
chrome.cast.streaming.rtpStream.onStopped.addListener = function(listener) {};
/**
* @param {!function(!number)} listener
*/
chrome.cast.streaming.rtpStream.onStopped.removeListener = function(listener) {
};
/** @const {*} */
chrome.cast.streaming.rtpStream.onError = {};
/**
* @param {!function(number, string)} listener
*/
chrome.cast.streaming.rtpStream.onError.addListener = function(listener) {};
/**
* @param {!function(number, string)} listener
*/
chrome.cast.streaming.rtpStream.onError.removeListener = function(listener) {};
/** @constructor */
chrome.cast.streaming.udpTransport.IPEndPoint = function() {};
/** @type {string} */
chrome.cast.streaming.udpTransport.IPEndPoint.prototype.address;
/** @type {number} */
chrome.cast.streaming.udpTransport.IPEndPoint.prototype.port;
/**
* @param {!number} streamId
*/
chrome.cast.streaming.udpTransport.destroy = function(streamId) {};
/** @const {*} */
chrome.cast.streaming.udpTransport = {};
/**
* @param {!number} transportId
* @param {!chrome.cast.streaming.udpTransport.IPEndPoint} ipEndPoint
*/
chrome.cast.streaming.udpTransport.setDestination = function(
transportId, ipEndPoint) {};
/**
* @param {!number} transportId
* @param {!Object} options
*/
chrome.cast.streaming.udpTransport.setOptions = function(transportId, options) {
};
/** @const {*} */
chrome.mojoPrivate = {};
/**
* @param {!string} moduleName
* @return {!Promise.<T>}
* @template T
*/
chrome.mojoPrivate.requireAsync = function(moduleName) {
return Promise.resolve(Object.create(null));
};
//////////////////////////////////////////////////////////////////////////////
// Externs for UMA analytics
//////////////////////////////////////////////////////////////////////////////
/** @const {*} */
chrome.metricsPrivate = {};
/**
* Records an elapsed time of no more than 10 seconds. The sample value is
* specified in milliseconds.
* @param {string} metricName
* @param {number} value
*/
chrome.metricsPrivate.recordTime = function(metricName, value) {};
/**
* Records an elapsed time of no more than 3 minutes. The sample value is
* specified in milliseconds.
* @param {string} metricName
* @param {number} value
*/
chrome.metricsPrivate.recordMediumTime = function(metricName, value) {};
/**
* Records an elapsed time of no more than 1 hour. The sample value is
* specified in milliseconds.
* @param {string} metricName
* @param {number} value
*/
chrome.metricsPrivate.recordLongTime = function(metricName, value) {};
/**
* Records an action performed by the user.
* @param {string} name
*/
chrome.metricsPrivate.recordUserAction = function(name) {};
/**
* Records a value than can range from 1 to 100.
* @param {string} metricName
* @param {number} count
*/
chrome.metricsPrivate.recordSmallCount = function(metricName, count) {};
/**
* Returns true if the user opted in to sending crash reports.
* @param {!function(boolean)} callback
*/
chrome.metricsPrivate.getIsCrashReportingEnabled = function(callback) {};
/**
* Describes the type of metric that is to be collected.
* @typedef {{
* metricName: string,
* type: string,
* min: number,
* max: number,
* buckets: number
* }}
*/
var MetricType;
/**
* Adds a value to the given metric.
* @param {MetricType} metricType
* @param {number} value
*/
chrome.metricsPrivate.recordValue = function(metricType, value) {};
//////////////////////////////////////////////////////////////////////////////
// Externs subset for settingsPrivate API.
// see chromium/src/third_party/closure_compiler/externs/settings_private.js
//////////////////////////////////////////////////////////////////////////////
/** @const {*} */
chrome.settingsPrivate = {};
/**
* @enum {string}
*/
chrome.settingsPrivate.PrefType = {
BOOLEAN: 'BOOLEAN',
NUMBER: 'NUMBER',
STRING: 'STRING',
URL: 'URL',
LIST: 'LIST',
DICTIONARY: 'DICTIONARY',
};
/**
* @typedef {{
* key: string,
* type: !chrome.settingsPrivate.PrefType,
* value: *,
* }}
*/
chrome.settingsPrivate.PrefObject;
/**
* @param {string} name
* @param {function(!chrome.settingsPrivate.PrefObject):void} callback
*/
chrome.settingsPrivate.getPref = function(name, callback) {};
/**
* @const
*/
chrome.settingsPrivate.onPrefsChanged = {};
/**
* @param {function(!Object):void} callback
*/
chrome.settingsPrivate.onPrefsChanged.addListener = function(callback) {};
//////////////////////////////////////////////////////////////////////////////
// Externs for Google Calendar v3 API as in
// developers.google.com/google-apps/calendar/v3/reference/events#resource
//////////////////////////////////////////////////////////////////////////////
/** @const */
chrome.cast.calendar = {};
/** @constructor */
chrome.cast.calendar.Calendar = function() {};
/** @type {string} */
chrome.cast.calendar.Calendar.prototype.id;
/** @constructor */
chrome.cast.calendar.Event = function() {};
/** @type {string} */
chrome.cast.calendar.Event.prototype.summary;
/** @type {string} */
chrome.cast.calendar.Event.prototype.hangoutLink;
/**
* @typedef {{
* date: string,
* dateTime: string
* }}
*/
chrome.cast.calendar.Event.prototype.start;
/**
* @typedef {{
* date: string,
* dateTime: string
* }}
*/
chrome.cast.calendar.Event.prototype.end;
//////////////////////////////////////////////////////////////////////////////
// Externs for Google Hangouts v1 API
//////////////////////////////////////////////////////////////////////////////
/** @const */
chrome.cast.hangout = {};
/**
* @typedef {{
* 'service': (string|undefined),
* 'value': (string|undefined)
* }}
*/
chrome.cast.hangout.ExternalKey;
/**
* @typedef {{
* 'hangout_id': (string|undefined),
* 'participant_id': (string|undefined),
* 'user_id': (string|undefined),
* 'display_name': (string|undefined),
* 'role': (string|undefined),
* 'client_type': (string|undefined),
* 'participant_state': (string|undefined),
* 'joined': (boolean|undefined)
* }}
*/
chrome.cast.hangout.Participant;
/**
* @typedef {{
* 'hangout_id': (string|undefined),
* 'type': (string|undefined),
* 'external_key': (chrome.cast.hangout.ExternalKey|undefined),
* 'company_title': (string|undefined),
* 'meeting_room_name': (string|undefined),
* 'meeting_domain': (string|undefined),
* "sharing_url": (string|undefined),
* }}
*/
chrome.cast.hangout.Hangout;
/**
* @see https://developer.chrome.com/extensions/tabs#event-onUpdated
* @constructor
*/
function TabChangeInfo() {}
/** @type {string} */
TabChangeInfo.prototype.status;
/** @type {string} */
TabChangeInfo.prototype.url;
/** @type {boolean} */
TabChangeInfo.prototype.pinned;
/** @type {boolean} */
TabChangeInfo.prototype.audible;
/** @type {string} */
TabChangeInfo.prototype.favIconUrl;
//////////////////////////////////////////////////////////////////////////////
// Externs for declarativeWebRequest (not used except for channel checking)
//////////////////////////////////////////////////////////////////////////////
/** @type {Object} */
chrome.declarativeWebRequest;