[webkit-dev] Error handling support in DRT.

tonikitoo (Antonio Gomes) tonikitoo at gmail.com
Mon Nov 9 18:35:16 PST 2009


Thanks for replying, Darin. Comments below ...

> WebKit itself does not have error pages. This is a feature of specific browsers: Recent versions of Safari do this, although earlier versions used sheets and alerts instead.

I agree that supporting "error pages" is a browser-specific feature.
The point is that WebCore::FrameLoader gives FrameLoaderClient the
right hook to load error pages and even has special treatment for when
it happens: If you look close at snippet FrameLoader code in
http://pastebin.com/f176c3bf5, it is obvious that
"m_delegateIsHandlingProvisionalLoadError" , for example, is
preventing that method body to get executed if an "error page" is
being handled:

(...)
>  m_delegateIsHandlingProvisionalLoadError = true;
>  m_client->dispatchDidFailProvisionalLoad(error);
>  m_delegateIsHandlingProvisionalLoadError = false;
(...)

In the sequence:

(...)
// Finish resetting the load state, but only if another load hasn't
// been started by the delegate callback.
if (pdl == m_provisionalDocumentLoadeer)
    clearProvisionalLoad();
else if (m_provisionalDocumentLoader) { <---- THIS IS THE PROBLEM
    KURL unreachableURL = m_provisionalDocumentLoader->unreachableURL();
    if (!unreachableURL.isEmpty() && unreachableURL == pdl->request().url())
        shouldReset = false;
}

Just checking for "m_provisionalDocumentLoader" (the 'else' block) is
not enough to ensure if a load error has been loaded or not. in my
opnion, it should be "activeDocumentLoader()". As is, shouldReset
keeps as "true" and back/forward status gets broken.

I have patched it and even made a layout test and qt unittests [1],
but w/o DRT to support error pages my test is invalid.

[1] https://bug-30573-attachments.webkit.org/attachment.cgi?id=42829

> I think it’s reasonable to have a way in DumpRenderTree to indicate somehow in its output if a page load fails and what error code is involved. But I would not recommend using "error pages" as the way to do this. And we’d have to be careful to make this something easy to use cross-platform. Specific error codes are also likely to be platform-specific.

The error page I made for QT is simple "data:html/test,<body/>", just
in order to let something to get rendered. So I am not caring much
about the type of error here for now ...

> There may be some way to accomplish this in some cases using "onerror" and frames.

As far as I could see "onError" are to catch runtime JS execution
exception, which from the problem description above it can not be
enough (?).


-- 
--Antonio Gomes


More information about the webkit-dev mailing list