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.
6 * @fileoverview Kiosk apps menu implementation.
9 cr.define('login', function() {
12 var Menu = cr.ui.Menu;
13 var MenuButton = cr.ui.MenuButton;
16 * Creates apps menu button.
18 * @extends {cr.ui.MenuButton}
20 var AppsMenuButton = cr.ui.define('button');
22 AppsMenuButton.prototype = {
23 __proto__: MenuButton.prototype,
26 * Flag of whether to rebuild the menu.
33 * Array to hold apps info.
42 this.needsRebuild_ = true;
46 decorate: function() {
47 MenuButton.prototype.decorate.call(this);
49 cr.ui.decorate(this.menu, Menu);
50 document.body.appendChild(this.menu);
52 this.anchorType = cr.ui.AnchorType.ABOVE;
53 chrome.send('initializeKioskApps');
57 showMenu: function(shouldSetFocus) {
58 if (this.needsRebuild_) {
59 this.menu.textContent = '';
60 this.data_.forEach(this.addItem_, this);
61 this.needsRebuild_ = false;
64 MenuButton.prototype.showMenu.apply(this, arguments);
68 * Invoked when apps menu becomes visible.
71 window.setTimeout(function() {
72 if (!$('apps-header-bar-item').hidden)
73 chrome.send('checkKioskAppLaunchError');
77 findAndRunAppForTesting: function(id) {
79 for (var i = 0; i < this.menu.menuItems.length; i++) {
80 var menuNode = this.menu.menuItems[i];
81 if (menuNode.appId == id) {
82 var activationEvent = cr.doc.createEvent('Event');
83 activationEvent.initEvent('activate', true, true);
84 menuNode.dispatchEvent(activationEvent);
91 * Adds an app to the menu.
92 * @param {Object} app An app info object.
95 addItem_: function(app) {
96 var menuItem = this.menu.addMenuItem(app);
97 menuItem.classList.add('apps-menu-item');
98 menuItem.appId = app.id;
99 menuItem.addEventListener('activate', function() {
100 chrome.send('launchKioskApp', [app.id]);
106 * Sets apps to be displayed in the apps menu.
107 * @param {!Array.<!Object>} apps An array of app info objects.
109 AppsMenuButton.setApps = function(apps) {
110 $('show-apps-button').data = apps;
111 $('login-header-bar').hasApps = apps.length > 0;
112 chrome.send('kioskAppsLoaded');
116 * Shows the given error message.
117 * @param {!string} message Error message to show.
119 AppsMenuButton.showError = function(message) {
120 /** @const */ var BUBBLE_OFFSET = 25;
121 /** @const */ var BUBBLE_PADDING = 12;
122 $('bubble').showTextForElement($('show-apps-button'),
124 cr.ui.Bubble.Attachment.TOP,
131 * Runs app with a given id from the list of loaded apps.
132 * @param {!string} id of an app to run.
134 AppsMenuButton.runAppForTesting = function(id) {
135 $('show-apps-button').findAndRunAppForTesting(id);
139 AppsMenuButton: AppsMenuButton