srctree

Robin Linden parent 62e654e6 1e0bdb63
browser/engine: Support scheme-relative urls

inlinesplit
browser/engine.cpp added: 16, removed: 2, total 14
@@ -39,6 +39,10 @@ protocol::Error Engine::navigate(uri::Uri uri) {
spdlog::info("Handling origin-relative URL {}", uri.uri);
uri = uri::Uri::parse(fmt::format("{}://{}{}", uri_.scheme, uri_.authority.host, uri.uri)).value();
spdlog::info("Transformed origin-relative URL to {}", uri.uri);
} else if (uri.scheme.empty() && !uri.authority.host.empty() && uri.uri.starts_with("//")) {
spdlog::info("Handling scheme-relative URL {}", uri.uri);
uri = uri::Uri::parse(fmt::format("{}:{}", uri_.scheme, uri.uri)).value();
spdlog::info("Transformed scheme-relative URL to {}", uri.uri);
}
 
uri_ = uri;
 
browser/engine_test.cpp added: 16, removed: 2, total 14
@@ -86,5 +86,15 @@ int main() {
expect_eq(e.uri(), *uri::Uri::parse("hax://example.com/test"));
});
 
etest::test("scheme-relative uri", [] {
browser::Engine e{std::make_unique<FakeProtocolHandler>(protocol::Response{.err = protocol::Error::Ok})};
 
e.navigate(*uri::Uri::parse("hax://example.com"));
expect_eq(e.uri(), *uri::Uri::parse("hax://example.com"));
 
e.navigate(*uri::Uri::parse("//example2.com/test"));
expect_eq(e.uri(), *uri::Uri::parse("hax://example2.com/test"));
});
 
return etest::run_all_tests();
}