Index: ui/file_manager/file_manager/background/js/device_handler_unittest.js |
diff --git a/ui/file_manager/file_manager/background/js/device_handler_unittest.js b/ui/file_manager/file_manager/background/js/device_handler_unittest.js |
index 105b08701bc581f9bfe4f81796fced4869c11d64..272d5fc4032c5a1d5778bec4e37efa3a4a32ff59 100644 |
--- a/ui/file_manager/file_manager/background/js/device_handler_unittest.js |
+++ b/ui/file_manager/file_manager/background/js/device_handler_unittest.js |
@@ -14,80 +14,44 @@ var chrome; |
*/ |
var timeoutCallbacks; |
+/** @type {!MockVolumeManager} */ |
+var volumeManager; |
+ |
+/** @type {DeviceHandler} */ |
+var handler; |
+ |
+// Set up string assets. |
+loadTimeData.data = { |
+ REMOVABLE_DEVICE_DETECTION_TITLE: 'Device detected', |
+ REMOVABLE_DEVICE_NAVIGATION_MESSAGE: 'DEVICE_NAVIGATION', |
+ REMOVABLE_DEVICE_NAVIGATION_BUTTON_LABEL: '', |
+ REMOVABLE_DEVICE_IMPORT_MESSAGE: 'DEVICE_IMPORT', |
+ REMOVABLE_DEVICE_IMPORT_BUTTON_LABEL: '', |
+ DEVICE_UNKNOWN_MESSAGE: 'DEVICE_UNKNOWN: $1', |
+ DEVICE_UNSUPPORTED_MESSAGE: 'DEVICE_UNSUPPORTED: $1', |
+ DEVICE_HARD_UNPLUGGED_TITLE: 'DEVICE_HARD_UNPLUGGED_TITLE', |
+ DEVICE_HARD_UNPLUGGED_MESSAGE: 'DEVICE_HARD_UNPLUGGED_MESSAGE', |
+ MULTIPART_DEVICE_UNSUPPORTED_MESSAGE: 'MULTIPART_DEVICE_UNSUPPORTED: $1', |
+ EXTERNAL_STORAGE_DISABLED_MESSAGE: 'EXTERNAL_STORAGE_DISABLED', |
+ FORMATTING_OF_DEVICE_PENDING_TITLE: 'FORMATTING_OF_DEVICE_PENDING_TITLE', |
+ FORMATTING_OF_DEVICE_PENDING_MESSAGE: 'FORMATTING_OF_DEVICE_PENDING', |
+ FORMATTING_OF_DEVICE_FINISHED_TITLE: 'FORMATTING_OF_DEVICE_FINISHED_TITLE', |
+ FORMATTING_FINISHED_SUCCESS_MESSAGE: 'FORMATTING_FINISHED_SUCCESS', |
+ FORMATTING_OF_DEVICE_FAILED_TITLE: 'FORMATTING_OF_DEVICE_FAILED_TITLE', |
+ FORMATTING_FINISHED_FAILURE_MESSAGE: 'FORMATTING_FINISHED_FAILURE' |
+}; |
+ |
// Set up the test components. |
function setUp() { |
- // Set up string assets. |
- loadTimeData.data = { |
- REMOVABLE_DEVICE_DETECTION_TITLE: 'Device detected', |
- REMOVABLE_DEVICE_NAVIGATION_MESSAGE: 'DEVICE_NAVIGATION', |
- REMOVABLE_DEVICE_NAVIGATION_BUTTON_LABEL: '', |
- REMOVABLE_DEVICE_IMPORT_MESSAGE: 'DEVICE_IMPORT', |
- REMOVABLE_DEVICE_IMPORT_BUTTON_LABEL: '', |
- DEVICE_UNKNOWN_MESSAGE: 'DEVICE_UNKNOWN: $1', |
- DEVICE_UNSUPPORTED_MESSAGE: 'DEVICE_UNSUPPORTED: $1', |
- DEVICE_HARD_UNPLUGGED_TITLE: 'DEVICE_HARD_UNPLUGGED_TITLE', |
- DEVICE_HARD_UNPLUGGED_MESSAGE: 'DEVICE_HARD_UNPLUGGED_MESSAGE', |
- MULTIPART_DEVICE_UNSUPPORTED_MESSAGE: 'MULTIPART_DEVICE_UNSUPPORTED: $1', |
- EXTERNAL_STORAGE_DISABLED_MESSAGE: 'EXTERNAL_STORAGE_DISABLED', |
- FORMATTING_OF_DEVICE_PENDING_TITLE: 'FORMATTING_OF_DEVICE_PENDING_TITLE', |
- FORMATTING_OF_DEVICE_PENDING_MESSAGE: 'FORMATTING_OF_DEVICE_PENDING', |
- FORMATTING_OF_DEVICE_FINISHED_TITLE: 'FORMATTING_OF_DEVICE_FINISHED_TITLE', |
- FORMATTING_FINISHED_SUCCESS_MESSAGE: 'FORMATTING_FINISHED_SUCCESS', |
- FORMATTING_OF_DEVICE_FAILED_TITLE: 'FORMATTING_OF_DEVICE_FAILED_TITLE', |
- FORMATTING_FINISHED_FAILURE_MESSAGE: 'FORMATTING_FINISHED_FAILURE' |
- }; |
+ volumeManager = new MockVolumeManager(); |
+ MockVolumeManager.installMockSingleton(volumeManager); |
- // Make dummy APIs. |
- chrome = { |
- commandLinePrivate: { |
- hasSwitch: function(switchName, callback) { |
- if (switchName === 'enable-cloud-backup') { |
- callback(chrome.commandLinePrivate.cloudBackupEnabled); |
- } |
- }, |
- cloudBackupEnabled: false |
- }, |
- fileManagerPrivate: { |
- onDeviceChanged: { |
- addListener: function(listener) { |
- this.dispatch = listener; |
- } |
- }, |
- onMountCompleted: { |
- addListener: function(listener) { |
- this.dispatch = listener; |
- } |
- } |
- }, |
- notifications: { |
- create: function(id, params, callback) { |
- this.items[id] = params; |
- callback(); |
- }, |
- clear: function(id, callback) { delete this.items[id]; callback(); }, |
- items: {}, |
- onButtonClicked: { |
- addListener: function(listener) { |
- this.dispatch = listener; |
- } |
- }, |
- getAll: function(callback) { |
- callback([]); |
- } |
- }, |
- runtime: { |
- getURL: function(path) { return path; }, |
- onStartup: { |
- addListener: function() {} |
- } |
- } |
- }; |
-} |
+ setupChromeApis(); |
-function testGoodDevice() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
+ handler = new DeviceHandler(); |
+} |
+function testGoodDevice(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'success', |
@@ -99,94 +63,125 @@ function testGoodDevice() { |
}, |
shouldNotify: true |
}); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_NAVIGATION', |
- chrome.notifications.items['deviceNavigation:/device/path'].message); |
+ |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertEquals( |
+ 'DEVICE_NAVIGATION', |
+ notifications['deviceNavigation:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
} |
-function testMediaDeviceWithImportEnabled(testCallback) { |
+function testRemovableMediaDeviceWithImportEnabled(callback) { |
+ setupFileSystem( |
+ VolumeManagerCommon.VolumeType.REMOVABLE, |
+ 'blabbity', |
+ [ |
+ '/DCIM/', |
+ '/DCIM/grandma.jpg' |
+ ]); |
+ |
// "Enable" cloud backup, then make a device handler. |
chrome.commandLinePrivate.cloudBackupEnabled = true; |
- var handler = new DeviceHandler(); |
+ var resolver = new importer.Resolver(); |
- importer.importEnabled() |
- .then( |
- function(ignored) { |
- chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
- eventType: 'mount', |
- status: 'success', |
- volumeMetadata: { |
- isParentDevice: true, |
- deviceType: 'usb', |
- devicePath: '/device/path', |
- deviceLabel: 'label', |
- hasMedia: true |
- }, |
- shouldNotify: true |
- }); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertTrue( |
- 'deviceImport:/device/path' in chrome.notifications.items, |
- 'Import notification not found in the notifications queue.'); |
- assertEquals( |
- 'DEVICE_IMPORT', |
- chrome.notifications.items[ |
- 'deviceImport:/device/path'].message, |
- 'Import notification did not have the right message.'); |
- |
- testCallback(/* was error */ false); |
- }) |
- .catch( |
- function(error) { |
- console.error('TEST FAILED: ' + error); |
- testCallback(/* was error */ true); |
- }); |
+ // Handle media device navigation requests. |
+ handler.addEventListener( |
+ DeviceHandler.VOLUME_NAVIGATION_REQUESTED, |
+ function(event) { |
+ resolver.resolve(event); |
+ }); |
+ |
+ chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
+ eventType: 'mount', |
+ status: 'success', |
+ volumeMetadata: { |
+ volumeId: 'blabbity', |
+ deviceType: 'usb' |
+ }, |
+ shouldNotify: true |
+ }); |
+ resolver.promise.then( |
+ function(event) { |
+ assertEquals('blabbity', event.volumeId); |
+ }); |
+ |
+ reportPromise(resolver.promise, callback); |
+} |
+ |
+function testMtpMediaDeviceWithImportEnabled(callback) { |
+ setupFileSystem( |
+ VolumeManagerCommon.VolumeType.MTP, |
+ 'blabbity', |
+ [ |
+ '/dcim/', |
+ '/dcim/grandpa.jpg' |
+ ]); |
+ |
+ // "Enable" cloud backup, then make a device handler. |
+ chrome.commandLinePrivate.cloudBackupEnabled = true; |
+ var resolver = new importer.Resolver(); |
+ |
+ // Handle media device navigation requests. |
+ handler.addEventListener( |
+ DeviceHandler.VOLUME_NAVIGATION_REQUESTED, |
+ function(event) { |
+ resolver.resolve(event); |
+ }); |
+ |
+ chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
+ eventType: 'mount', |
+ status: 'success', |
+ volumeMetadata: { |
+ volumeId: 'blabbity', |
+ deviceType: 'mtp' |
+ }, |
+ shouldNotify: true |
+ }); |
+ resolver.promise.then( |
+ function(event) { |
+ assertEquals('blabbity', event.volumeId); |
+ }); |
+ |
+ reportPromise(resolver.promise, callback); |
} |
-function testMediaDeviceWithImportDisabled(testCallback) { |
- // "Disable" cloud backup, then make a device handler. |
+function testMediaDeviceWithImportDisabled(callback) { |
chrome.commandLinePrivate.cloudBackupEnabled = false; |
- var handler = new DeviceHandler(); |
- importer.importEnabled() |
- .then( |
- function(ignored) { |
- chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
- eventType: 'mount', |
- status: 'success', |
- volumeMetadata: { |
- isParentDevice: true, |
- deviceType: 'usb', |
- devicePath: '/device/path', |
- deviceLabel: 'label', |
- hasMedia: true |
- }, |
- shouldNotify: true |
- }); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertFalse( |
- 'deviceImport:/device/path' in chrome.notifications.items, |
- 'Unexpected import notification found in notifications queue.'); |
- assertEquals( |
- 'DEVICE_NAVIGATION', |
- chrome.notifications.items[ |
- 'deviceNavigation:/device/path'].message, |
- 'Device notification did not have the right message.'); |
- |
- testCallback(/* was error */ false); |
- }) |
- .catch( |
- function(error) { |
- console.error('TEST FAILED: ' + error); |
- testCallback(/* was error */ true); |
- }); |
+ chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
+ eventType: 'mount', |
+ status: 'success', |
+ volumeMetadata: { |
+ isParentDevice: true, |
+ deviceType: 'usb', |
+ devicePath: '/device/path', |
+ deviceLabel: 'label', |
+ hasMedia: true |
+ }, |
+ shouldNotify: true |
+ }); |
+ |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertFalse( |
+ 'deviceImport:/device/path' in notifications, |
+ 'Unexpected import notification found in notifications queue.'); |
+ assertEquals( |
+ 'DEVICE_NAVIGATION', |
+ notifications[ |
+ 'deviceNavigation:/device/path'].message, |
+ 'Device notification did not have the right message.'); |
+ }); |
+ |
+ reportPromise(promise, callback); |
} |
function testGoodDeviceNotNavigated() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'success', |
@@ -198,13 +193,12 @@ function testGoodDeviceNotNavigated() { |
}, |
shouldNotify: false |
}); |
+ |
assertEquals(0, Object.keys(chrome.notifications.items).length); |
+ assertFalse(chrome.notifications.resolver.settled); |
} |
-function testGoodDeviceWithBadParent() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
+function testGoodDeviceWithBadParent(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'error_internal', |
@@ -216,11 +210,19 @@ function testGoodDeviceWithBadParent() { |
}, |
shouldNotify: true |
}); |
- assertFalse(!!chrome.notifications.items['device:/device/path']); |
- assertEquals( |
- 'DEVICE_UNKNOWN: label', |
- chrome.notifications.items['deviceFail:/device/path'].message); |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertFalse(!!notifications['device:/device/path']); |
+ assertEquals( |
+ 'DEVICE_UNKNOWN: label', |
+ notifications['deviceFail:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
+} |
+ |
+function testGoodDeviceWithBadParent_DuplicateMount(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'success', |
@@ -232,11 +234,9 @@ function testGoodDeviceWithBadParent() { |
}, |
shouldNotify: true |
}); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_NAVIGATION', |
- chrome.notifications.items['deviceNavigation:/device/path'].message); |
+ // Mounting the same device repeatedly should produce only |
+ // a single notification. |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'success', |
@@ -248,17 +248,19 @@ function testGoodDeviceWithBadParent() { |
}, |
shouldNotify: true |
}); |
- // Should do nothing this time. |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_NAVIGATION', |
- chrome.notifications.items['deviceNavigation:/device/path'].message); |
-} |
-function testUnsupportedDevice() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertEquals( |
+ 'DEVICE_NAVIGATION', |
+ notifications['deviceNavigation:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
+} |
+function testUnsupportedDevice(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'error_unsupported_filesystem', |
@@ -270,16 +272,18 @@ function testUnsupportedDevice() { |
}, |
shouldNotify: true |
}); |
- assertFalse(!!chrome.notifications.items['device:/device/path']); |
- assertEquals( |
- 'DEVICE_UNSUPPORTED: label', |
- chrome.notifications.items['deviceFail:/device/path'].message); |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertFalse(!!chrome.notifications.items['device:/device/path']); |
+ assertEquals( |
+ 'DEVICE_UNSUPPORTED: label', |
+ chrome.notifications.items['deviceFail:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
} |
-function testUnsupportedWithUnknownParent() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
+function testUnsupportedWithUnknownParentReplacesNotification() { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'error_internal', |
@@ -291,6 +295,7 @@ function testUnsupportedWithUnknownParent() { |
}, |
shouldNotify: true |
}); |
+ |
assertEquals( |
'DEVICE_UNKNOWN: label', |
chrome.notifications.items['deviceFail:/device/path'].message); |
@@ -306,16 +311,14 @@ function testUnsupportedWithUnknownParent() { |
}, |
shouldNotify: true |
}); |
+ |
assertEquals(1, Object.keys(chrome.notifications.items).length); |
assertEquals( |
'DEVICE_UNSUPPORTED: label', |
chrome.notifications.items['deviceFail:/device/path'].message); |
} |
-function testMountPartialSuccess() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
+function testMountPartialSuccess(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'success', |
@@ -327,32 +330,40 @@ function testMountPartialSuccess() { |
}, |
shouldNotify: true |
}); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_NAVIGATION', |
- chrome.notifications.items['deviceNavigation:/device/path'].message); |
- chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
- eventType: 'mount', |
- status: 'error_unsupported_filesystem', |
- volumeMetadata: { |
- isParentDevice: false, |
- deviceType: 'usb', |
- devicePath: '/device/path', |
- deviceLabel: 'label' |
- }, |
- shouldNotify: true |
- }); |
- assertEquals(2, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'MULTIPART_DEVICE_UNSUPPORTED: label', |
- chrome.notifications.items['deviceFail:/device/path'].message); |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertEquals( |
+ 'DEVICE_NAVIGATION', |
+ notifications['deviceNavigation:/device/path'].message); |
+ }).then( |
+ function() { |
+ chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
+ eventType: 'mount', |
+ status: 'error_unsupported_filesystem', |
+ volumeMetadata: { |
+ isParentDevice: false, |
+ deviceType: 'usb', |
+ devicePath: '/device/path', |
+ deviceLabel: 'label' |
+ }, |
+ shouldNotify: true |
+ }); |
+ }).then( |
+ function() { |
+ var notifications = chrome.notifications.items; |
+ assertEquals( |
+ 2, Object.keys(notifications).length); |
+ assertEquals( |
+ 'MULTIPART_DEVICE_UNSUPPORTED: label', |
+ notifications['deviceFail:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
} |
-function testUnknown() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
+function testUnknown(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'error_unknown', |
@@ -364,16 +375,19 @@ function testUnknown() { |
}, |
shouldNotify: true |
}); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_UNKNOWN: label', |
- chrome.notifications.items['deviceFail:/device/path'].message); |
-} |
-function testNonASCIILabel() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertEquals( |
+ 'DEVICE_UNKNOWN: label', |
+ notifications['deviceFail:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
+} |
+function testNonASCIILabel(callback) { |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
status: 'error_internal', |
@@ -386,16 +400,19 @@ function testNonASCIILabel() { |
}, |
shouldNotify: true |
}); |
- assertEquals(1, Object.keys(chrome.notifications.items).length); |
- assertEquals( |
- 'DEVICE_UNKNOWN: \u30E9\u30D9\u30EB', |
- chrome.notifications.items['deviceFail:/device/path'].message); |
+ |
+ var promise = chrome.notifications.resolver.promise.then( |
+ function(notifications) { |
+ assertEquals(1, Object.keys(notifications).length); |
+ assertEquals( |
+ 'DEVICE_UNKNOWN: \u30E9\u30D9\u30EB', |
+ notifications['deviceFail:/device/path'].message); |
+ }); |
+ |
+ reportPromise(promise, callback); |
} |
function testMulitpleFail() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
// The first parent error. |
chrome.fileManagerPrivate.onMountCompleted.dispatch({ |
eventType: 'mount', |
@@ -467,9 +484,6 @@ function testMulitpleFail() { |
} |
function testDisabledDevice() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
chrome.fileManagerPrivate.onDeviceChanged.dispatch({ |
type: 'disabled', |
devicePath: '/device/path' |
@@ -486,9 +500,6 @@ function testDisabledDevice() { |
} |
function testFormatSucceeded() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
chrome.fileManagerPrivate.onDeviceChanged.dispatch({ |
type: 'format_start', |
devicePath: '/device/path' |
@@ -508,9 +519,6 @@ function testFormatSucceeded() { |
} |
function testFormatFailed() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
chrome.fileManagerPrivate.onDeviceChanged.dispatch({ |
type: 'format_start', |
devicePath: '/device/path' |
@@ -529,9 +537,6 @@ function testFormatFailed() { |
} |
function testDeviceHardUnplugged() { |
- // Make a device handler. |
- var handler = new DeviceHandler(); |
- |
chrome.fileManagerPrivate.onDeviceChanged.dispatch({ |
type: 'hard_unplugged', |
devicePath: '/device/path' |
@@ -541,3 +546,70 @@ function testDeviceHardUnplugged() { |
chrome.notifications.items[ |
'hardUnplugged:/device/path'].message); |
} |
+ |
+/** |
+ * @param {!VolumeManagerCommon.VolumeType} volumeType |
+ * @param {string} volumeId |
+ * @param {!Array.<string>} fileNames |
+ * @return {!VolumeInfo} |
+ */ |
+function setupFileSystem(volumeType, volumeId, fileNames) { |
+ var volumeInfo = volumeManager.createVolumeInfo( |
+ volumeType, volumeId, 'A volume known as ' + volumeId); |
+ assertTrue(!!volumeInfo); |
+ volumeInfo.fileSystem.populate(fileNames); |
+ return volumeInfo; |
+} |
+ |
+function setupChromeApis() { |
+ // Make dummy APIs. |
+ chrome = { |
+ commandLinePrivate: { |
+ hasSwitch: function(switchName, callback) { |
+ if (switchName === 'enable-cloud-backup') { |
+ callback(chrome.commandLinePrivate.cloudBackupEnabled); |
+ } |
+ }, |
+ cloudBackupEnabled: false |
+ }, |
+ fileManagerPrivate: { |
+ onDeviceChanged: { |
+ addListener: function(listener) { |
+ this.dispatch = listener; |
+ } |
+ }, |
+ onMountCompleted: { |
+ addListener: function(listener) { |
+ this.dispatch = listener; |
+ } |
+ } |
+ }, |
+ notifications: { |
+ resolver: new importer.Resolver(), |
+ create: function(id, params, callback) { |
+ this.promise = this.resolver.promise; |
+ this.items[id] = params; |
+ if (!this.resolver.settled) { |
+ this.resolver.resolve(this.items); |
+ } |
+ callback(); |
+ }, |
+ clear: function(id, callback) { delete this.items[id]; callback(); }, |
+ items: {}, |
+ onButtonClicked: { |
+ addListener: function(listener) { |
+ this.dispatch = listener; |
+ } |
+ }, |
+ getAll: function(callback) { |
+ callback([]); |
+ } |
+ }, |
+ runtime: { |
+ getURL: function(path) { return path; }, |
+ onStartup: { |
+ addListener: function() {} |
+ } |
+ } |
+ }; |
+} |