diff --git a/src/browser/Page.zig b/src/browser/Page.zig index 257f6750..5940d2c5 100644 --- a/src/browser/Page.zig +++ b/src/browser/Page.zig @@ -708,7 +708,10 @@ fn pageDataCallback(transfer: *Http.Transfer, data: []const u8) !void { try arr.appendSlice(self.arena, "
");
self._parse_state = .{ .text = arr };
},
- else => self._parse_state = .{ .raw = .{} },
+ .image_jpeg, .image_gif, .image_png, .image_webp => {
+ self._parse_state = .{ .image = .empty };
+ },
+ else => self._parse_state = .{ .raw = .empty },
}
}
@@ -730,7 +733,7 @@ fn pageDataCallback(transfer: *Http.Transfer, data: []const u8) !void {
v = v[index + 1 ..];
}
},
- .raw => |*buf| try buf.appendSlice(self.arena, data),
+ .raw, .image => |*buf| try buf.appendSlice(self.arena, data),
.pre => unreachable,
.complete => unreachable,
.err => unreachable,
@@ -753,12 +756,13 @@ fn pageDoneCallback(ctx: *anyopaque) !void {
log.debug(.page, "page.load.complete", .{ .url = self.url });
};
+ const parse_arena = try self.getArena(.{ .debug = "Page.parse" });
+ defer self.releaseArena(parse_arena);
+
+ var parser = Parser.init(parse_arena, self.document.asNode(), self);
+
switch (self._parse_state) {
.html => |buf| {
- const parse_arena = try self.getArena(.{ .debug = "Page.parse" });
- defer self.releaseArena(parse_arena);
-
- var parser = Parser.init(parse_arena, self.document.asNode(), self);
parser.parse(buf.items);
self._script_manager.staticScriptsDone();
if (self._script_manager.isDone()) {
@@ -770,16 +774,26 @@ fn pageDoneCallback(ctx: *anyopaque) !void {
},
.text => |*buf| {
try buf.appendSlice(self.arena, "");
-
- const parse_arena = try self.getArena(.{ .debug = "Page.parse" });
- defer self.releaseArena(parse_arena);
-
- var parser = Parser.init(parse_arena, self.document.asNode(), self);
parser.parse(buf.items);
self.documentIsComplete();
},
+ .image => |buf| {
+ self._parse_state = .{ .raw_done = buf.items };
+
+ // Use empty an HTML containing the image.
+ const html = try std.mem.concat(parse_arena, u8, &.{
+ "Reason: ", @errorName(err), "
", - }) catch "