1010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// found in the LICENSE file. 4010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 5010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "android_webview/native/aw_contents_statics.h" 6010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 7cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "android_webview/browser/aw_browser_context.h" 86e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)#include "android_webview/browser/net/aw_url_request_context_getter.h" 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/android/jni_string.h" 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/android/scoped_java_ref.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/callback.h" 12116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/data_reduction_proxy/browser/data_reduction_proxy_auth_request_handler.h" 135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/public/browser/android/synchronous_compositor.h" 14010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "content/public/browser/browser_thread.h" 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "content/public/common/url_constants.h" 16010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "jni/AwContentsStatics_jni.h" 17010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "net/cert/cert_database.h" 18010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 19010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using base::android::AttachCurrentThread; 20010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using base::android::ConvertJavaStringToUTF8; 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using base::android::ScopedJavaGlobalRef; 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)using content::BrowserThread; 23116680a4aac90f2aa7413d9095a592090648e557Ben Murdochusing data_reduction_proxy::DataReductionProxyAuthRequestHandler; 24010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 25010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace android_webview { 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)namespace { 28010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 29010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void ClientCertificatesCleared(ScopedJavaGlobalRef<jobject>* callback) { 30010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::UI); 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 32010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) Java_AwContentsStatics_clientCertificatesCleared(env, callback->obj()); 33010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 34010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 35010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void NotifyClientCertificatesChanged() { 36010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK_CURRENTLY_ON(BrowserThread::IO); 37010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) net::CertDatabase::GetInstance()->OnAndroidKeyStoreChanged(); 38010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 39010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 40010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace 41010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void ClearClientCertPreferences(JNIEnv* env, jclass, jobject callback) { 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) DCHECK_CURRENTLY_ON(content::BrowserThread::UI); 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) ScopedJavaGlobalRef<jobject>* j_callback = new ScopedJavaGlobalRef<jobject>(); 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) j_callback->Reset(env, callback); 47010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BrowserThread::PostTaskAndReply( 48010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) BrowserThread::IO, 49010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FROM_HERE, 50010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Bind(&NotifyClientCertificatesChanged), 51010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Bind(&ClientCertificatesCleared, base::Owned(j_callback))); 52010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 53010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 54010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)// static 55010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void SetDataReductionProxyKey(JNIEnv* env, jclass, jstring key) { 56cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AwBrowserContext* browser_context = AwBrowserContext::GetDefault(); 57cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) DCHECK(browser_context); 586e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) DCHECK(browser_context->GetRequestContext()); 5934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // The following call to GetRequestContext() could possibly be the first such 6034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // call, which means AwURLRequestContextGetter::InitializeURLRequestContext 6134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // will be called on IO thread as a result. InitializeURLRequestContext() 6234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // will initialize DataReductionProxyAuthRequestHandler. 636e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) AwURLRequestContextGetter* aw_url_request_context_getter = 646e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) static_cast<AwURLRequestContextGetter*>( 656e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) browser_context->GetRequestContext()); 6634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) 6734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // This PostTask has to be called after GetRequestContext, because SetKeyOnIO 6834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) // needs a valid DataReductionProxyAuthRequestHandler object. 6934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) BrowserThread::PostTask(BrowserThread::IO, 7034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) FROM_HERE, 7134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) base::Bind(&AwURLRequestContextGetter::SetKeyOnIO, 7234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) aw_url_request_context_getter, 7334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles) ConvertJavaStringToUTF8(env, key))); 74cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)} 75cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) 76cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)// static 77cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)void SetDataReductionProxyEnabled(JNIEnv* env, jclass, jboolean enabled) { 78cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) AwBrowserContext::SetDataReductionProxyEnabled(enabled); 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 81f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// static 82f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)jstring GetUnreachableWebDataUrl(JNIEnv* env, jclass) { 83f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return base::android::ConvertUTF8ToJavaString( 84f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) env, content::kUnreachableWebDataURL).Release(); 85f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 86f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 875f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)// static 885f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)void SetRecordFullDocument(JNIEnv* env, jclass, jboolean record_full_document) { 895f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) content::SynchronousCompositor::SetRecordFullDocument(record_full_document); 905f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)} 915f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 92010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)bool RegisterAwContentsStatics(JNIEnv* env) { 93010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return RegisterNativesImpl(env); 94010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 95010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 96010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} // namespace android_webview 97