blob: 3f4e0800dfa8c17d3a2205f067a45d3b82b5b247 [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.
/**
* @fileoverview Listener for messages received from external apps/extensions or
* web pages.
*
*/
goog.provide('mr.ExternalMessageListener');
goog.require('mr.EventAnalytics');
goog.require('mr.EventListener');
goog.require('mr.InternalMessageType');
goog.require('mr.ModuleId');
mr.ExternalMessageListener = class extends mr.EventListener {
constructor() {
super(
mr.EventAnalytics.Event.RUNTIME_ON_MESSAGE_EXTERNAL,
'ExternalMessageListener', mr.ModuleId.PROVIDER_MANAGER,
chrome.runtime.onMessageExternal);
}
/**
* @override
*/
validateEvent(message, sender, sendResponse) {
// Make sure all messages have a sender |id| and that the ID is whitelisted.
// If messages have a |tab| they are from a web page (most likely the Cast
// setup page).
if (!sender.id ||
mr.ExternalMessageListener.WHITELIST_.indexOf(sender.id) == -1) {
return false;
}
// Check if message type is valid.
return message.type == mr.InternalMessageType.START ||
message.type == mr.InternalMessageType.STOP ||
message.type == mr.InternalMessageType.SUBSCRIBE_LOG_DATA;
}
/**
* @override
*/
deferredReturnValue() {
// Indicates the messaging channel should be kept open until
// sendResponse() is called.
return true;
}
/** @return {!mr.ExternalMessageListener} */
static get() {
if (!mr.ExternalMessageListener.listener_) {
mr.ExternalMessageListener.listener_ = new mr.ExternalMessageListener();
}
return mr.ExternalMessageListener.listener_;
}
};
/** @private {?mr.ExternalMessageListener} */
mr.ExternalMessageListener.listener_ = null;
/**
* List of app ids which are allowed to use the command messages.
* These must also be included in the manifest 'externally_connectable' list.
*
* @private @const {!Array<string>}
*/
mr.ExternalMessageListener.WHITELIST_ = [
// ghire kiosk app
'idmofbkcelhplfjnmmdolenpigiiiecc', // prod
'ggedfkijiiammpnbdadhllnehapomdge', // staging
'njjegkblellcjnakomndbaloifhcoccg' // dev
];