Applications/Internet/Cyberia: Send referer in link navigation and form submit

This commit is contained in:
Alec Murphy
2025-10-10 14:12:30 -04:00
parent 6c8c64b2ec
commit 25c160e15c

View File

@@ -184,6 +184,7 @@ U0 @cyberia_link_left_clicked(Widget* widget)
return;
StrCpy(&addressbar1->text, resolved_href);
Free(resolved_href);
browser->renderer->navigation_type = HTML_NAVIGATION_HREF;
Spawn(&@cyberia_navigate);
}
@@ -318,6 +319,7 @@ U0 @cyberia_form_submit(@html_dom_node* form_node)
}
Free(action);
browser->renderer->navigation_type = HTML_NAVIGATION_FORM;
Spawn(&@cyberia_navigate);
}
@@ -613,8 +615,17 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
}
U8* form_data_str = NULL;
U8* referer = NULL;
if (browser->renderer) {
form_data_str = browser->renderer->form_data_str;
switch (browser->renderer->navigation_type) {
case HTML_NAVIGATION_HREF:
case HTML_NAVIGATION_FORM:
referer = browser->renderer->referer;
break;
default:
break;
}
}
if (!refresh) {
@@ -633,6 +644,7 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
U8 err_msg_buffer[128];
U8 status_text_buffer[1024];
U8* referer_text_buffer = CAlloc(1024, browser_task);
if (!renderer->current_url) {
StrCpy(err_msg_buffer, "ERROR: Could not parse URL");
@@ -656,12 +668,16 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
if (!StrICmp(url->scheme, "https://") && url->port != 443)
is_alternate_port = TRUE;
StrCpy(status_text_buffer, "Fetching ");
if (is_alternate_port)
if (is_alternate_port) {
String.Append(status_text_buffer, "%s%s:%d%s%s", url->scheme, url->host, url->port, url->path, url->query);
else
StrPrint(referer_text_buffer, "%s%s:%d%s%s", url->scheme, url->host, url->port, url->path, url->query);
} else {
String.Append(status_text_buffer, "%s%s%s%s", url->scheme, url->host, url->path, url->query);
StrPrint(referer_text_buffer, "%s%s%s%s", url->scheme, url->host, url->path, url->query);
}
String.Append(status_text_buffer, "...");
status1->SetText(status_text_buffer);
renderer->referer = referer_text_buffer;
U8* buffer = browser->fetch_buffer;
MemSet(buffer, 0, HTTP_FETCH_BUFFER_SIZE);
@@ -672,6 +688,10 @@ U0 @cyberia_navigate(Bool refresh = FALSE)
JsonKey* cookie_keys = NULL;
U8 cookie_buf[2048];
if (referer) {
headers->set("Referer", referer, JSON_STRING);
}
if (!StrCmp(&addressbar1->text, "about:newtab")) {
resp = CAlloc(sizeof(@http_response));
resp->body.data = NEW_TAB_HTML;
@@ -821,6 +841,7 @@ U0 @cyberia_new_tab(Bool from_link_context_menu = FALSE)
tabpanel1->index = i;
++tabpanel1->count;
// FIXME: We need Referer if we right-click a link
StrCpy(&addressbar1->text, new_tab_destination_url);
Spawn(&@cyberia_navigate);
win->focused_widget = addressbar1;