| 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 |
| 11 #include "base/android/jni_android.h" | 11 #include "base/android/jni_android.h" |
| 12 #include "base/android/jni_string.h" | 12 #include "base/android/jni_string.h" |
| 13 #include "base/android/scoped_java_ref.h" | 13 #include "base/android/scoped_java_ref.h" |
| 14 #include "content/browser/renderer_host/render_widget_host_impl.h" | 14 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 15 #include "content/browser/web_contents/web_contents_impl.h" | 15 #include "content/browser/web_contents/web_contents_impl.h" |
| 16 #include "content/public/browser/navigation_details.h" | 16 #include "content/public/browser/navigation_details.h" |
| 17 #include "content/public/browser/navigation_entry.h" | 17 #include "content/public/browser/navigation_entry.h" |
| 18 #include "jni/WebContentsObserverAndroid_jni.h" | 18 #include "jni/WebContentsObserver_jni.h" |
| 19 | 19 |
| 20 using base::android::AttachCurrentThread; | 20 using base::android::AttachCurrentThread; |
| 21 using base::android::ScopedJavaLocalRef; | 21 using base::android::ScopedJavaLocalRef; |
| 22 using base::android::ConvertUTF8ToJavaString; | 22 using base::android::ConvertUTF8ToJavaString; |
| 23 using base::android::ConvertUTF16ToJavaString; | 23 using base::android::ConvertUTF16ToJavaString; |
| 24 | 24 |
| 25 namespace content { | 25 namespace content { |
| 26 | 26 |
| 27 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID, | 27 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID, |
| 28 // which is not sufficient to identify a frame (since frame IDs are scoped per | 28 // which is not sufficient to identify a frame (since frame IDs are scoped per |
| (...skipping 23 matching lines...) Expand all Loading... |
| 52 delete this; | 52 delete this; |
| 53 } | 53 } |
| 54 | 54 |
| 55 void WebContentsObserverAndroid::WebContentsDestroyed() { | 55 void WebContentsObserverAndroid::WebContentsDestroyed() { |
| 56 JNIEnv* env = AttachCurrentThread(); | 56 JNIEnv* env = AttachCurrentThread(); |
| 57 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 57 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 58 if (obj.is_null()) { | 58 if (obj.is_null()) { |
| 59 delete this; | 59 delete this; |
| 60 } else { | 60 } else { |
| 61 // The java side will destroy |this| | 61 // The java side will destroy |this| |
| 62 Java_WebContentsObserverAndroid_detachFromWebContents(env, obj.obj()); | 62 Java_WebContentsObserver_detachFromWebContents(env, obj.obj()); |
| 63 } | 63 } |
| 64 } | 64 } |
| 65 | 65 |
| 66 void WebContentsObserverAndroid::RenderProcessGone( | 66 void WebContentsObserverAndroid::RenderProcessGone( |
| 67 base::TerminationStatus termination_status) { | 67 base::TerminationStatus termination_status) { |
| 68 JNIEnv* env = AttachCurrentThread(); | 68 JNIEnv* env = AttachCurrentThread(); |
| 69 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 69 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 70 if (obj.is_null()) | 70 if (obj.is_null()) |
| 71 return; | 71 return; |
| 72 jboolean was_oom_protected = | 72 jboolean was_oom_protected = |
| 73 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; | 73 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; |
| 74 Java_WebContentsObserverAndroid_renderProcessGone( | 74 Java_WebContentsObserver_renderProcessGone( |
| 75 env, obj.obj(), was_oom_protected); | 75 env, obj.obj(), was_oom_protected); |
| 76 } | 76 } |
| 77 | 77 |
| 78 void WebContentsObserverAndroid::DidStartLoading( | 78 void WebContentsObserverAndroid::DidStartLoading( |
| 79 RenderViewHost* render_view_host) { | 79 RenderViewHost* render_view_host) { |
| 80 JNIEnv* env = AttachCurrentThread(); | 80 JNIEnv* env = AttachCurrentThread(); |
| 81 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 81 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 82 if (obj.is_null()) | 82 if (obj.is_null()) |
| 83 return; | 83 return; |
| 84 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 84 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( |
| 85 env, web_contents()->GetVisibleURL().spec())); | 85 env, web_contents()->GetVisibleURL().spec())); |
| 86 Java_WebContentsObserverAndroid_didStartLoading( | 86 Java_WebContentsObserver_didStartLoading( |
| 87 env, obj.obj(), jstring_url.obj()); | 87 env, obj.obj(), jstring_url.obj()); |
| 88 } | 88 } |
| 89 | 89 |
| 90 void WebContentsObserverAndroid::DidStopLoading( | 90 void WebContentsObserverAndroid::DidStopLoading( |
| 91 RenderViewHost* render_view_host) { | 91 RenderViewHost* render_view_host) { |
| 92 JNIEnv* env = AttachCurrentThread(); | 92 JNIEnv* env = AttachCurrentThread(); |
| 93 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 93 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 94 if (obj.is_null()) | 94 if (obj.is_null()) |
| 95 return; | 95 return; |
| 96 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 96 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( |
| 97 env, web_contents()->GetLastCommittedURL().spec())); | 97 env, web_contents()->GetLastCommittedURL().spec())); |
| 98 Java_WebContentsObserverAndroid_didStopLoading( | 98 Java_WebContentsObserver_didStopLoading( |
| 99 env, obj.obj(), jstring_url.obj()); | 99 env, obj.obj(), jstring_url.obj()); |
| 100 } | 100 } |
| 101 | 101 |
| 102 void WebContentsObserverAndroid::DidFailProvisionalLoad( | 102 void WebContentsObserverAndroid::DidFailProvisionalLoad( |
| 103 RenderFrameHost* render_frame_host, | 103 RenderFrameHost* render_frame_host, |
| 104 const GURL& validated_url, | 104 const GURL& validated_url, |
| 105 int error_code, | 105 int error_code, |
| 106 const base::string16& error_description) { | 106 const base::string16& error_description) { |
| 107 DidFailLoadInternal(true, | 107 DidFailLoadInternal(true, |
| 108 !render_frame_host->GetParent(), | 108 !render_frame_host->GetParent(), |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 bool urls_same_ignoring_fragment = | 141 bool urls_same_ignoring_fragment = |
| 142 params.url.ReplaceComponents(replacements) == | 142 params.url.ReplaceComponents(replacements) == |
| 143 details.previous_url.ReplaceComponents(replacements); | 143 details.previous_url.ReplaceComponents(replacements); |
| 144 | 144 |
| 145 // is_fragment_navigation is indicative of the intent of this variable. | 145 // is_fragment_navigation is indicative of the intent of this variable. |
| 146 // However, there isn't sufficient information here to determine whether this | 146 // However, there isn't sufficient information here to determine whether this |
| 147 // is actually a fragment navigation, or a history API navigation to a URL | 147 // is actually a fragment navigation, or a history API navigation to a URL |
| 148 // that would also be valid for a fragment navigation. | 148 // that would also be valid for a fragment navigation. |
| 149 bool is_fragment_navigation = urls_same_ignoring_fragment && | 149 bool is_fragment_navigation = urls_same_ignoring_fragment && |
| 150 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); | 150 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); |
| 151 Java_WebContentsObserverAndroid_didNavigateMainFrame( | 151 Java_WebContentsObserver_didNavigateMainFrame( |
| 152 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 152 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 153 details.is_navigation_to_different_page(), is_fragment_navigation, | 153 details.is_navigation_to_different_page(), is_fragment_navigation, |
| 154 details.http_status_code); | 154 details.http_status_code); |
| 155 } | 155 } |
| 156 | 156 |
| 157 void WebContentsObserverAndroid::DidNavigateAnyFrame( | 157 void WebContentsObserverAndroid::DidNavigateAnyFrame( |
| 158 RenderFrameHost* render_frame_host, | 158 RenderFrameHost* render_frame_host, |
| 159 const LoadCommittedDetails& details, | 159 const LoadCommittedDetails& details, |
| 160 const FrameNavigateParams& params) { | 160 const FrameNavigateParams& params) { |
| 161 JNIEnv* env = AttachCurrentThread(); | 161 JNIEnv* env = AttachCurrentThread(); |
| 162 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 162 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 163 if (obj.is_null()) | 163 if (obj.is_null()) |
| 164 return; | 164 return; |
| 165 ScopedJavaLocalRef<jstring> jstring_url( | 165 ScopedJavaLocalRef<jstring> jstring_url( |
| 166 ConvertUTF8ToJavaString(env, params.url.spec())); | 166 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 167 ScopedJavaLocalRef<jstring> jstring_base_url( | 167 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 168 ConvertUTF8ToJavaString(env, params.base_url.spec())); | 168 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 169 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( | 169 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( |
| 170 params.transition, ui::PAGE_TRANSITION_RELOAD); | 170 params.transition, ui::PAGE_TRANSITION_RELOAD); |
| 171 | 171 |
| 172 Java_WebContentsObserverAndroid_didNavigateAnyFrame( | 172 Java_WebContentsObserver_didNavigateAnyFrame( |
| 173 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 173 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 174 jboolean_is_reload); | 174 jboolean_is_reload); |
| 175 } | 175 } |
| 176 | 176 |
| 177 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( | 177 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( |
| 178 RenderFrameHost* render_frame_host, | 178 RenderFrameHost* render_frame_host, |
| 179 const GURL& validated_url, | 179 const GURL& validated_url, |
| 180 bool is_error_page, | 180 bool is_error_page, |
| 181 bool is_iframe_srcdoc) { | 181 bool is_iframe_srcdoc) { |
| 182 JNIEnv* env = AttachCurrentThread(); | 182 JNIEnv* env = AttachCurrentThread(); |
| 183 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 183 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 184 if (obj.is_null()) | 184 if (obj.is_null()) |
| 185 return; | 185 return; |
| 186 ScopedJavaLocalRef<jstring> jstring_url( | 186 ScopedJavaLocalRef<jstring> jstring_url( |
| 187 ConvertUTF8ToJavaString(env, validated_url.spec())); | 187 ConvertUTF8ToJavaString(env, validated_url.spec())); |
| 188 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear | 188 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear |
| 189 // to be used at all, and it just adds complexity here. | 189 // to be used at all, and it just adds complexity here. |
| 190 Java_WebContentsObserverAndroid_didStartProvisionalLoadForFrame( | 190 Java_WebContentsObserver_didStartProvisionalLoadForFrame( |
| 191 env, | 191 env, |
| 192 obj.obj(), | 192 obj.obj(), |
| 193 render_frame_host->GetRoutingID(), | 193 render_frame_host->GetRoutingID(), |
| 194 render_frame_host->GetParent() | 194 render_frame_host->GetParent() |
| 195 ? render_frame_host->GetParent()->GetRoutingID() | 195 ? render_frame_host->GetParent()->GetRoutingID() |
| 196 : -1, | 196 : -1, |
| 197 !render_frame_host->GetParent(), | 197 !render_frame_host->GetParent(), |
| 198 jstring_url.obj(), | 198 jstring_url.obj(), |
| 199 is_error_page, | 199 is_error_page, |
| 200 is_iframe_srcdoc); | 200 is_iframe_srcdoc); |
| 201 } | 201 } |
| 202 | 202 |
| 203 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( | 203 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( |
| 204 RenderFrameHost* render_frame_host, | 204 RenderFrameHost* render_frame_host, |
| 205 const GURL& url, | 205 const GURL& url, |
| 206 ui::PageTransition transition_type) { | 206 ui::PageTransition transition_type) { |
| 207 JNIEnv* env = AttachCurrentThread(); | 207 JNIEnv* env = AttachCurrentThread(); |
| 208 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 208 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 209 if (obj.is_null()) | 209 if (obj.is_null()) |
| 210 return; | 210 return; |
| 211 ScopedJavaLocalRef<jstring> jstring_url( | 211 ScopedJavaLocalRef<jstring> jstring_url( |
| 212 ConvertUTF8ToJavaString(env, url.spec())); | 212 ConvertUTF8ToJavaString(env, url.spec())); |
| 213 Java_WebContentsObserverAndroid_didCommitProvisionalLoadForFrame( | 213 Java_WebContentsObserver_didCommitProvisionalLoadForFrame( |
| 214 env, | 214 env, |
| 215 obj.obj(), | 215 obj.obj(), |
| 216 render_frame_host->GetRoutingID(), | 216 render_frame_host->GetRoutingID(), |
| 217 !render_frame_host->GetParent(), | 217 !render_frame_host->GetParent(), |
| 218 jstring_url.obj(), | 218 jstring_url.obj(), |
| 219 transition_type); | 219 transition_type); |
| 220 } | 220 } |
| 221 | 221 |
| 222 void WebContentsObserverAndroid::DidFinishLoad( | 222 void WebContentsObserverAndroid::DidFinishLoad( |
| 223 RenderFrameHost* render_frame_host, | 223 RenderFrameHost* render_frame_host, |
| 224 const GURL& validated_url) { | 224 const GURL& validated_url) { |
| 225 JNIEnv* env = AttachCurrentThread(); | 225 JNIEnv* env = AttachCurrentThread(); |
| 226 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 226 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 227 if (obj.is_null()) | 227 if (obj.is_null()) |
| 228 return; | 228 return; |
| 229 | 229 |
| 230 std::string url_string = validated_url.spec(); | 230 std::string url_string = validated_url.spec(); |
| 231 NavigationEntry* entry = | 231 NavigationEntry* entry = |
| 232 web_contents()->GetController().GetLastCommittedEntry(); | 232 web_contents()->GetController().GetLastCommittedEntry(); |
| 233 // Note that GetBaseURLForDataURL is only used by the Android WebView. | 233 // Note that GetBaseURLForDataURL is only used by the Android WebView. |
| 234 if (entry && !entry->GetBaseURLForDataURL().is_empty()) | 234 if (entry && !entry->GetBaseURLForDataURL().is_empty()) |
| 235 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); | 235 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); |
| 236 | 236 |
| 237 ScopedJavaLocalRef<jstring> jstring_url( | 237 ScopedJavaLocalRef<jstring> jstring_url( |
| 238 ConvertUTF8ToJavaString(env, url_string)); | 238 ConvertUTF8ToJavaString(env, url_string)); |
| 239 Java_WebContentsObserverAndroid_didFinishLoad( | 239 Java_WebContentsObserver_didFinishLoad( |
| 240 env, | 240 env, |
| 241 obj.obj(), | 241 obj.obj(), |
| 242 render_frame_host->GetRoutingID(), | 242 render_frame_host->GetRoutingID(), |
| 243 jstring_url.obj(), | 243 jstring_url.obj(), |
| 244 !render_frame_host->GetParent()); | 244 !render_frame_host->GetParent()); |
| 245 } | 245 } |
| 246 | 246 |
| 247 void WebContentsObserverAndroid::DocumentLoadedInFrame( | 247 void WebContentsObserverAndroid::DocumentLoadedInFrame( |
| 248 RenderFrameHost* render_frame_host) { | 248 RenderFrameHost* render_frame_host) { |
| 249 JNIEnv* env = AttachCurrentThread(); | 249 JNIEnv* env = AttachCurrentThread(); |
| 250 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 250 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 251 if (obj.is_null()) | 251 if (obj.is_null()) |
| 252 return; | 252 return; |
| 253 Java_WebContentsObserverAndroid_documentLoadedInFrame( | 253 Java_WebContentsObserver_documentLoadedInFrame( |
| 254 env, obj.obj(), render_frame_host->GetRoutingID()); | 254 env, obj.obj(), render_frame_host->GetRoutingID()); |
| 255 } | 255 } |
| 256 | 256 |
| 257 void WebContentsObserverAndroid::NavigationEntryCommitted( | 257 void WebContentsObserverAndroid::NavigationEntryCommitted( |
| 258 const LoadCommittedDetails& load_details) { | 258 const LoadCommittedDetails& load_details) { |
| 259 JNIEnv* env = AttachCurrentThread(); | 259 JNIEnv* env = AttachCurrentThread(); |
| 260 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 260 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 261 if (obj.is_null()) | 261 if (obj.is_null()) |
| 262 return; | 262 return; |
| 263 Java_WebContentsObserverAndroid_navigationEntryCommitted(env, obj.obj()); | 263 Java_WebContentsObserver_navigationEntryCommitted(env, obj.obj()); |
| 264 } | 264 } |
| 265 | 265 |
| 266 void WebContentsObserverAndroid::DidAttachInterstitialPage() { | 266 void WebContentsObserverAndroid::DidAttachInterstitialPage() { |
| 267 JNIEnv* env = AttachCurrentThread(); | 267 JNIEnv* env = AttachCurrentThread(); |
| 268 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 268 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 269 if (obj.is_null()) | 269 if (obj.is_null()) |
| 270 return; | 270 return; |
| 271 Java_WebContentsObserverAndroid_didAttachInterstitialPage(env, obj.obj()); | 271 Java_WebContentsObserver_didAttachInterstitialPage(env, obj.obj()); |
| 272 } | 272 } |
| 273 | 273 |
| 274 void WebContentsObserverAndroid::DidDetachInterstitialPage() { | 274 void WebContentsObserverAndroid::DidDetachInterstitialPage() { |
| 275 JNIEnv* env = AttachCurrentThread(); | 275 JNIEnv* env = AttachCurrentThread(); |
| 276 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 276 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 277 if (obj.is_null()) | 277 if (obj.is_null()) |
| 278 return; | 278 return; |
| 279 Java_WebContentsObserverAndroid_didDetachInterstitialPage(env, obj.obj()); | 279 Java_WebContentsObserver_didDetachInterstitialPage(env, obj.obj()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { | 282 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { |
| 283 JNIEnv* env = AttachCurrentThread(); | 283 JNIEnv* env = AttachCurrentThread(); |
| 284 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 284 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 285 if (obj.is_null()) | 285 if (obj.is_null()) |
| 286 return; | 286 return; |
| 287 Java_WebContentsObserverAndroid_didChangeThemeColor(env, obj.obj(), color); | 287 Java_WebContentsObserver_didChangeThemeColor(env, obj.obj(), color); |
| 288 } | 288 } |
| 289 | 289 |
| 290 void WebContentsObserverAndroid::DidFailLoadInternal( | 290 void WebContentsObserverAndroid::DidFailLoadInternal( |
| 291 bool is_provisional_load, | 291 bool is_provisional_load, |
| 292 bool is_main_frame, | 292 bool is_main_frame, |
| 293 int error_code, | 293 int error_code, |
| 294 const base::string16& description, | 294 const base::string16& description, |
| 295 const GURL& url) { | 295 const GURL& url) { |
| 296 JNIEnv* env = AttachCurrentThread(); | 296 JNIEnv* env = AttachCurrentThread(); |
| 297 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 297 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 298 if (obj.is_null()) | 298 if (obj.is_null()) |
| 299 return; | 299 return; |
| 300 ScopedJavaLocalRef<jstring> jstring_error_description( | 300 ScopedJavaLocalRef<jstring> jstring_error_description( |
| 301 ConvertUTF16ToJavaString(env, description)); | 301 ConvertUTF16ToJavaString(env, description)); |
| 302 ScopedJavaLocalRef<jstring> jstring_url( | 302 ScopedJavaLocalRef<jstring> jstring_url( |
| 303 ConvertUTF8ToJavaString(env, url.spec())); | 303 ConvertUTF8ToJavaString(env, url.spec())); |
| 304 | 304 |
| 305 Java_WebContentsObserverAndroid_didFailLoad( | 305 Java_WebContentsObserver_didFailLoad( |
| 306 env, obj.obj(), | 306 env, obj.obj(), |
| 307 is_provisional_load, | 307 is_provisional_load, |
| 308 is_main_frame, | 308 is_main_frame, |
| 309 error_code, | 309 error_code, |
| 310 jstring_error_description.obj(), jstring_url.obj()); | 310 jstring_error_description.obj(), jstring_url.obj()); |
| 311 } | 311 } |
| 312 | 312 |
| 313 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { | 313 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { |
| 314 JNIEnv* env = AttachCurrentThread(); | 314 JNIEnv* env = AttachCurrentThread(); |
| 315 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 315 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 316 if (obj.is_null()) | 316 if (obj.is_null()) |
| 317 return; | 317 return; |
| 318 Java_WebContentsObserverAndroid_didFirstVisuallyNonEmptyPaint( | 318 Java_WebContentsObserver_didFirstVisuallyNonEmptyPaint( |
| 319 env, obj.obj()); | 319 env, obj.obj()); |
| 320 } | 320 } |
| 321 | 321 |
| 322 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { | 322 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { |
| 323 return RegisterNativesImpl(env); | 323 return RegisterNativesImpl(env); |
| 324 } | 324 } |
| 325 } // namespace content | 325 } // namespace content |
| OLD | NEW |