1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef ANDROID_WEBVIEW_BROWSER_INTERCEPTED_REQUEST_DATA_H_
6#define ANDROID_WEBVIEW_BROWSER_INTERCEPTED_REQUEST_DATA_H_
7
8#include <string>
9
10#include "base/android/jni_android.h"
11#include "base/memory/scoped_ptr.h"
12
13namespace net {
14class HttpResponseHeaders;
15class NetworkDelegate;
16class URLRequest;
17class URLRequestJob;
18}
19
20namespace android_webview {
21
22class InputStream;
23
24// This class represents the Java-side data that is to be used to complete a
25// particular URLRequest.
26class AwWebResourceResponse {
27 public:
28  virtual ~AwWebResourceResponse() {}
29
30  virtual scoped_ptr<InputStream> GetInputStream(JNIEnv* env) const = 0;
31  virtual bool GetMimeType(JNIEnv* env, std::string* mime_type) const = 0;
32  virtual bool GetCharset(JNIEnv* env, std::string* charset) const = 0;
33  virtual bool GetStatusInfo(JNIEnv* env,
34                             int* status_code,
35                             std::string* reason_phrase) const = 0;
36  // If true is returned then |headers| contain the headers, if false is
37  // returned |headers| were not updated.
38  virtual bool GetResponseHeaders(
39      JNIEnv* env,
40      net::HttpResponseHeaders* headers) const = 0;
41
42  // This creates a URLRequestJob for the |request| wich will read data from
43  // the |aw_web_resource_response| structure (instead of going to the network
44  // or to the cache).
45  // The newly created job takes ownership of |aw_web_resource_response|.
46  static net::URLRequestJob* CreateJobFor(
47      scoped_ptr<AwWebResourceResponse> aw_web_resource_response,
48      net::URLRequest* request,
49      net::NetworkDelegate* network_delegate);
50
51 protected:
52  AwWebResourceResponse() {}
53
54 private:
55  DISALLOW_COPY_AND_ASSIGN(AwWebResourceResponse);
56};
57
58} // namespace android_webview
59
60#endif  // ANDROID_WEBVIEW_BROWSER_INTERCEPTED_REQUEST_DATA_H_
61