diff --git a/AK/URL.cpp b/AK/URL.cpp index 1a026d9e5fe..0ddcecd1705 100644 --- a/AK/URL.cpp +++ b/AK/URL.cpp @@ -61,7 +61,10 @@ bool URL::parse(const StringView& string) return false; m_protocol = String::copy(buffer); buffer.clear(); - state = State::InHostname; + if (m_protocol == "file") + state = State::InPath; + else + state = State::InHostname; continue; case State::InHostname: if (is_valid_hostname_character(peek())) { @@ -120,9 +123,11 @@ String URL::to_string() const StringBuilder builder; builder.append(m_protocol); builder.append("://"); - builder.append(m_host); - builder.append(':'); - builder.append(String::number(m_port)); + if (protocol() != "file") { + builder.append(m_host); + builder.append(':'); + builder.append(String::number(m_port)); + } builder.append(m_path); return builder.to_string(); } diff --git a/AK/URL.h b/AK/URL.h index 8a37f9af32e..ec249be0a51 100644 --- a/AK/URL.h +++ b/AK/URL.h @@ -24,6 +24,11 @@ public: String path() const { return m_path; } u16 port() const { return m_port; } + void set_protocol(const String& protocol) { m_protocol = protocol; } + void set_host(const String& host) { m_host = host; } + void set_path(const String& path) { m_path = path; } + void set_port(u16 port) { m_port = port; } + String to_string() const; private: