mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Serve every html file under web (#41386)
This commit is contained in:
parent
0509791663
commit
0980fa2ddd
@ -265,7 +265,16 @@ class AssetServer {
|
||||
Directory partFiles;
|
||||
|
||||
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(
|
||||
artifacts.getArtifactPath(Artifact.engineDartSdkPath),
|
||||
'lib',
|
||||
|
||||
@ -636,6 +636,9 @@ class WebProject {
|
||||
/// The 'lib' directory for the application.
|
||||
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.
|
||||
File get indexFile => parent.directory
|
||||
.childDirectory('web')
|
||||
|
||||
@ -0,0 +1,47 @@
|
||||
// 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);
|
||||
}));
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user