[webkit-dev] The mysterious IconDatabase

Brady Eidson beidson at apple.com
Tue Sep 18 10:10:54 PDT 2007

On Sep 18, 2007, at 9:53 AM, Patrick Hanna wrote:

> So I do *not* have the 25557 patch and that will help.

Upgrade past that point, your plight will be significantly lessened ;)

> What tools are in place to accomplish the behavior that I want? Is  
> this something that Safari does?

We can't talk about implementation details of Safari.

> I would love to be able to show the google.com icon until I know the  
> real icon but I don't know how to use the IconDatabase to accomplish  
> this.  For one thing, I don't want to assume that google.com/search? 
> hl=whatever uses google.com/favicon.ico.

The way that comes to mind is to call iconURLForPageURL(<your long,  
unvisited page url here>).  If the result is empty, you know that icon  
is not in the database and you can start making your own guesses about  
what icon it might be.  "http://www.google.com/search?hl=whatever"  
becomes "http://www.google.com/" until the didReceiveIcon call  
arrives, for example.

I can think of a number of cases where the above assumption would  
fail, however.  It really is a "guess"

>  I would rather have either the FrameLoader or the IconDatabase tell  
> me early on what icon or icon url it *thinks* is correct until the  
> real url is known.

I sympathize with your desire, but what you're asking is for a feature  
of the engine to start making assumptions which I don't think it  
should.  Adding extra logic to "guess" at the right icon and to do the  
didReceiveIcon dispatch multiple times per load *will* incur a  
performance penalty, in addition to being wrong in a number of cases  
in the wild.

I really do think this type of guessing should be the job of your API  
client, and not the engine itself.

Hope all this helps,

 Brady
Safari/WebKit Engineer

> Pat
> On Sep 18, 2007, at 12:46 PM, Brady Eidson wrote:
>> Hi Patrick,
>> Could you give a little more context?  Are you using ToT WebKit?
>> On Sep 18, 2007, at 9:27 AM, Patrick Hanna wrote:
>>> Load www.google.com, FrameLoaderClient::dispatchDidReceiveIcon is  
>>> called. IconDatabase::iconForPageURL returns an icon, this is  
>>> perfect.
>> Right
>>> Load www.google.com/search?hl=en&q=some_query&btnG=Google+Search,  
>>> dispatchDidReceiveIcon is *not* called.
>> In current ToT WebKit, it should be called for every single page  
>> load.  Specifically as of revision 25557 (http://trac.webkit.org/projects/webkit/changeset/25557 
>> )
>>> If I call iconForPageURL *before* the load is finished, I won't  
>>> get an icon unless I have already visited the site. If I call it  
>>> after the load has finished, this could potentially show the wrong  
>>> icon until the load has finished.
>> This is expected - until you visit a site, the icon database  
>> doesn't know what icon belongs to the site.  You might think it  
>> quite obvious that "www.google.com/search?hl=en&q=some_query&btnG=Google+Search 
>> " should use the google site icon, but "www.google.com/search?hl=en&q=some_query&btnG=Google+Search 
>> " might manually link to "www.foobar.com/favicon.ico" in it's  
>> <head> element - we simply don't know until the sight has loaded  
>> once.
>> Therefore, until you do actually load the site, iconForPageURL("www.google.com/search?hl=en&q=some_query&btnG=Google+Search 
>> ") should return the default icon.
>>> Here is the behavior that I want:
>>> Load www.google.com, show the default icon until the google  
>>> favicon is loaded and dispatchDidReceiveIcon is called. Load www.google.com/search?hl=whatever 
>>> , show the google favicon unless dispatchDidReceiveIcon is called.  
>>> Load www.someothersite.com, show the default icon until  
>>> dispatchDidReceiveIcon is called. How can I accomplish this  
>>> behavior when the IconDatabase doesn't know about pageUrls- 
>>> >iconUrls until *after* the load has completed?
>> To accomplish this behavior you'll have to do a little work.
>> As I said above, it is impossible to know for sure which icon  
>> belongs to a site until you've visited that site once.  But I think  
>> it's quite reasonable if an API client wants to make assumptions by  
>> itself and ask for a different icon.
>> Maybe what you're going for here is to have your API client run  
>> it's own logic that says "Okay, I don't know the icon for http://www.google.com/search?hl=en&q=some_query&btnG=Google+Search 
>> , but I do know the icon for http://www.google.com/, so I'll show  
>> that icon instead until I know the http://www.google.com/search?hl=en&q=some_query&btnG=Google+Search 
>>  icon for sure"
>> And the tools *are* in place to accomplish that now.
>> Hope this helps,
>>  Brady
>> Safari/WebKit Engineer
>>> Thanks,
>>> Patrick
>>> _______________________________________________
>>> webkit-dev mailing list
>>> webkit-dev at lists.webkit.org
>>> http://lists.webkit.org/mailman/listinfo/webkit-dev

More information about the webkit-dev mailing list