blob: df2d0c2c83737e874527fb6b7d10b5a2223efcb6 [file] [log] [blame]
// Copyright 2013 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.
/**
* Manage the installation of apps.
*/
class AppInstaller {
/**
* @param {string} itemId Item id to be installed.
* @param {!CWSWidgetContainerPlatformDelegate} delegate Delegate for
* accessing Chrome platform APIs.
*/
constructor(itemId, delegate) {
/** @private {!CWSWidgetContainerPlatformDelegate} */
this.delegate_ = delegate;
this.itemId_ = itemId;
this.callback_ = null;
}
/**
* Start an installation.
* @param {function(AppInstaller.Result, string)} callback Called when the
* installation is finished.
*/
install(callback) {
this.callback_ = callback;
this.delegate_.installWebstoreItem(
this.itemId_, this.onInstallCompleted_.bind(this));
}
/**
* Prevents {@code this.callback_} from being called.
*/
cancel() {
// TODO(tbarzic): Would it make sense to uninstall the app on success if the
// app instaler is cancelled instead of just invalidating the callback?
this.callback_ = null;
}
/**
* Called when the installation is completed.
*
* @param {?string} error Null if the installation is success,
* otherwise error message.
* @private
*/
onInstallCompleted_(error) {
if (!this.callback_) {
return;
}
let installerResult = AppInstaller.Result.SUCCESS;
if (error !== null) {
installerResult = error == AppInstaller.USER_CANCELLED_ERROR_STR_ ?
AppInstaller.Result.CANCELLED :
AppInstaller.Result.ERROR;
}
this.callback_(installerResult, error || '');
this.callback_ = null;
}
}
/**
* Type of result.
*
* @enum {string}
* @const
*/
AppInstaller.Result = {
SUCCESS: 'AppInstaller.success',
CANCELLED: 'AppInstaller.cancelled',
ERROR: 'AppInstaller.error'
};
Object.freeze(AppInstaller.Result);
/**
* Error message for user cancellation. This must be match with the constant
* 'kUserCancelledError' in C/B/extensions/webstore_standalone_installer.cc.
* @type {string}
* @const
* @private
*/
AppInstaller.USER_CANCELLED_ERROR_STR_ = 'User cancelled install';