Commit 33b43734 authored by Sam McNally's avatar Sam McNally Committed by Commit Bot

Update team drives grand root visibility when it changes.

When an onDirectoryChanged event is received for that grand root, rescan
the grand root and update its visiblity in the UI.

Bug: 854153
Cq-Include-Trybots: luci.chromium.try:closure_compilation
Change-Id: Ie36dabdd9348e7c174a22438b29ce8953c81d68e
Reviewed-on: https://chromium-review.googlesource.com/1136332Reviewed-by: default avatarSasha Morrissey <sashab@chromium.org>
Commit-Queue: Sam McNally <sammc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#575943}
parent 41d010e8
......@@ -1064,6 +1064,10 @@ DriveVolumeItem.prototype.updateItemByEntry = function(changedDirectoryEntry) {
// Keep in sync with |fixedEntries| in |updateSubDirectories|.
var index = util.isTeamDriveEntry(changedDirectoryEntry) ? 1 : 0;
this.items[index].updateItemByEntry(changedDirectoryEntry);
if (util.isTeamDrivesGrandRoot(changedDirectoryEntry) &&
this.volumeInfo_.teamDriveDisplayRoot) {
this.setHiddenForTeamDrivesGrandRoot_(this.items[index]);
}
};
/**
......
......@@ -5,6 +5,7 @@
var chrome;
var mockCommandLinePrivate;
var metrics;
var onDirectoryChangedListeners;
/**
* Set string data.
......@@ -25,10 +26,13 @@ function setUp() {
chrome = {
fileManagerPrivate: {
onDirectoryChanged: {
addListener: function(listener) { /* Do nothing. */ }
addListener: function(listener) {
onDirectoryChangedListeners.push(listener);
}
}
}
};
onDirectoryChangedListeners = [];
mockCommandLinePrivate = new MockCommandLinePrivate();
metrics = {recordSmallCount: function() {}};
......@@ -352,3 +356,160 @@ function testUpdateSubElementsFromList() {
str('REMOVABLE_DIRECTORY_LABEL')
], getDirectoryTreeItemLabelsAsAList(directoryTree));
}
/**
* Test adding the first team drive for a user.
* Team Drives subtree should be shown after the change notification is
* delivered.
*
* @param {!function(boolean)} callback A callback function which is called with
* test result.
*/
function testAddFirstTeamDrive(callback) {
// Create elements.
var parentElement = document.createElement('div');
var directoryTree = document.createElement('div');
directoryTree.metadataModel = {
notifyEntriesChanged: () => {},
get: function(entries, labels) {
// Mock a non-shared directory
return Promise.resolve([{shared: false}]);
}
};
parentElement.appendChild(directoryTree);
// Create mocks.
var directoryModel = new MockDirectoryModel();
var volumeManager = new MockVolumeManagerWrapper();
var fileOperationManager = {addEventListener: function(name, callback) {}};
// Set entry which is returned by
// window.webkitResolveLocalFileSystemURLResults.
var driveFileSystem = volumeManager.volumeInfoList.item(0).fileSystem;
window.webkitResolveLocalFileSystemURLEntries['filesystem:drive/root'] =
new MockDirectoryEntry(driveFileSystem, '/root');
window
.webkitResolveLocalFileSystemURLEntries['filesystem:drive/team_drives'] =
new MockDirectoryEntry(driveFileSystem, '/team_drives');
// No directories exist under Team Drives
DirectoryTree.decorate(
directoryTree, directoryModel, volumeManager, null, fileOperationManager,
true);
directoryTree.dataModel = new MockNavigationListModel(volumeManager);
directoryTree.redraw(true);
var driveItem = directoryTree.items[0];
reportPromise(
waitUntil(() => {
return driveItem.items.length == 4;
})
.then(() => {
window.webkitResolveLocalFileSystemURLEntries
['filesystem:drive/team_drives/a'] =
new MockDirectoryEntry(driveFileSystem, '/team_drives/a');
let event = {
entry: window.webkitResolveLocalFileSystemURLEntries
['filesystem:drive/team_drives'],
eventType: 'changed',
};
for (let listener of onDirectoryChangedListeners) {
listener(event);
}
})
.then(() => {
return waitUntil(() => {
for (var i = 0; i < driveItem.items.length; i++) {
if (driveItem.items[i].label ==
str('DRIVE_TEAM_DRIVES_LABEL')) {
return !driveItem.items[i].hidden;
}
}
return false;
});
}),
callback);
}
/**
* Test removing the last team drive for a user.
* Team Drives subtree should be hidden after the change notification is
* delivered.
*
* @param {!function(boolean)} callback A callback function which is called with
* test result.
*/
function testRemoveLastTeamDrive(callback) {
// Create elements.
var parentElement = document.createElement('div');
var directoryTree = document.createElement('div');
directoryTree.metadataModel = {
notifyEntriesChanged: () => {},
get: function(entries, labels) {
// Mock a non-shared directory
return Promise.resolve([{shared: false}]);
}
};
parentElement.appendChild(directoryTree);
// Create mocks.
var directoryModel = new MockDirectoryModel();
var volumeManager = new MockVolumeManagerWrapper();
var fileOperationManager = {addEventListener: function(name, callback) {}};
// Set entry which is returned by
// window.webkitResolveLocalFileSystemURLResults.
var driveFileSystem = volumeManager.volumeInfoList.item(0).fileSystem;
window.webkitResolveLocalFileSystemURLEntries['filesystem:drive/root'] =
new MockDirectoryEntry(driveFileSystem, '/root');
window
.webkitResolveLocalFileSystemURLEntries['filesystem:drive/team_drives'] =
new MockDirectoryEntry(driveFileSystem, '/team_drives');
window.webkitResolveLocalFileSystemURLEntries
['filesystem:drive/team_drives/a'] =
new MockDirectoryEntry(driveFileSystem, '/team_drives/a');
DirectoryTree.decorate(
directoryTree, directoryModel, volumeManager, null, fileOperationManager,
true);
directoryTree.dataModel = new MockNavigationListModel(volumeManager);
directoryTree.redraw(true);
var driveItem = directoryTree.items[0];
reportPromise(
waitUntil(() => {
return driveItem.items.length == 4;
})
.then(() => {
return new Promise(resolve => {
window
.webkitResolveLocalFileSystemURLEntries
['filesystem:drive/team_drives/a']
.remove(resolve);
});
})
.then(() => {
let event = {
entry: window.webkitResolveLocalFileSystemURLEntries
['filesystem:drive/team_drives'],
eventType: 'changed',
};
for (let listener of onDirectoryChangedListeners) {
listener(event);
}
})
.then(() => {
return waitUntil(() => {
for (var i = 0; i < driveItem.items.length; i++) {
if (driveItem.items[i].label ==
str('DRIVE_TEAM_DRIVES_LABEL')) {
return driveItem.items[i].hidden;
}
}
return false;
});
}),
callback);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment