From 24a38d479a5b6abf274923ede842f6a135aec6ea Mon Sep 17 00:00:00 2001 From: "hidehiko@chromium.org" Date: Mon, 30 Sep 2013 23:26:23 +0000 Subject: [PATCH] Move VolumeManager from contentWindow to background page. This CL moves VolumeManager to background page, so that all windows can share the instance. Also, this change should reduce the interaction with browser process via private APIs, when the two or more window is opened. BUG=268817 TEST=Ran browser_tests --gtest_filter="*FileSystemExtensionApiTest*:*FileManagerBrowserTest*:*FileBrowserPrivateApiTest*" and tested manually. Review URL: https://codereview.chromium.org/24957002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@226078 0039d316-1c4b-4281-b951-d872f2087c98 --- .../resources/component_extension_resources.grd | 1 + .../resources/file_manager/action_choice.html | 1 - chrome/browser/resources/file_manager/gallery.html | 1 - .../resources/file_manager/js/action_choice.js | 12 +++++++++ .../file_manager/js/action_choice_scripts.js | 1 - .../resources/file_manager/js/file_manager.js | 2 ++ .../resources/file_manager/js/main_scripts.js | 1 - .../file_manager/js/media/audio_player.js | 11 +++++++- .../file_manager/js/media/mediaplayer_scripts.js | 1 - .../file_manager/js/media/video_player.js | 3 +++ .../file_manager/js/media/video_player_scripts.js | 1 - .../file_manager/js/photo/gallery_scripts.js | 1 - .../file_manager/js/photo/photo_import_scripts.js | 1 - .../file_manager/js/volume_manager_wrapper.js | 30 ++++++++++++++++++++-- chrome/browser/resources/file_manager/main.html | 1 - .../browser/resources/file_manager/manifest.json | 8 +++--- .../resources/file_manager/mediaplayer.html | 1 - .../resources/file_manager/photo_import.html | 1 - .../resources/file_manager/video_player.html | 1 - 19 files changed, 61 insertions(+), 18 deletions(-) diff --git a/chrome/browser/resources/component_extension_resources.grd b/chrome/browser/resources/component_extension_resources.grd index cee634156adb..d61dee293c76 100644 --- a/chrome/browser/resources/component_extension_resources.grd +++ b/chrome/browser/resources/component_extension_resources.grd @@ -75,6 +75,7 @@ + diff --git a/chrome/browser/resources/file_manager/action_choice.html b/chrome/browser/resources/file_manager/action_choice.html index c96b4593af16..13ced3499fcf 100644 --- a/chrome/browser/resources/file_manager/action_choice.html +++ b/chrome/browser/resources/file_manager/action_choice.html @@ -42,7 +42,6 @@ - diff --git a/chrome/browser/resources/file_manager/gallery.html b/chrome/browser/resources/file_manager/gallery.html index 7a727ba707eb..3b3d7b04cf76 100644 --- a/chrome/browser/resources/file_manager/gallery.html +++ b/chrome/browser/resources/file_manager/gallery.html @@ -45,7 +45,6 @@ - diff --git a/chrome/browser/resources/file_manager/js/action_choice.js b/chrome/browser/resources/file_manager/js/action_choice.js index 0e72f4f1a4c7..4c5bec5e02fd 100644 --- a/chrome/browser/resources/file_manager/js/action_choice.js +++ b/chrome/browser/resources/file_manager/js/action_choice.js @@ -511,3 +511,15 @@ ActionChoice.prototype.recordAction_ = function(action) { 'error', 'close']); }; + +/** + * Called when the page is unloaded. + */ +ActionChoice.prototype.onUnload = function() { + this.volumeManager_.dispose(); +}; + +function unload() { + if (ActionChoice.instance) + ActionChoice.instance.onUnload(); +} diff --git a/chrome/browser/resources/file_manager/js/action_choice_scripts.js b/chrome/browser/resources/file_manager/js/action_choice_scripts.js index 59a100e94a7b..eb4c1128dfbd 100644 --- a/chrome/browser/resources/file_manager/js/action_choice_scripts.js +++ b/chrome/browser/resources/file_manager/js/action_choice_scripts.js @@ -33,7 +33,6 @@ // // // -// // // // diff --git a/chrome/browser/resources/file_manager/js/file_manager.js b/chrome/browser/resources/file_manager/js/file_manager.js index b580fc595ffe..4d227a4e2eaf 100644 --- a/chrome/browser/resources/file_manager/js/file_manager.js +++ b/chrome/browser/resources/file_manager/js/file_manager.js @@ -2409,6 +2409,8 @@ var BOTTOM_MARGIN_FOR_PREVIEW_PANEL_PX = 52; FileManager.prototype.onUnload_ = function() { if (this.directoryModel_) this.directoryModel_.dispose(); + if (this.volumeManager_) + this.volumeManager_.dispose(); if (this.filePopup_ && this.filePopup_.contentWindow && this.filePopup_.contentWindow.unload) diff --git a/chrome/browser/resources/file_manager/js/main_scripts.js b/chrome/browser/resources/file_manager/js/main_scripts.js index 35a13680979e..c2d831201dbf 100644 --- a/chrome/browser/resources/file_manager/js/main_scripts.js +++ b/chrome/browser/resources/file_manager/js/main_scripts.js @@ -109,7 +109,6 @@ // // // -// // // // diff --git a/chrome/browser/resources/file_manager/js/media/audio_player.js b/chrome/browser/resources/file_manager/js/media/audio_player.js index 856cdac85d57..1e8b776bc341 100644 --- a/chrome/browser/resources/file_manager/js/media/audio_player.js +++ b/chrome/browser/resources/file_manager/js/media/audio_player.js @@ -81,7 +81,8 @@ util.addPageLoadHandler(AudioPlayer.load); * Unload the player. */ function unload() { - AudioPlayer.instance.audioControls_.cleanup(); + if (AudioPlayer.instance) + AudioPlayer.instance.onUnload(); } /** @@ -183,6 +184,14 @@ AudioPlayer.prototype.onExternallyUnmounted_ = function(event) { }; /** + * Called on window is being unloaded. + */ +AudioPlayer.prototype.onUnload = function() { + this.audioControls_.cleanup(); + this.volumeManager_.dispose(); +}; + +/** * Select a new track to play. * @param {number} newTrack New track number. * @param {boolean=} opt_restoreState True if restoring the play state from URL. diff --git a/chrome/browser/resources/file_manager/js/media/mediaplayer_scripts.js b/chrome/browser/resources/file_manager/js/media/mediaplayer_scripts.js index 78e3a5f52c05..892075afb1df 100644 --- a/chrome/browser/resources/file_manager/js/media/mediaplayer_scripts.js +++ b/chrome/browser/resources/file_manager/js/media/mediaplayer_scripts.js @@ -20,7 +20,6 @@ // // // -// // // diff --git a/chrome/browser/resources/file_manager/js/media/video_player.js b/chrome/browser/resources/file_manager/js/media/video_player.js index ca1b2051d692..c93c389acb03 100644 --- a/chrome/browser/resources/file_manager/js/media/video_player.js +++ b/chrome/browser/resources/file_manager/js/media/video_player.js @@ -178,6 +178,9 @@ function onExternallyUnmounted(event) { * Unload the player. */ function unload() { + if (volumeManager) + volumeManager.dispose(); + if (!controls.getMedia()) return; diff --git a/chrome/browser/resources/file_manager/js/media/video_player_scripts.js b/chrome/browser/resources/file_manager/js/media/video_player_scripts.js index f623684971e3..71dfae0143a0 100644 --- a/chrome/browser/resources/file_manager/js/media/video_player_scripts.js +++ b/chrome/browser/resources/file_manager/js/media/video_player_scripts.js @@ -20,7 +20,6 @@ // // // -// // // diff --git a/chrome/browser/resources/file_manager/js/photo/gallery_scripts.js b/chrome/browser/resources/file_manager/js/photo/gallery_scripts.js index e6ceffbe0010..5c01498ec8ea 100644 --- a/chrome/browser/resources/file_manager/js/photo/gallery_scripts.js +++ b/chrome/browser/resources/file_manager/js/photo/gallery_scripts.js @@ -35,7 +35,6 @@ // // // -// // // diff --git a/chrome/browser/resources/file_manager/js/photo/photo_import_scripts.js b/chrome/browser/resources/file_manager/js/photo/photo_import_scripts.js index 908a820a96c3..dd09c39d60ff 100644 --- a/chrome/browser/resources/file_manager/js/photo/photo_import_scripts.js +++ b/chrome/browser/resources/file_manager/js/photo/photo_import_scripts.js @@ -36,7 +36,6 @@ // // // -// // // // diff --git a/chrome/browser/resources/file_manager/js/volume_manager_wrapper.js b/chrome/browser/resources/file_manager/js/volume_manager_wrapper.js index e58dcf4cbd0f..99613b566928 100644 --- a/chrome/browser/resources/file_manager/js/volume_manager_wrapper.js +++ b/chrome/browser/resources/file_manager/js/volume_manager_wrapper.js @@ -25,9 +25,13 @@ function VolumeManagerWrapper(driveEnabled) { this.onVolumeInfoListUpdatedBound_ = this.onVolumeInfoListUpdated_.bind(this); + this.disposed_ = false; + // Start initialize the VolumeManager. - VolumeManager.getInstance(function(volumeManager) { - this.onReady_(volumeManager); + chrome.runtime.getBackgroundPage(function(backgroundPage) { + backgroundPage.VolumeManager.getInstance(function(volumeManager) { + this.onReady_(volumeManager); + }.bind(this)); }.bind(this)); } @@ -51,6 +55,9 @@ VolumeManagerWrapper.prototype.__proto__ = cr.EventTarget.prototype; * @private */ VolumeManagerWrapper.prototype.onReady_ = function(volumeManager) { + if (this.disposed_) + return; + this.volumeManager_ = volumeManager; // Subscribe to VolumeManager. @@ -87,6 +94,25 @@ VolumeManagerWrapper.prototype.onReady_ = function(volumeManager) { }; /** + * Disposes the instance. After the invocation of this method, any other + * method should not be called. + */ +VolumeManagerWrapper.prototype.dispose = function() { + this.disposed_ = true; + + if (!this.volumeManager_) + return; + this.volumeManager_.removeEventListener( + 'drive-connection-changed', this.onEventBound_); + this.volumeManager_.removeEventListener( + 'drive-status-changed', this.onEventBound_); + this.volumeManager_.removeEventListener( + 'externally-unmounted', this.onEventBound_); + this.volumeManager_.volumeInfoList.removeEventListener( + 'splice', this.onVolumeInfoListUpdatedBound_); +}; + +/** * Called on events sent from VolumeManager. This has responsibility to * re-dispatch the event to the listeners. * @param {cr.Event} event Event object sent from VolumeManager. diff --git a/chrome/browser/resources/file_manager/main.html b/chrome/browser/resources/file_manager/main.html index 1b1c11e63ece..9299b7654d74 100644 --- a/chrome/browser/resources/file_manager/main.html +++ b/chrome/browser/resources/file_manager/main.html @@ -122,7 +122,6 @@ - diff --git a/chrome/browser/resources/file_manager/manifest.json b/chrome/browser/resources/file_manager/manifest.json index 17160f322317..06236a774f34 100644 --- a/chrome/browser/resources/file_manager/manifest.json +++ b/chrome/browser/resources/file_manager/manifest.json @@ -225,10 +225,12 @@ "scripts": [ "chrome://resources/js/cr.js", "chrome://resources/js/cr/event_target.js", - "js/file_operation_manager.js", - "js/async_util.js", - "js/path_util.js", + "chrome://resources/js/cr/ui/array_data_model.js", "js/util.js", + "js/path_util.js", + "js/async_util.js", + "js/volume_manager.js", + "js/file_operation_manager.js", "js/test_util.js", "js/progress_center_common.js", "js/progress_center.js", diff --git a/chrome/browser/resources/file_manager/mediaplayer.html b/chrome/browser/resources/file_manager/mediaplayer.html index 47c8ad1911ff..324db279eeb1 100644 --- a/chrome/browser/resources/file_manager/mediaplayer.html +++ b/chrome/browser/resources/file_manager/mediaplayer.html @@ -31,7 +31,6 @@ - diff --git a/chrome/browser/resources/file_manager/photo_import.html b/chrome/browser/resources/file_manager/photo_import.html index 75e68f925382..db182434fc2c 100644 --- a/chrome/browser/resources/file_manager/photo_import.html +++ b/chrome/browser/resources/file_manager/photo_import.html @@ -52,7 +52,6 @@ - diff --git a/chrome/browser/resources/file_manager/video_player.html b/chrome/browser/resources/file_manager/video_player.html index 10037b90b802..7f49bc8e2b99 100644 --- a/chrome/browser/resources/file_manager/video_player.html +++ b/chrome/browser/resources/file_manager/video_player.html @@ -32,7 +32,6 @@ - -- 2.11.4.GIT