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 |