Home | History | Annotate | Download | only in chromeos
      1 // Copyright 2013 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 cr.define('extensions', function() {
      6   /**
      7    * Encapsulated handling of ChromeOS kiosk apps options page.
      8    * @constructor
      9    */
     10   function KioskAppsOverlay() {
     11   }
     12 
     13   cr.addSingletonGetter(KioskAppsOverlay);
     14 
     15   KioskAppsOverlay.prototype = {
     16     /**
     17      * Clear error timer id.
     18      * @type {?number}
     19      */
     20     clearErrorTimer_: null,
     21 
     22     /**
     23      * Initialize the page.
     24      */
     25     initialize: function() {
     26       chrome.send('initializeKioskAppSettings');
     27       extensions.KioskAppList.decorate($('kiosk-app-list'));
     28 
     29       var overlay = $('kiosk-apps-page');
     30       cr.ui.overlay.setupOverlay(overlay);
     31       cr.ui.overlay.globalInitialization();
     32       overlay.addEventListener('cancelOverlay', this.handleDismiss_.bind(this));
     33 
     34       $('kiosk-options-overlay-confirm').onclick =
     35           this.handleDismiss_.bind(this);
     36       $('kiosk-app-id-edit').addEventListener('keypress',
     37           this.handleAppIdInputKeyPressed_.bind(this));
     38       $('kiosk-app-add').onclick = this.handleAddButtonClick_.bind(this);
     39     },
     40 
     41     /*
     42      * Invoked when the page is shown.
     43      */
     44     didShowPage: function() {
     45       chrome.send('getKioskAppSettings');
     46       $('kiosk-app-id-edit').focus();
     47     },
     48 
     49     /**
     50      * Shows error for given app name/id and schedules it to cleared.
     51      * @param {!string} appName App name/id to show in error banner.
     52      */
     53     showError: function(appName) {
     54       var errorBanner = $('kiosk-apps-error-banner');
     55       var appNameElement = errorBanner.querySelector('.kiosk-app-name');
     56       appNameElement.textContent = appName;
     57       errorBanner.classList.add('visible');
     58 
     59       if (this.clearErrorTimer_)
     60         window.clearTimeout(this.clearErrorTimer_);
     61 
     62       // Sets a timer to clear out error banner after 5 seconds.
     63       this.clearErrorTimer_ = window.setTimeout(function() {
     64         errorBanner.classList.remove('visible');
     65         this.clearErrorTimer_ = null;
     66       }.bind(this), 5000);
     67     },
     68 
     69     /**
     70      * Handles keypressed event in the app id input element.
     71      * @private
     72      */
     73     handleAppIdInputKeyPressed_: function(e) {
     74       if (e.keyIdentifier == 'Enter' && e.target.value)
     75         this.handleAddButtonClick_();
     76     },
     77 
     78     /**
     79      * Handles click event on the add button.
     80      * @private
     81      */
     82     handleAddButtonClick_: function() {
     83       var appId = $('kiosk-app-id-edit').value;
     84       if (!appId)
     85         return;
     86 
     87       chrome.send('addKioskApp', [appId]);
     88       $('kiosk-app-id-edit').value = '';
     89     },
     90 
     91     /**
     92      * Handles the overlay being dismissed.
     93      * @private
     94      */
     95     handleDismiss_: function() {
     96       this.handleAddButtonClick_();
     97       extensions.ExtensionSettings.showOverlay(null);
     98     }
     99   };
    100 
    101   /**
    102    * Sets apps to be displayed in kiosk-app-list.
    103    * @param {!Object.<{apps: !Array.<Object>, disableBailout: boolean}>}
    104    *     settings An object containing an array of app info objects and
    105    *     disable bailout shortcut flag.
    106    */
    107   KioskAppsOverlay.setSettings = function(settings) {
    108     $('kiosk-app-list').setApps(settings.apps);
    109     $('kiosk-disable-bailout-shortcut').checked = settings.disableBailout;
    110     $('kiosk-disable-bailout-shortcut').disabled = !settings.hasAutoLaunchApp;
    111   };
    112 
    113   /**
    114    * Update an app in kiosk-app-list.
    115    * @param {!Object} app App info to be updated.
    116    */
    117   KioskAppsOverlay.updateApp = function(app) {
    118     $('kiosk-app-list').updateApp(app);
    119   };
    120 
    121   /**
    122    * Shows error for given app name/id.
    123    * @param {!string} appName App name/id to show in error banner.
    124    */
    125   KioskAppsOverlay.showError = function(appName) {
    126     KioskAppsOverlay.getInstance().showError(appName);
    127   };
    128 
    129   /**
    130    * Enables consumer kiosk.
    131    * @param {!boolean} enable True if consumer kiosk feature is enabled.
    132    */
    133   KioskAppsOverlay.enableKiosk = function(params) {
    134     $('add-kiosk-app').hidden = !params.kioskEnabled;
    135     $('kiosk-disable-bailout-shortcut').parentNode.hidden =
    136         !params.autoLaunchEnabled;
    137     $('kiosk-app-list').setAutoLaunchEnabled(params.autoLaunchEnabled);
    138   };
    139 
    140   // Export
    141   return {
    142     KioskAppsOverlay: KioskAppsOverlay
    143   };
    144 });
    145 
    146 <include src="kiosk_app_list.js"></include>
    147 <include src="kiosk_app_disable_bailout_confirm.js"></include>
    148