Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1460)

Unified Diff: pkg/http_server/lib/src/virtual_directory.dart

Issue 124833003: pkg/http_server: return future for VirtualDirectory serveRequest (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: version Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/http_server/pubspec.yaml » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/http_server/lib/src/virtual_directory.dart
diff --git a/pkg/http_server/lib/src/virtual_directory.dart b/pkg/http_server/lib/src/virtual_directory.dart
index 3193e3b9311d9e415a3037032c62f1b6b2b324b8..6eef0b4208b3811dee2e362d8612e4fd200bea9f 100644
--- a/pkg/http_server/lib/src/virtual_directory.dart
+++ b/pkg/http_server/lib/src/virtual_directory.dart
@@ -10,6 +10,9 @@ class _DirectoryRedirect {
const _DirectoryRedirect();
}
+typedef dynamic _DirCallback(Directory dir, HttpRequest request);
+typedef dynamic _ErrorCallback(HttpRequest request);
+
/**
* A [VirtualDirectory] can serve files and directory-listing from a root path,
* to [HttpRequest]s.
@@ -40,8 +43,8 @@ class VirtualDirectory {
final RegExp _invalidPathRegExp = new RegExp("[\\\/\x00]");
- Function _errorCallback;
- Function _dirCallback;
+ _ErrorCallback _errorCallback;
+ _DirCallback _dirCallback;
/*
* Create a new [VirtualDirectory] for serving static file content of
@@ -55,20 +58,15 @@ class VirtualDirectory {
/**
* Serve a [Stream] of [HttpRequest]s, in this [VirtualDirectory].
*/
- void serve(Stream<HttpRequest> requests) {
- requests.listen(serveRequest);
- }
+ StreamSubscription<HttpRequest> serve(Stream<HttpRequest> requests) =>
+ requests.listen(serveRequest);
/**
* Serve a single [HttpRequest], in this [VirtualDirectory].
*/
- void serveRequest(HttpRequest request) {
- _locateResource('.', request.uri.pathSegments.iterator..moveNext())
+ Future serveRequest(HttpRequest request) {
+ return _locateResource('.', request.uri.pathSegments.iterator..moveNext())
.then((entity) {
- if (entity == null) {
- _serveErrorPage(HttpStatus.NOT_FOUND, request);
- return;
- }
if (entity is File) {
serveFile(entity, request);
} else if (entity is Directory) {
@@ -82,8 +80,10 @@ class VirtualDirectory {
request.response.redirect(Uri.parse('${request.uri}/'),
status: HttpStatus.MOVED_PERMANENTLY);
} else {
+ assert(entity == null);
_serveErrorPage(HttpStatus.NOT_FOUND, request);
}
+ return request.response.done;
});
}
@@ -179,7 +179,7 @@ class VirtualDirectory {
!lastModified.isAfter(request.headers.ifModifiedSince)) {
response.statusCode = HttpStatus.NOT_MODIFIED;
response.close();
- return;
+ return null;
}
response.headers.set(HttpHeaders.LAST_MODIFIED, lastModified);
@@ -187,7 +187,7 @@ class VirtualDirectory {
if (request.method == 'HEAD') {
response.close();
- return;
+ return null;
}
return file.length().then((length) {
@@ -221,14 +221,18 @@ class VirtualDirectory {
// Pipe the 'range' of the file.
file.openRead(start, end)
.pipe(new _VirtualDirectoryFileStream(response, file.path))
- .catchError((_) {});
+ .catchError((_) {
+ // TODO(kevmoo): log errors
+ });
return;
}
}
file.openRead()
.pipe(new _VirtualDirectoryFileStream(response, file.path))
- .catchError((_) {});
+ .catchError((_) {
+ // TODO(kevmoo): log errors
+ });
});
}).catchError((_) {
response.statusCode = HttpStatus.NOT_FOUND;
@@ -297,7 +301,6 @@ $server
}
dir.list(followLinks: true).listen((entity) {
- // TODO(ajohnsen): Consider async dir listing.
if (entity is File) {
var stat = entity.statSync();
add(basename(entity.path),
@@ -309,11 +312,15 @@ $server
null);
}
}, onError: (e) {
+ // TODO(kevmoo): log error
}, onDone: () {
response.write(footer);
response.close();
});
- }, onError: (e) => response.close());
+ }, onError: (e) {
+ // TODO(kevmoo): log error
+ response.close();
+ });
}
void _serveErrorPage(int error, HttpRequest request) {
@@ -349,7 +356,7 @@ $server
class _VirtualDirectoryFileStream extends StreamConsumer<List<int>> {
final HttpResponse response;
final String path;
- var buffer = [];
+ List<int> buffer = [];
_VirtualDirectoryFileStream(HttpResponse this.response, String this.path);
@@ -394,7 +401,7 @@ class _VirtualDirectoryFileStream extends StreamConsumer<List<int>> {
Future close() => new Future.value();
- void setMimeType(var bytes) {
+ void setMimeType(List<int> bytes) {
var mimeType = lookupMimeType(path, headerBytes: bytes);
if (mimeType != null) {
response.headers.contentType = ContentType.parse(mimeType);
« no previous file with comments | « no previous file | pkg/http_server/pubspec.yaml » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698