web_contents_observer_android.cc revision 4e180b6a0b4720a9b8e9e959a882386f690f08ff
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)#include "content/browser/android/web_contents_observer_android.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string> 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <jni.h> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_android.h" 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/android/jni_string.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/scoped_java_ref.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/android/content_view_core_impl.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/renderer_host/render_widget_host_impl.h" 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/browser/web_contents/web_contents_impl.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_details.h" 18424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles)#include "content/public/browser/navigation_entry.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "jni/WebContentsObserverAndroid_jni.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::AttachCurrentThread; 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ScopedJavaLocalRef; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF8ToJavaString; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using base::android::ConvertUTF16ToJavaString; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content { 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsObserverAndroid::WebContentsObserverAndroid( 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env, 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jobject obj, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : WebContentsObserver(web_contents), 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) weak_java_observer_(env, obj){ 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)WebContentsObserverAndroid::~WebContentsObserverAndroid() { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)jint Init(JNIEnv* env, jobject obj, jint native_content_view_core) { 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentViewCore* content_view_core = 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<ContentViewCore*>(native_content_view_core); 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContentsObserverAndroid* native_observer = new WebContentsObserverAndroid( 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj, content_view_core->GetWebContents()); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return reinterpret_cast<jint>(native_observer); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::WebContentsDestroyed( 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebContents* web_contents) { 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) delete this; 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The java side will destroy |this| 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_WebContentsObserverAndroid_detachFromWebContents(env, obj.obj()); 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidStartLoading( 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host) { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( 703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) env, web_contents()->GetVisibleURL().spec())); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_WebContentsObserverAndroid_didStartLoading( 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj.obj(), jstring_url.obj()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidStopLoading( 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host) { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 81424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 82424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) std::string url_string; 83424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) NavigationEntry* entry = 84424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) web_contents()->GetController().GetLastCommittedEntry(); 85424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Not that GetBaseURLForDataURL is only used by the Android WebView 86424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) if (entry && !entry->GetBaseURLForDataURL().is_empty()) { 87424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); 88424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } else { 89424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) url_string = web_contents()->GetLastCommittedURL().spec(); 90424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 91424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 92424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 93424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) ConvertUTF8ToJavaString(env, url_string)); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_WebContentsObserverAndroid_didStopLoading( 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj.obj(), jstring_url.obj()); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidFailProvisionalLoad( 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int error_code, 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& error_description, 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host) { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DidFailLoadInternal( 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) true, is_main_frame, error_code, error_description, validated_url); 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidFailLoad( 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int64 frame_id, 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& validated_url, 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int error_code, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& error_description, 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RenderViewHost* render_view_host) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DidFailLoadInternal( 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) false, is_main_frame, error_code, error_description, validated_url); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidNavigateMainFrame( 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const LoadCommittedDetails& details, 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const FrameNavigateParams& params) { 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, params.url.spec())); 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_base_url( 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, params.base_url.spec())); 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_WebContentsObserverAndroid_didNavigateMainFrame( 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) details.is_navigation_to_different_page()); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsObserverAndroid::DidNavigateAnyFrame( 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LoadCommittedDetails& details, 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const FrameNavigateParams& params) { 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, params.url.spec())); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_base_url( 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, params.base_url.spec())); 1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch jboolean jboolean_is_reload = 1487dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch PageTransitionCoreTypeIs(params.transition, PAGE_TRANSITION_RELOAD); 1497dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_WebContentsObserverAndroid_didNavigateAnyFrame( 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jboolean_is_reload); 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 frame_id, 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 parent_frame_id, 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_main_frame, 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& validated_url, 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_error_page, 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_iframe_srcdoc, 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* render_view_host) { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, validated_url.spec())); 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_WebContentsObserverAndroid_didStartProvisionalLoadForFrame( 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), frame_id, parent_frame_id, is_main_frame, 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) jstring_url.obj(), is_error_page, is_iframe_srcdoc); 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 frame_id, 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_main_frame, 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& url, 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PageTransition transition_type, 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* render_view_host) { 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, url.spec())); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_WebContentsObserverAndroid_didCommitProvisionalLoadForFrame( 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), frame_id, is_main_frame, jstring_url.obj(), 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) transition_type); 1892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsObserverAndroid::DidFinishLoad( 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int64 frame_id, 1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const GURL& validated_url, 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_main_frame, 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderViewHost* render_view_host) { 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, validated_url.spec())); 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_WebContentsObserverAndroid_didFinishLoad( 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) env, obj.obj(), frame_id, jstring_url.obj(), is_main_frame); 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2064e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)void WebContentsObserverAndroid::NavigationEntryCommitted( 2074e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const LoadCommittedDetails& load_details) { 2084e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2094e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 2104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) if (obj.is_null()) 2114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) return; 2124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Java_WebContentsObserverAndroid_navigationEntryCommitted(env, obj.obj()); 2134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 2144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void WebContentsObserverAndroid::DidChangeVisibleSSLState() { 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) if (obj.is_null()) 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Java_WebContentsObserverAndroid_didChangeVisibleSSLState(env, obj.obj()); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 223d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebContentsObserverAndroid::DidAttachInterstitialPage() { 224d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 225d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 226d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (obj.is_null()) 227d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 228d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Java_WebContentsObserverAndroid_didAttachInterstitialPage(env, obj.obj()); 229d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 230d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 231d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)void WebContentsObserverAndroid::DidDetachInterstitialPage() { 232d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 233d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 234d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) if (obj.is_null()) 235d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) return; 236d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) Java_WebContentsObserverAndroid_didDetachInterstitialPage(env, obj.obj()); 237d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)} 238d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles) 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void WebContentsObserverAndroid::DidFailLoadInternal( 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_provisional_load, 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_main_frame, 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int error_code, 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const string16& description, 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const GURL& url) { 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) JNIEnv* env = AttachCurrentThread(); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (obj.is_null()) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_error_description( 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF16ToJavaString(env, description)); 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScopedJavaLocalRef<jstring> jstring_url( 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ConvertUTF8ToJavaString(env, url.spec())); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Java_WebContentsObserverAndroid_didFailLoad( 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) env, obj.obj(), 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_provisional_load, 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) is_main_frame, 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) error_code, 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) jstring_error_description.obj(), jstring_url.obj()); 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool RegisterWebContentsObserverAndroid(JNIEnv* env) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return RegisterNativesImpl(env); 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace content 266