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