diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/loader/appcache/ApplicationCacheHost.h | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/loader/appcache/ApplicationCacheHost.h')
-rw-r--r-- | Source/WebCore/loader/appcache/ApplicationCacheHost.h | 291 |
1 files changed, 129 insertions, 162 deletions
diff --git a/Source/WebCore/loader/appcache/ApplicationCacheHost.h b/Source/WebCore/loader/appcache/ApplicationCacheHost.h index f6e0d0b94..2bfdc62f9 100644 --- a/Source/WebCore/loader/appcache/ApplicationCacheHost.h +++ b/Source/WebCore/loader/appcache/ApplicationCacheHost.h @@ -1,6 +1,7 @@ /* - * Copyright (c) 2009, Google Inc. All rights reserved. - * + * Copyright (c) 2009, Google Inc. All rights reserved. + * Copyright (c) 2017 Apple Inc. All rights reserved. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: @@ -28,172 +29,138 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifndef ApplicationCacheHost_h -#define ApplicationCacheHost_h +#pragma once #include "URL.h" #include <wtf/Deque.h> -#include <wtf/OwnPtr.h> -#include <wtf/PassRefPtr.h> -#include <wtf/RefPtr.h> #include <wtf/Vector.h> namespace WebCore { - class DOMApplicationCache; - class DocumentLoader; - class Frame; - class ResourceLoader; - class ResourceError; - class ResourceRequest; - class ResourceResponse; - class SubstituteData; - class ApplicationCache; - class ApplicationCacheGroup; - class ApplicationCacheResource; - class ApplicationCacheStorage; - - class ApplicationCacheHost { - WTF_MAKE_NONCOPYABLE(ApplicationCacheHost); WTF_MAKE_FAST_ALLOCATED; - public: - // The Status numeric values are specified in the HTML5 spec. - enum Status { - UNCACHED = 0, - IDLE = 1, - CHECKING = 2, - DOWNLOADING = 3, - UPDATEREADY = 4, - OBSOLETE = 5 - }; - - enum EventID { - CHECKING_EVENT = 0, - ERROR_EVENT, - NOUPDATE_EVENT, - DOWNLOADING_EVENT, - PROGRESS_EVENT, - UPDATEREADY_EVENT, - CACHED_EVENT, - OBSOLETE_EVENT // Must remain the last value, this is used to size arrays. - }; - -#if ENABLE(INSPECTOR) - struct CacheInfo { - CacheInfo(const URL& manifest, double creationTime, double updateTime, long long size) - : m_manifest(manifest) - , m_creationTime(creationTime) - , m_updateTime(updateTime) - , m_size(size) { } - URL m_manifest; - double m_creationTime; - double m_updateTime; - long long m_size; - }; - - struct ResourceInfo { - ResourceInfo(const URL& resource, bool isMaster, bool isManifest, bool isFallback, bool isForeign, bool isExplicit, long long size) - : m_resource(resource) - , m_isMaster(isMaster) - , m_isManifest(isManifest) - , m_isFallback(isFallback) - , m_isForeign(isForeign) - , m_isExplicit(isExplicit) - , m_size(size) { } - URL m_resource; - bool m_isMaster; - bool m_isManifest; - bool m_isFallback; - bool m_isForeign; - bool m_isExplicit; - long long m_size; - }; - - typedef Vector<ResourceInfo> ResourceInfoList; -#endif - - ApplicationCacheHost(DocumentLoader*); - ~ApplicationCacheHost(); - - void selectCacheWithoutManifest(); - void selectCacheWithManifest(const URL& manifestURL); - - void maybeLoadMainResource(ResourceRequest&, SubstituteData&); - void maybeLoadMainResourceForRedirect(ResourceRequest&, SubstituteData&); - bool maybeLoadFallbackForMainResponse(const ResourceRequest&, const ResourceResponse&); - void mainResourceDataReceived(const char* data, int length, long long encodedDataLength, bool allAtOnce); - void finishedLoadingMainResource(); - void failedLoadingMainResource(); - - bool maybeLoadResource(ResourceLoader*, ResourceRequest&, const URL& originalURL); - bool maybeLoadFallbackForRedirect(ResourceLoader*, ResourceRequest&, const ResourceResponse&); - bool maybeLoadFallbackForResponse(ResourceLoader*, const ResourceResponse&); - bool maybeLoadFallbackForError(ResourceLoader*, const ResourceError&); - - bool maybeLoadSynchronously(ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data); - void maybeLoadFallbackSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, Vector<char>& data); - - bool canCacheInPageCache(); - - Status status() const; - bool update(); - bool swapCache(); - void abort(); - - void setDOMApplicationCache(DOMApplicationCache*); - void notifyDOMApplicationCache(EventID, int progressTotal, int progressDone); - - void stopLoadingInFrame(Frame*); - - void stopDeferringEvents(); // Also raises the events that have been queued up. - -#if ENABLE(INSPECTOR) - void fillResourceList(ResourceInfoList*); - CacheInfo applicationCacheInfo(); -#endif - - bool shouldLoadResourceFromApplicationCache(const ResourceRequest&, ApplicationCacheResource*&); - bool getApplicationCacheFallbackResource(const ResourceRequest&, ApplicationCacheResource*&, ApplicationCache* = 0); - - private: - bool isApplicationCacheEnabled(); - DocumentLoader* documentLoader() const { return m_documentLoader; } - - struct DeferredEvent { - EventID eventID; - int progressTotal; - int progressDone; - DeferredEvent(EventID id, int total, int done) : eventID(id), progressTotal(total), progressDone(done) { } - }; - - DOMApplicationCache* m_domApplicationCache; - DocumentLoader* m_documentLoader; - bool m_defersEvents; // Events are deferred until after document onload. - Vector<DeferredEvent> m_deferredEvents; - - void dispatchDOMEvent(EventID, int progressTotal, int progressDone); - - friend class ApplicationCacheGroup; - friend class ApplicationCacheStorage; - - bool scheduleLoadFallbackResourceFromApplicationCache(ResourceLoader*, ApplicationCache* = 0); - void setCandidateApplicationCacheGroup(ApplicationCacheGroup* group); - ApplicationCacheGroup* candidateApplicationCacheGroup() const { return m_candidateApplicationCacheGroup; } - void setApplicationCache(PassRefPtr<ApplicationCache> applicationCache); - ApplicationCache* applicationCache() const { return m_applicationCache.get(); } - ApplicationCache* mainResourceApplicationCache() const { return m_mainResourceApplicationCache.get(); } - bool maybeLoadFallbackForMainError(const ResourceRequest&, const ResourceError&); - - - // The application cache that the document loader is associated with (if any). - RefPtr<ApplicationCache> m_applicationCache; - - // Before an application cache has finished loading, this will be the candidate application - // group that the document loader is associated with. - ApplicationCacheGroup* m_candidateApplicationCacheGroup; - - // This is the application cache the main resource was loaded from (if any). - RefPtr<ApplicationCache> m_mainResourceApplicationCache; + +class ApplicationCache; +class ApplicationCacheGroup; +class ApplicationCacheResource; +class ApplicationCacheStorage; +class DOMApplicationCache; +class DocumentLoader; +class Frame; +class ResourceError; +class ResourceLoader; +class ResourceRequest; +class ResourceResponse; +class SharedBuffer; +class SubstituteData; + +class ApplicationCacheHost { + WTF_MAKE_NONCOPYABLE(ApplicationCacheHost); WTF_MAKE_FAST_ALLOCATED; +public: + // The Status numeric values are specified in the HTML5 spec. + enum Status { + UNCACHED = 0, + IDLE = 1, + CHECKING = 2, + DOWNLOADING = 3, + UPDATEREADY = 4, + OBSOLETE = 5 }; -} // namespace WebCore + struct CacheInfo { + URL manifest; + double creationTime; + double updateTime; + long long size; + }; + + struct ResourceInfo { + URL resource; + bool isMaster; + bool isManifest; + bool isFallback; + bool isForeign; + bool isExplicit; + long long size; + }; + + explicit ApplicationCacheHost(DocumentLoader&); + ~ApplicationCacheHost(); + + static URL createFileURL(const String&); + + void selectCacheWithoutManifest(); + void selectCacheWithManifest(const URL& manifestURL); + + void maybeLoadMainResource(ResourceRequest&, SubstituteData&); + void maybeLoadMainResourceForRedirect(ResourceRequest&, SubstituteData&); + bool maybeLoadFallbackForMainResponse(const ResourceRequest&, const ResourceResponse&); + void mainResourceDataReceived(const char* data, int length, long long encodedDataLength, bool allAtOnce); + void finishedLoadingMainResource(); + void failedLoadingMainResource(); + + WEBCORE_EXPORT bool maybeLoadResource(ResourceLoader&, const ResourceRequest&, const URL& originalURL); + WEBCORE_EXPORT bool maybeLoadFallbackForRedirect(ResourceLoader*, ResourceRequest&, const ResourceResponse&); + WEBCORE_EXPORT bool maybeLoadFallbackForResponse(ResourceLoader*, const ResourceResponse&); + WEBCORE_EXPORT bool maybeLoadFallbackForError(ResourceLoader*, const ResourceError&); + + bool maybeLoadSynchronously(ResourceRequest&, ResourceError&, ResourceResponse&, RefPtr<SharedBuffer>&); + void maybeLoadFallbackSynchronously(const ResourceRequest&, ResourceError&, ResourceResponse&, RefPtr<SharedBuffer>&); + + bool canCacheInPageCache(); + + Status status() const; + bool update(); + bool swapCache(); + void abort(); + + void setDOMApplicationCache(DOMApplicationCache*); + void notifyDOMApplicationCache(const AtomicString& eventType, int progressTotal, int progressDone); + + void stopLoadingInFrame(Frame&); -#endif // ApplicationCacheHost_h + void stopDeferringEvents(); // Also raises the events that have been queued up. + + Vector<ResourceInfo> resourceList(); + CacheInfo applicationCacheInfo(); + + bool shouldLoadResourceFromApplicationCache(const ResourceRequest&, ApplicationCacheResource*&); + bool getApplicationCacheFallbackResource(const ResourceRequest&, ApplicationCacheResource*&, ApplicationCache* = nullptr); + +private: + friend class ApplicationCacheGroup; + + struct DeferredEvent { + AtomicString eventType; + int progressTotal; + int progressDone; + }; + + bool isApplicationCacheEnabled(); + bool isApplicationCacheBlockedForRequest(const ResourceRequest&); + + void dispatchDOMEvent(const AtomicString& eventType, int progressTotal, int progressDone); + + bool scheduleLoadFallbackResourceFromApplicationCache(ResourceLoader*, ApplicationCache* = nullptr); + void setCandidateApplicationCacheGroup(ApplicationCacheGroup*); + ApplicationCacheGroup* candidateApplicationCacheGroup() const { return m_candidateApplicationCacheGroup; } + void setApplicationCache(RefPtr<ApplicationCache>&&); + ApplicationCache* applicationCache() const { return m_applicationCache.get(); } + ApplicationCache* mainResourceApplicationCache() const { return m_mainResourceApplicationCache.get(); } + bool maybeLoadFallbackForMainError(const ResourceRequest&, const ResourceError&); + + DOMApplicationCache* m_domApplicationCache { nullptr }; + DocumentLoader& m_documentLoader; + + bool m_defersEvents { true }; // Events are deferred until after document onload. + Vector<DeferredEvent> m_deferredEvents; + + // The application cache that the document loader is associated with (if any). + RefPtr<ApplicationCache> m_applicationCache; + + // Before an application cache has finished loading, this will be the candidate application + // group that the document loader is associated with. + ApplicationCacheGroup* m_candidateApplicationCacheGroup { nullptr }; + + // This is the application cache the main resource was loaded from (if any). + RefPtr<ApplicationCache> m_mainResourceApplicationCache; +}; + +} // namespace WebCore |