blob: 78a656563a1ac0b3835431289e2473bb738496f8 [file] [log] [blame]
// Copyright 2016 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 A helper object used from the "About" section to interact with
* the browser.
*/
// <if expr="chromeos">
/**
* @typedef {{
* text: string,
* url: string,
* }}
*/
let RegulatoryInfo;
/**
* @typedef {{
* currentChannel: BrowserChannel,
* targetChannel: BrowserChannel,
* canChangeChannel: boolean,
* }}
*/
let ChannelInfo;
/**
* @typedef {{
* arcVersion: string,
* osFirmware: string,
* osVersion: string,
* }}
*/
let VersionInfo;
/**
* @typedef {{
* version: (string|undefined),
* size: (string|undefined),
* }}
*/
let AboutPageUpdateInfo;
/**
* Enumeration of all possible browser channels.
* @enum {string}
*/
const BrowserChannel = {
BETA: 'beta-channel',
CANARY: 'canary-channel',
DEV: 'dev-channel',
STABLE: 'stable-channel',
};
/**
* @typedef {{
* updateAvailable: boolean,
* }}
*/
let TPMFirmwareUpdateStatusChangedEvent;
// </if>
/**
* Enumeration of all possible update statuses. The string literals must match
* the ones defined at |AboutHandler::UpdateStatusToString|.
* @enum {string}
*/
const UpdateStatus = {
CHECKING: 'checking',
UPDATING: 'updating',
NEARLY_UPDATED: 'nearly_updated',
UPDATED: 'updated',
FAILED: 'failed',
DISABLED: 'disabled',
DISABLED_BY_ADMIN: 'disabled_by_admin',
NEED_PERMISSION_TO_UPDATE: 'need_permission_to_update',
};
// <if expr="_google_chrome and is_macosx">
/**
* @typedef {{
* hidden: boolean,
* disabled: boolean,
* actionable: boolean,
* text: (string|undefined)
* }}
*/
let PromoteUpdaterStatus;
// </if>
/**
* @typedef {{
* status: !UpdateStatus,
* progress: (number|undefined),
* message: (string|undefined),
* connectionTypes: (string|undefined),
* version: (string|undefined),
* size: (string|undefined),
* }}
*/
let UpdateStatusChangedEvent;
cr.define('settings', function() {
/**
* @param {!BrowserChannel} channel
* @return {string}
*/
function browserChannelToI18nId(channel) {
switch (channel) {
case BrowserChannel.BETA:
return 'aboutChannelBeta';
case BrowserChannel.CANARY:
return 'aboutChannelCanary';
case BrowserChannel.DEV:
return 'aboutChannelDev';
case BrowserChannel.STABLE:
return 'aboutChannelStable';
}
assertNotReached();
}
/**
* @param {!BrowserChannel} currentChannel
* @param {!BrowserChannel} targetChannel
* @return {boolean} Whether the target channel is more stable than the
* current channel.
*/
function isTargetChannelMoreStable(currentChannel, targetChannel) {
// List of channels in increasing stability order.
const channelList = [
BrowserChannel.CANARY,
BrowserChannel.DEV,
BrowserChannel.BETA,
BrowserChannel.STABLE,
];
const currentIndex = channelList.indexOf(currentChannel);
const targetIndex = channelList.indexOf(targetChannel);
return currentIndex < targetIndex;
}
/** @interface */
class AboutPageBrowserProxy {
/**
* Indicates to the browser that the page is ready.
*/
pageReady() {}
/**
* Request update status from the browser. It results in one or more
* 'update-status-changed' WebUI events.
*/
refreshUpdateStatus() {}
/** Opens the help page. */
openHelpPage() {}
// <if expr="_google_chrome">
/**
* Opens the feedback dialog.
*/
openFeedbackDialog() {}
// </if>
// <if expr="chromeos">
/**
* Checks for available update and applies if it exists.
*/
requestUpdate() {}
/**
* Checks for the update with specified version and size and applies over
* cellular. The target version and size are the same as were received from
* 'update-status-changed' WebUI event. We send this back all the way to
* update engine for it to double check with update server in case there's a
* new update available. This prevents downloading the new update that user
* didn't agree to.
* @param {string} target_version
* @param {string} target_size
*/
requestUpdateOverCellular(target_version, target_size) {}
/**
* @param {!BrowserChannel} channel
* @param {boolean} isPowerwashAllowed
*/
setChannel(channel, isPowerwashAllowed) {}
/** @return {!Promise<!ChannelInfo>} */
getChannelInfo() {}
/** @return {!Promise<!VersionInfo>} */
getVersionInfo() {}
/** @return {!Promise<?RegulatoryInfo>} */
getRegulatoryInfo() {}
/**
* Request TPM firmware update status from the browser. It results in one or
* more 'tpm-firmware-update-status-changed' WebUI events.
*/
refreshTPMFirmwareUpdateStatus() {}
// </if>
// <if expr="_google_chrome and is_macosx">
/**
* Triggers setting up auto-updates for all users.
*/
promoteUpdater() {}
// </if>
}
/**
* @implements {settings.AboutPageBrowserProxy}
*/
class AboutPageBrowserProxyImpl {
/** @override */
pageReady() {
chrome.send('aboutPageReady');
}
/** @override */
refreshUpdateStatus() {
chrome.send('refreshUpdateStatus');
}
// <if expr="_google_chrome and is_macosx">
/** @override */
promoteUpdater() {
chrome.send('promoteUpdater');
}
// </if>
/** @override */
openHelpPage() {
chrome.send('openHelpPage');
}
// <if expr="_google_chrome">
/** @override */
openFeedbackDialog() {
chrome.send('openFeedbackDialog');
}
// </if>
// <if expr="chromeos">
/** @override */
requestUpdate() {
chrome.send('requestUpdate');
}
/** @override */
requestUpdateOverCellular(target_version, target_size) {
chrome.send('requestUpdateOverCellular', [target_version, target_size]);
}
/** @override */
setChannel(channel, isPowerwashAllowed) {
chrome.send('setChannel', [channel, isPowerwashAllowed]);
}
/** @override */
getChannelInfo() {
return cr.sendWithPromise('getChannelInfo');
}
/** @override */
getVersionInfo() {
return cr.sendWithPromise('getVersionInfo');
}
/** @override */
getRegulatoryInfo() {
return cr.sendWithPromise('getRegulatoryInfo');
}
/** @override */
refreshTPMFirmwareUpdateStatus() {
chrome.send('refreshTPMFirmwareUpdateStatus');
}
// </if>
}
cr.addSingletonGetter(AboutPageBrowserProxyImpl);
return {
AboutPageBrowserProxy: AboutPageBrowserProxy,
AboutPageBrowserProxyImpl: AboutPageBrowserProxyImpl,
browserChannelToI18nId: browserChannelToI18nId,
isTargetChannelMoreStable: isTargetChannelMoreStable,
};
});