|  | // 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. | 
|  |  | 
|  | export default class PlatformFileSystem { | 
|  | /** | 
|  | * @param {string} path | 
|  | * @param {string} type | 
|  | */ | 
|  | constructor(path, type) { | 
|  | this._path = path; | 
|  | this._type = type; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {!Promise<?{modificationTime: !Date, size: number}>} | 
|  | */ | 
|  | getMetadata(path) { | 
|  | return Promise.resolve(/** @type ?{modificationTime: !Date, size: number} */ (null)); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {!Array<string>} | 
|  | */ | 
|  | initialFilePaths() { | 
|  | return []; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {!Array<string>} | 
|  | */ | 
|  | initialGitFolders() { | 
|  | return []; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {string} | 
|  | */ | 
|  | path() { | 
|  | return this._path; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {string} | 
|  | */ | 
|  | embedderPath() { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {string} | 
|  | */ | 
|  | type() { | 
|  | // TODO(kozyatinskiy): remove type, overrides should implement this interface. | 
|  | return this._type; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @param {?string} name | 
|  | * @return {!Promise<?string>} | 
|  | */ | 
|  | async createFile(path, name) { | 
|  | return Promise.resolve(null); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {!Promise<boolean>} | 
|  | */ | 
|  | deleteFile(path) { | 
|  | return Promise.resolve(false); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {!Promise<?Blob>} | 
|  | */ | 
|  | requestFileBlob(path) { | 
|  | return Promise.resolve(/** @type {?Blob} */ (null)); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @returns {!Promise<!Common.DeferredContent>} | 
|  | */ | 
|  | async requestFileContent(path) { | 
|  | return {error: ls`Unable to read files with this implementation.`, isEncoded: false}; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @param {string} content | 
|  | * @param {boolean} isBase64 | 
|  | */ | 
|  | setFileContent(path, content, isBase64) { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @param {string} newName | 
|  | * @param {function(boolean, string=)} callback | 
|  | */ | 
|  | renameFile(path, newName, callback) { | 
|  | callback(false); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | */ | 
|  | addExcludedFolder(path) { | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | */ | 
|  | removeExcludedFolder(path) { | 
|  | } | 
|  |  | 
|  | fileSystemRemoved() { | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} folderPath | 
|  | * @return {boolean} | 
|  | */ | 
|  | isFileExcluded(folderPath) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {!Set<string>} | 
|  | */ | 
|  | excludedFolders() { | 
|  | return new Set(); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} query | 
|  | * @param {!Common.Progress} progress | 
|  | * @return {!Promise<!Array<string>>} | 
|  | */ | 
|  | searchInPath(query, progress) { | 
|  | return Promise.resolve([]); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {!Common.Progress} progress | 
|  | */ | 
|  | indexContent(progress) { | 
|  | setImmediate(() => progress.done()); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {string} | 
|  | */ | 
|  | mimeFromPath(path) { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {boolean} | 
|  | */ | 
|  | canExcludeFolder(path) { | 
|  | return false; | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} path | 
|  | * @return {!Common.ResourceType} | 
|  | */ | 
|  | contentType(path) { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @param {string} url | 
|  | * @return {string} | 
|  | */ | 
|  | tooltipForURL(url) { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  |  | 
|  | /** | 
|  | * @return {boolean} | 
|  | */ | 
|  | supportsAutomapping() { | 
|  | throw new Error('Not implemented'); | 
|  | } | 
|  | } | 
|  |  | 
|  | /* Legacy exported object */ | 
|  | self.Persistence = self.Persistence || {}; | 
|  |  | 
|  | /* Legacy exported object */ | 
|  | Persistence = Persistence || {}; | 
|  |  | 
|  | /** @constructor */ | 
|  | Persistence.PlatformFileSystem = PlatformFileSystem; |