[Webkit-unassigned] [Bug 76270] implement offline web applications abort API

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Jan 13 11:19:06 PST 2012


https://bugs.webkit.org/show_bug.cgi?id=76270


Alexey Proskuryakov <ap at webkit.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
 Attachment #122437|review?                     |review-
               Flag|                            |




--- Comment #12 from Alexey Proskuryakov <ap at webkit.org>  2012-01-13 11:19:05 PST ---
(From update of attachment 122437)
View in context: https://bugs.webkit.org/attachment.cgi?id=122437&action=review

We need more tests for this feature. Anything that didn't work at first in your implementation, or anything that you suspect a future careless refactoring could potentially break should be tested.

Don't be shy to add multiple test files if needed - this often works better than cramming multiple tests into one HTML file.

> Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp:465
> +    if (m_updateStatus == Checking || m_updateStatus == Downloading) {

In WebKit code, we prefer early return to nesting code. So, just write 

if (m_updateStatus == Idle)
    return;
ASSERT(m_updateStatus == Checking || (m_updateStatus == Downloading && m_cacheBeingUpdated));

> Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp:470
> +        // It hasn't necessary abort download process if 
> +        // m_completionType was Failure or Completed or NoUpdate 
> +        // since the process was completed except reset state.
> +        if (m_completionType != None)
> +            return;

When does this code work? Is it for calling abort() from within an error or cached event handler? But I would expect that to be caught by m_updateStatus check above.

Please verify that this code is really needed, and add a regression test that would have failed if not for it.

> Source/WebCore/loader/appcache/ApplicationCacheGroup.cpp:472
> +        stopLoading();

The spec just says that we should run cache failure steps, which translates to calling cacheUpdateFailed(). Is there a reason why that doesn't work?

I'm very concerned about adding another copy of cleanup code - historically, it's been extremely fragile and difficult to maintain.

We need a regression test showing that a previous version of appcache is still fully alive and functioning after an abort().

> Source/WebCore/loader/appcache/ApplicationCacheGroup.h:80
> +    void abort(Frame*);

What's the expected behavior if frame argument is different from m_frame?

> Source/WebCore/loader/appcache/ApplicationCacheHost.cpp:468
> +    if ((status() == UNCACHED)
> +        || (status() == OBSOLETE)
> +        || (status() == UPDATEREADY)
> +        || (status() == IDLE))
> +        return;

We already have a similar check in ApplicationCacheGroup. Why is it repeated here?

> Source/WebCore/loader/appcache/ApplicationCacheHost.cpp:471
> +    ApplicationCache* cache = applicationCache();
> +    cache->group()->abort(m_documentLoader->frame());

A comment in ApplicationCacheHost.h says that this is "The application cache that the document loader is associated with (if any)". But a document loader isn't associated with a cache until it's fully downloaded. So how can we stop an initial download with this code? I'm confused.

Shouldn't we be using m_candidateApplicationCacheGroup?

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list