Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: chrome/browser/resources/ntp4/apps_page.js

Issue 12680004: Remove chrome/ code to handle App Notifications (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix merge conflicts. Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('ntp', function() { 5 cr.define('ntp', function() {
6 'use strict'; 6 'use strict';
7 7
8 var APP_LAUNCH = { 8 var APP_LAUNCH = {
9 // The histogram buckets (keep in sync with extension_constants.h). 9 // The histogram buckets (keep in sync with extension_constants.h).
10 NTP_APPS_MAXIMIZED: 0, 10 NTP_APPS_MAXIMIZED: 0,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 var self = this; 58 var self = this;
59 this.forAllLaunchTypes_(function(launchTypeButton, id) { 59 this.forAllLaunchTypes_(function(launchTypeButton, id) {
60 launchTypeButton.addEventListener('activate', 60 launchTypeButton.addEventListener('activate',
61 self.onLaunchTypeChanged_.bind(self)); 61 self.onLaunchTypeChanged_.bind(self));
62 }); 62 });
63 63
64 this.launchTypeMenuSeparator_ = cr.ui.MenuItem.createSeparator(); 64 this.launchTypeMenuSeparator_ = cr.ui.MenuItem.createSeparator();
65 menu.appendChild(this.launchTypeMenuSeparator_); 65 menu.appendChild(this.launchTypeMenuSeparator_);
66 this.options_ = this.appendMenuItem_('appoptions'); 66 this.options_ = this.appendMenuItem_('appoptions');
67 this.details_ = this.appendMenuItem_('appdetails'); 67 this.details_ = this.appendMenuItem_('appdetails');
68 this.disableNotifications_ =
69 this.appendMenuItem_('appdisablenotifications');
70 this.uninstall_ = this.appendMenuItem_('appuninstall'); 68 this.uninstall_ = this.appendMenuItem_('appuninstall');
71 this.options_.addEventListener('activate', 69 this.options_.addEventListener('activate',
72 this.onShowOptions_.bind(this)); 70 this.onShowOptions_.bind(this));
73 this.details_.addEventListener('activate', 71 this.details_.addEventListener('activate',
74 this.onShowDetails_.bind(this)); 72 this.onShowDetails_.bind(this));
75 this.disableNotifications_.addEventListener(
76 'activate', this.onDisableNotifications_.bind(this));
77 this.uninstall_.addEventListener('activate', 73 this.uninstall_.addEventListener('activate',
78 this.onUninstall_.bind(this)); 74 this.onUninstall_.bind(this));
79 75
80 if (!cr.isChromeOS) { 76 if (!cr.isChromeOS) {
81 this.createShortcutSeparator_ = 77 this.createShortcutSeparator_ =
82 menu.appendChild(cr.ui.MenuItem.createSeparator()); 78 menu.appendChild(cr.ui.MenuItem.createSeparator());
83 this.createShortcut_ = this.appendMenuItem_('appcreateshortcut'); 79 this.createShortcut_ = this.appendMenuItem_('appcreateshortcut');
84 this.createShortcut_.addEventListener( 80 this.createShortcut_.addEventListener(
85 'activate', this.onCreateShortcut_.bind(this)); 81 'activate', this.onCreateShortcut_.bind(this));
86 } 82 }
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 launchTypeButton.checked = app.appData.launch_type == id; 133 launchTypeButton.checked = app.appData.launch_type == id;
138 launchTypeButton.hidden = app.appData.packagedApp; 134 launchTypeButton.hidden = app.appData.packagedApp;
139 }); 135 });
140 136
141 this.launchTypeMenuSeparator_.hidden = app.appData.packagedApp; 137 this.launchTypeMenuSeparator_.hidden = app.appData.packagedApp;
142 138
143 this.options_.disabled = !app.appData.optionsUrl || !app.appData.enabled; 139 this.options_.disabled = !app.appData.optionsUrl || !app.appData.enabled;
144 this.details_.disabled = !app.appData.detailsUrl; 140 this.details_.disabled = !app.appData.detailsUrl;
145 this.uninstall_.disabled = !app.appData.mayDisable; 141 this.uninstall_.disabled = !app.appData.mayDisable;
146 142
147 this.disableNotifications_.hidden = true;
148 var notificationsDisabled = app.appData.notifications_disabled;
149 if (typeof notificationsDisabled != 'undefined') {
150 this.disableNotifications_.hidden = false;
151 this.disableNotifications_.checked = notificationsDisabled;
152 }
153 if (cr.isMac) { 143 if (cr.isMac) {
154 // On Windows and Linux, these should always be visible. On ChromeOS, 144 // On Windows and Linux, these should always be visible. On ChromeOS,
155 // they are never created. On Mac, shortcuts can only be created for 145 // they are never created. On Mac, shortcuts can only be created for
156 // new-style packaged apps, so hide the menu item. 146 // new-style packaged apps, so hide the menu item.
157 this.createShortcutSeparator_.hidden = this.createShortcut_.hidden = 147 this.createShortcutSeparator_.hidden = this.createShortcut_.hidden =
158 !app.appData.packagedApp; 148 !app.appData.packagedApp;
159 } 149 }
160 }, 150 },
161 151
162 /** 152 /**
(...skipping 17 matching lines...) Expand all
180 }); 170 });
181 }, 171 },
182 onShowOptions_: function(e) { 172 onShowOptions_: function(e) {
183 window.location = this.app_.appData.optionsUrl; 173 window.location = this.app_.appData.optionsUrl;
184 }, 174 },
185 onShowDetails_: function(e) { 175 onShowDetails_: function(e) {
186 var url = this.app_.appData.detailsUrl; 176 var url = this.app_.appData.detailsUrl;
187 url = appendParam(url, 'utm_source', 'chrome-ntp-launcher'); 177 url = appendParam(url, 'utm_source', 'chrome-ntp-launcher');
188 window.location = url; 178 window.location = url;
189 }, 179 },
190 onDisableNotifications_: function(e) {
191 var app = this.app_;
192 app.removeBubble();
193 // Toggle the current disable setting.
194 var newSetting = !this.disableNotifications_.checked;
195 app.appData.notifications_disabled = newSetting;
196 chrome.send('setNotificationsDisabled', [app.appData.id, newSetting]);
197 },
198 onUninstall_: function(e) { 180 onUninstall_: function(e) {
199 chrome.send('uninstallApp', [this.app_.appData.id]); 181 chrome.send('uninstallApp', [this.app_.appData.id]);
200 }, 182 },
201 onCreateShortcut_: function(e) { 183 onCreateShortcut_: function(e) {
202 chrome.send('createAppShortcut', [this.app_.appData.id]); 184 chrome.send('createAppShortcut', [this.app_.appData.id]);
203 }, 185 },
204 }; 186 };
205 187
206 /** 188 /**
207 * Creates a new App object. 189 * Creates a new App object.
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 chrome.send('getAppIconDominantColor', [this.id]); 234 chrome.send('getAppIconDominantColor', [this.id]);
253 } else { 235 } else {
254 this.addLaunchClickTarget_(this.appImgContainer_); 236 this.addLaunchClickTarget_(this.appImgContainer_);
255 this.appImgContainer_.title = this.appData_.title; 237 this.appImgContainer_.title = this.appData_.title;
256 } 238 }
257 239
258 var appSpan = this.appContents_.querySelector('.title'); 240 var appSpan = this.appContents_.querySelector('.title');
259 appSpan.textContent = appSpan.title = this.appData_.title; 241 appSpan.textContent = appSpan.title = this.appData_.title;
260 this.addLaunchClickTarget_(appSpan); 242 this.addLaunchClickTarget_(appSpan);
261 243
262 var notification = this.appData_.notification;
263 var hasNotification = typeof notification != 'undefined' &&
264 typeof notification['title'] != 'undefined' &&
265 typeof notification['body'] != 'undefined' &&
266 !this.appData_.notifications_disabled;
267 if (hasNotification)
268 this.setupNotification_(notification);
269
270 this.addEventListener('keydown', cr.ui.contextMenuHandler); 244 this.addEventListener('keydown', cr.ui.contextMenuHandler);
271 this.addEventListener('keyup', cr.ui.contextMenuHandler); 245 this.addEventListener('keyup', cr.ui.contextMenuHandler);
272 246
273 // This hack is here so that appContents.contextMenu will be the same as 247 // This hack is here so that appContents.contextMenu will be the same as
274 // this.contextMenu. 248 // this.contextMenu.
275 var self = this; 249 var self = this;
276 this.appContents_.__defineGetter__('contextMenu', function() { 250 this.appContents_.__defineGetter__('contextMenu', function() {
277 return self.contextMenu; 251 return self.contextMenu;
278 }); 252 });
279 this.appContents_.addEventListener('contextmenu', 253 this.appContents_.addEventListener('contextmenu',
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
328 if (this.appImgSrc_) { 302 if (this.appImgSrc_) {
329 this.appImg_.src = this.appImgSrc_; 303 this.appImg_.src = this.appImgSrc_;
330 this.appImg_.classList.remove('invisible'); 304 this.appImg_.classList.remove('invisible');
331 this.appImgSrc_ = null; 305 this.appImgSrc_ = null;
332 } 306 }
333 307
334 this.classList.remove('icon-loading'); 308 this.classList.remove('icon-loading');
335 }, 309 },
336 310
337 /** 311 /**
338 * Creates a bubble node.
339 * @param {Object} notification The notification to show in the bubble.
340 * @param {boolean} full Whether we want the headline or just the content.
341 * @private
342 */
343 createBubbleNode_: function(notification, full) {
344 if (!full) {
345 var titleItem = this.ownerDocument.createElement('span');
346 titleItem.textContent = notification['title'];
347 return titleItem;
348 } else {
349 var container = this.ownerDocument.createElement('div');
350
351 var messageItem = this.ownerDocument.createElement('div');
352 messageItem.textContent = notification['body'];
353 container.appendChild(messageItem);
354
355 if (notification['linkUrl'] && notification['linkText']) {
356 var anchor = this.ownerDocument.createElement('a');
357 anchor.href = notification['linkUrl'];
358 anchor.textContent = notification['linkText'];
359 container.appendChild(anchor);
360 }
361
362 return container;
363 }
364 },
365
366 /**
367 * Sets up a notification for the app icon.
368 * @param {Object} notification The notification to show in the bubble.
369 * @private
370 */
371 setupNotification_: function(notification) {
372 if (notification) {
373 var infoBubble;
374 if (!this.currentBubbleShowing_) {
375 // Create a new bubble.
376 infoBubble = new cr.ui.ExpandableBubble;
377 infoBubble.anchorNode = this;
378 infoBubble.appId = this.appData_.id;
379 infoBubble.handleCloseEvent = function() {
380 chrome.send('closeNotification', [this.appId]);
381 infoBubble.hide();
382 };
383 } else {
384 // Reuse the old bubble instead of popping up a new bubble over
385 // the old one.
386 infoBubble = this.currentBubbleShowing_;
387 infoBubble.collapseBubble_();
388 }
389 infoBubble.contentTitle = this.createBubbleNode_(notification, false);
390 infoBubble.content = this.createBubbleNode_(notification, true);
391 infoBubble.show();
392 infoBubble.resizeAndReposition();
393
394 this.currentBubbleShowing_ = infoBubble;
395 }
396 },
397
398 /**
399 * Removes the info bubble if there is one.
400 */
401 removeBubble: function() {
402 if (this.currentBubbleShowing_) {
403 this.currentBubbleShowing_.hide();
404 this.currentBubbleShowing_ = null;
405 }
406 },
407
408 /**
409 * Set the size and position of the app tile. 312 * Set the size and position of the app tile.
410 * @param {number} size The total size of |this|. 313 * @param {number} size The total size of |this|.
411 * @param {number} x The x-position. 314 * @param {number} x The x-position.
412 * @param {number} y The y-position. 315 * @param {number} y The y-position.
413 * animate. 316 * animate.
414 */ 317 */
415 setBounds: function(size, x, y) { 318 setBounds: function(size, x, y) {
416 var imgSize = size * APP_IMG_SIZE_FRACTION; 319 var imgSize = size * APP_IMG_SIZE_FRACTION;
417 this.appImgContainer_.style.width = this.appImgContainer_.style.height = 320 this.appImgContainer_.style.width = this.appImgContainer_.style.height =
418 toCssPx(this.useSmallIcon_ ? 16 : imgSize); 321 toCssPx(this.useSmallIcon_ ? 16 : imgSize);
419 if (this.useSmallIcon_) { 322 if (this.useSmallIcon_) {
420 // 3/4 is the ratio of 96px to 128px (the used height and full height 323 // 3/4 is the ratio of 96px to 128px (the used height and full height
421 // of icons in apps). 324 // of icons in apps).
422 var iconSize = imgSize * 3 / 4; 325 var iconSize = imgSize * 3 / 4;
423 // The -2 is for the div border to improve the visual alignment for the 326 // The -2 is for the div border to improve the visual alignment for the
424 // icon div. 327 // icon div.
425 this.imgDiv_.style.width = this.imgDiv_.style.height = 328 this.imgDiv_.style.width = this.imgDiv_.style.height =
426 toCssPx(iconSize - 2); 329 toCssPx(iconSize - 2);
427 // Margins set to get the icon placement right and the text to line up. 330 // Margins set to get the icon placement right and the text to line up.
428 this.imgDiv_.style.marginTop = this.imgDiv_.style.marginBottom = 331 this.imgDiv_.style.marginTop = this.imgDiv_.style.marginBottom =
429 toCssPx((imgSize - iconSize) / 2); 332 toCssPx((imgSize - iconSize) / 2);
430 } 333 }
431 334
432 this.style.width = this.style.height = toCssPx(size); 335 this.style.width = this.style.height = toCssPx(size);
433 this.style.left = toCssPx(x); 336 this.style.left = toCssPx(x);
434 this.style.right = toCssPx(x); 337 this.style.right = toCssPx(x);
435 this.style.top = toCssPx(y); 338 this.style.top = toCssPx(y);
436
437 if (this.currentBubbleShowing_)
438 this.currentBubbleShowing_.resizeAndReposition();
439 }, 339 },
440 340
441 /** 341 /**
442 * Invoked when an app is clicked. 342 * Invoked when an app is clicked.
443 * @param {Event} e The click event. 343 * @param {Event} e The click event.
444 * @private 344 * @private
445 */ 345 */
446 onClick_: function(e) { 346 onClick_: function(e) {
447 var url = !this.appData_.is_webstore ? '' : 347 var url = !this.appData_.is_webstore ? '' :
448 appendParam(this.appData_.url, 348 appendParam(this.appData_.url,
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
507 * will cause the app icon to look active). 407 * will cause the app icon to look active).
508 * @param {HTMLElement} node The node that should be clickable. 408 * @param {HTMLElement} node The node that should be clickable.
509 */ 409 */
510 addLaunchClickTarget_: function(node) { 410 addLaunchClickTarget_: function(node) {
511 node.classList.add('launch-click-target'); 411 node.classList.add('launch-click-target');
512 node.addEventListener('click', this.onClick_.bind(this)); 412 node.addEventListener('click', this.onClick_.bind(this));
513 }, 413 },
514 414
515 /** 415 /**
516 * Handler for mousedown on the App. Adds a class that allows us to 416 * Handler for mousedown on the App. Adds a class that allows us to
517 * not display as :active for right clicks and clicks on app notifications 417 * not display as :active for right clicks (specifically, don't pulse on
518 * (specifically, don't pulse on these occasions). Also, we don't pulse 418 * these occasions). Also, we don't pulse for clicks that aren't within the
519 * for clicks that aren't within the clickable regions. 419 * clickable regions.
520 * @param {Event} e The mousedown event. 420 * @param {Event} e The mousedown event.
521 */ 421 */
522 onMousedown_: function(e) { 422 onMousedown_: function(e) {
523 // If the current platform uses middle click to autoscroll and this 423 // If the current platform uses middle click to autoscroll and this
524 // mousedown isn't handled, onClick_() will never fire. crbug.com/142939 424 // mousedown isn't handled, onClick_() will never fire. crbug.com/142939
525 if (e.button == 1) 425 if (e.button == 1)
526 e.preventDefault(); 426 e.preventDefault();
527 427
528 if (e.button == 2 || 428 if (e.button == 2 ||
529 !findAncestorByClass(e.target, 'launch-click-target')) { 429 !findAncestorByClass(e.target, 'launch-click-target')) {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
582 canBeRemoved: function() { 482 canBeRemoved: function() {
583 return this.appData_.mayDisable; 483 return this.appData_.mayDisable;
584 }, 484 },
585 485
586 /** 486 /**
587 * Uninstalls the app after it's been dropped on the trash. 487 * Uninstalls the app after it's been dropped on the trash.
588 */ 488 */
589 removeFromChrome: function() { 489 removeFromChrome: function() {
590 chrome.send('uninstallApp', [this.appData_.id, true]); 490 chrome.send('uninstallApp', [this.appData_.id, true]);
591 this.tile.tilePage.removeTile(this.tile, true); 491 this.tile.tilePage.removeTile(this.tile, true);
592 if (this.currentBubbleShowing_)
593 currentBubbleShowing_.hide();
594 }, 492 },
595 493
596 /** 494 /**
597 * Called when a drag is starting on the tile. Updates dataTransfer with 495 * Called when a drag is starting on the tile. Updates dataTransfer with
598 * data for this tile. 496 * data for this tile.
599 */ 497 */
600 setDragData: function(dataTransfer) { 498 setDragData: function(dataTransfer) {
601 dataTransfer.setData('Text', this.appData_.title); 499 dataTransfer.setData('Text', this.appData_.title);
602 dataTransfer.setData('URL', this.appData_.url); 500 dataTransfer.setData('URL', this.appData_.url);
603 }, 501 },
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
637 return el; 535 return el;
638 } 536 }
639 537
640 AppsPage.prototype = { 538 AppsPage.prototype = {
641 __proto__: TilePage.prototype, 539 __proto__: TilePage.prototype,
642 540
643 initialize: function() { 541 initialize: function() {
644 this.classList.add('apps-page'); 542 this.classList.add('apps-page');
645 543
646 this.addEventListener('cardselected', this.onCardSelected_); 544 this.addEventListener('cardselected', this.onCardSelected_);
647 // Add event listeners for two events, so we can temporarily suppress
648 // the app notification bubbles when the app card slides in and out of
649 // view.
650 this.addEventListener('carddeselected', this.onCardDeselected_);
651 this.addEventListener('cardSlider:card_change_ended',
652 this.onCardChangeEnded_);
653 545
654 this.addEventListener('tilePage:tile_added', this.onTileAdded_); 546 this.addEventListener('tilePage:tile_added', this.onTileAdded_);
655 547
656 this.content_.addEventListener('scroll', this.onScroll_.bind(this)); 548 this.content_.addEventListener('scroll', this.onScroll_.bind(this));
657 }, 549 },
658 550
659 /** 551 /**
660 * Highlight a newly installed app as it's added to the NTP. 552 * Highlight a newly installed app as it's added to the NTP.
661 * @param {Object} appData The data object that describes the app. 553 * @param {Object} appData The data object that describes the app.
662 */ 554 */
(...skipping 24 matching lines...) Expand all
687 579
688 /** 580 /**
689 * Handler for 'cardselected' event, fired when |this| is selected. The 581 * Handler for 'cardselected' event, fired when |this| is selected. The
690 * first time this is called, we load all the app icons. 582 * first time this is called, we load all the app icons.
691 * @private 583 * @private
692 */ 584 */
693 onCardSelected_: function(e) { 585 onCardSelected_: function(e) {
694 var apps = this.querySelectorAll('.app.icon-loading'); 586 var apps = this.querySelectorAll('.app.icon-loading');
695 for (var i = 0; i < apps.length; i++) { 587 for (var i = 0; i < apps.length; i++) {
696 apps[i].loadIcon(); 588 apps[i].loadIcon();
697 if (apps[i].currentBubbleShowing_)
698 apps[i].currentBubbleShowing_.suppressed = false;
699 } 589 }
700 }, 590 },
701 591
702 /** 592 /**
703 * Handler for tile additions to this page. 593 * Handler for tile additions to this page.
704 * @param {Event} e The tilePage:tile_added event. 594 * @param {Event} e The tilePage:tile_added event.
705 */ 595 */
706 onTileAdded_: function(e) { 596 onTileAdded_: function(e) {
707 assert(e.currentTarget == this); 597 assert(e.currentTarget == this);
708 assert(e.addedTile.firstChild instanceof App); 598 assert(e.addedTile.firstChild instanceof App);
709 if (this.classList.contains('selected-card')) 599 if (this.classList.contains('selected-card'))
710 e.addedTile.firstChild.loadIcon(); 600 e.addedTile.firstChild.loadIcon();
711 }, 601 },
712 602
713 /** 603 /**
714 * Handler for the when this.cardSlider ends change its card. If animated,
715 * this happens when the -webkit-transition is done, otherwise happens
716 * immediately (but after cardSlider:card_changed).
717 * @private
718 */
719 onCardChangeEnded_: function(e) {
720 for (var i = 0; i < this.tileElements_.length; i++) {
721 var app = this.tileElements_[i].firstChild;
722 assert(app instanceof App);
723 if (app.currentBubbleShowing_)
724 app.currentBubbleShowing_.suppressed = false;
725 }
726 },
727
728 /**
729 * Handler for the 'carddeselected' event, fired when the user switches
730 * to another 'card' than the App 'card' on the NTP (|this| gets
731 * deselected).
732 * @private
733 */
734 onCardDeselected_: function(e) {
735 for (var i = 0; i < this.tileElements_.length; i++) {
736 var app = this.tileElements_[i].firstChild;
737 assert(app instanceof App);
738 if (app.currentBubbleShowing_)
739 app.currentBubbleShowing_.suppressed = true;
740 }
741 },
742
743 /**
744 * A handler for when the apps page is scrolled (then we need to reposition 604 * A handler for when the apps page is scrolled (then we need to reposition
745 * the bubbles. 605 * the bubbles.
746 * @private 606 * @private
747 */ 607 */
748 onScroll_: function(e) { 608 onScroll_: function(e) {
749 if (!this.selected) 609 if (!this.selected)
750 return; 610 return;
751 for (var i = 0; i < this.tileElements_.length; i++) { 611 for (var i = 0; i < this.tileElements_.length; i++) {
752 var app = this.tileElements_[i].firstChild; 612 var app = this.tileElements_[i].firstChild;
753 assert(app instanceof App); 613 assert(app instanceof App);
754 if (app.currentBubbleShowing_) 614 }
755 app.currentBubbleShowing_.resizeAndReposition();
756 }
757 }, 615 },
758 616
759 /** @override */ 617 /** @override */
760 doDragOver: function(e) { 618 doDragOver: function(e) {
761 // Only animatedly re-arrange if the user is currently dragging an app. 619 // Only animatedly re-arrange if the user is currently dragging an app.
762 var tile = ntp.getCurrentlyDraggingTile(); 620 var tile = ntp.getCurrentlyDraggingTile();
763 if (tile && tile.querySelector('.app')) { 621 if (tile && tile.querySelector('.app')) {
764 TilePage.prototype.doDragOver.call(this, e); 622 TilePage.prototype.doDragOver.call(this, e);
765 } else { 623 } else {
766 e.preventDefault(); 624 e.preventDefault();
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
885 743
886 /** 744 /**
887 * Launches the specified app using the APP_LAUNCH_NTP_APP_RE_ENABLE 745 * Launches the specified app using the APP_LAUNCH_NTP_APP_RE_ENABLE
888 * histogram. This should only be invoked from the AppLauncherHandler. 746 * histogram. This should only be invoked from the AppLauncherHandler.
889 * @param {string} appID The ID of the app. 747 * @param {string} appID The ID of the app.
890 */ 748 */
891 function launchAppAfterEnable(appId) { 749 function launchAppAfterEnable(appId) {
892 chrome.send('launchApp', [appId, APP_LAUNCH.NTP_APP_RE_ENABLE]); 750 chrome.send('launchApp', [appId, APP_LAUNCH.NTP_APP_RE_ENABLE]);
893 } 751 }
894 752
895 function appNotificationChanged(id, notification) {
896 var app = $(id);
897 // The app might have been uninstalled, or notifications might be disabled.
898 if (app && !app.appData.notifications_disabled)
899 app.setupNotification_(notification);
900 }
901
902 return { 753 return {
903 APP_LAUNCH: APP_LAUNCH, 754 APP_LAUNCH: APP_LAUNCH,
904 appNotificationChanged: appNotificationChanged,
905 AppsPage: AppsPage, 755 AppsPage: AppsPage,
906 launchAppAfterEnable: launchAppAfterEnable, 756 launchAppAfterEnable: launchAppAfterEnable,
907 }; 757 };
908 }); 758 });
OLDNEW
« no previous file with comments | « chrome/browser/resources/ntp4/apps_page.css ('k') | chrome/browser/resources/webstore_app/manifest.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698