diff --git a/Applications/Internet/Cyberia.app/Cyberia.HC b/Applications/Internet/Cyberia.app/Cyberia.HC index be073fa..888196b 100644 --- a/Applications/Internet/Cyberia.app/Cyberia.HC +++ b/Applications/Internet/Cyberia.app/Cyberia.HC @@ -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;