blob: 66d2ebda41de827e3a2b26a7d18d4e788abed502 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
const Crostini = {};
/**
* Maintains a list of paths shared with the crostini container.
* Keyed by VolumeManagerCommon.RootType, with boolean set values
* of string paths. e.g. {'Downloads': {'/foo': true, '/bar': true}}.
* @private @dict {!Object<!Object<boolean>>}
*/
Crostini.SHARED_PATHS_ = {};
/**
* Add entry as a shared path.
* @param {!Entry} entry
* @param {!VolumeManagerWrapper} volumeManager
*/
Crostini.addSharedPath = function(entry, volumeManager) {
const root = volumeManager.getLocationInfo(entry).rootType;
let paths = Crostini.SHARED_PATHS_[root];
if (!paths) {
paths = {};
Crostini.SHARED_PATHS_[root] = paths;
}
paths[entry.fullPath] = true;
};
/**
* Returns true if entry is shared.
* @param {!Entry} entry
* @param {!VolumeManagerWrapper} volumeManager
* @return {boolean} True if path is shared either by a direct
* share or from one of its ancestor directories.
*/
Crostini.isPathShared = function(entry, volumeManager) {
const root = volumeManager.getLocationInfo(entry).rootType;
const paths = Crostini.SHARED_PATHS_[root];
if (!paths)
return false;
// Check path and all ancestor directories.
let path = entry.fullPath;
while (path != '') {
if (paths[path])
return true;
path = path.substring(0, path.lastIndexOf('/'));
}
return false;
};
/**
* @param {!Entry} entry
* @param {!VolumeManagerWrapper} volumeManager
* @return {boolean} True if the entry is from crostini.
*/
Crostini.isCrostiniEntry = function(entry, volumeManager) {
return volumeManager.getLocationInfo(entry).rootType ===
VolumeManagerCommon.RootType.CROSTINI;
};