summaryrefslogtreecommitdiffstats
path: root/chromium/content/browser/appcache/appcache_interceptor.h
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/appcache/appcache_interceptor.h')
-rw-r--r--chromium/content/browser/appcache/appcache_interceptor.h82
1 files changed, 82 insertions, 0 deletions
diff --git a/chromium/content/browser/appcache/appcache_interceptor.h b/chromium/content/browser/appcache/appcache_interceptor.h
new file mode 100644
index 00000000000..d8da18190f4
--- /dev/null
+++ b/chromium/content/browser/appcache/appcache_interceptor.h
@@ -0,0 +1,82 @@
+// 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/memory/singleton.h"
+#include "content/common/content_export.h"
+#include "net/url_request/url_request.h"
+#include "url/gurl.h"
+#include "webkit/common/resource_type.h"
+
+namespace appcache {
+class AppCacheRequestHandler;
+class AppCacheServiceImpl;
+}
+
+namespace content {
+
+// An interceptor to hijack requests and potentially service them out of
+// the appcache.
+class CONTENT_EXPORT AppCacheInterceptor
+ : public net::URLRequest::Interceptor {
+ public:
+ // Registers a singleton instance with the net library.
+ // Should be called early in the IO thread prior to initiating requests.
+ static void EnsureRegistered() {
+ CHECK(GetInstance());
+ }
+
+ // Must be called to make a request eligible for retrieval from an appcache.
+ static void SetExtraRequestInfo(net::URLRequest* request,
+ appcache::AppCacheServiceImpl* service,
+ int process_id,
+ int host_id,
+ ResourceType::Type resource_type);
+
+ // 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 AppCacheInterceptor* GetInstance();
+
+ protected:
+ // Override from net::URLRequest::Interceptor:
+ virtual net::URLRequestJob* MaybeIntercept(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) OVERRIDE;
+ virtual net::URLRequestJob* MaybeInterceptResponse(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate) OVERRIDE;
+ virtual net::URLRequestJob* MaybeInterceptRedirect(
+ net::URLRequest* request,
+ net::NetworkDelegate* network_delegate,
+ const GURL& location) OVERRIDE;
+
+ private:
+ friend struct DefaultSingletonTraits<AppCacheInterceptor>;
+
+ AppCacheInterceptor();
+ virtual ~AppCacheInterceptor();
+
+ static void SetHandler(net::URLRequest* request,
+ appcache::AppCacheRequestHandler* handler);
+ static appcache::AppCacheRequestHandler* GetHandler(net::URLRequest* request);
+
+ DISALLOW_COPY_AND_ASSIGN(AppCacheInterceptor);
+};
+
+} // namespace content
+
+#endif // CONTENT_BROWSER_APPCACHE_APPCACHE_INTERCEPTOR_H_