| Index: ui/file_manager/file_manager/foreground/js/import_controller_unittest.js | 
| diff --git a/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js b/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js | 
| index d78e0b9db5babc0e58f06651e06ad4197e9dd8d6..b929a952f0e10a58778ad160db4888697f7e43cd 100644 | 
| --- a/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js | 
| +++ b/ui/file_manager/file_manager/foreground/js/import_controller_unittest.js | 
| @@ -2,6 +2,9 @@ | 
| // Use of this source code is governed by a BSD-style license that can be | 
| // found in the LICENSE file. | 
|  | 
| +/** @const {!Event} */ | 
| +var EMPTY_EVENT = new Event('directory-changed'); | 
| + | 
| /** @type {!MockVolumeManager} */ | 
| var volumeManager; | 
|  | 
| @@ -78,7 +81,7 @@ function testClickToStartImport(callback) { | 
| new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0})); | 
|  | 
| // First we need to force the controller into a scanning state. | 
| -  environment.directoryChangedListener_(); | 
| +  environment.directoryChangedListener_(EMPTY_EVENT); | 
|  | 
| var promise = widget.updateResolver.promise.then( | 
| function() { | 
| @@ -110,7 +113,7 @@ function testVolumeUnmount_InvalidatesScans(callback) { | 
| ], | 
| '/DCIM'); | 
|  | 
| -  environment.directoryChangedListener_(); | 
| +  environment.directoryChangedListener_(EMPTY_EVENT); | 
| var promise = widget.updateResolver.promise.then( | 
| function() { | 
| // Reset the promise so we can wait on a second widget update. | 
| @@ -120,7 +123,7 @@ function testVolumeUnmount_InvalidatesScans(callback) { | 
| // A fresh new scan should be started. | 
| environment.simulateUnmount(); | 
|  | 
| -            environment.directoryChangedListener_(); | 
| +            environment.directoryChangedListener_(EMPTY_EVENT); | 
| // Return the new promise, so subsequent "thens" only | 
| // fire once the widget has been updated again. | 
| return widget.updateResolver.promise; | 
| @@ -143,10 +146,52 @@ function testDirectoryChange_TriggersUpdate(callback) { | 
| ], | 
| '/DCIM'); | 
|  | 
| -  environment.directoryChangedListener_(); | 
| +  environment.directoryChangedListener_(EMPTY_EVENT); | 
| reportPromise(widget.updateResolver.promise, callback); | 
| } | 
|  | 
| +function testDirectoryChange_DetailsPanelVisibility_InitialChangeDir() { | 
| +  var controller = createController( | 
| +      VolumeManagerCommon.VolumeType.MTP, | 
| +      'mtp-volume', | 
| +      [ | 
| +        '/DCIM/', | 
| +        '/DCIM/photos0/', | 
| +        '/DCIM/photos0/IMG00001.jpg', | 
| +      ], | 
| +      '/DCIM'); | 
| + | 
| +  var event = new Event('directory-changed'); | 
| +  event.newDirEntry = new MockDirectoryEntry( | 
| +      new MockFileSystem('testFs'), | 
| +      '/DCIM/'); | 
| + | 
| +  environment.directoryChangedListener_(event); | 
| +  assertTrue(widget.detailsVisible); | 
| +} | 
| + | 
| +function testDirectoryChange_DetailsPanelVisibility_SubsequentChangeDir() { | 
| +  var controller = createController( | 
| +      VolumeManagerCommon.VolumeType.MTP, | 
| +      'mtp-volume', | 
| +      [ | 
| +        '/DCIM/', | 
| +        '/DCIM/photos0/', | 
| +        '/DCIM/photos0/IMG00001.jpg', | 
| +      ], | 
| +      '/DCIM'); | 
| + | 
| +  var event = new Event('directory-changed'); | 
| +  event.newDirEntry = new MockDirectoryEntry( | 
| +      new MockFileSystem('testFs'), | 
| +      '/DCIM/'); | 
| +  // Any previous dir at all will skip the new window logic. | 
| +  event.previousDirEntry = event.newDirEntry; | 
| + | 
| +  environment.directoryChangedListener_(event); | 
| +  assertFalse(widget.detailsVisible); | 
| +} | 
| + | 
| function testSelectionChange_TriggersUpdate(callback) { | 
| var controller = createController( | 
| VolumeManagerCommon.VolumeType.MTP, | 
| @@ -179,7 +224,7 @@ function testFinalizeScans_TriggersUpdate(callback) { | 
| mediaScanner.fileEntries.push( | 
| new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0})); | 
|  | 
| -  environment.directoryChangedListener_();  // initiates a scan. | 
| +  environment.directoryChangedListener_(EMPTY_EVENT);  // initiates a scan. | 
| widget.resetPromises(); | 
| mediaScanner.finalizeScans(); | 
|  | 
| @@ -221,7 +266,7 @@ function testClickDestination_ShowsDestinationAfterImportStarted(callback) { | 
| new MockFileEntry(fileSystem, '/DCIM/photos0/IMG00001.jpg', {size: 0})); | 
|  | 
| // First we need to force the controller into a scanning state. | 
| -  environment.directoryChangedListener_(); | 
| +  environment.directoryChangedListener_(EMPTY_EVENT); | 
|  | 
| var promise = widget.updateResolver.promise.then( | 
| function() { | 
| @@ -363,7 +408,7 @@ TestControllerEnvironment = function(volumeInfo, directory) { | 
| /** @public {boolean} */ | 
| this.isDriveMounted = true; | 
|  | 
| -  /** @private {number} */ | 
| +  /** @public {number} */ | 
| this.freeStorageSpace = 123456789;  // bytes | 
|  | 
| /** @public {!importer.Resolver} */ | 
| @@ -466,6 +511,9 @@ importer.TestCommandWidget = function() { | 
|  | 
| /** @public {!importer.Resolver.<!importer.CommandUpdate>} */ | 
| this.toggleDetailsResolver = new importer.Resolver(); | 
| + | 
| +  /** @public {boolean} */ | 
| +  this.detailsVisible = false; | 
| }; | 
|  | 
| /** Resets the widget */ | 
| @@ -506,10 +554,16 @@ importer.TestCommandWidget.prototype.toggleDetails = function() { | 
| assertFalse( | 
| this.toggleDetailsResolver.settled, | 
| 'Toggle details promise should not have been settled.'); | 
| +  this.setDetailsVisible(!this.detailsVisible); | 
| this.toggleDetailsResolver.resolve(); | 
| }; | 
|  | 
| /** @override */ | 
| +importer.TestCommandWidget.prototype.setDetailsVisible = function(visible) { | 
| +  this.detailsVisible = visible; | 
| +}; | 
| + | 
| +/** @override */ | 
| importer.TestCommandWidget.prototype.setDetailsBannerVisible = | 
| function(visible) { | 
| // TODO(smckay) | 
|  |