Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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_proxy.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include <jni.h> | |
| 10 | |
| 11 #include "base/android/jni_android.h" | 9 #include "base/android/jni_android.h" |
| 12 #include "base/android/jni_string.h" | 10 #include "base/android/jni_string.h" |
| 13 #include "base/android/scoped_java_ref.h" | 11 #include "base/android/scoped_java_ref.h" |
| 14 #include "content/browser/renderer_host/render_widget_host_impl.h" | 12 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 15 #include "content/browser/web_contents/web_contents_impl.h" | 13 #include "content/browser/web_contents/web_contents_impl.h" |
| 16 #include "content/public/browser/navigation_details.h" | 14 #include "content/public/browser/navigation_details.h" |
| 17 #include "content/public/browser/navigation_entry.h" | 15 #include "content/public/browser/navigation_entry.h" |
| 18 #include "jni/WebContentsObserver_jni.h" | 16 #include "jni/WebContentsObserverProxy_jni.h" |
| 19 | 17 |
| 20 using base::android::AttachCurrentThread; | 18 using base::android::AttachCurrentThread; |
| 21 using base::android::ScopedJavaLocalRef; | 19 using base::android::ScopedJavaLocalRef; |
| 22 using base::android::ConvertUTF8ToJavaString; | 20 using base::android::ConvertUTF8ToJavaString; |
| 23 using base::android::ConvertUTF16ToJavaString; | 21 using base::android::ConvertUTF16ToJavaString; |
| 24 | 22 |
| 25 namespace content { | 23 namespace content { |
| 26 | 24 |
| 27 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID, | 25 // TODO(dcheng): File a bug. This class incorrectly passes just a frame ID, |
|
Yaron
2015/02/27 19:34:57
Aside: "TODO: file a bug" is amusing
jdduke (slow)
2015/03/03 17:05:17
Hey! Some bugs are tricky to file!
| |
| 28 // which is not sufficient to identify a frame (since frame IDs are scoped per | 26 // which is not sufficient to identify a frame (since frame IDs are scoped per |
| 29 // render process, and so may collide). | 27 // render process, and so may collide). |
| 30 WebContentsObserverAndroid::WebContentsObserverAndroid( | 28 WebContentsObserverProxy::WebContentsObserverProxy(JNIEnv* env, |
| 31 JNIEnv* env, | 29 jobject obj, |
| 32 jobject obj, | 30 WebContents* web_contents) |
| 33 WebContents* web_contents) | 31 : WebContentsObserver(web_contents), weak_java_observer_(env, obj) { |
| 34 : WebContentsObserver(web_contents), | |
| 35 weak_java_observer_(env, obj){ | |
| 36 } | 32 } |
| 37 | 33 |
| 38 WebContentsObserverAndroid::~WebContentsObserverAndroid() { | 34 WebContentsObserverProxy::~WebContentsObserverProxy() { |
| 39 } | 35 } |
| 40 | 36 |
| 41 jlong Init(JNIEnv* env, jobject obj, jobject java_web_contents) { | 37 jlong Init(JNIEnv* env, jobject obj, jobject java_web_contents) { |
| 42 WebContents* web_contents = | 38 WebContents* web_contents = |
| 43 WebContents::FromJavaWebContents(java_web_contents); | 39 WebContents::FromJavaWebContents(java_web_contents); |
| 44 CHECK(web_contents); | 40 CHECK(web_contents); |
| 45 | 41 |
| 46 WebContentsObserverAndroid* native_observer = new WebContentsObserverAndroid( | 42 WebContentsObserverProxy* native_observer = |
| 47 env, obj, web_contents); | 43 new WebContentsObserverProxy(env, obj, web_contents); |
| 48 return reinterpret_cast<intptr_t>(native_observer); | 44 return reinterpret_cast<intptr_t>(native_observer); |
| 49 } | 45 } |
| 50 | 46 |
| 51 void WebContentsObserverAndroid::Destroy(JNIEnv* env, jobject obj) { | 47 void WebContentsObserverProxy::Destroy(JNIEnv* env, jobject obj) { |
| 52 delete this; | 48 delete this; |
| 53 } | 49 } |
| 54 | 50 |
| 55 void WebContentsObserverAndroid::WebContentsDestroyed() { | 51 void WebContentsObserverProxy::WebContentsDestroyed() { |
| 56 JNIEnv* env = AttachCurrentThread(); | 52 JNIEnv* env = AttachCurrentThread(); |
| 57 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 53 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 58 if (obj.is_null()) { | 54 if (obj.is_null()) { |
| 59 delete this; | 55 delete this; |
| 60 } else { | 56 } else { |
| 61 // The java side will destroy |this| | 57 // The java side will destroy |this| |
| 62 Java_WebContentsObserver_detachFromWebContents(env, obj.obj()); | 58 Java_WebContentsObserverProxy_destroy(env, obj.obj()); |
| 63 } | 59 } |
| 64 } | 60 } |
| 65 | 61 |
| 66 void WebContentsObserverAndroid::RenderViewReady() { | 62 void WebContentsObserverProxy::RenderViewReady() { |
| 67 JNIEnv* env = AttachCurrentThread(); | 63 JNIEnv* env = AttachCurrentThread(); |
| 68 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 64 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 69 if (obj.is_null()) | 65 if (obj.is_null()) |
| 70 return; | 66 return; |
| 71 Java_WebContentsObserver_renderViewReady(env, obj.obj()); | 67 Java_WebContentsObserverProxy_renderViewReady(env, obj.obj()); |
| 72 } | 68 } |
| 73 | 69 |
| 74 void WebContentsObserverAndroid::RenderProcessGone( | 70 void WebContentsObserverProxy::RenderProcessGone( |
| 75 base::TerminationStatus termination_status) { | 71 base::TerminationStatus termination_status) { |
| 76 JNIEnv* env = AttachCurrentThread(); | 72 JNIEnv* env = AttachCurrentThread(); |
| 77 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 73 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 78 if (obj.is_null()) | 74 if (obj.is_null()) |
| 79 return; | 75 return; |
| 80 jboolean was_oom_protected = | 76 jboolean was_oom_protected = |
| 81 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; | 77 termination_status == base::TERMINATION_STATUS_OOM_PROTECTED; |
| 82 Java_WebContentsObserver_renderProcessGone( | 78 Java_WebContentsObserverProxy_renderProcessGone(env, obj.obj(), |
| 83 env, obj.obj(), was_oom_protected); | 79 was_oom_protected); |
| 84 } | 80 } |
| 85 | 81 |
| 86 void WebContentsObserverAndroid::DidStartLoading( | 82 void WebContentsObserverProxy::DidStartLoading( |
| 87 RenderViewHost* render_view_host) { | 83 RenderViewHost* render_view_host) { |
| 88 JNIEnv* env = AttachCurrentThread(); | 84 JNIEnv* env = AttachCurrentThread(); |
| 89 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 85 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 90 if (obj.is_null()) | 86 if (obj.is_null()) |
| 91 return; | 87 return; |
| 92 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 88 ScopedJavaLocalRef<jstring> jstring_url( |
| 93 env, web_contents()->GetVisibleURL().spec())); | 89 ConvertUTF8ToJavaString(env, web_contents()->GetVisibleURL().spec())); |
| 94 Java_WebContentsObserver_didStartLoading( | 90 Java_WebContentsObserverProxy_didStartLoading(env, obj.obj(), |
| 95 env, obj.obj(), jstring_url.obj()); | 91 jstring_url.obj()); |
| 96 } | 92 } |
| 97 | 93 |
| 98 void WebContentsObserverAndroid::DidStopLoading( | 94 void WebContentsObserverProxy::DidStopLoading( |
| 99 RenderViewHost* render_view_host) { | 95 RenderViewHost* render_view_host) { |
| 100 JNIEnv* env = AttachCurrentThread(); | 96 JNIEnv* env = AttachCurrentThread(); |
| 101 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 97 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 102 if (obj.is_null()) | 98 if (obj.is_null()) |
| 103 return; | 99 return; |
| 104 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( | 100 ScopedJavaLocalRef<jstring> jstring_url(ConvertUTF8ToJavaString( |
| 105 env, web_contents()->GetLastCommittedURL().spec())); | 101 env, web_contents()->GetLastCommittedURL().spec())); |
| 106 Java_WebContentsObserver_didStopLoading( | 102 Java_WebContentsObserverProxy_didStopLoading(env, obj.obj(), |
| 107 env, obj.obj(), jstring_url.obj()); | 103 jstring_url.obj()); |
| 108 } | 104 } |
| 109 | 105 |
| 110 void WebContentsObserverAndroid::DidFailProvisionalLoad( | 106 void WebContentsObserverProxy::DidFailProvisionalLoad( |
| 111 RenderFrameHost* render_frame_host, | 107 RenderFrameHost* render_frame_host, |
| 112 const GURL& validated_url, | 108 const GURL& validated_url, |
| 113 int error_code, | 109 int error_code, |
| 114 const base::string16& error_description) { | 110 const base::string16& error_description) { |
| 115 DidFailLoadInternal(true, | 111 DidFailLoadInternal(true, !render_frame_host->GetParent(), error_code, |
| 116 !render_frame_host->GetParent(), | 112 error_description, validated_url); |
| 117 error_code, | |
| 118 error_description, | |
| 119 validated_url); | |
| 120 } | 113 } |
| 121 | 114 |
| 122 void WebContentsObserverAndroid::DidFailLoad( | 115 void WebContentsObserverProxy::DidFailLoad( |
| 123 RenderFrameHost* render_frame_host, | 116 RenderFrameHost* render_frame_host, |
| 124 const GURL& validated_url, | 117 const GURL& validated_url, |
| 125 int error_code, | 118 int error_code, |
| 126 const base::string16& error_description) { | 119 const base::string16& error_description) { |
| 127 DidFailLoadInternal(false, | 120 DidFailLoadInternal(false, !render_frame_host->GetParent(), error_code, |
| 128 !render_frame_host->GetParent(), | 121 error_description, validated_url); |
| 129 error_code, | |
| 130 error_description, | |
| 131 validated_url); | |
| 132 } | 122 } |
| 133 | 123 |
| 134 void WebContentsObserverAndroid::DidNavigateMainFrame( | 124 void WebContentsObserverProxy::DidNavigateMainFrame( |
| 135 const LoadCommittedDetails& details, | 125 const LoadCommittedDetails& details, |
| 136 const FrameNavigateParams& params) { | 126 const FrameNavigateParams& params) { |
| 137 JNIEnv* env = AttachCurrentThread(); | 127 JNIEnv* env = AttachCurrentThread(); |
| 138 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 128 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 139 if (obj.is_null()) | 129 if (obj.is_null()) |
| 140 return; | 130 return; |
| 141 ScopedJavaLocalRef<jstring> jstring_url( | 131 ScopedJavaLocalRef<jstring> jstring_url( |
| 142 ConvertUTF8ToJavaString(env, params.url.spec())); | 132 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 143 ScopedJavaLocalRef<jstring> jstring_base_url( | 133 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 144 ConvertUTF8ToJavaString(env, params.base_url.spec())); | 134 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 145 | 135 |
| 146 // See http://crbug.com/251330 for why it's determined this way. | 136 // See http://crbug.com/251330 for why it's determined this way. |
| 147 url::Replacements<char> replacements; | 137 url::Replacements<char> replacements; |
| 148 replacements.ClearRef(); | 138 replacements.ClearRef(); |
| 149 bool urls_same_ignoring_fragment = | 139 bool urls_same_ignoring_fragment = |
| 150 params.url.ReplaceComponents(replacements) == | 140 params.url.ReplaceComponents(replacements) == |
| 151 details.previous_url.ReplaceComponents(replacements); | 141 details.previous_url.ReplaceComponents(replacements); |
| 152 | 142 |
| 153 // is_fragment_navigation is indicative of the intent of this variable. | 143 // is_fragment_navigation is indicative of the intent of this variable. |
| 154 // However, there isn't sufficient information here to determine whether this | 144 // 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 | 145 // is actually a fragment navigation, or a history API navigation to a URL |
| 156 // that would also be valid for a fragment navigation. | 146 // that would also be valid for a fragment navigation. |
| 157 bool is_fragment_navigation = urls_same_ignoring_fragment && | 147 bool is_fragment_navigation = |
| 148 urls_same_ignoring_fragment && | |
| 158 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); | 149 (details.type == NAVIGATION_TYPE_IN_PAGE || details.is_in_page); |
| 159 Java_WebContentsObserver_didNavigateMainFrame( | 150 Java_WebContentsObserverProxy_didNavigateMainFrame( |
| 160 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 151 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 161 details.is_navigation_to_different_page(), is_fragment_navigation, | 152 details.is_navigation_to_different_page(), is_fragment_navigation, |
| 162 details.http_status_code); | 153 details.http_status_code); |
| 163 } | 154 } |
| 164 | 155 |
| 165 void WebContentsObserverAndroid::DidNavigateAnyFrame( | 156 void WebContentsObserverProxy::DidNavigateAnyFrame( |
| 166 RenderFrameHost* render_frame_host, | 157 RenderFrameHost* render_frame_host, |
| 167 const LoadCommittedDetails& details, | 158 const LoadCommittedDetails& details, |
| 168 const FrameNavigateParams& params) { | 159 const FrameNavigateParams& params) { |
| 169 JNIEnv* env = AttachCurrentThread(); | 160 JNIEnv* env = AttachCurrentThread(); |
| 170 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 161 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 171 if (obj.is_null()) | 162 if (obj.is_null()) |
| 172 return; | 163 return; |
| 173 ScopedJavaLocalRef<jstring> jstring_url( | 164 ScopedJavaLocalRef<jstring> jstring_url( |
| 174 ConvertUTF8ToJavaString(env, params.url.spec())); | 165 ConvertUTF8ToJavaString(env, params.url.spec())); |
| 175 ScopedJavaLocalRef<jstring> jstring_base_url( | 166 ScopedJavaLocalRef<jstring> jstring_base_url( |
| 176 ConvertUTF8ToJavaString(env, params.base_url.spec())); | 167 ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| 177 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( | 168 jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( |
| 178 params.transition, ui::PAGE_TRANSITION_RELOAD); | 169 params.transition, ui::PAGE_TRANSITION_RELOAD); |
| 179 | 170 |
| 180 Java_WebContentsObserver_didNavigateAnyFrame( | 171 Java_WebContentsObserverProxy_didNavigateAnyFrame( |
| 181 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), | 172 env, obj.obj(), jstring_url.obj(), jstring_base_url.obj(), |
| 182 jboolean_is_reload); | 173 jboolean_is_reload); |
| 183 } | 174 } |
| 184 | 175 |
| 185 void WebContentsObserverAndroid::DocumentAvailableInMainFrame() { | 176 void WebContentsObserverProxy::DocumentAvailableInMainFrame() { |
| 186 JNIEnv* env = AttachCurrentThread(); | 177 JNIEnv* env = AttachCurrentThread(); |
| 187 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 178 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 188 if (obj.is_null()) | 179 if (obj.is_null()) |
| 189 return; | 180 return; |
| 190 Java_WebContentsObserver_documentAvailableInMainFrame(env, obj.obj()); | 181 Java_WebContentsObserverProxy_documentAvailableInMainFrame(env, obj.obj()); |
| 191 } | 182 } |
| 192 | 183 |
| 193 void WebContentsObserverAndroid::DidStartProvisionalLoadForFrame( | 184 void WebContentsObserverProxy::DidStartProvisionalLoadForFrame( |
| 194 RenderFrameHost* render_frame_host, | 185 RenderFrameHost* render_frame_host, |
| 195 const GURL& validated_url, | 186 const GURL& validated_url, |
| 196 bool is_error_page, | 187 bool is_error_page, |
| 197 bool is_iframe_srcdoc) { | 188 bool is_iframe_srcdoc) { |
| 198 JNIEnv* env = AttachCurrentThread(); | 189 JNIEnv* env = AttachCurrentThread(); |
| 199 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 190 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 200 if (obj.is_null()) | 191 if (obj.is_null()) |
| 201 return; | 192 return; |
| 202 ScopedJavaLocalRef<jstring> jstring_url( | 193 ScopedJavaLocalRef<jstring> jstring_url( |
| 203 ConvertUTF8ToJavaString(env, validated_url.spec())); | 194 ConvertUTF8ToJavaString(env, validated_url.spec())); |
| 204 // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear | 195 // 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. | 196 // to be used at all, and it just adds complexity here. |
| 206 Java_WebContentsObserver_didStartProvisionalLoadForFrame( | 197 Java_WebContentsObserverProxy_didStartProvisionalLoadForFrame( |
| 207 env, | 198 env, obj.obj(), render_frame_host->GetRoutingID(), |
| 208 obj.obj(), | |
| 209 render_frame_host->GetRoutingID(), | |
| 210 render_frame_host->GetParent() | 199 render_frame_host->GetParent() |
| 211 ? render_frame_host->GetParent()->GetRoutingID() | 200 ? render_frame_host->GetParent()->GetRoutingID() |
| 212 : -1, | 201 : -1, |
| 213 !render_frame_host->GetParent(), | 202 !render_frame_host->GetParent(), jstring_url.obj(), is_error_page, |
| 214 jstring_url.obj(), | |
| 215 is_error_page, | |
| 216 is_iframe_srcdoc); | 203 is_iframe_srcdoc); |
| 217 } | 204 } |
| 218 | 205 |
| 219 void WebContentsObserverAndroid::DidCommitProvisionalLoadForFrame( | 206 void WebContentsObserverProxy::DidCommitProvisionalLoadForFrame( |
| 220 RenderFrameHost* render_frame_host, | 207 RenderFrameHost* render_frame_host, |
| 221 const GURL& url, | 208 const GURL& url, |
| 222 ui::PageTransition transition_type) { | 209 ui::PageTransition transition_type) { |
| 223 JNIEnv* env = AttachCurrentThread(); | 210 JNIEnv* env = AttachCurrentThread(); |
| 224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 211 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 225 if (obj.is_null()) | 212 if (obj.is_null()) |
| 226 return; | 213 return; |
| 227 ScopedJavaLocalRef<jstring> jstring_url( | 214 ScopedJavaLocalRef<jstring> jstring_url( |
| 228 ConvertUTF8ToJavaString(env, url.spec())); | 215 ConvertUTF8ToJavaString(env, url.spec())); |
| 229 Java_WebContentsObserver_didCommitProvisionalLoadForFrame( | 216 Java_WebContentsObserverProxy_didCommitProvisionalLoadForFrame( |
| 230 env, | 217 env, obj.obj(), render_frame_host->GetRoutingID(), |
| 231 obj.obj(), | 218 !render_frame_host->GetParent(), jstring_url.obj(), transition_type); |
| 232 render_frame_host->GetRoutingID(), | |
| 233 !render_frame_host->GetParent(), | |
| 234 jstring_url.obj(), | |
| 235 transition_type); | |
| 236 } | 219 } |
| 237 | 220 |
| 238 void WebContentsObserverAndroid::DidFinishLoad( | 221 void WebContentsObserverProxy::DidFinishLoad(RenderFrameHost* render_frame_host, |
| 239 RenderFrameHost* render_frame_host, | 222 const GURL& validated_url) { |
| 240 const GURL& validated_url) { | |
| 241 JNIEnv* env = AttachCurrentThread(); | 223 JNIEnv* env = AttachCurrentThread(); |
| 242 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 224 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 243 if (obj.is_null()) | 225 if (obj.is_null()) |
| 244 return; | 226 return; |
| 245 | 227 |
| 246 std::string url_string = validated_url.spec(); | 228 std::string url_string = validated_url.spec(); |
| 247 NavigationEntry* entry = | 229 NavigationEntry* entry = |
| 248 web_contents()->GetController().GetLastCommittedEntry(); | 230 web_contents()->GetController().GetLastCommittedEntry(); |
| 249 // Note that GetBaseURLForDataURL is only used by the Android WebView. | 231 // Note that GetBaseURLForDataURL is only used by the Android WebView. |
| 250 if (entry && !entry->GetBaseURLForDataURL().is_empty()) | 232 if (entry && !entry->GetBaseURLForDataURL().is_empty()) |
| 251 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); | 233 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); |
| 252 | 234 |
| 253 ScopedJavaLocalRef<jstring> jstring_url( | 235 ScopedJavaLocalRef<jstring> jstring_url( |
| 254 ConvertUTF8ToJavaString(env, url_string)); | 236 ConvertUTF8ToJavaString(env, url_string)); |
| 255 Java_WebContentsObserver_didFinishLoad( | 237 Java_WebContentsObserverProxy_didFinishLoad( |
| 256 env, | 238 env, obj.obj(), render_frame_host->GetRoutingID(), jstring_url.obj(), |
| 257 obj.obj(), | |
| 258 render_frame_host->GetRoutingID(), | |
| 259 jstring_url.obj(), | |
| 260 !render_frame_host->GetParent()); | 239 !render_frame_host->GetParent()); |
| 261 } | 240 } |
| 262 | 241 |
| 263 void WebContentsObserverAndroid::DocumentLoadedInFrame( | 242 void WebContentsObserverProxy::DocumentLoadedInFrame( |
| 264 RenderFrameHost* render_frame_host) { | 243 RenderFrameHost* render_frame_host) { |
| 265 JNIEnv* env = AttachCurrentThread(); | 244 JNIEnv* env = AttachCurrentThread(); |
| 266 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 245 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 267 if (obj.is_null()) | 246 if (obj.is_null()) |
| 268 return; | 247 return; |
| 269 Java_WebContentsObserver_documentLoadedInFrame( | 248 Java_WebContentsObserverProxy_documentLoadedInFrame( |
| 270 env, obj.obj(), render_frame_host->GetRoutingID()); | 249 env, obj.obj(), render_frame_host->GetRoutingID()); |
| 271 } | 250 } |
| 272 | 251 |
| 273 void WebContentsObserverAndroid::NavigationEntryCommitted( | 252 void WebContentsObserverProxy::NavigationEntryCommitted( |
| 274 const LoadCommittedDetails& load_details) { | 253 const LoadCommittedDetails& load_details) { |
| 275 JNIEnv* env = AttachCurrentThread(); | 254 JNIEnv* env = AttachCurrentThread(); |
| 276 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 255 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 277 if (obj.is_null()) | 256 if (obj.is_null()) |
| 278 return; | 257 return; |
| 279 Java_WebContentsObserver_navigationEntryCommitted(env, obj.obj()); | 258 Java_WebContentsObserverProxy_navigationEntryCommitted(env, obj.obj()); |
| 280 } | 259 } |
| 281 | 260 |
| 282 void WebContentsObserverAndroid::DidAttachInterstitialPage() { | 261 void WebContentsObserverProxy::DidAttachInterstitialPage() { |
| 283 JNIEnv* env = AttachCurrentThread(); | 262 JNIEnv* env = AttachCurrentThread(); |
| 284 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 263 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 285 if (obj.is_null()) | 264 if (obj.is_null()) |
| 286 return; | 265 return; |
| 287 Java_WebContentsObserver_didAttachInterstitialPage(env, obj.obj()); | 266 Java_WebContentsObserverProxy_didAttachInterstitialPage(env, obj.obj()); |
| 288 } | 267 } |
| 289 | 268 |
| 290 void WebContentsObserverAndroid::DidDetachInterstitialPage() { | 269 void WebContentsObserverProxy::DidDetachInterstitialPage() { |
| 291 JNIEnv* env = AttachCurrentThread(); | 270 JNIEnv* env = AttachCurrentThread(); |
| 292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 271 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 293 if (obj.is_null()) | 272 if (obj.is_null()) |
| 294 return; | 273 return; |
| 295 Java_WebContentsObserver_didDetachInterstitialPage(env, obj.obj()); | 274 Java_WebContentsObserverProxy_didDetachInterstitialPage(env, obj.obj()); |
| 296 } | 275 } |
| 297 | 276 |
| 298 void WebContentsObserverAndroid::DidChangeThemeColor(SkColor color) { | 277 void WebContentsObserverProxy::DidChangeThemeColor(SkColor color) { |
| 299 JNIEnv* env = AttachCurrentThread(); | 278 JNIEnv* env = AttachCurrentThread(); |
| 300 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 279 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 301 if (obj.is_null()) | 280 if (obj.is_null()) |
| 302 return; | 281 return; |
| 303 Java_WebContentsObserver_didChangeThemeColor(env, obj.obj(), color); | 282 Java_WebContentsObserverProxy_didChangeThemeColor(env, obj.obj(), color); |
| 304 } | 283 } |
| 305 | 284 |
| 306 void WebContentsObserverAndroid::DidFailLoadInternal( | 285 void WebContentsObserverProxy::DidFailLoadInternal( |
| 307 bool is_provisional_load, | 286 bool is_provisional_load, |
| 308 bool is_main_frame, | 287 bool is_main_frame, |
| 309 int error_code, | 288 int error_code, |
| 310 const base::string16& description, | 289 const base::string16& description, |
| 311 const GURL& url) { | 290 const GURL& url) { |
| 312 JNIEnv* env = AttachCurrentThread(); | 291 JNIEnv* env = AttachCurrentThread(); |
| 313 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 292 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 314 if (obj.is_null()) | 293 if (obj.is_null()) |
| 315 return; | 294 return; |
| 316 ScopedJavaLocalRef<jstring> jstring_error_description( | 295 ScopedJavaLocalRef<jstring> jstring_error_description( |
| 317 ConvertUTF16ToJavaString(env, description)); | 296 ConvertUTF16ToJavaString(env, description)); |
| 318 ScopedJavaLocalRef<jstring> jstring_url( | 297 ScopedJavaLocalRef<jstring> jstring_url( |
| 319 ConvertUTF8ToJavaString(env, url.spec())); | 298 ConvertUTF8ToJavaString(env, url.spec())); |
| 320 | 299 |
| 321 Java_WebContentsObserver_didFailLoad( | 300 Java_WebContentsObserverProxy_didFailLoad( |
| 322 env, obj.obj(), | 301 env, obj.obj(), is_provisional_load, is_main_frame, error_code, |
| 323 is_provisional_load, | |
| 324 is_main_frame, | |
| 325 error_code, | |
| 326 jstring_error_description.obj(), jstring_url.obj()); | 302 jstring_error_description.obj(), jstring_url.obj()); |
| 327 } | 303 } |
| 328 | 304 |
| 329 void WebContentsObserverAndroid::DidFirstVisuallyNonEmptyPaint() { | 305 void WebContentsObserverProxy::DidFirstVisuallyNonEmptyPaint() { |
| 330 JNIEnv* env = AttachCurrentThread(); | 306 JNIEnv* env = AttachCurrentThread(); |
| 331 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 307 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 332 if (obj.is_null()) | 308 if (obj.is_null()) |
| 333 return; | 309 return; |
| 334 Java_WebContentsObserver_didFirstVisuallyNonEmptyPaint( | 310 Java_WebContentsObserverProxy_didFirstVisuallyNonEmptyPaint(env, obj.obj()); |
| 335 env, obj.obj()); | |
| 336 } | 311 } |
| 337 | 312 |
| 338 void WebContentsObserverAndroid::DidStartNavigationToPendingEntry( | 313 void WebContentsObserverProxy::DidStartNavigationToPendingEntry( |
| 339 const GURL& url, | 314 const GURL& url, |
| 340 NavigationController::ReloadType reload_type) { | 315 NavigationController::ReloadType reload_type) { |
| 341 JNIEnv* env = AttachCurrentThread(); | 316 JNIEnv* env = AttachCurrentThread(); |
| 342 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 317 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
| 343 if (obj.is_null()) | 318 if (obj.is_null()) |
| 344 return; | 319 return; |
| 345 ScopedJavaLocalRef<jstring> jstring_url( | 320 ScopedJavaLocalRef<jstring> jstring_url( |
| 346 ConvertUTF8ToJavaString(env, url.spec())); | 321 ConvertUTF8ToJavaString(env, url.spec())); |
| 347 | 322 |
| 348 Java_WebContentsObserver_didStartNavigationToPendingEntry(env, obj.obj(), | 323 Java_WebContentsObserverProxy_didStartNavigationToPendingEntry( |
| 349 jstring_url.obj()); | 324 env, obj.obj(), jstring_url.obj()); |
| 350 } | 325 } |
| 351 | 326 |
| 352 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { | 327 bool RegisterWebContentsObserverProxy(JNIEnv* env) { |
| 353 return RegisterNativesImpl(env); | 328 return RegisterNativesImpl(env); |
| 354 } | 329 } |
| 355 } // namespace content | 330 } // namespace content |
| OLD | NEW |