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/android/content_view_core_impl.h" | 14 #include "content/browser/android/content_view_core_impl.h" |
15 #include "content/browser/renderer_host/render_widget_host_impl.h" | 15 #include "content/browser/renderer_host/render_widget_host_impl.h" |
16 #include "content/browser/web_contents/web_contents_impl.h" | 16 #include "content/browser/web_contents/web_contents_impl.h" |
17 #include "content/public/browser/navigation_details.h" | 17 #include "content/public/browser/navigation_details.h" |
18 #include "content/public/browser/navigation_entry.h" | 18 #include "content/public/browser/navigation_entry.h" |
| 19 #include "content/public/common/url_constants.h" |
19 #include "jni/WebContentsObserverAndroid_jni.h" | 20 #include "jni/WebContentsObserverAndroid_jni.h" |
20 | 21 |
21 using base::android::AttachCurrentThread; | 22 using base::android::AttachCurrentThread; |
22 using base::android::ScopedJavaLocalRef; | 23 using base::android::ScopedJavaLocalRef; |
23 using base::android::ConvertUTF8ToJavaString; | 24 using base::android::ConvertUTF8ToJavaString; |
24 using base::android::ConvertUTF16ToJavaString; | 25 using base::android::ConvertUTF16ToJavaString; |
25 | 26 |
26 namespace content { | 27 namespace content { |
27 | 28 |
28 WebContentsObserverAndroid::WebContentsObserverAndroid( | 29 WebContentsObserverAndroid::WebContentsObserverAndroid( |
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
208 int64 frame_id, | 209 int64 frame_id, |
209 const GURL& validated_url, | 210 const GURL& validated_url, |
210 bool is_main_frame, | 211 bool is_main_frame, |
211 RenderViewHost* render_view_host) { | 212 RenderViewHost* render_view_host) { |
212 JNIEnv* env = AttachCurrentThread(); | 213 JNIEnv* env = AttachCurrentThread(); |
213 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 214 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
214 if (obj.is_null()) | 215 if (obj.is_null()) |
215 return; | 216 return; |
216 | 217 |
217 std::string url_string = validated_url.spec(); | 218 std::string url_string = validated_url.spec(); |
| 219 bool is_error_page = content::kUnreachableWebDataURL == url_string; |
218 NavigationEntry* entry = | 220 NavigationEntry* entry = |
219 web_contents()->GetController().GetLastCommittedEntry(); | 221 web_contents()->GetController().GetLastCommittedEntry(); |
220 // Note that GetBaseURLForDataURL is only used by the Android WebView. | 222 // Note that GetBaseURLForDataURL is only used by the Android WebView. |
221 if (entry && !entry->GetBaseURLForDataURL().is_empty()) | 223 if (entry && !entry->GetBaseURLForDataURL().is_empty()) |
222 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); | 224 url_string = entry->GetBaseURLForDataURL().possibly_invalid_spec(); |
223 | 225 |
224 ScopedJavaLocalRef<jstring> jstring_url( | 226 ScopedJavaLocalRef<jstring> jstring_url( |
225 ConvertUTF8ToJavaString(env, url_string)); | 227 ConvertUTF8ToJavaString(env, url_string)); |
226 Java_WebContentsObserverAndroid_didFinishLoad( | 228 Java_WebContentsObserverAndroid_didFinishLoad(env, |
227 env, obj.obj(), frame_id, jstring_url.obj(), is_main_frame); | 229 obj.obj(), |
| 230 frame_id, |
| 231 jstring_url.obj(), |
| 232 is_main_frame, |
| 233 is_error_page); |
228 } | 234 } |
229 | 235 |
230 void WebContentsObserverAndroid::NavigationEntryCommitted( | 236 void WebContentsObserverAndroid::NavigationEntryCommitted( |
231 const LoadCommittedDetails& load_details) { | 237 const LoadCommittedDetails& load_details) { |
232 JNIEnv* env = AttachCurrentThread(); | 238 JNIEnv* env = AttachCurrentThread(); |
233 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); | 239 ScopedJavaLocalRef<jobject> obj(weak_java_observer_.get(env)); |
234 if (obj.is_null()) | 240 if (obj.is_null()) |
235 return; | 241 return; |
236 Java_WebContentsObserverAndroid_navigationEntryCommitted(env, obj.obj()); | 242 Java_WebContentsObserverAndroid_navigationEntryCommitted(env, obj.obj()); |
237 } | 243 } |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 if (obj.is_null()) | 295 if (obj.is_null()) |
290 return; | 296 return; |
291 Java_WebContentsObserverAndroid_didFirstVisuallyNonEmptyPaint( | 297 Java_WebContentsObserverAndroid_didFirstVisuallyNonEmptyPaint( |
292 env, obj.obj()); | 298 env, obj.obj()); |
293 } | 299 } |
294 | 300 |
295 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { | 301 bool RegisterWebContentsObserverAndroid(JNIEnv* env) { |
296 return RegisterNativesImpl(env); | 302 return RegisterNativesImpl(env); |
297 } | 303 } |
298 } // namespace content | 304 } // namespace content |
OLD | NEW |