mirror of
https://github.com/lightpanda-io/browser.git
synced 2025-12-16 08:18:59 +00:00
xhr: add reponseXML
This commit is contained in:
@@ -467,6 +467,34 @@ pub const XMLHttpRequest = struct {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn get_responseXML(self: *XMLHttpRequest, alloc: std.mem.Allocator) !?Response {
|
||||||
|
if (self.response_type != .Empty and self.response_type != .Document) {
|
||||||
|
return DOMError.InvalidState;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (self.state != DONE) return null;
|
||||||
|
|
||||||
|
// fastpath if response is previously parsed.
|
||||||
|
if (self.response_obj) |obj| {
|
||||||
|
return switch (obj) {
|
||||||
|
.Failure => null,
|
||||||
|
.Document => |v| .{ .Document = v },
|
||||||
|
.JSON => null,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
self.setResponseObjDocument(alloc);
|
||||||
|
|
||||||
|
if (self.response_obj) |obj| {
|
||||||
|
return switch (obj) {
|
||||||
|
.Failure => null,
|
||||||
|
.Document => |v| .{ .Document = v },
|
||||||
|
.JSON => null,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
// https://xhr.spec.whatwg.org/#the-response-attribute
|
// https://xhr.spec.whatwg.org/#the-response-attribute
|
||||||
pub fn get_response(self: *XMLHttpRequest, alloc: std.mem.Allocator) !?Response {
|
pub fn get_response(self: *XMLHttpRequest, alloc: std.mem.Allocator) !?Response {
|
||||||
if (self.response_type == .Empty or self.response_type == .Text) {
|
if (self.response_type == .Empty or self.response_type == .Text) {
|
||||||
@@ -474,8 +502,6 @@ pub const XMLHttpRequest = struct {
|
|||||||
return .{ .Text = try self.get_responseText() };
|
return .{ .Text = try self.get_responseText() };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (self.state != DONE) return null;
|
|
||||||
|
|
||||||
// fastpath if response is previously parsed.
|
// fastpath if response is previously parsed.
|
||||||
if (self.response_obj) |obj| {
|
if (self.response_obj) |obj| {
|
||||||
return switch (obj) {
|
return switch (obj) {
|
||||||
@@ -539,8 +565,6 @@ pub const XMLHttpRequest = struct {
|
|||||||
// return.
|
// return.
|
||||||
if (!isHTML) return;
|
if (!isHTML) return;
|
||||||
|
|
||||||
if (self.response_type == .Empty) return;
|
|
||||||
|
|
||||||
const ccharset = alloc.dupeZ(u8, self.response_mime.charset orelse "utf-8") catch {
|
const ccharset = alloc.dupeZ(u8, self.response_mime.charset orelse "utf-8") catch {
|
||||||
self.response_obj = .{ .Failure = true };
|
self.response_obj = .{ .Failure = true };
|
||||||
return;
|
return;
|
||||||
@@ -661,6 +685,7 @@ pub fn testExecFn(
|
|||||||
.{ .src = "req.getAllResponseHeaders().length > 64", .ex = "true" },
|
.{ .src = "req.getAllResponseHeaders().length > 64", .ex = "true" },
|
||||||
.{ .src = "req.responseText.length > 64", .ex = "true" },
|
.{ .src = "req.responseText.length > 64", .ex = "true" },
|
||||||
.{ .src = "req.response", .ex = "" },
|
.{ .src = "req.response", .ex = "" },
|
||||||
|
.{ .src = "req.responseXML instanceof HTMLDocument", .ex = "true" },
|
||||||
};
|
};
|
||||||
try checkCases(js_env, &send);
|
try checkCases(js_env, &send);
|
||||||
|
|
||||||
@@ -676,6 +701,7 @@ pub fn testExecFn(
|
|||||||
.{ .src = "req2.status", .ex = "200" },
|
.{ .src = "req2.status", .ex = "200" },
|
||||||
.{ .src = "req2.statusText", .ex = "OK" },
|
.{ .src = "req2.statusText", .ex = "OK" },
|
||||||
.{ .src = "req2.response instanceof HTMLDocument", .ex = "true" },
|
.{ .src = "req2.response instanceof HTMLDocument", .ex = "true" },
|
||||||
|
.{ .src = "req2.responseXML instanceof HTMLDocument", .ex = "true" },
|
||||||
};
|
};
|
||||||
try checkCases(js_env, &document);
|
try checkCases(js_env, &document);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user