Chromium Code Reviews| 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/WebContentsObserver_jni.h" | 18 #include "jni/WebContentsObserverProxy_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 16 matching lines...) Expand all Loading... | |
| 45 | 45 |
| 46 WebContentsObserverAndroid* native_observer = new WebContentsObserverAndroid( | 46 WebContentsObserverAndroid* native_observer = new WebContentsObserverAndroid( |
| 47 env, obj, web_contents); | 47 env, obj, web_contents); |
| 48 return reinterpret_cast<intptr_t>(native_observer); | 48 return reinterpret_cast<intptr_t>(native_observer); |
| 49 } | 49 } |
| 50 | 50 |
| 51 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { | 51 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { |
| 52 delete this; | 52 delete this; |
| 53 } | 53 } |
| 54 | 54 |
| 55 void WebContentsObserverAndroid::WebContentsDestroyed() { | 55 void WebContentsObserverAndroid::WebContentsDestroyed() { |
|
Ted C
2015/02/18 22:54:36
I would update the name of this to make it easier
jdduke (slow)
2015/02/24 20:55:49
Done.
| |
| 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_WebContentsObserver_detachFromWebContents(env, obj.obj()); | 62 Java_WebContentsObserverProxy_detachFromWebContents(env, obj.obj()); |
| 63 } | 63 } |
| 64 } | 64 } |
| 65 | 65 |
| 66 void WebContentsObserverAndroid::RenderViewReady() { | 66 void WebContentsObserverAndroid::RenderViewReady() { |
| 67 JNIEnv* env = AttachCurrentThread(); | 67 JNIEnv* env = AttachCurrentThread(); |
| 68 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 68 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 69 if (obj.is_null()) | 69 if (obj.is_null()) |
| 70 return; | 70 return; |
| 71 Java_WebContentsObserver_renderViewReady(env, obj.obj()); | 71 Java_WebContentsObserverProxy_renderViewReady(env, obj.obj()); |
| 72 } | 72 } |
| 73 | 73 |
| 74 void WebContentsObserverAndroid::RenderProcessGone( | 74 void WebContentsObserverAndroid::RenderProcessGone( |
| 75 base::TerminationStatus termination_status) { | 75 base::TerminationStatus termination_status) { |
| 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 jboolean was_oom_protected = | 80 jboolean was_oom_protected = |
| 81 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; | 81 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; |
| 82 Java_WebContentsObserver_renderProcessGone( | 82 Java_WebContentsObserverProxy_renderProcessGone( |
| 83 env, obj.obj(), was_oom_protected); | 83 env, obj.obj(), was_oom_protected); |
| 84 } | 84 } |
| 85 | 85 |
| 86 void WebContentsObserverAndroid::DidStartLoading( | 86 void WebContentsObserverAndroid::DidStartLoading( |
| 87 RenderViewHost* render_view_host) { | 87 RenderViewHost* render_view_host) { |
| 88 JNIEnv* env = AttachCurrentThread(); | 88 JNIEnv* env = AttachCurrentThread(); |
| 89 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 89 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 90 if (obj.is_null()) | 90 if (obj.is_null()) |
| 91 return; | 91 return; |
| 92 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 92 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( |
| 93 env, web_contents()->GetVisibleURL().spec())); | 93 env, web_contents()->GetVisibleURL().spec())); |
| 94 Java_WebContentsObserver_didStartLoading( | 94 Java_WebContentsObserverProxy_didStartLoading( |
| 95 env, obj.obj(), jstring_url.obj()); | 95 env, obj.obj(), jstring_url.obj()); |
| 96 } | 96 } |
| 97 | 97 |
| 98 void WebContentsObserverAndroid::DidStopLoading( | 98 void WebContentsObserverAndroid::DidStopLoading( |
| 99 RenderViewHost* render_view_host) { | 99 RenderViewHost* render_view_host) { |
| 100 JNIEnv* env = AttachCurrentThread(); | 100 JNIEnv* env = AttachCurrentThread(); |
| 101 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 101 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 102 if (obj.is_null()) | 102 if (obj.is_null()) |
| 103 return; | 103 return; |
| 104 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 104 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( |
| 105 env, web_contents()->GetLastCommittedURL().spec())); | 105 env, web_contents()->GetLastCommittedURL().spec())); |
| 106 Java_WebContentsObserver_didStopLoading( | 106 Java_WebContentsObserverProxy_didStopLoading( |
| 107 env, obj.obj(), jstring_url.obj()); | 107 env, obj.obj(), jstring_url.obj()); |
| 108 } | 108 } |
| 109 | 109 |
| 110 void WebContentsObserverAndroid::DidFailProvisionalLoad( | 110 void WebContentsObserverAndroid::DidFailProvisionalLoad( |
| 111 RenderFrameHost* render_frame_host, | 111 RenderFrameHost* render_frame_host, |
| 112 const GURL& validated_url, | 112 const GURL& validated_url, |
| 113 int error_code, | 113 int error_code, |
| 114 const base::string16& error_description) { | 114 const base::string16& error_description) { |
| 115 DidFailLoadInternal(true, | 115 DidFailLoadInternal(true, |
| 116 !render_frame_host->GetParent(), | 116 !render_frame_host->GetParent(), |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 149 bool urls_same_ignoring_fragment = | 149 bool urls_same_ignoring_fragment = |
| 150 params.url.ReplaceComponents(replacements) == | 150 params.url.ReplaceComponents(replacements) == |
| 151 details.previous_url.ReplaceComponents(replacements); | 151 details.previous_url.ReplaceComponents(replacements); |
| 152 | 152 |
| 153 // is_fragment_navigation is indicative of the intent of this variable. | 153 // is_fragment_navigation is indicative of the intent of this variable. |
| 154 // However, there isn't sufficient information here to determine whether this | 154 // However, there isn't sufficient information here to determine whether this |
| 155 // is actually a fragment navigation, or a history API navigation to a URL | 155 // is actually a fragment navigation, or a history API navigation to a URL |
| 156 // that would also be valid for a fragment navigation. | 156 // that would also be valid for a fragment navigation. |
| 157 bool is_fragment_navigation = urls_same_ignoring_fragment && | 157 bool is_fragment_navigation = urls_same_ignoring_fragment && |
| 158 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); | 158 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); |
| 159 Java_WebContentsObserver_didNavigateMainFrame( | 159 Java_WebContentsObserverProxy_didNavigateMainFrame( |
| 160 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 160 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 161 details.is_navigation_to_different_page(), is_fragment_navigation, | 161 details.is_navigation_to_different_page(), is_fragment_navigation, |
| 162 details.http_status_code); | 162 details.http_status_code); |
| 163 } | 163 } |
| 164 | 164 |
| 165 void WebContentsObserverAndroid::DidNavigateAnyFrame( | 165 void WebContentsObserverAndroid::DidNavigateAnyFrame( |
| 166 RenderFrameHost* render_frame_host, | 166 RenderFrameHost* render_frame_host, |
| 167 const LoadCommittedDetails& details, | 167 const LoadCommittedDetails& details, |
| 168 const FrameNavigateParams& params) { | 168 const FrameNavigateParams& params) { |
| 169 JNIEnv* env = AttachCurrentThread(); | 169 JNIEnv* env = AttachCurrentThread(); |
| 170 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 170 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 171 if (obj.is_null()) | 171 if (obj.is_null()) |
| 172 return; | 172 return; |
| 173 ScopedJavaLocalRef<jstring> jstring_url( | 173 ScopedJavaLocalRef<jstring> jstring_url( |
| 174 ConvertUTF8ToJavaString(env, params.url.spec())); | 174 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 175 ScopedJavaLocalRef<jstring> jstring_base_url( | 175 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 176 ConvertUTF8ToJavaString(env, params.base_url.spec())); | 176 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 177 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( | 177 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( |
| 178 params.transition, ui::PAGE_TRANSITION_RELOAD); | 178 params.transition, ui::PAGE_TRANSITION_RELOAD); |
| 179 | 179 |
| 180 Java_WebContentsObserver_didNavigateAnyFrame( | 180 Java_WebContentsObserverProxy_didNavigateAnyFrame( |
| 181 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 181 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 182 jboolean_is_reload); | 182 jboolean_is_reload); |
| 183 } | 183 } |
| 184 | 184 |
| 185 void WebContentsObserverAndroid::DocumentAvailableInMainFrame() { | 185 void WebContentsObserverAndroid::DocumentAvailableInMainFrame() { |
| 186 JNIEnv* env = AttachCurrentThread(); | 186 JNIEnv* env = AttachCurrentThread(); |
| 187 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 187 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 188 if (obj.is_null()) | 188 if (obj.is_null()) |
| 189 return; | 189 return; |
| 190 Java_WebContentsObserver_documentAvailableInMainFrame(env, obj.obj()); | 190 Java_WebContentsObserverProxy_documentAvailableInMainFrame(env, obj.obj()); |
| 191 } | 191 } |
| 192 | 192 |
| 193 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( | 193 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( |
| 194 RenderFrameHost* render_frame_host, | 194 RenderFrameHost* render_frame_host, |
| 195 const GURL& validated_url, | 195 const GURL& validated_url, |
| 196 bool is_error_page, | 196 bool is_error_page, |
| 197 bool is_iframe_srcdoc) { | 197 bool is_iframe_srcdoc) { |
| 198 JNIEnv* env = AttachCurrentThread(); | 198 JNIEnv* env = AttachCurrentThread(); |
| 199 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 199 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 200 if (obj.is_null()) | 200 if (obj.is_null()) |
| 201 return; | 201 return; |
| 202 ScopedJavaLocalRef<jstring> jstring_url( | 202 ScopedJavaLocalRef<jstring> jstring_url( |
| 203 ConvertUTF8ToJavaString(env, validated_url.spec())); | 203 ConvertUTF8ToJavaString(env, validated_url.spec())); |
| 204 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear | 204 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear |
| 205 // to be used at all, and it just adds complexity here. | 205 // to be used at all, and it just adds complexity here. |
| 206 Java_WebContentsObserver_didStartProvisionalLoadForFrame( | 206 Java_WebContentsObserverProxy_didStartProvisionalLoadForFrame( |
| 207 env, | 207 env, |
| 208 obj.obj(), | 208 obj.obj(), |
| 209 render_frame_host->GetRoutingID(), | 209 render_frame_host->GetRoutingID(), |
| 210 render_frame_host->GetParent() | 210 render_frame_host->GetParent() |
| 211 ? render_frame_host->GetParent()->GetRoutingID() | 211 ? render_frame_host->GetParent()->GetRoutingID() |
| 212 : -1, | 212 : -1, |
| 213 !render_frame_host->GetParent(), | 213 !render_frame_host->GetParent(), |
| 214 jstring_url.obj(), | 214 jstring_url.obj(), |
| 215 is_error_page, | 215 is_error_page, |
| 216 is_iframe_srcdoc); | 216 is_iframe_srcdoc); |
| 217 } | 217 } |
| 218 | 218 |
| 219 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( | 219 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( |
| 220 RenderFrameHost* render_frame_host, | 220 RenderFrameHost* render_frame_host, |
| 221 const GURL& url, | 221 const GURL& url, |
| 222 ui::PageTransition transition_type) { | 222 ui::PageTransition transition_type) { |
| 223 JNIEnv* env = AttachCurrentThread(); | 223 JNIEnv* env = AttachCurrentThread(); |
| 224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 225 if (obj.is_null()) | 225 if (obj.is_null()) |
| 226 return; | 226 return; |
| 227 ScopedJavaLocalRef<jstring> jstring_url( | 227 ScopedJavaLocalRef<jstring> jstring_url( |
| 228 ConvertUTF8ToJavaString(env, url.spec())); | 228 ConvertUTF8ToJavaString(env, url.spec())); |
| 229 Java_WebContentsObserver_didCommitProvisionalLoadForFrame( | 229 Java_WebContentsObserverProxy_didCommitProvisionalLoadForFrame( |
| 230 env, | 230 env, |
| 231 obj.obj(), | 231 obj.obj(), |
| 232 render_frame_host->GetRoutingID(), | 232 render_frame_host->GetRoutingID(), |
| 233 !render_frame_host->GetParent(), | 233 !render_frame_host->GetParent(), |
| 234 jstring_url.obj(), | 234 jstring_url.obj(), |
| 235 transition_type); | 235 transition_type); |
| 236 } | 236 } |
| 237 | 237 |
| 238 void WebContentsObserverAndroid::DidFinishLoad( | 238 void WebContentsObserverAndroid::DidFinishLoad( |
| 239 RenderFrameHost* render_frame_host, | 239 RenderFrameHost* render_frame_host, |
| 240 const GURL& validated_url) { | 240 const GURL& validated_url) { |
| 241 JNIEnv* env = AttachCurrentThread(); | 241 JNIEnv* env = AttachCurrentThread(); |
| 242 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 242 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 243 if (obj.is_null()) | 243 if (obj.is_null()) |
| 244 return; | 244 return; |
| 245 | 245 |
| 246 std::string url_string = validated_url.spec(); | 246 std::string url_string = validated_url.spec(); |
| 247 NavigationEntry* entry = | 247 NavigationEntry* entry = |
| 248 web_contents()->GetController().GetLastCommittedEntry(); | 248 web_contents()->GetController().GetLastCommittedEntry(); |
| 249 // Note that GetBaseURLForDataURL is only used by the Android WebView. | 249 // Note that GetBaseURLForDataURL is only used by the Android WebView. |
| 250 if (entry && !entry->GetBaseURLForDataURL().is_empty()) | 250 if (entry && !entry->GetBaseURLForDataURL().is_empty()) |
| 251 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); | 251 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); |
| 252 | 252 |
| 253 ScopedJavaLocalRef<jstring> jstring_url( | 253 ScopedJavaLocalRef<jstring> jstring_url( |
| 254 ConvertUTF8ToJavaString(env, url_string)); | 254 ConvertUTF8ToJavaString(env, url_string)); |
| 255 Java_WebContentsObserver_didFinishLoad( | 255 Java_WebContentsObserverProxy_didFinishLoad( |
| 256 env, | 256 env, |
| 257 obj.obj(), | 257 obj.obj(), |
| 258 render_frame_host->GetRoutingID(), | 258 render_frame_host->GetRoutingID(), |
| 259 jstring_url.obj(), | 259 jstring_url.obj(), |
| 260 !render_frame_host->GetParent()); | 260 !render_frame_host->GetParent()); |
| 261 } | 261 } |
| 262 | 262 |
| 263 void WebContentsObserverAndroid::DocumentLoadedInFrame( | 263 void WebContentsObserverAndroid::DocumentLoadedInFrame( |
| 264 RenderFrameHost* render_frame_host) { | 264 RenderFrameHost* render_frame_host) { |
| 265 JNIEnv* env = AttachCurrentThread(); | 265 JNIEnv* env = AttachCurrentThread(); |
| 266 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 266 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 267 if (obj.is_null()) | 267 if (obj.is_null()) |
| 268 return; | 268 return; |
| 269 Java_WebContentsObserver_documentLoadedInFrame( | 269 Java_WebContentsObserverProxy_documentLoadedInFrame( |
| 270 env, obj.obj(), render_frame_host->GetRoutingID()); | 270 env, obj.obj(), render_frame_host->GetRoutingID()); |
| 271 } | 271 } |
| 272 | 272 |
| 273 void WebContentsObserverAndroid::NavigationEntryCommitted( | 273 void WebContentsObserverAndroid::NavigationEntryCommitted( |
| 274 const LoadCommittedDetails& load_details) { | 274 const LoadCommittedDetails& load_details) { |
| 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_WebContentsObserver_navigationEntryCommitted(env, obj.obj()); | 279 Java_WebContentsObserverProxy_navigationEntryCommitted(env, obj.obj()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 void WebContentsObserverAndroid::DidAttachInterstitialPage() { | 282 void WebContentsObserverAndroid::DidAttachInterstitialPage() { |
| 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_WebContentsObserver_didAttachInterstitialPage(env, obj.obj()); | 287 Java_WebContentsObserverProxy_didAttachInterstitialPage(env, obj.obj()); |
| 288 } | 288 } |
| 289 | 289 |
| 290 void WebContentsObserverAndroid::DidDetachInterstitialPage() { | 290 void WebContentsObserverAndroid::DidDetachInterstitialPage() { |
| 291 JNIEnv* env = AttachCurrentThread(); | 291 JNIEnv* env = AttachCurrentThread(); |
| 292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 293 if (obj.is_null()) | 293 if (obj.is_null()) |
| 294 return; | 294 return; |
| 295 Java_WebContentsObserver_didDetachInterstitialPage(env, obj.obj()); | 295 Java_WebContentsObserverProxy_didDetachInterstitialPage(env, obj.obj()); |
| 296 } | 296 } |
| 297 | 297 |
| 298 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { | 298 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { |
| 299 JNIEnv* env = AttachCurrentThread(); | 299 JNIEnv* env = AttachCurrentThread(); |
| 300 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 300 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 301 if (obj.is_null()) | 301 if (obj.is_null()) |
| 302 return; | 302 return; |
| 303 Java_WebContentsObserver_didChangeThemeColor(env, obj.obj(), color); | 303 Java_WebContentsObserverProxy_didChangeThemeColor(env, obj.obj(), color); |
| 304 } | 304 } |
| 305 | 305 |
| 306 void WebContentsObserverAndroid::DidFailLoadInternal( | 306 void WebContentsObserverAndroid::DidFailLoadInternal( |
| 307 bool is_provisional_load, | 307 bool is_provisional_load, |
| 308 bool is_main_frame, | 308 bool is_main_frame, |
| 309 int error_code, | 309 int error_code, |
| 310 const base::string16& description, | 310 const base::string16& description, |
| 311 const GURL& url) { | 311 const GURL& url) { |
| 312 JNIEnv* env = AttachCurrentThread(); | 312 JNIEnv* env = AttachCurrentThread(); |
| 313 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 313 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 314 if (obj.is_null()) | 314 if (obj.is_null()) |
| 315 return; | 315 return; |
| 316 ScopedJavaLocalRef<jstring> jstring_error_description( | 316 ScopedJavaLocalRef<jstring> jstring_error_description( |
| 317 ConvertUTF16ToJavaString(env, description)); | 317 ConvertUTF16ToJavaString(env, description)); |
| 318 ScopedJavaLocalRef<jstring> jstring_url( | 318 ScopedJavaLocalRef<jstring> jstring_url( |
| 319 ConvertUTF8ToJavaString(env, url.spec())); | 319 ConvertUTF8ToJavaString(env, url.spec())); |
| 320 | 320 |
| 321 Java_WebContentsObserver_didFailLoad( | 321 Java_WebContentsObserverProxy_didFailLoad( |
| 322 env, obj.obj(), | 322 env, obj.obj(), |
| 323 is_provisional_load, | 323 is_provisional_load, |
| 324 is_main_frame, | 324 is_main_frame, |
| 325 error_code, | 325 error_code, |
| 326 jstring_error_description.obj(), jstring_url.obj()); | 326 jstring_error_description.obj(), jstring_url.obj()); |
| 327 } | 327 } |
| 328 | 328 |
| 329 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { | 329 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { |
| 330 JNIEnv* env = AttachCurrentThread(); | 330 JNIEnv* env = AttachCurrentThread(); |
| 331 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 331 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 332 if (obj.is_null()) | 332 if (obj.is_null()) |
| 333 return; | 333 return; |
| 334 Java_WebContentsObserver_didFirstVisuallyNonEmptyPaint( | 334 Java_WebContentsObserverProxy_didFirstVisuallyNonEmptyPaint( |
| 335 env, obj.obj()); | 335 env, obj.obj()); |
| 336 } | 336 } |
| 337 | 337 |
| 338 void WebContentsObserverAndroid::DidStartNavigationToPendingEntry( | 338 void WebContentsObserverAndroid::DidStartNavigationToPendingEntry( |
| 339 const GURL& url, | 339 const GURL& url, |
| 340 NavigationController::ReloadType reload_type) { | 340 NavigationController::ReloadType reload_type) { |
| 341 JNIEnv* env = AttachCurrentThread(); | 341 JNIEnv* env = AttachCurrentThread(); |
| 342 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 342 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 343 if (obj.is_null()) | 343 if (obj.is_null()) |
| 344 return; | 344 return; |
| 345 ScopedJavaLocalRef<jstring> jstring_url( | 345 ScopedJavaLocalRef<jstring> jstring_url( |
| 346 ConvertUTF8ToJavaString(env, url.spec())); | 346 ConvertUTF8ToJavaString(env, url.spec())); |
| 347 | 347 |
| 348 Java_WebContentsObserver_didStartNavigationToPendingEntry(env, obj.obj(), | 348 Java_WebContentsObserverProxy_didStartNavigationToPendingEntry( |
| 349 jstring_url.obj()); | 349 env, obj.obj(), jstring_url.obj()); |
| 350 } | 350 } |
| 351 | 351 |
| 352 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { | 352 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { |
| 353 return RegisterNativesImpl(env); | 353 return RegisterNativesImpl(env); |
| 354 } | 354 } |
| 355 } // namespace content | 355 } // namespace content |
| OLD | NEW |