[webkit-dev] The mysterious IconDatabase
sullivan at apple.com
Tue Sep 18 10:02:52 PDT 2007
Safari has no logic of its own about which icon goes with which site;
it relies on the icon database for this knowledge.
Safari does have a little logic to pevent the icon in the URL field
from flashing back and forth between a generic and non-generic icon as
you type in a URL.
On Sep 18, 2007, at 9:53 AM, Patrick Hanna wrote:
> So I do *not* have the 25557 patch and that will help.
> What tools are in place to accomplish the behavior that I want? Is
> this something that Safari does? 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. 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.
> 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
>>> 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
>> 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,
>> Safari/WebKit Engineer
>>> webkit-dev mailing list
>>> webkit-dev at lists.webkit.org
> webkit-dev mailing list
> webkit-dev at lists.webkit.org
More information about the webkit-dev