mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 04:39:06 +00:00
Everywhere: Remove some use of the URL constructors
These make it too easy to construct an invalid URL, which makes it difficult to remove the valid state of URL - which this API relies on.
This commit is contained in:
parent
2823ac92d0
commit
d62cf0a807
Notes:
github-actions[bot]
2025-02-19 13:02:46 +00:00
Author: https://github.com/shannonbooth
Commit: d62cf0a807
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/3609
Reviewed-by: https://github.com/trflynn89
11 changed files with 341 additions and 329 deletions
|
@ -6,102 +6,103 @@
|
|||
|
||||
#include <LibTest/TestCase.h>
|
||||
|
||||
#include <LibURL/Parser.h>
|
||||
#include <LibURL/URL.h>
|
||||
#include <LibWeb/Fetch/Infrastructure/URL.h>
|
||||
|
||||
TEST_CASE(data_url)
|
||||
{
|
||||
URL::URL url("data:text/html,test"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html,test");
|
||||
auto url = URL::Parser::basic_parse("data:text/html,test"sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data:text/html,test");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/html");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "test"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_default_mime_type)
|
||||
{
|
||||
URL::URL url("data:,test"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data:,test");
|
||||
auto url = URL::Parser::basic_parse("data:,test"sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data:,test");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/plain;charset=US-ASCII");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "test"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_encoded)
|
||||
{
|
||||
URL::URL url("data:text/html,Hello%20friends%2C%0X%X0"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html,Hello%20friends%2C%0X%X0");
|
||||
auto url = URL::Parser::basic_parse("data:text/html,Hello%20friends%2C%0X%X0"sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data:text/html,Hello%20friends%2C%0X%X0");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/html");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "Hello friends,%0X%X0"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded)
|
||||
{
|
||||
URL::URL url("data:text/html;base64,dGVzdA=="sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data:text/html;base64,dGVzdA==");
|
||||
auto url = URL::Parser::basic_parse("data:text/html;base64,dGVzdA=="sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data:text/html;base64,dGVzdA==");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/html");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "test"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded_default_mime_type)
|
||||
{
|
||||
URL::URL url("data:;base64,dGVzdA=="sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data:;base64,dGVzdA==");
|
||||
auto url = URL::Parser::basic_parse("data:;base64,dGVzdA=="sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data:;base64,dGVzdA==");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/plain;charset=US-ASCII");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "test"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded_with_whitespace)
|
||||
{
|
||||
URL::URL url("data: text/html ; bAsE64 , dGVz dA== "sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
EXPECT_EQ(url.serialize(), "data: text/html ; bAsE64 , dGVz dA==");
|
||||
auto url = URL::Parser::basic_parse("data: text/html ; bAsE64 , dGVz dA== "sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
EXPECT_EQ(url->serialize(), "data: text/html ; bAsE64 , dGVz dA==");
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/html");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "test");
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_base64_encoded_with_inline_whitespace)
|
||||
{
|
||||
URL::URL url("data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20"sv);
|
||||
EXPECT(url.is_valid());
|
||||
EXPECT_EQ(url.scheme(), "data");
|
||||
EXPECT(!url.host().has_value());
|
||||
auto url = URL::Parser::basic_parse("data:text/javascript;base64,%20ZD%20Qg%0D%0APS%20An%20Zm91cic%0D%0A%207%20"sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT(!url->host().has_value());
|
||||
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(url));
|
||||
auto data_url = TRY_OR_FAIL(Web::Fetch::Infrastructure::process_data_url(*url));
|
||||
EXPECT_EQ(data_url.mime_type.serialized(), "text/javascript");
|
||||
EXPECT_EQ(StringView(data_url.body.bytes()), "d4 = 'four';"sv);
|
||||
}
|
||||
|
||||
TEST_CASE(data_url_completed_with_fragment)
|
||||
{
|
||||
auto url = URL::URL("data:text/plain,test"sv).complete_url("#a"sv);
|
||||
auto url = URL::Parser::basic_parse("data:text/plain,test"sv)->complete_url("#a"sv);
|
||||
EXPECT(url.has_value());
|
||||
EXPECT_EQ(url->scheme(), "data");
|
||||
EXPECT_EQ(url->fragment(), "a");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue