Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 import 'dart:_mojo_services/mojo/files/types.mojom.dart' as types; | |
| 6 | |
| 5 // | 7 // |
| 6 // Implementation of File and RandomAccessFile for Mojo. | 8 // Implementation of Directory, File, and RandomAccessFile for Mojo. |
| 7 // | 9 // |
| 8 | 10 |
| 9 // TODO(johnmccutchan): Implement. | 11 OSError _OSErrorFromError(types.Error error) { |
| 12 assert(error != null); | |
| 13 return new OSError(error.toString(), error.toJson()); | |
| 14 } | |
| 15 | |
| 16 String _ensurePathIsRelative(String path) { | |
| 17 while (path.startsWith('/')) { | |
| 18 // Trim off the leading '/'. | |
| 19 path = path.substring(1); | |
| 20 } | |
| 21 return path; | |
| 22 } | |
| 23 | |
| 24 patch class _Directory { | |
| 25 // We start at the root of the file system. | |
| 26 static String _currentDirectoryPath = '/'; | |
| 27 | |
| 28 /* patch */ Future<Directory> create({bool recursive: false}) async { | |
| 29 if (recursive) { | |
| 30 return exists().then((exists) { | |
| 31 if (exists) return this; | |
| 32 if (path != parent.path) { | |
| 33 return parent.create(recursive: true).then((_) { | |
| 34 return create(); | |
| 35 }); | |
| 36 } else { | |
| 37 return create(); | |
| 38 } | |
| 39 }); | |
| 40 } | |
| 41 DirectoryProxy rootDirectory = await _getRootDirectory(); | |
| 42 int flags = | |
| 43 types.kOpenFlagRead | types.kOpenFlagWrite | types.kOpenFlagCreate; | |
| 44 var response = | |
| 45 await rootDirectory.ptr.openDirectory(_ensurePathIsRelative(path), | |
|
zra
2015/12/18 22:51:46
For IPC calls deep in library implementations, it
Cutch
2015/12/18 23:05:20
Done here and elsewhere.
| |
| 46 null, | |
| 47 flags); | |
| 48 if (response.error != types.Error.ok) { | |
| 49 throw _OSErrorFromError(response.error); | |
| 50 } | |
| 51 return this; | |
| 52 } | |
| 53 | |
| 54 /* patch */ Future<Directory> createTemp([String prefix]) async { | |
| 55 DirectoryProxy rootDirectory = await _getRootDirectory(); | |
| 56 // Create directory and fail if it already exists. | |
| 57 int flags = types.kOpenFlagRead | types.kOpenFlagWrite | | |
| 58 types.kOpenFlagCreate | types.kOpenFlagExclusive; | |
| 59 String tempPath = '$path/$prefix'; | |
| 60 while (true) { | |
| 61 print(tempPath); | |
|
zra
2015/12/18 22:51:46
debug print?
Cutch
2015/12/18 23:05:20
Done.
| |
| 62 var response = await rootDirectory.ptr.openDirectory(tempPath, null, flags ); | |
|
zra
2015/12/18 22:51:46
long line
Cutch
2015/12/18 23:05:20
Done.
| |
| 63 if (response.error == types.Error.ok) { | |
| 64 // Success. | |
| 65 break; | |
| 66 } | |
| 67 // Alter the path and try again. | |
| 68 // TODO(johnmccutchan): Append a randomly generated character. | |
| 69 tempPath = tempPath + 'a'; | |
| 70 } | |
| 71 return new Directory(tempPath); | |
| 72 } | |
| 73 | |
| 74 /* patch */ Future<bool> exists() async { | |
| 75 DirectoryProxy rootDirectory = await _getRootDirectory(); | |
| 76 int flags = types.kOpenFlagRead | types.kOpenFlagWrite; | |
| 77 var response = | |
| 78 await rootDirectory.ptr.openDirectory(_ensurePathIsRelative(path), | |
| 79 null, | |
| 80 flags); | |
| 81 // If we can open it, it exists. | |
| 82 return response.error == types.Error.ok; | |
| 83 } | |
| 84 | |
| 85 /* patch */ static _current() { | |
| 86 return _currentDirectoryPath; | |
| 87 } | |
| 88 | |
| 89 /* patch */ static _setCurrent(path) { | |
| 90 _currentDirectoryPath = path; | |
| 91 } | |
| 92 | |
| 93 /* patch */ static _createTemp(String path) { | |
|
zra
2015/12/18 22:51:46
What are these empty functions for? Should they th
Cutch
2015/12/18 23:05:20
These are patches that will be necessary. I've add
| |
| 94 } | |
| 95 | |
| 96 /* patch */ static String _systemTemp() { | |
| 97 return 'tmp'; | |
| 98 } | |
| 99 | |
| 100 /* patch */ static _exists(String path) { | |
| 101 } | |
| 102 | |
| 103 /* patch */ static _create(String path) { | |
| 104 } | |
| 105 | |
| 106 /* patch */ static _deleteNative(String path, bool recursive) { | |
| 107 } | |
| 108 | |
| 109 /* patch */ static _rename(String path, String newPath) { | |
| 110 } | |
| 111 | |
| 112 /* patch */ static List _list(String path, bool recursive, bool followLinks) { | |
| 113 } | |
| 114 } | |
| 115 | |
| 116 | |
| 117 patch class _File { | |
| 118 /* patch */ Future<bool> exists() async { | |
| 119 DirectoryProxy rootDirectory = await _getRootDirectory(); | |
| 120 int flags = types.kOpenFlagRead; | |
| 121 var response = | |
| 122 await rootDirectory.ptr.openFile(_ensurePathIsRelative(path), | |
| 123 null, | |
| 124 flags); | |
| 125 // If we can open it, it exists. | |
| 126 return response.error == types.Error.ok; | |
| 127 } | |
| 128 | |
| 129 Future<File> create({bool recursive: false}) async { | |
| 130 if (recursive) { | |
| 131 // Create any parent directories. | |
| 132 await parent.create(recursive: true); | |
| 133 } | |
| 134 DirectoryProxy rootDirectory = await _getRootDirectory(); | |
| 135 int flags = types.kOpenFlagWrite | types.kOpenFlagCreate; | |
| 136 print(_ensurePathIsRelative(path)); | |
| 137 var response = | |
| 138 await rootDirectory.ptr.openFile(_ensurePathIsRelative(path), | |
| 139 null, | |
| 140 flags); | |
| 141 if (response.error != types.Error.ok) { | |
| 142 throw _OSErrorFromError(response.error); | |
| 143 } | |
| 144 return this; | |
| 145 } | |
| 146 | |
| 147 /* patch */ static _exists(String path) { | |
| 148 } | |
| 149 | |
| 150 /* patch */ static _create(String path) { | |
| 151 } | |
| 152 | |
| 153 /* patch */ static _createLink(String path, String target) { | |
| 154 } | |
| 155 | |
| 156 /* patch */ static _linkTarget(String path) { | |
| 157 } | |
| 158 | |
| 159 /* patch */ static _deleteNative(String path) { | |
| 160 } | |
| 161 | |
| 162 /* patch */ static _deleteLinkNative(String path) { | |
| 163 } | |
| 164 | |
| 165 /* patch */ static _rename(String oldPath, String newPath) { | |
| 166 } | |
| 167 | |
| 168 /* patch */ static _renameLink(String oldPath, String newPath) { | |
| 169 } | |
| 170 | |
| 171 /* patch */ static _copy(String oldPath, String newPath) { | |
| 172 } | |
| 173 | |
| 174 /* patch */ static _lengthFromPath(String path) { | |
| 175 } | |
| 176 | |
| 177 /* patch */ static _lastModified(String path) { | |
| 178 } | |
| 179 | |
| 180 /* patch */ static _open(String path, int mode) { | |
| 181 } | |
| 182 | |
| 183 /* patch */ static int _openStdio(int fd) { | |
| 184 } | |
| 185 } | |
| 186 | |
| 187 patch class FileStat { | |
| 188 /* patch */ static _statSync(String path) { | |
| 189 } | |
| 190 } | |
| 191 | |
| 192 | |
| 193 patch class FileSystemEntity { | |
| 194 /* patch */ static _getType(String path, bool followLinks) { | |
| 195 } | |
| 196 /* patch */ static _identical(String path1, String path2) { | |
| 197 } | |
| 198 /* patch */ static _resolveSymbolicLinks(String path) { | |
| 199 } | |
| 200 } | |
| 201 | |
| 202 patch class _Link { | |
| 203 } | |
| 204 | |
| 205 | |
| 206 patch class _RandomAccessFile { | |
| 207 /* patch */ static int _close(int id) { | |
| 208 } | |
| 209 | |
| 210 /* patch */ static int _getFD(int id) { | |
| 211 } | |
| 212 | |
| 213 /* patch */ static _readByte(int id) { | |
| 214 } | |
| 215 | |
| 216 /* patch */ static _read(int id, int bytes) { | |
| 217 } | |
| 218 | |
| 219 /* patch */ static _readInto(int id, List<int> buffer, int start, int end) { | |
| 220 } | |
| 221 | |
| 222 /* patch */ static _writeByte(int id, int value) { | |
| 223 } | |
| 224 | |
| 225 /* patch */ static _writeFrom(int id, List<int> buffer, int start, int end) { | |
| 226 } | |
| 227 | |
| 228 /* patch */ static _position(int id) { | |
| 229 } | |
| 230 | |
| 231 /* patch */ static _setPosition(int id, int position) { | |
| 232 } | |
| 233 | |
| 234 /* patch */ static _truncate(int id, int length) { | |
| 235 } | |
| 236 | |
| 237 /* patch */ static _length(int id) { | |
| 238 } | |
| 239 | |
| 240 /* patch */ static _flush(int id) { | |
| 241 } | |
| 242 | |
| 243 /* patch */ static _lock(int id, int lock, int start, int end) { | |
| 244 } | |
| 245 } | |
| OLD | NEW |