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

Side by Side Diff: ui/file_manager/file_manager/background/js/background.js

Issue 641283002: Separate the audio player app from Files.app Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up Created 6 years, 2 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
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 'use strict'; 5 'use strict';
6 6
7 /** 7 /**
8 * Type of a Files.app's instance launch. 8 * Type of a Files.app's instance launch.
9 * @enum {number} 9 * @enum {number}
10 */ 10 */
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 var id = opt_id || nextFileManagerWindowID; 372 var id = opt_id || nextFileManagerWindowID;
373 nextFileManagerWindowID = Math.max(nextFileManagerWindowID, id + 1); 373 nextFileManagerWindowID = Math.max(nextFileManagerWindowID, id + 1);
374 var appId = FILES_ID_PREFIX + id; 374 var appId = FILES_ID_PREFIX + id;
375 375
376 var appWindow = new AppWindowWrapper( 376 var appWindow = new AppWindowWrapper(
377 'main.html', 377 'main.html',
378 appId, 378 appId,
379 FILE_MANAGER_WINDOW_CREATE_OPTIONS); 379 FILE_MANAGER_WINDOW_CREATE_OPTIONS);
380 appWindow.launch(opt_appState || {}, false, function() { 380 appWindow.launch(opt_appState || {}, false, function() {
381 AppWindowWrapper.focusOnDesktop( 381 AppWindowWrapper.focusOnDesktop(
382 appWindow.window_, (opt_appState || {}).displayedId); 382 appWindow.rawAppWindow, (opt_appState || {}).displayedId);
383 if (opt_callback) 383 if (opt_callback)
384 opt_callback(appId); 384 opt_callback(appId);
385 onTaskCompleted(); 385 onTaskCompleted();
386 }); 386 });
387 }); 387 });
388 } 388 }
389 389
390 /** 390 /**
391 * Registers dialog window to the background page. 391 * Registers dialog window to the background page.
392 * 392 *
393 * @param {Window} dialogWindow Window of the dialog. 393 * @param {Window} dialogWindow Window of the dialog.
394 */ 394 */
395 function registerDialog(dialogWindow) { 395 function registerDialog(dialogWindow) {
396 var id = DIALOG_ID_PREFIX + (nextFileManagerDialogID++); 396 var id = DIALOG_ID_PREFIX + (nextFileManagerDialogID++);
397 background.dialogs[id] = dialogWindow; 397 background.dialogs[id] = dialogWindow;
398 dialogWindow.addEventListener('pagehide', function() { 398 dialogWindow.addEventListener('pagehide', function() {
399 delete background.dialogs[id]; 399 delete background.dialogs[id];
400 }); 400 });
401 } 401 }
402 402
403 /** 403 /**
404 * Executes a file browser task. 404 * Executes a file browser task.
405 * 405 *
406 * @param {string} action Task id. 406 * @param {string} action Task id.
407 * @param {Object} details Details object. 407 * @param {Object} details Details object.
408 * @private 408 * @private
409 */ 409 */
410 FileBrowserBackground.prototype.onExecute_ = function(action, details) { 410 FileBrowserBackground.prototype.onExecute_ = function(action, details) {
411 switch (action) { 411 var appState = {
412 case 'play': 412 params: {action: action},
413 var urls = util.entriesToURLs(details.entries); 413 // It is not allowed to call getParent() here, since there may be
414 launchAudioPlayer({items: urls, position: 0}); 414 // no permissions to access it at this stage. Therefore we are passing
415 break; 415 // the selectionURL only, and the currentDirectory will be resolved
416 // later.
417 selectionURL: details.entries[0].toURL()
418 };
416 419
417 default: 420 // Every other action opens a Files app window.
418 var appState = { 421 // For mounted devices just focus any Files.app window. The mounted
419 params: {action: action}, 422 // volume will appear on the navigation list.
420 // It is not allowed to call getParent() here, since there may be 423 launchFileManager(
421 // no permissions to access it at this stage. Therefore we are passing 424 appState,
422 // the selectionURL only, and the currentDirectory will be resolved 425 /* App ID */ null,
423 // later. 426 LaunchType.FOCUS_SAME_OR_CREATE);
424 selectionURL: details.entries[0].toURL()
425 };
426
427 // Every other action opens a Files app window.
428 // For mounted devices just focus any Files.app window. The mounted
429 // volume will appear on the navigation list.
430 launchFileManager(
431 appState,
432 /* App ID */ null,
433 LaunchType.FOCUS_SAME_OR_CREATE);
434 break;
435 }
436 }; 427 };
437 428
438 /** 429 /**
439 * Icon of the audio player.
440 * TODO(yoshiki): Consider providing an exact size icon, instead of relying
441 * on downsampling by ash.
442 *
443 * @type {string}
444 * @const
445 */
446 var AUDIO_PLAYER_ICON = 'audio_player/icons/audio-player-64.png';
447
448 // The instance of audio player. Until it's ready, this is null.
449 var audioPlayer = null;
450
451 // Queue to serializes the initialization, launching and reloading of the audio
452 // player, so races won't happen.
453 var audioPlayerInitializationQueue = new AsyncUtil.Queue();
454
455 audioPlayerInitializationQueue.run(function(callback) {
456 /**
457 * Audio player window create options.
458 * @type {Object}
459 */
460 var audioPlayerCreateOptions = Object.freeze({
461 type: 'panel',
462 hidden: true,
463 minHeight: 44 + 73, // 44px: track, 73px: controller
464 minWidth: 292,
465 height: 44 + 73, // collapsed
466 width: 292
467 });
468
469 audioPlayer = new SingletonAppWindowWrapper('audio_player.html',
470 audioPlayerCreateOptions);
471 callback();
472 });
473
474 /**
475 * Launches the audio player.
476 * @param {Object} playlist Playlist.
477 * @param {string=} opt_displayedId ProfileID of the desktop where the audio
478 * player should show.
479 */
480 function launchAudioPlayer(playlist, opt_displayedId) {
481 audioPlayerInitializationQueue.run(function(callback) {
482 audioPlayer.launch(playlist, false, function(appWindow) {
483 audioPlayer.setIcon(AUDIO_PLAYER_ICON);
484 AppWindowWrapper.focusOnDesktop(audioPlayer.rawAppWindow,
485 opt_displayedId);
486 });
487 callback();
488 });
489 }
490
491 /**
492 * Launches the app. 430 * Launches the app.
493 * @private 431 * @private
494 */ 432 */
495 FileBrowserBackground.prototype.onLaunched_ = function() { 433 FileBrowserBackground.prototype.onLaunched_ = function() {
496 if (nextFileManagerWindowID == 0) { 434 if (nextFileManagerWindowID == 0) {
497 // The app just launched. Remove window state records that are not needed 435 // The app just launched. Remove window state records that are not needed
498 // any more. 436 // any more.
499 chrome.storage.local.get(function(items) { 437 chrome.storage.local.get(function(items) {
500 for (var key in items) { 438 for (var key in items) {
501 if (items.hasOwnProperty(key)) { 439 if (items.hasOwnProperty(key)) {
(...skipping 21 matching lines...) Expand all
523 try { 461 try {
524 var appState = JSON.parse(items[key]); 462 var appState = JSON.parse(items[key]);
525 launchFileManager(appState, id); 463 launchFileManager(appState, id);
526 } catch (e) { 464 } catch (e) {
527 console.error('Corrupt launch data for ' + id); 465 console.error('Corrupt launch data for ' + id);
528 } 466 }
529 } 467 }
530 } 468 }
531 } 469 }
532 }); 470 });
533
534 // Reopen audio player.
535 audioPlayerInitializationQueue.run(function(callback) {
536 audioPlayer.reopen(function() {
537 // If the audioPlayer is reopened, change its window's icon. Otherwise
538 // there is no reopened window so just skip the call of setIcon.
539 if (audioPlayer.rawAppWindow)
540 audioPlayer.setIcon(AUDIO_PLAYER_ICON);
541 });
542 callback();
543 });
544 }; 471 };
545 472
546 /** 473 /**
547 * Handles clicks on a custom item on the launcher context menu. 474 * Handles clicks on a custom item on the launcher context menu.
548 * @param {OnClickData} info Event details. 475 * @param {OnClickData} info Event details.
549 * @private 476 * @private
550 */ 477 */
551 FileBrowserBackground.prototype.onContextMenuClicked_ = function(info) { 478 FileBrowserBackground.prototype.onContextMenuClicked_ = function(info) {
552 if (info.menuItemId == 'new-window') { 479 if (info.menuItemId == 'new-window') {
553 // Find the focused window (if any) and use it's current url for the 480 // Find the focused window (if any) and use it's current url for the
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 contexts: ['launcher'], 521 contexts: ['launcher'],
595 title: str('NEW_WINDOW_BUTTON_LABEL') 522 title: str('NEW_WINDOW_BUTTON_LABEL')
596 }); 523 });
597 }; 524 };
598 525
599 /** 526 /**
600 * Singleton instance of Background. 527 * Singleton instance of Background.
601 * @type {FileBrowserBackground} 528 * @type {FileBrowserBackground}
602 */ 529 */
603 window.background = new FileBrowserBackground(); 530 window.background = new FileBrowserBackground();
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698