blob: f28ccd5db9c5f1bbc220dc337a11974277e8a2d9 [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
// (DEFAULT, TAB_MIRROR, DESKTOP_MIRROR).
AUTO: -1,
DEFAULT: 0x1,
TAB_MIRROR: 0x2,
DESKTOP_MIRROR: 0x4,
};
/**
* 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,
};
/**
* 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',
};
/**
* This corresponds to the C++ MediaSink IconType.
* @enum {number}
*/
media_router.SinkIconType = {
CAST: 0,
CAST_AUDIO: 1,
CAST_AUDIO_GROUP: 2,
GENERIC: 3,
HANGOUT: 4,
};
/**
* @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.
* @constructor
* @struct
*/
var CastMode = function(type, description, host) {
/** @type {number} */
this.type = type;
/** @type {string} */
this.description = description;
/** @type {?string} */
this.host = host || null;
};
/**
* 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);
/**
* @param {string} 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} secondaryActionType The type of optional action.
* @param {?string} mediaRouteId 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, mediaRouteId, isBlocking,
helpPageId) {
/** @type {string} */
this.id = id;
/** @type {string} */
this.title = title;
/** @type {string} */
this.message = message;
/** @type {number} */
this.defaultActionType = defaultActionType;
/** @type {?number} */
this.secondaryActionType = secondaryActionType;
/** @type {?string} */
this.mediaRouteId = mediaRouteId;
/** @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 {?string} */
this.customControllerPath = customControllerPath;
};
/**
* @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;
};
/**
* @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,
Sink: Sink,
TabInfo: TabInfo,
};
});