1// Copyright (c) 2012 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_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
6#define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
7
8#include "android_webview/browser/aw_contents_io_thread_client.h"
9
10#include "base/android/scoped_java_ref.h"
11#include "base/basictypes.h"
12#include "base/compiler_specific.h"
13#include "base/memory/scoped_ptr.h"
14
15class GURL;
16
17namespace content {
18class ResourceRequestInfo;
19class WebContents;
20}
21
22namespace net {
23class URLRequest;
24}
25
26namespace android_webview {
27
28class AwWebResourceResponse;
29
30class AwContentsIoThreadClientImpl : public AwContentsIoThreadClient {
31 public:
32   // Called when AwContents is created before there is a Java client.
33  static void RegisterPendingContents(content::WebContents* web_contents);
34
35  // Associates the |jclient| instance (which must implement the
36  // AwContentsIoThreadClient Java interface) with the |web_contents|.
37  // This should be called at most once per |web_contents|.
38  static void Associate(content::WebContents* web_contents,
39                        const base::android::JavaRef<jobject>& jclient);
40
41  // Either |pending_associate| is true or |jclient| holds a non-null
42  // Java object.
43  AwContentsIoThreadClientImpl(bool pending_associate,
44                               const base::android::JavaRef<jobject>& jclient);
45  virtual ~AwContentsIoThreadClientImpl() OVERRIDE;
46
47  // Implementation of AwContentsIoThreadClient.
48  virtual bool PendingAssociation() const OVERRIDE;
49  virtual CacheMode GetCacheMode() const OVERRIDE;
50  virtual scoped_ptr<AwWebResourceResponse> ShouldInterceptRequest(
51      const GURL& location,
52      const net::URLRequest* request) OVERRIDE;
53  virtual bool ShouldBlockContentUrls() const OVERRIDE;
54  virtual bool ShouldBlockFileUrls() const OVERRIDE;
55  virtual bool ShouldAcceptThirdPartyCookies() const OVERRIDE;
56  virtual bool ShouldBlockNetworkLoads() const OVERRIDE;
57  virtual void NewDownload(const GURL& url,
58                           const std::string& user_agent,
59                           const std::string& content_disposition,
60                           const std::string& mime_type,
61                           int64 content_length) OVERRIDE;
62  virtual void NewLoginRequest(const std::string& realm,
63                               const std::string& account,
64                               const std::string& args) OVERRIDE;
65
66 private:
67  bool pending_association_;
68  base::android::ScopedJavaGlobalRef<jobject> java_object_;
69
70  DISALLOW_COPY_AND_ASSIGN(AwContentsIoThreadClientImpl);
71};
72
73// JNI registration method.
74bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env);
75
76} // namespace android_webview
77
78#endif  // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
79