Unverified Commit 0980fa2d authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Serve every html file under web (#41386)

parent 05097916
...@@ -265,7 +265,16 @@ class AssetServer { ...@@ -265,7 +265,16 @@ class AssetServer {
Directory partFiles; Directory partFiles;
Future<Response> handle(Request request) async { Future<Response> handle(Request request) async {
if (request.url.path.contains('stack_trace_mapper')) { if (request.url.path.endsWith('.html')) {
final Uri htmlUri = flutterProject.web.directory.uri.resolveUri(request.url);
final File htmlFile = fs.file(htmlUri);
if (htmlFile.existsSync()) {
return Response.ok(htmlFile.readAsBytesSync(), headers: <String, String>{
'Content-Type': 'text/html',
});
}
return Response.notFound('');
} else if (request.url.path.contains('stack_trace_mapper')) {
final File file = fs.file(fs.path.join( final File file = fs.file(fs.path.join(
artifacts.getArtifactPath(Artifact.engineDartSdkPath), artifacts.getArtifactPath(Artifact.engineDartSdkPath),
'lib', 'lib',
......
...@@ -636,6 +636,9 @@ class WebProject { ...@@ -636,6 +636,9 @@ class WebProject {
/// The 'lib' directory for the application. /// The 'lib' directory for the application.
Directory get libDirectory => parent.directory.childDirectory('lib'); Directory get libDirectory => parent.directory.childDirectory('lib');
/// The directory containing additional files for the application.
Directory get directory => parent.directory.childDirectory('web');
/// The html file used to host the flutter web application. /// The html file used to host the flutter web application.
File get indexFile => parent.directory File get indexFile => parent.directory
.childDirectory('web') .childDirectory('web')
......
// Copyright 2019 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.
import 'package:flutter_tools/src/base/file_system.dart';
import 'package:flutter_tools/src/build_runner/web_fs.dart';
import 'package:flutter_tools/src/project.dart';
import 'package:shelf/shelf.dart';
import '../../src/common.dart';
import '../../src/testbed.dart';
void main() {
Testbed testbed;
AssetServer assetServer;
setUp(() {
testbed = Testbed(
setup: () {
fs.file(fs.path.join('lib', 'main.dart'))
.createSync(recursive: true);
fs.file(fs.path.join('web', 'index.html'))
..createSync(recursive: true)
..writeAsStringSync('hello');
assetServer = AssetServer(FlutterProject.current(), fs.path.join('main'));
}
);
});
test('can serve an html file from the web directory', () => testbed.run(() async {
final Response response = await assetServer
.handle(Request('GET', Uri.parse('http://localhost:8080/index.html')));
expect(response.headers, <String, String>{
'Content-Type': 'text/html',
'content-length': '5'
});
expect(await response.readAsString(), 'hello');
}));
test('handles a missing html file from the web directory', () => testbed.run(() async {
final Response response = await assetServer
.handle(Request('GET', Uri.parse('http://localhost:8080/foobar.html')));
expect(response.statusCode, 404);
}));
}
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