// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CONTENT_BROWSER_APPCACHE_APPCACHE_INTERCEPTOR_H_ #define CONTENT_BROWSER_APPCACHE_APPCACHE_INTERCEPTOR_H_ #include "base/basictypes.h" #include "content/common/content_export.h" #include "content/public/common/resource_type.h" #include "net/url_request/url_request_interceptor.h" class GURL; namespace net { class URLRequest; } namespace content { class AppCacheRequestHandler; class AppCacheServiceImpl; // An interceptor to hijack requests and potentially service them out of // the appcache. class CONTENT_EXPORT AppCacheInterceptor : public net::URLRequestInterceptor { public: // Must be called to make a request eligible for retrieval from an appcache. static void SetExtraRequestInfo(net::URLRequest* request, AppCacheServiceImpl* service, int process_id, int host_id, ResourceType resource_type, bool should_reset_appcache); // May be called after response headers are complete to retrieve extra // info about the response. static void GetExtraResponseInfo(net::URLRequest* request, int64* cache_id, GURL* manifest_url); // Methods to support cross site navigations. static void PrepareForCrossSiteTransfer(net::URLRequest* request, int old_process_id); static void CompleteCrossSiteTransfer(net::URLRequest* request, int new_process_id, int new_host_id); static void MaybeCompleteCrossSiteTransferInOldProcess( net::URLRequest* request, int old_process_id); AppCacheInterceptor(); ~AppCacheInterceptor() override; protected: // Override from net::URLRequestInterceptor: net::URLRequestJob* MaybeInterceptRequest( net::URLRequest* request, net::NetworkDelegate* network_delegate) const override; net::URLRequestJob* MaybeInterceptResponse( net::URLRequest* request, net::NetworkDelegate* network_delegate) const override; net::URLRequestJob* MaybeInterceptRedirect( net::URLRequest* request, net::NetworkDelegate* network_delegate, const GURL& location) const override; private: static void SetHandler(net::URLRequest* request, AppCacheRequestHandler* handler); static AppCacheRequestHandler* GetHandler(net::URLRequest* request); DISALLOW_COPY_AND_ASSIGN(AppCacheInterceptor); }; } // namespace content #endif // CONTENT_BROWSER_APPCACHE_APPCACHE_INTERCEPTOR_H_