mirror of
				https://github.com/lightpanda-io/browser.git
				synced 2025-10-29 15:13:28 +00:00 
			
		
		
		
	http_request_fail
This commit is contained in:
		| @@ -151,7 +151,7 @@ pub fn abort(self: *Client) void { | ||||
|             log.err(.http, "get private info", .{ .err = err, .source = "abort" }); | ||||
|             continue; | ||||
|         }; | ||||
|         transfer.req.error_callback(transfer.ctx, error.Abort); | ||||
|         self.requestFailed(&transfer.req, error.Abort); | ||||
|         self.endTransfer(transfer); | ||||
|     } | ||||
|     std.debug.assert(self.active == 0); | ||||
| @@ -221,6 +221,20 @@ pub fn blockingRequest(self: *Client, req: Request) !void { | ||||
|     return self.makeRequest(&self.blocking, req); | ||||
| } | ||||
|  | ||||
| fn requestFailed(self: *Client, req: *Request, err: anyerror) void { | ||||
|     if (req._notified_fail) return; | ||||
|     req._notified_fail = true; | ||||
|  | ||||
|     if (self.notification) |notification| { | ||||
|         notification.dispatch(.http_request_fail, &.{ | ||||
|             .request = req, | ||||
|             .err = err, | ||||
|         }); | ||||
|     } | ||||
|  | ||||
|     req.error_callback(req.ctx, err); | ||||
| } | ||||
|  | ||||
| // Restrictive since it'll only work if there are no inflight requests. In some | ||||
| // cases, the libcurl documentation is clear that changing settings while a | ||||
| // connection is inflight is undefined. It doesn't say anything about CURLOPT_PROXY, | ||||
| @@ -326,7 +340,6 @@ fn perform(self: *Client, timeout_ms: c_int) !void { | ||||
|         const transfer = try Transfer.fromEasy(easy); | ||||
|         const ctx = transfer.ctx; | ||||
|         const done_callback = transfer.req.done_callback; | ||||
|         const error_callback = transfer.req.error_callback; | ||||
|  | ||||
|         // release it ASAP so that it's available; some done_callbacks | ||||
|         // will load more resources. | ||||
| @@ -336,10 +349,10 @@ fn perform(self: *Client, timeout_ms: c_int) !void { | ||||
|             done_callback(ctx) catch |err| { | ||||
|                 // transfer isn't valid at this point, don't use it. | ||||
|                 log.err(.http, "done_callback", .{ .err = err }); | ||||
|                 error_callback(ctx, err); | ||||
|                 self.requestFailed(&transfer.req, err); | ||||
|             }; | ||||
|         } else |err| { | ||||
|             error_callback(ctx, err); | ||||
|             self.requestFailed(&transfer.req, err); | ||||
|         } | ||||
|     } | ||||
| } | ||||
| @@ -491,6 +504,8 @@ pub const Request = struct { | ||||
|     body: ?[]const u8 = null, | ||||
|     cookie_jar: *storage.CookieJar, | ||||
|  | ||||
|     _notified_fail: bool = false, | ||||
|  | ||||
|     // arbitrary data that can be associated with this request | ||||
|     ctx: *anyopaque = undefined, | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 sjorsdonkers
					sjorsdonkers