summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--js/fetch.ts8
-rw-r--r--js/fetch_test.ts14
-rw-r--r--src/handlers.rs9
3 files changed, 25 insertions, 6 deletions
diff --git a/js/fetch.ts b/js/fetch.ts
index 73ad34e7a..2d57fa65c 100644
--- a/js/fetch.ts
+++ b/js/fetch.ts
@@ -166,8 +166,7 @@ class FetchRequest {
fbs.FetchReq.addId(builder, this.id);
fbs.FetchReq.addUrl(builder, url);
const msg = fbs.FetchReq.endFetchReq(builder);
- const res = send(builder, fbs.Any.FetchReq, msg);
- assert(res == null);
+ send(builder, fbs.Any.FetchReq, msg);
}
}
@@ -177,7 +176,7 @@ export function fetch(
): Promise<Response> {
const fetchReq = new FetchRequest(input as string);
const response = fetchReq.response;
- return new Promise((resolve, reject) => {
+ const promise = new Promise<Response>((resolve, reject) => {
response.onHeader = (response: FetchResponse) => {
log("onHeader");
resolve(response);
@@ -186,6 +185,7 @@ export function fetch(
log("onError", error);
reject(error);
};
- fetchReq.start();
});
+ fetchReq.start();
+ return promise;
}
diff --git a/js/fetch_test.ts b/js/fetch_test.ts
index 873f2fbde..88cf834bc 100644
--- a/js/fetch_test.ts
+++ b/js/fetch_test.ts
@@ -1,5 +1,5 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
-import { testPerm, assertEqual } from "./test_util.ts";
+import { test, testPerm, assert, assertEqual } from "./test_util.ts";
import * as deno from "deno";
testPerm({ net: true }, async function fetchJsonSuccess() {
@@ -7,3 +7,15 @@ testPerm({ net: true }, async function fetchJsonSuccess() {
const json = await response.json();
assertEqual(json.name, "deno");
});
+
+test(async function fetchPerm() {
+ let err;
+ try {
+ await fetch("http://localhost:4545/package.json");
+ } catch (err_) {
+ err = err_;
+ }
+ // TODO assert(err instanceof deno.PermissionDenied).
+ assert(err);
+ assertEqual(err.name, "deno.PermissionDenied");
+});
diff --git a/src/handlers.rs b/src/handlers.rs
index 0cd5b7367..f0a15186d 100644
--- a/src/handlers.rs
+++ b/src/handlers.rs
@@ -289,10 +289,17 @@ fn handle_fetch_req(
base: msg::Base,
_builder: &mut FlatBufferBuilder,
) -> HandlerResult {
+ let deno = from_c(d);
+ if !deno.flags.allow_net {
+ let err = std::io::Error::new(
+ std::io::ErrorKind::PermissionDenied,
+ "allow_net is off.",
+ );
+ return Err(err.into());
+ }
let msg = base.msg_as_fetch_req().unwrap();
let id = msg.id();
let url = msg.url().unwrap();
- let deno = from_c(d);
let url = url.parse::<hyper::Uri>().unwrap();
let client = Client::new();