LibWeb: Show correct favicon when default favicon is loaded

Block the replacement of the favicon by the default favicon loader
when a favicon that is loaded through a link tag is already active.

This way, the favicon in the link tags will be prioritized against
the default favicons from `/favicon.ico` or the seranity default icon.
This commit is contained in:
Anthony Van de Gejuchte 2022-04-03 19:56:15 +02:00 committed by Andreas Kling
parent 06d9853a8b
commit 69ca27d3d7
Notes: sideshowbarker 2024-07-17 14:11:49 +09:00
2 changed files with 14 additions and 0 deletions

View file

@ -339,6 +339,7 @@ public:
bool in_removed_last_ref() const { return m_in_removed_last_ref; }
bool has_active_favicon() const { return m_active_favicon; }
void check_favicon_after_loading_link_resource();
private:

View file

@ -187,6 +187,10 @@ bool FrameLoader::load(LoadRequest& request, Type type)
if (type == Type::IFrame)
return true;
auto* document = browsing_context().active_document();
if (document && document->has_active_favicon())
return true;
if (url.protocol() == "http" || url.protocol() == "https") {
AK::URL favicon_url;
favicon_url.set_protocol(url.protocol());
@ -197,6 +201,10 @@ bool FrameLoader::load(LoadRequest& request, Type type)
ResourceLoader::the().load(
favicon_url,
[this, favicon_url](auto data, auto&, auto) {
// Always fetch the current document
auto* document = this->browsing_context().active_document();
if (document && document->has_active_favicon())
return;
dbgln_if(SPAM_DEBUG, "Favicon downloaded, {} bytes from {}", data.size(), favicon_url);
if (data.is_empty())
return;
@ -211,6 +219,11 @@ bool FrameLoader::load(LoadRequest& request, Type type)
load_favicon(favicon_bitmap);
},
[this](auto&, auto) {
// Always fetch the current document
auto* document = this->browsing_context().active_document();
if (document && document->has_active_favicon())
return;
load_favicon();
});
} else {