| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/browser/android/web_contents_observer_android.h" | 5 #include "content/browser/android/web_contents_observer_android.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include <jni.h> | 9 #include <jni.h> |
| 10 | 10 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 return reinterpret_cast<jint>(native_observer); | 43 return reinterpret_cast<jint>(native_observer); |
| 44 } | 44 } |
| 45 | 45 |
| 46 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { | 46 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { |
| 47 delete this; | 47 delete this; |
| 48 } | 48 } |
| 49 | 49 |
| 50 void WebContentsObserverAndroid::WebContentsDestroyed( | 50 void WebContentsObserverAndroid::WebContentsDestroyed( |
| 51 WebContents* web_contents) { | 51 WebContents* web_contents) { |
| 52 JNIEnv* env = AttachCurrentThread(); | 52 JNIEnv* env = AttachCurrentThread(); |
| 53 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 53 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 54 if (obj.is_null()) { | 54 if (obj.is_null()) { |
| 55 delete this; | 55 delete this; |
| 56 } else { | 56 } else { |
| 57 // The java side will destroy |this| | 57 // The java side will destroy |this| |
| 58 Java_WebContentsObserverAndroid_detachFromWebContents(env, obj.obj()); | 58 Java_WebContentsObserverAndroid_detachFromWebContents(env, obj.obj()); |
| 59 } | 59 } |
| 60 } | 60 } |
| 61 | 61 |
| 62 void WebContentsObserverAndroid::DidStartLoading( | 62 void WebContentsObserverAndroid::DidStartLoading( |
| 63 RenderViewHost* render_view_host) { | 63 RenderViewHost* render_view_host) { |
| 64 JNIEnv* env = AttachCurrentThread(); | 64 JNIEnv* env = AttachCurrentThread(); |
| 65 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 65 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 66 if (obj.is_null()) | 66 if (obj.is_null()) |
| 67 return; | 67 return; |
| 68 ScopedJavaLocalRef<jstring> jstring_url = | 68 ScopedJavaLocalRef<jstring> jstring_url( |
| 69 ConvertUTF8ToJavaString(env, web_contents()->GetURL().spec()); | 69 ConvertUTF8ToJavaString(env, web_contents()->GetURL().spec())); |
| 70 Java_WebContentsObserverAndroid_didStartLoading( | 70 Java_WebContentsObserverAndroid_didStartLoading( |
| 71 env, obj.obj(), jstring_url.obj()); | 71 env, obj.obj(), jstring_url.obj()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void WebContentsObserverAndroid::DidStopLoading( | 74 void WebContentsObserverAndroid::DidStopLoading( |
| 75 RenderViewHost* render_view_host) { | 75 RenderViewHost* render_view_host) { |
| 76 JNIEnv* env = AttachCurrentThread(); | 76 JNIEnv* env = AttachCurrentThread(); |
| 77 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 77 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 78 if (obj.is_null()) | 78 if (obj.is_null()) |
| 79 return; | 79 return; |
| 80 ScopedJavaLocalRef<jstring> jstring_url = | 80 ScopedJavaLocalRef<jstring> jstring_url( |
| 81 ConvertUTF8ToJavaString(env, web_contents()->GetURL().spec()); | 81 ConvertUTF8ToJavaString(env, web_contents()->GetURL().spec())); |
| 82 Java_WebContentsObserverAndroid_didStopLoading( | 82 Java_WebContentsObserverAndroid_didStopLoading( |
| 83 env, obj.obj(), jstring_url.obj()); | 83 env, obj.obj(), jstring_url.obj()); |
| 84 } | 84 } |
| 85 | 85 |
| 86 void WebContentsObserverAndroid::DidFailProvisionalLoad( | 86 void WebContentsObserverAndroid::DidFailProvisionalLoad( |
| 87 int64 frame_id, | 87 int64 frame_id, |
| 88 bool is_main_frame, | 88 bool is_main_frame, |
| 89 const GURL& validated_url, | 89 const GURL& validated_url, |
| 90 int error_code, | 90 int error_code, |
| 91 const string16& error_description, | 91 const string16& error_description, |
| (...skipping 10 matching lines...) Expand all Loading... |
| 102 const string16& error_description, | 102 const string16& error_description, |
| 103 RenderViewHost* render_view_host) { | 103 RenderViewHost* render_view_host) { |
| 104 DidFailLoadInternal( | 104 DidFailLoadInternal( |
| 105 false, is_main_frame, error_code, error_description, validated_url); | 105 false, is_main_frame, error_code, error_description, validated_url); |
| 106 } | 106 } |
| 107 | 107 |
| 108 void WebContentsObserverAndroid::DidNavigateMainFrame( | 108 void WebContentsObserverAndroid::DidNavigateMainFrame( |
| 109 const LoadCommittedDetails& details, | 109 const LoadCommittedDetails& details, |
| 110 const FrameNavigateParams& params) { | 110 const FrameNavigateParams& params) { |
| 111 JNIEnv* env = AttachCurrentThread(); | 111 JNIEnv* env = AttachCurrentThread(); |
| 112 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 112 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 113 if (obj.is_null()) | 113 if (obj.is_null()) |
| 114 return; | 114 return; |
| 115 ScopedJavaLocalRef<jstring> jstring_url = | 115 ScopedJavaLocalRef<jstring> jstring_url( |
| 116 ConvertUTF8ToJavaString(env, params.url.spec()); | 116 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 117 ScopedJavaLocalRef<jstring> jstring_base_url = | 117 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 118 ConvertUTF8ToJavaString(env, params.base_url.spec()); | 118 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 119 Java_WebContentsObserverAndroid_didNavigateMainFrame( | 119 Java_WebContentsObserverAndroid_didNavigateMainFrame( |
| 120 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj()); | 120 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj()); |
| 121 } | 121 } |
| 122 | 122 |
| 123 void WebContentsObserverAndroid::DidNavigateAnyFrame( | 123 void WebContentsObserverAndroid::DidNavigateAnyFrame( |
| 124 const LoadCommittedDetails& details, | 124 const LoadCommittedDetails& details, |
| 125 const FrameNavigateParams& params) { | 125 const FrameNavigateParams& params) { |
| 126 JNIEnv* env = AttachCurrentThread(); | 126 JNIEnv* env = AttachCurrentThread(); |
| 127 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 127 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 128 if (obj.is_null()) | 128 if (obj.is_null()) |
| 129 return; | 129 return; |
| 130 ScopedJavaLocalRef<jstring> jstring_url = | 130 ScopedJavaLocalRef<jstring> jstring_url( |
| 131 ConvertUTF8ToJavaString(env, params.url.spec()); | 131 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 132 ScopedJavaLocalRef<jstring> jstring_base_url = | 132 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 133 ConvertUTF8ToJavaString(env, params.base_url.spec()); | 133 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 134 jboolean jboolean_is_reload = PAGE_TRANSITION_RELOAD == params.transition; | 134 jboolean jboolean_is_reload = PAGE_TRANSITION_RELOAD == params.transition; |
| 135 Java_WebContentsObserverAndroid_didNavigateAnyFrame( | 135 Java_WebContentsObserverAndroid_didNavigateAnyFrame( |
| 136 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 136 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 137 jboolean_is_reload); | 137 jboolean_is_reload); |
| 138 } | 138 } |
| 139 | 139 |
| 140 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( |
| 141 int64 frame_id, |
| 142 int64 parent_frame_id, |
| 143 bool is_main_frame, |
| 144 const GURL& validated_url, |
| 145 bool is_error_page, |
| 146 bool is_iframe_srcdoc, |
| 147 RenderViewHost* render_view_host) { |
| 148 JNIEnv* env = AttachCurrentThread(); |
| 149 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 150 if (obj.is_null()) |
| 151 return; |
| 152 ScopedJavaLocalRef<jstring> jstring_url( |
| 153 ConvertUTF8ToJavaString(env, validated_url.spec())); |
| 154 Java_WebContentsObserverAndroid_didStartProvisionalLoadForFrame( |
| 155 env, obj.obj(), frame_id, parent_frame_id, is_main_frame, |
| 156 jstring_url.obj(), is_error_page, is_iframe_srcdoc); |
| 157 } |
| 158 |
| 140 void WebContentsObserverAndroid::DidFailLoadInternal( | 159 void WebContentsObserverAndroid::DidFailLoadInternal( |
| 141 bool is_provisional_load, | 160 bool is_provisional_load, |
| 142 bool is_main_frame, | 161 bool is_main_frame, |
| 143 int error_code, | 162 int error_code, |
| 144 const string16& description, | 163 const string16& description, |
| 145 const GURL& url) { | 164 const GURL& url) { |
| 146 JNIEnv* env = AttachCurrentThread(); | 165 JNIEnv* env = AttachCurrentThread(); |
| 147 ScopedJavaLocalRef<jobject> obj = weak_java_observer_.get(env); | 166 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 148 if (obj.is_null()) | 167 if (obj.is_null()) |
| 149 return; | 168 return; |
| 150 ScopedJavaLocalRef<jstring> jstring_error_description = | 169 ScopedJavaLocalRef<jstring> jstring_error_description( |
| 151 ConvertUTF16ToJavaString(env, description); | 170 ConvertUTF16ToJavaString(env, description)); |
| 152 ScopedJavaLocalRef<jstring> jstring_url = | 171 ScopedJavaLocalRef<jstring> jstring_url( |
| 153 ConvertUTF8ToJavaString(env, url.spec()); | 172 ConvertUTF8ToJavaString(env, url.spec())); |
| 154 | 173 |
| 155 Java_WebContentsObserverAndroid_didFailLoad( | 174 Java_WebContentsObserverAndroid_didFailLoad( |
| 156 env, obj.obj(), | 175 env, obj.obj(), |
| 157 is_provisional_load, | 176 is_provisional_load, |
| 158 is_main_frame, | 177 is_main_frame, |
| 159 error_code, | 178 error_code, |
| 160 jstring_error_description.obj(), jstring_url.obj()); | 179 jstring_error_description.obj(), jstring_url.obj()); |
| 161 } | 180 } |
| 162 | 181 |
| 163 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { | 182 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { |
| 164 if (!HasClass(env, kWebContentsObserverAndroidClassPath)) { | 183 if (!HasClass(env, kWebContentsObserverAndroidClassPath)) { |
| 165 DLOG(ERROR) << "Unable to find class WebContentsObserverAndroid!"; | 184 DLOG(ERROR) << "Unable to find class WebContentsObserverAndroid!"; |
| 166 return false; | 185 return false; |
| 167 } | 186 } |
| 168 return RegisterNativesImpl(env); | 187 return RegisterNativesImpl(env); |
| 169 } | 188 } |
| 170 } // namespace content | 189 } // namespace content |
| OLD | NEW |