1ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/interstitial_page_delegate_android.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/scoped_java_ref.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/interstitial_page.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/InterstitialPageDelegateAndroid_jni.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread; 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InterstitialPageDelegateAndroid::InterstitialPageDelegateAndroid( 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& html_content) 22b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) : weak_java_obj_(env, obj), 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) html_content_(html_content), 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_(NULL) { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)InterstitialPageDelegateAndroid::~InterstitialPageDelegateAndroid() { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_obj_.get(env); 30b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) if (obj.obj()) 31b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) Java_InterstitialPageDelegateAndroid_onNativeDestroyed(env, obj.obj()); 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterstitialPageDelegateAndroid::Proceed(JNIEnv* env, jobject obj) { 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_->Proceed(); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterstitialPageDelegateAndroid::DontProceed(JNIEnv* env, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj) { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (page_) 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) page_->DontProceed(); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string InterstitialPageDelegateAndroid::GetHTMLContents() { 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return html_content_; 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterstitialPageDelegateAndroid::OnProceed() { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_obj_.get(env); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.obj()) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_InterstitialPageDelegateAndroid_onProceed(env, obj.obj()); 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void InterstitialPageDelegateAndroid::OnDontProceed() { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_obj_.get(env); 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) if (obj.obj()) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_InterstitialPageDelegateAndroid_onDontProceed(env, obj.obj()); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void InterstitialPageDelegateAndroid::CommandReceived( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const std::string& command) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ScopedJavaLocalRef<jobject> obj = weak_java_obj_.get(env); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.obj()) { 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string sanitized_command(command); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The JSONified response has quotes, remove them. 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (sanitized_command.length() > 1 && sanitized_command[0] == '"') { 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) sanitized_command = sanitized_command.substr( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, sanitized_command.length() - 2); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Java_InterstitialPageDelegateAndroid_commandReceived( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj.obj(), 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::android::ConvertUTF8ToJavaString(env, sanitized_command).obj()); 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// static 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)bool InterstitialPageDelegateAndroid 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ::RegisterInterstitialPageDelegateAndroid(JNIEnv* env) { 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return RegisterNativesImpl(env); 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)static jint Init(JNIEnv* env, jobject obj, jstring html_content) { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InterstitialPageDelegateAndroid* delegate = 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) new InterstitialPageDelegateAndroid( 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) env, obj, base::android::ConvertJavaStringToUTF8(env, html_content)); 91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return reinterpret_cast<jint>(delegate); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)