[webkit-dev] The mysterious IconDatabase
I am having trouble using the IconDatabase successfully. I was wondering if I am either using it incorrectly or if Safari is doing some extra work to get the correct favicon for a given site. Here is the scenario. I am going to assume that each icon is retained at least once so that icons are never deleted (in fact, for testing this is exactly what I'm doing). Load www.google.com, FrameLoaderClient::dispatchDidReceiveIcon is called. IconDatabase::iconForPageURL returns an icon, this is perfect. Load www.google.com/search?hl=enq=some_querybtnG=Google +Search, dispatchDidReceiveIcon is *not* called. 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. 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? Thanks, Patrick ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] The mysterious IconDatabase
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=enq=some_querybtnG=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=enq=some_querybtnG=Google+Search should use the google site icon, but www.google.com/search?hl=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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 ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] The mysterious IconDatabase
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. John 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. 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=enq=some_querybtnG=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=enq=some_querybtnG=Google+Search should use the google site icon, but www.google.com/search?hl=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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 ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] The mysterious IconDatabase
I have discovered that I have an IconDatabase that is older than the new multi-thread database if that is any help. If Safari has no extra knowledge, how does it decide to display the google icon for www.google.com/search before visiting the site but after visiting www.google.com? The same applies for visiting news.google.com, images.google.com, maps.google.com, etc. I tried setting a breakpoint on iconForPageURL but it just returned NULL. Pat On Sep 18, 2007, at 1:02 PM, John Sullivan wrote: 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. John 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. 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=enq=some_querybtnG=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=enq=some_querybtnG=Google+Search should use the google site icon, but www.google.com/search?hl=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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=enq=some_querybtnG=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 ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] The mysterious IconDatabase
It looks like you have to completely delete the address in the Address bar to get the icon to go away. If you don't delete the whole thing, the icon stays there. That looks like what you mentioned earlier about not flashing between the default icon and the custom icon while typing. Maybe I just need to add that sort of logic for hosts that match. Thanks for the help, Pat On Sep 18, 2007, at 1:32 PM, John Sullivan wrote: On Sep 18, 2007, at 10:25 AM, Patrick Hanna wrote: I have discovered that I have an IconDatabase that is older than the new multi-thread database if that is any help. If Safari has no extra knowledge, how does it decide to display the google icon for www.google.com/search before visiting the site but after visiting www.google.com? The same applies for visiting news.google.com, images.google.com, maps.google.com, etc. I tried setting a breakpoint on iconForPageURL but it just returned NULL. Pat I can't reproduce this. This is what I see: 1. use Reset Safari to clear the icon database 2. type http://www.google.com into URL field and hit Return -- custom icon appears after page loads 3. type http://www.google.com/search into URL field -- no custom icon 4. hit Return -- custom icon appears during/after page load 5. type http://news.google.com into URL field -- no custom icon 6. hit Return -- custom icon appears during/after page load John ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev
Re: [webkit-dev] The mysterious IconDatabase
On Sep 18, 2007, at 10:25 AM, Patrick Hanna wrote: I have discovered that I have an IconDatabase that is older than the new multi-thread database if that is any help. If Safari has no extra knowledge, how does it decide to display the google icon for www.google.com/search before visiting the site but after visiting www.google.com? The same applies for visiting news.google.com, images.google.com, maps.google.com, etc. I tried setting a breakpoint on iconForPageURL but it just returned NULL. Pat I can't reproduce this. This is what I see: 1. use Reset Safari to clear the icon database 2. type http://www.google.com into URL field and hit Return -- custom icon appears after page loads 3. type http://www.google.com/search into URL field -- no custom icon 4. hit Return -- custom icon appears during/after page load 5. type http://news.google.com into URL field -- no custom icon 6. hit Return -- custom icon appears during/after page load John ___ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo/webkit-dev