On Sep 15, 2009, at 10:42 PM, Darin Fisher wrote:

I'm very confused by this change.

I hoped to blog about the motivations shortly after landing the change, but today has been crazy. Tomorrow I'll get something up explaining in detail why we're exploring this.

If a page has an unload handler, then Firefox does not put the page in the bfcache.

Correct - nor does Opera, nor did WebKit on Mac/Windows before r48388 ;)

So the author of a page that has an unload handler would have no reason to include a pagehide handler.

pagehide and unload are so painfully close to indentical, its easy to confuse what sets them apart. You're correct that it's pointless to have both, but an author who is using unload has every reason to use pagehide *instead* when it is supported.

Mozilla created pagehide/pageshow because of the very problem we're trying to solve. Per https://bugzilla.mozilla.org/show_bug.cgi?id=407125#c4 : "pagehide/pageshow fire whenever unload/load would have fired before bfcache existed."

In other words, pagehide/pageshow are unload/load 2.0. They are like unload/load but also let you go into the page cache. In browsers where pagehide exists, unload is basically "pagehide, but also opting into slow navigation mode."

And we all should despise that!

Does this change mean that unload handlers are never run?

Yes. This is clearly the controversial part of this experiment, and why we've limited it to our mainline Mac and Windows ports.

Any other port is welcome to join in by enabling the PAGE_CACHE_ACCEPTS_UNLOAD_HANDLERS #define near the top of FrameLoader.cpp for their build.

Or, are they run while the page is hidden (once it is evicted from the page cache)?

This is something that is definitely worth exploring, and that we've discussed around the office, but that presents its own problems.

I have to say, this seems like a big compatibility bug to me.

And to us - which is why we're running this experiment in WebKit nightlies and why I hope to get feedback on the impending blog post (stay tuned!) from web developers.

I perceive the worse case outcome of the experiment to be that we change the behavior back, but we will have educated web developers about pagehide and evangelized at least a few of them into switching over.

What happens if the page has a beforeunload handler?

This behavior has not changed. beforeunload events have always been able to stop a navigation before the page cache comes into play.

~Brady


-Darin


On Wed, Sep 9, 2009 at 4:07 PM, Brady Eidson <[email protected]> wrote: Since the beginning, WebKit has excluded pages with unload handlers from its back/forward cache. There has been an unspoken assumption for 6 years now that we "have to do it."

In recent explorations to improvements we can make to the back/ forward cache, we've collected tons of data that suggests: -It would be a huge win for end users to remove this restriction, as many pages are excluded from the page cache because they have unload handlers. -Many are designed to do the same work in the pagehide handler under Firefox.
-Many of these unload handlers don't do anything actually important.

In our quest to make WebKit better for end users, we'd like to explore removing this limitation. We would like to encourage developers to use pagehide in WebKit now that we support it, and we won't know if anything truly important breaks until we try it. I intend to land a patch removing the restriction sometime tomorrow.

If anyone needs to keep it working for their port, please comment in the bugzilla before then, as I don't mind one bit #ifdef'ing it so it only affects the main Mac/Windows ports:
https://bugs.webkit.org/show_bug.cgi?id=29021

Thanks,
~Brady
_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev


_______________________________________________
webkit-dev mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to