mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-03-22 04:34:44 +00:00
Merge pull request #1637 from lightpanda-io/page_url_log
Some checks failed
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
Some checks failed
e2e-test / zig build release (push) Has been cancelled
e2e-test / demo-scripts (push) Has been cancelled
e2e-test / cdp-and-hyperfine-bench (push) Has been cancelled
e2e-test / perf-fmt (push) Has been cancelled
e2e-test / browser fetch (push) Has been cancelled
zig-test / zig test using v8 in debug mode (push) Has been cancelled
zig-test / zig test (push) Has been cancelled
zig-test / perf-fmt (push) Has been cancelled
Include url in page logs
This commit is contained in:
@@ -350,7 +350,7 @@ pub fn deinit(self: *Page) void {
|
|||||||
var it = self._arena_pool_leak_track.valueIterator();
|
var it = self._arena_pool_leak_track.valueIterator();
|
||||||
while (it.next()) |value_ptr| {
|
while (it.next()) |value_ptr| {
|
||||||
if (value_ptr.count > 0) {
|
if (value_ptr.count > 0) {
|
||||||
log.err(.bug, "ArenaPool Leak", .{ .owner = value_ptr.owner, .type = self._type });
|
log.err(.bug, "ArenaPool Leak", .{ .owner = value_ptr.owner, .type = self._type, .url = self.url });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -422,7 +422,7 @@ pub fn releaseArena(self: *Page, allocator: Allocator) void {
|
|||||||
if (comptime IS_DEBUG) {
|
if (comptime IS_DEBUG) {
|
||||||
const found = self._arena_pool_leak_track.getPtr(@intFromPtr(allocator.ptr)).?;
|
const found = self._arena_pool_leak_track.getPtr(@intFromPtr(allocator.ptr)).?;
|
||||||
if (found.count != 1) {
|
if (found.count != 1) {
|
||||||
log.err(.bug, "ArenaPool Double Free", .{ .owner = found.owner, .count = found.count, .type = self._type });
|
log.err(.bug, "ArenaPool Double Free", .{ .owner = found.owner, .count = found.count, .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
found.count = 0;
|
found.count = 0;
|
||||||
@@ -639,7 +639,7 @@ pub fn documentIsLoaded(self: *Page) void {
|
|||||||
self._load_state = .load;
|
self._load_state = .load;
|
||||||
self.document._ready_state = .interactive;
|
self.document._ready_state = .interactive;
|
||||||
self._documentIsLoaded() catch |err| {
|
self._documentIsLoaded() catch |err| {
|
||||||
log.err(.page, "document is loaded", .{ .err = err, .type = self._type });
|
log.err(.page, "document is loaded", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -662,7 +662,7 @@ pub fn iframeCompletedLoading(self: *Page, iframe: *Element.Html.IFrame) void {
|
|||||||
defer ls.deinit();
|
defer ls.deinit();
|
||||||
|
|
||||||
const event = Event.initTrusted(comptime .wrap("load"), .{}, self) catch |err| {
|
const event = Event.initTrusted(comptime .wrap("load"), .{}, self) catch |err| {
|
||||||
log.err(.page, "iframe event init", .{ .err = err });
|
log.err(.page, "iframe event init", .{ .err = err, .url = iframe._src });
|
||||||
break :blk;
|
break :blk;
|
||||||
};
|
};
|
||||||
self._event_manager.dispatch(iframe.asNode().asEventTarget(), event) catch |err| {
|
self._event_manager.dispatch(iframe.asNode().asEventTarget(), event) catch |err| {
|
||||||
@@ -701,7 +701,7 @@ pub fn documentIsComplete(self: *Page) void {
|
|||||||
|
|
||||||
self._load_state = .complete;
|
self._load_state = .complete;
|
||||||
self._documentIsComplete() catch |err| {
|
self._documentIsComplete() catch |err| {
|
||||||
log.err(.page, "document is complete", .{ .err = err, .type = self._type });
|
log.err(.page, "document is complete", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
|
|
||||||
if (IS_DEBUG) {
|
if (IS_DEBUG) {
|
||||||
@@ -807,7 +807,7 @@ fn pageDataCallback(transfer: *Http.Transfer, data: []const u8) !void {
|
|||||||
} orelse .unknown;
|
} orelse .unknown;
|
||||||
|
|
||||||
if (comptime IS_DEBUG) {
|
if (comptime IS_DEBUG) {
|
||||||
log.debug(.page, "navigate first chunk", .{ .content_type = mime.content_type, .len = data.len, .type = self._type });
|
log.debug(.page, "navigate first chunk", .{ .content_type = mime.content_type, .len = data.len, .type = self._type, .url = self.url });
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (mime.content_type) {
|
switch (mime.content_type) {
|
||||||
@@ -854,7 +854,7 @@ fn pageDoneCallback(ctx: *anyopaque) !void {
|
|||||||
var self: *Page = @ptrCast(@alignCast(ctx));
|
var self: *Page = @ptrCast(@alignCast(ctx));
|
||||||
|
|
||||||
if (comptime IS_DEBUG) {
|
if (comptime IS_DEBUG) {
|
||||||
log.debug(.page, "navigate done", .{ .type = self._type });
|
log.debug(.page, "navigate done", .{ .type = self._type, .url = self.url });
|
||||||
}
|
}
|
||||||
|
|
||||||
//We need to handle different navigation types differently.
|
//We need to handle different navigation types differently.
|
||||||
@@ -932,13 +932,13 @@ fn pageDoneCallback(ctx: *anyopaque) !void {
|
|||||||
fn pageErrorCallback(ctx: *anyopaque, err: anyerror) void {
|
fn pageErrorCallback(ctx: *anyopaque, err: anyerror) void {
|
||||||
var self: *Page = @ptrCast(@alignCast(ctx));
|
var self: *Page = @ptrCast(@alignCast(ctx));
|
||||||
|
|
||||||
log.err(.page, "navigate failed", .{ .err = err, .type = self._type });
|
log.err(.page, "navigate failed", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
self._parse_state = .{ .err = err };
|
self._parse_state = .{ .err = err };
|
||||||
|
|
||||||
// In case of error, we want to complete the page with a custom HTML
|
// In case of error, we want to complete the page with a custom HTML
|
||||||
// containing the error.
|
// containing the error.
|
||||||
pageDoneCallback(ctx) catch |e| {
|
pageDoneCallback(ctx) catch |e| {
|
||||||
log.err(.browser, "pageErrorCallback", .{ .err = e, .type = self._type });
|
log.err(.browser, "pageErrorCallback", .{ .err = e, .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -953,7 +953,7 @@ pub fn wait(self: *Page, wait_ms: u32) Session.WaitResult {
|
|||||||
// to run this through more real-world sites and see if we need
|
// to run this through more real-world sites and see if we need
|
||||||
// to expand the switch (err) to have more customized logs for
|
// to expand the switch (err) to have more customized logs for
|
||||||
// specific messages.
|
// specific messages.
|
||||||
log.err(.browser, "page wait", .{ .err = err, .type = self._type });
|
log.err(.browser, "page wait", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return .done;
|
return .done;
|
||||||
@@ -1187,6 +1187,7 @@ pub fn scriptAddedCallback(self: *Page, comptime from_parser: bool, script: *Ele
|
|||||||
self._script_manager.addFromElement(from_parser, script, "parsing") catch |err| {
|
self._script_manager.addFromElement(from_parser, script, "parsing") catch |err| {
|
||||||
log.err(.page, "page.scriptAddedCallback", .{
|
log.err(.page, "page.scriptAddedCallback", .{
|
||||||
.err = err,
|
.err = err,
|
||||||
|
.url = self.url,
|
||||||
.src = script.asElement().getAttributeSafe(comptime .wrap("src")),
|
.src = script.asElement().getAttributeSafe(comptime .wrap("src")),
|
||||||
.type = self._type,
|
.type = self._type,
|
||||||
});
|
});
|
||||||
@@ -1273,7 +1274,7 @@ pub fn domChanged(self: *Page) void {
|
|||||||
|
|
||||||
self._intersection_check_scheduled = true;
|
self._intersection_check_scheduled = true;
|
||||||
self.js.queueIntersectionChecks() catch |err| {
|
self.js.queueIntersectionChecks() catch |err| {
|
||||||
log.err(.page, "page.schedIntersectChecks", .{ .err = err, .type = self._type });
|
log.err(.page, "page.schedIntersectChecks", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1371,7 +1372,7 @@ pub fn notifyPerformanceObservers(self: *Page, entry: *Performance.Entry) !void
|
|||||||
for (self._performance_observers.items) |observer| {
|
for (self._performance_observers.items) |observer| {
|
||||||
if (observer.interested(entry)) {
|
if (observer.interested(entry)) {
|
||||||
observer._entries.append(self.arena, entry) catch |err| {
|
observer._entries.append(self.arena, entry) catch |err| {
|
||||||
log.err(.page, "notifyPerformanceObservers", .{ .err = err, .type = self._type });
|
log.err(.page, "notifyPerformanceObservers", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1466,7 +1467,7 @@ pub fn performScheduledIntersectionChecks(self: *Page) void {
|
|||||||
}
|
}
|
||||||
self._intersection_check_scheduled = false;
|
self._intersection_check_scheduled = false;
|
||||||
self.checkIntersections() catch |err| {
|
self.checkIntersections() catch |err| {
|
||||||
log.err(.page, "page.schedIntersectChecks", .{ .err = err, .type = self._type });
|
log.err(.page, "page.schedIntersectChecks", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1482,7 +1483,7 @@ pub fn deliverIntersections(self: *Page) void {
|
|||||||
i -= 1;
|
i -= 1;
|
||||||
const observer = self._intersection_observers.items[i];
|
const observer = self._intersection_observers.items[i];
|
||||||
observer.deliverEntries(self) catch |err| {
|
observer.deliverEntries(self) catch |err| {
|
||||||
log.err(.page, "page.deliverIntersections", .{ .err = err, .type = self._type });
|
log.err(.page, "page.deliverIntersections", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1500,7 +1501,7 @@ pub fn deliverMutations(self: *Page) void {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (self._mutation_delivery_depth > 100) {
|
if (self._mutation_delivery_depth > 100) {
|
||||||
log.err(.page, "page.MutationLimit", .{ .type = self._type });
|
log.err(.page, "page.MutationLimit", .{ .type = self._type, .url = self.url });
|
||||||
self._mutation_delivery_depth = 0;
|
self._mutation_delivery_depth = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1509,7 +1510,7 @@ pub fn deliverMutations(self: *Page) void {
|
|||||||
while (it) |node| : (it = node.next) {
|
while (it) |node| : (it = node.next) {
|
||||||
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
||||||
observer.deliverRecords(self) catch |err| {
|
observer.deliverRecords(self) catch |err| {
|
||||||
log.err(.page, "page.deliverMutations", .{ .err = err, .type = self._type });
|
log.err(.page, "page.deliverMutations", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1527,7 +1528,7 @@ pub fn deliverSlotchangeEvents(self: *Page) void {
|
|||||||
|
|
||||||
var i: usize = 0;
|
var i: usize = 0;
|
||||||
var slots = self.call_arena.alloc(*Element.Html.Slot, pending) catch |err| {
|
var slots = self.call_arena.alloc(*Element.Html.Slot, pending) catch |err| {
|
||||||
log.err(.page, "deliverSlotchange.append", .{ .err = err, .type = self._type });
|
log.err(.page, "deliverSlotchange.append", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1540,12 +1541,12 @@ pub fn deliverSlotchangeEvents(self: *Page) void {
|
|||||||
|
|
||||||
for (slots) |slot| {
|
for (slots) |slot| {
|
||||||
const event = Event.initTrusted(comptime .wrap("slotchange"), .{ .bubbles = true }, self) catch |err| {
|
const event = Event.initTrusted(comptime .wrap("slotchange"), .{ .bubbles = true }, self) catch |err| {
|
||||||
log.err(.page, "deliverSlotchange.init", .{ .err = err, .type = self._type });
|
log.err(.page, "deliverSlotchange.init", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
const target = slot.asNode().asEventTarget();
|
const target = slot.asNode().asEventTarget();
|
||||||
_ = target.dispatchEvent(event, self) catch |err| {
|
_ = target.dispatchEvent(event, self) catch |err| {
|
||||||
log.err(.page, "deliverSlotchange.dispatch", .{ .err = err, .type = self._type });
|
log.err(.page, "deliverSlotchange.dispatch", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1600,7 +1601,7 @@ pub fn appendNew(self: *Page, parent: *Node, child: Node.NodeOrText) !void {
|
|||||||
// called from the parser when the node and all its children have been added
|
// called from the parser when the node and all its children have been added
|
||||||
pub fn nodeComplete(self: *Page, node: *Node) !void {
|
pub fn nodeComplete(self: *Page, node: *Node) !void {
|
||||||
Node.Build.call(node, "complete", .{ node, self }) catch |err| {
|
Node.Build.call(node, "complete", .{ node, self }) catch |err| {
|
||||||
log.err(.bug, "build.complete", .{ .tag = node.getNodeName(&self.buf), .err = err, .type = self._type });
|
log.err(.bug, "build.complete", .{ .tag = node.getNodeName(&self.buf), .err = err, .type = self._type, .url = self.url });
|
||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
return self.nodeIsReady(true, node);
|
return self.nodeIsReady(true, node);
|
||||||
@@ -2299,7 +2300,7 @@ pub fn createElementNS(self: *Page, namespace: Element.Namespace, name: []const
|
|||||||
|
|
||||||
var caught: JS.TryCatch.Caught = undefined;
|
var caught: JS.TryCatch.Caught = undefined;
|
||||||
_ = ls.toLocal(def.constructor).newInstance(&caught) catch |err| {
|
_ = ls.toLocal(def.constructor).newInstance(&caught) catch |err| {
|
||||||
log.warn(.js, "custom element constructor", .{ .name = name, .err = err, .caught = caught, .type = self._type });
|
log.warn(.js, "custom element constructor", .{ .name = name, .err = err, .caught = caught, .type = self._type, .url = self.url });
|
||||||
return node;
|
return node;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2357,7 +2358,7 @@ fn createHtmlElementT(self: *Page, comptime E: type, namespace: Element.Namespac
|
|||||||
const node = element.asNode();
|
const node = element.asNode();
|
||||||
if (@hasDecl(E, "Build") and @hasDecl(E.Build, "created")) {
|
if (@hasDecl(E, "Build") and @hasDecl(E.Build, "created")) {
|
||||||
@call(.auto, @field(E.Build, "created"), .{ node, self }) catch |err| {
|
@call(.auto, @field(E.Build, "created"), .{ node, self }) catch |err| {
|
||||||
log.err(.page, "build.created", .{ .tag = node.getNodeName(&self.buf), .err = err, .type = self._type });
|
log.err(.page, "build.created", .{ .tag = node.getNodeName(&self.buf), .err = err, .type = self._type, .url = self.url });
|
||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -2827,7 +2828,7 @@ pub fn _insertNodeRelative(self: *Page, comptime from_parser: bool, parent: *Nod
|
|||||||
|
|
||||||
pub fn attributeChange(self: *Page, element: *Element, name: String, value: String, old_value: ?String) void {
|
pub fn attributeChange(self: *Page, element: *Element, name: String, value: String, old_value: ?String) void {
|
||||||
_ = Element.Build.call(element, "attributeChange", .{ element, name, value, self }) catch |err| {
|
_ = Element.Build.call(element, "attributeChange", .{ element, name, value, self }) catch |err| {
|
||||||
log.err(.bug, "build.attributeChange", .{ .tag = element.getTag(), .name = name, .value = value, .err = err, .type = self._type });
|
log.err(.bug, "build.attributeChange", .{ .tag = element.getTag(), .name = name, .value = value, .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
|
|
||||||
Element.Html.Custom.invokeAttributeChangedCallbackOnElement(element, name, old_value, value, self);
|
Element.Html.Custom.invokeAttributeChangedCallbackOnElement(element, name, old_value, value, self);
|
||||||
@@ -2836,7 +2837,7 @@ pub fn attributeChange(self: *Page, element: *Element, name: String, value: Stri
|
|||||||
while (it) |node| : (it = node.next) {
|
while (it) |node| : (it = node.next) {
|
||||||
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
||||||
observer.notifyAttributeChange(element, name, old_value, self) catch |err| {
|
observer.notifyAttributeChange(element, name, old_value, self) catch |err| {
|
||||||
log.err(.page, "attributeChange.notifyObserver", .{ .err = err, .type = self._type });
|
log.err(.page, "attributeChange.notifyObserver", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2853,7 +2854,7 @@ pub fn attributeChange(self: *Page, element: *Element, name: String, value: Stri
|
|||||||
|
|
||||||
pub fn attributeRemove(self: *Page, element: *Element, name: String, old_value: String) void {
|
pub fn attributeRemove(self: *Page, element: *Element, name: String, old_value: String) void {
|
||||||
_ = Element.Build.call(element, "attributeRemove", .{ element, name, self }) catch |err| {
|
_ = Element.Build.call(element, "attributeRemove", .{ element, name, self }) catch |err| {
|
||||||
log.err(.bug, "build.attributeRemove", .{ .tag = element.getTag(), .name = name, .err = err, .type = self._type });
|
log.err(.bug, "build.attributeRemove", .{ .tag = element.getTag(), .name = name, .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
|
|
||||||
Element.Html.Custom.invokeAttributeChangedCallbackOnElement(element, name, old_value, null, self);
|
Element.Html.Custom.invokeAttributeChangedCallbackOnElement(element, name, old_value, null, self);
|
||||||
@@ -2862,7 +2863,7 @@ pub fn attributeRemove(self: *Page, element: *Element, name: String, old_value:
|
|||||||
while (it) |node| : (it = node.next) {
|
while (it) |node| : (it = node.next) {
|
||||||
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
||||||
observer.notifyAttributeChange(element, name, old_value, self) catch |err| {
|
observer.notifyAttributeChange(element, name, old_value, self) catch |err| {
|
||||||
log.err(.page, "attributeRemove.notifyObserver", .{ .err = err, .type = self._type });
|
log.err(.page, "attributeRemove.notifyObserver", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2879,11 +2880,11 @@ pub fn attributeRemove(self: *Page, element: *Element, name: String, old_value:
|
|||||||
|
|
||||||
fn signalSlotChange(self: *Page, slot: *Element.Html.Slot) void {
|
fn signalSlotChange(self: *Page, slot: *Element.Html.Slot) void {
|
||||||
self._slots_pending_slotchange.put(self.arena, slot, {}) catch |err| {
|
self._slots_pending_slotchange.put(self.arena, slot, {}) catch |err| {
|
||||||
log.err(.page, "signalSlotChange.put", .{ .err = err, .type = self._type });
|
log.err(.page, "signalSlotChange.put", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
self.scheduleSlotchangeDelivery() catch |err| {
|
self.scheduleSlotchangeDelivery() catch |err| {
|
||||||
log.err(.page, "signalSlotChange.schedule", .{ .err = err, .type = self._type });
|
log.err(.page, "signalSlotChange.schedule", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2923,7 +2924,7 @@ fn updateElementAssignedSlot(self: *Page, element: *Element) void {
|
|||||||
// Recursively search through the shadow root for a matching slot
|
// Recursively search through the shadow root for a matching slot
|
||||||
if (findMatchingSlot(shadow_root.asNode(), slot_name)) |slot| {
|
if (findMatchingSlot(shadow_root.asNode(), slot_name)) |slot| {
|
||||||
self._element_assigned_slots.put(self.arena, element, slot) catch |err| {
|
self._element_assigned_slots.put(self.arena, element, slot) catch |err| {
|
||||||
log.err(.page, "updateElementAssignedSlot.put", .{ .err = err, .type = self._type });
|
log.err(.page, "updateElementAssignedSlot.put", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2970,7 +2971,7 @@ pub fn characterDataChange(
|
|||||||
while (it) |node| : (it = node.next) {
|
while (it) |node| : (it = node.next) {
|
||||||
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
||||||
observer.notifyCharacterDataChange(target, old_value, self) catch |err| {
|
observer.notifyCharacterDataChange(target, old_value, self) catch |err| {
|
||||||
log.err(.page, "cdataChange.notifyObserver", .{ .err = err, .type = self._type });
|
log.err(.page, "cdataChange.notifyObserver", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2997,7 +2998,7 @@ pub fn childListChange(
|
|||||||
while (it) |node| : (it = node.next) {
|
while (it) |node| : (it = node.next) {
|
||||||
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
const observer: *MutationObserver = @fieldParentPtr("node", node);
|
||||||
observer.notifyChildListChange(target, added_nodes, removed_nodes, previous_sibling, next_sibling, self) catch |err| {
|
observer.notifyChildListChange(target, added_nodes, removed_nodes, previous_sibling, next_sibling, self) catch |err| {
|
||||||
log.err(.page, "childListChange.notifyObserver", .{ .err = err, .type = self._type });
|
log.err(.page, "childListChange.notifyObserver", .{ .err = err, .type = self._type, .url = self.url });
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3048,7 +3049,7 @@ fn nodeIsReady(self: *Page, comptime from_parser: bool, node: *Node) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.scriptAddedCallback(from_parser, script) catch |err| {
|
self.scriptAddedCallback(from_parser, script) catch |err| {
|
||||||
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "script", .type = self._type });
|
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "script", .type = self._type, .url = self.url });
|
||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
} else if (node.is(Element.Html.IFrame)) |iframe| {
|
} else if (node.is(Element.Html.IFrame)) |iframe| {
|
||||||
@@ -3058,7 +3059,7 @@ fn nodeIsReady(self: *Page, comptime from_parser: bool, node: *Node) !void {
|
|||||||
}
|
}
|
||||||
|
|
||||||
self.iframeAddedCallback(iframe) catch |err| {
|
self.iframeAddedCallback(iframe) catch |err| {
|
||||||
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "iframe", .type = self._type });
|
log.err(.page, "page.nodeIsReady", .{ .err = err, .element = "iframe", .type = self._type, .url = self.url });
|
||||||
return err;
|
return err;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -3241,12 +3242,12 @@ pub fn handleClick(self: *Page, target: *Node) !void {
|
|||||||
// Check target attribute - don't navigate if opening in new window/tab
|
// Check target attribute - don't navigate if opening in new window/tab
|
||||||
const target_val = anchor.getTarget();
|
const target_val = anchor.getTarget();
|
||||||
if (target_val.len > 0 and !std.mem.eql(u8, target_val, "_self")) {
|
if (target_val.len > 0 and !std.mem.eql(u8, target_val, "_self")) {
|
||||||
log.warn(.not_implemented, "a.target", .{ .type = self._type });
|
log.warn(.not_implemented, "a.target", .{ .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (try element.hasAttribute(comptime .wrap("download"), self)) {
|
if (try element.hasAttribute(comptime .wrap("download"), self)) {
|
||||||
log.warn(.browser, "a.download", .{ .type = self._type });
|
log.warn(.browser, "a.download", .{ .type = self._type, .url = self.url });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user