15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "android_webview/browser/aw_contents_io_thread_client.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h"
112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/scoped_ptr.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content {
186d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class ResourceRequestInfo;
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebContents;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net {
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class URLRequest;
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace android_webview {
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
286d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)class AwWebResourceResponse;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class AwContentsIoThreadClientImpl : public AwContentsIoThreadClient {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
32d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)   // Called when AwContents is created before there is a Java client.
33d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  static void RegisterPendingContents(content::WebContents* web_contents);
34d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Associates the |jclient| instance (which must implement the
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // AwContentsIoThreadClient Java interface) with the |web_contents|.
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This should be called at most once per |web_contents|.
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  static void Associate(content::WebContents* web_contents,
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                        const base::android::JavaRef<jobject>& jclient);
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
41d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Either |pending_associate| is true or |jclient| holds a non-null
42d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  // Java object.
43d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  AwContentsIoThreadClientImpl(bool pending_associate,
44d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)                               const base::android::JavaRef<jobject>& jclient);
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~AwContentsIoThreadClientImpl() OVERRIDE;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Implementation of AwContentsIoThreadClient.
48d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  virtual bool PendingAssociation() const OVERRIDE;
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual CacheMode GetCacheMode() const OVERRIDE;
506d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  virtual scoped_ptr<AwWebResourceResponse> ShouldInterceptRequest(
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const GURL& location,
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const net::URLRequest* request) OVERRIDE;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldBlockContentUrls() const OVERRIDE;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldBlockFileUrls() const OVERRIDE;
55cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool ShouldAcceptThirdPartyCookies() const OVERRIDE;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool ShouldBlockNetworkLoads() const OVERRIDE;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void NewDownload(const GURL& url,
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& user_agent,
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& content_disposition,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           const std::string& mime_type,
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                           int64 content_length) OVERRIDE;
622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void NewLoginRequest(const std::string& realm,
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const std::string& account,
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                               const std::string& args) OVERRIDE;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
67d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)  bool pending_association_;
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  base::android::ScopedJavaGlobalRef<jobject> java_object_;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(AwContentsIoThreadClientImpl);
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// JNI registration method.
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterAwContentsIoThreadClientImpl(JNIEnv* env);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace android_webview
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // ANDROID_WEBVIEW_NATIVE_AW_CONTENTS_IO_THREAD_CLIENT_IMPL_H_
79