blob: b9944d2ed43310e78d9ff23cf4a2164ae2ea37c5 [file] [log] [blame]
// Copyright 2015 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.
// Any strings used here will already be localized. Values such as
// CastMode.type or IDs will be defined elsewhere and determined later.
cr.exportPath('media_router');
/**
* This corresponds to the C++ MediaCastMode, with the exception of AUTO.
* See below for details. Note to support fast bitset operations, the values
* here are (1 << [corresponding value in MR]).
* @enum {number}
*/
media_router.CastModeType = {
// Note: AUTO mode is only used to configure the sink list container to show
// all sinks. Individual sinks are configured with a specific cast mode
// (PRESENTATION, TAB_MIRROR, DESKTOP_MIRROR).
AUTO: -1,
PRESENTATION: 0x1,
TAB_MIRROR: 0x2,
DESKTOP_MIRROR: 0x4,
LOCAL_FILE: 0x8,
};
/**
* The ESC key maps to KeyboardEvent.key value 'Escape'.
* @const {string}
*/
media_router.KEY_ESC = 'Escape';
/**
* This corresponds to the C++ MediaRouterMetrics
* MediaRouterRouteCreationOutcome.
* @enum {number}
*/
media_router.MediaRouterRouteCreationOutcome = {
SUCCESS: 0,
FAILURE_NO_ROUTE: 1,
FAILURE_INVALID_SINK: 2,
};
/**
* This corresponds to the C++ MediaRouterMetrics MediaRouterUserAction.
* @enum {number}
*/
media_router.MediaRouterUserAction = {
CHANGE_MODE: 0,
START_LOCAL: 1,
STOP_LOCAL: 2,
CLOSE: 3,
STATUS_REMOTE: 4,
REPLACE_LOCAL_ROUTE: 5,
};
/**
* The possible states of the Media Router dialog. Used to determine which
* components to show.
* @enum {string}
*/
media_router.MediaRouterView = {
CAST_MODE_LIST: 'cast-mode-list',
FILTER: 'filter',
ISSUE: 'issue',
ROUTE_DETAILS: 'route-details',
SINK_LIST: 'sink-list',
};
/**
* The minimum number of sinks to have to enable the search input strictly for
* filtering (i.e. the Media Router doesn't support search so the search input
* only filters existing sinks).
* @const {number}
*/
media_router.MINIMUM_SINKS_FOR_SEARCH = 20;
/**
* The states that media can be in.
* @enum {number}
*/
media_router.PlayState = {
PLAYING: 0,
PAUSED: 1,
BUFFERING: 2,
};
/**
* This corresponds to the C++ MediaSink IconType, and the order must stay in
* sync.
* @enum {number}
*/
media_router.SinkIconType = {
CAST: 0,
CAST_AUDIO_GROUP: 1,
CAST_AUDIO: 2,
MEETING: 3,
HANGOUT: 4,
EDUCATION: 5,
WIRED_DISPLAY: 6,
GENERIC: 7,
};
/**
* @enum {string}
*/
media_router.SinkStatus = {
IDLE: 'idle',
ACTIVE: 'active',
REQUEST_PENDING: 'request_pending'
};
cr.define('media_router', function() {
'use strict';
/**
* @param {number} type The type of cast mode.
* @param {string} description The description of the cast mode.
* @param {?string} host The hostname of the site to cast.
* @param {boolean} isForced True if the mode is forced.
* @constructor
* @struct
*/
var CastMode = function(type, description, host, isForced) {
/** @type {number} */
this.type = type;
/** @type {string} */
this.description = description;
/** @type {?string} */
this.host = host || null;
/** @type {boolean} */
this.isForced = isForced;
};
/**
* Placeholder object for AUTO cast mode. See comment in CastModeType.
* @const {!media_router.CastMode}
*/
var AUTO_CAST_MODE = new CastMode(
media_router.CastModeType.AUTO, loadTimeData.getString('autoCastMode'),
null, false);
/**
* @param {number} id The ID of this issue.
* @param {string} title The issue title.
* @param {string} message The issue message.
* @param {number} defaultActionType The type of default action.
* @param {number|undefined} secondaryActionType The type of optional action.
* @param {?string} routeId The route ID to which this issue
* pertains. If not set, this is a global issue.
* @param {boolean} isBlocking True if this issue blocks other UI.
* @param {?number} helpPageId The numeric help center ID.
* @constructor
* @struct
*/
var Issue = function(
id, title, message, defaultActionType, secondaryActionType, routeId,
isBlocking, helpPageId) {
/** @type {number} */
this.id = id;
/** @type {string} */
this.title = title;
/** @type {string} */
this.message = message;
/** @type {number} */
this.defaultActionType = defaultActionType;
/** @type {number|undefined} */
this.secondaryActionType = secondaryActionType;
/** @type {?string} */
this.routeId = routeId;
/** @type {boolean} */
this.isBlocking = isBlocking;
/** @type {?number} */
this.helpPageId = helpPageId;
};
/**
* @param {string} id The media route ID.
* @param {string} sinkId The ID of the media sink running this route.
* @param {string} description The short description of this route.
* @param {?number} tabId The ID of the tab in which web app is running and
* accessing the route.
* @param {boolean} isLocal True if this is a locally created route.
* @param {boolean} canJoin True if this route can be joined.
* @param {?string} customControllerPath non-empty if this route has custom
* controller.
* @constructor
* @struct
*/
var Route = function(
id, sinkId, description, tabId, isLocal, canJoin, customControllerPath) {
/** @type {string} */
this.id = id;
/** @type {string} */
this.sinkId = sinkId;
/** @type {string} */
this.description = description;
/** @type {?number} */
this.tabId = tabId;
/** @type {boolean} */
this.isLocal = isLocal;
/** @type {boolean} */
this.canJoin = canJoin;
/** @type {number|undefined} */
this.currentCastMode = undefined;
/** @type {?string} */
this.customControllerPath = customControllerPath;
/** @type {boolean} */
this.supportsWebUiController = false;
};
/**
* @param {string} title The title of the route.
* @param {boolean} canPlayPause Whether the route can be played/paused.
* @param {boolean} canMute Whether the route can be muted/unmuted.
* @param {boolean} canSetVolume Whether the route volume can be changed.
* @param {boolean} canSeek Whether the route's playback position can be
* changed.
* @param {boolean} isPaused Whether the route is paused.
* @param {boolean} isMuted Whether the route is muted.
* @param {number} volume The route's volume, between 0 and 1.
* @param {number} duration The route's duration in seconds.
* @param {number} currentTime The route's current position in seconds.
* Must not be greater than |duration|.
* @param {!{mediaRemotingEnabled: boolean}=} mirroringExtraData Only set for
* mirroring routes.
* @param {!{localPresent: boolean}=} hangoutsExtraData Only set for Hangouts
* routes.
* @constructor
* @struct
*/
var RouteStatus = function(
title = '', canPlayPause = false, canMute = false, canSetVolume = false,
canSeek = false, playState = media_router.PlayState.PLAYING,
isPaused = false, isMuted = false, volume = 0, duration = 0,
currentTime = 0, hangoutsExtraData = undefined,
mirroringExtraData = undefined) {
/** @type {string} */
this.title = title;
/** @type {boolean} */
this.canPlayPause = canPlayPause;
/** @type {boolean} */
this.canMute = canMute;
/** @type {boolean} */
this.canSetVolume = canSetVolume;
/** @type {boolean} */
this.canSeek = canSeek;
/** @type {media_router.PlayState} */
this.playState = playState;
/** @type {boolean} */
this.isMuted = isMuted;
/** @type {number} */
this.volume = volume;
/** @type {number} */
this.duration = duration;
/** @type {number} */
this.currentTime = currentTime;
/** @type {!{localPresent: boolean}|undefined} */
this.hangoutsExtraData = hangoutsExtraData;
/** @type {!{mediaRemotingEnabled: boolean}|undefined} */
this.mirroringExtraData = mirroringExtraData;
};
/**
* @param {string} id The ID of the media sink.
* @param {string} name The name of the sink.
* @param {?string} description Optional description of the sink.
* @param {?string} domain Optional domain of the sink.
* @param {media_router.SinkIconType} iconType the type of icon for the sink.
* @param {media_router.SinkStatus} status The readiness state of the sink.
* @param {number} castModes Bitset of cast modes compatible with the sink.
* @constructor
* @struct
*/
var Sink = function(
id, name, description, domain, iconType, status, castModes) {
/** @type {string} */
this.id = id;
/** @type {string} */
this.name = name;
/** @type {?string} */
this.description = description;
/** @type {?string} */
this.domain = domain;
/** @type {!media_router.SinkIconType} */
this.iconType = iconType;
/** @type {!media_router.SinkStatus} */
this.status = status;
/** @type {number} */
this.castModes = castModes;
/** @type {boolean} */
this.isPseudoSink = false;
};
/**
* @param {number} tabId The current tab ID.
* @param {string} domain The domain of the current tab.
* @constructor
* @struct
*/
var TabInfo = function(tabId, domain) {
/** @type {number} */
this.tabId = tabId;
/** @type {string} */
this.domain = domain;
};
return {
AUTO_CAST_MODE: AUTO_CAST_MODE,
CastMode: CastMode,
Issue: Issue,
Route: Route,
RouteStatus: RouteStatus,
Sink: Sink,
TabInfo: TabInfo,
};
});