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@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev