Chromium Code Reviews| Index: content/browser/android/web_contents_observer_proxy.cc |
| diff --git a/content/browser/android/web_contents_observer_proxy.cc b/content/browser/android/web_contents_observer_proxy.cc |
| index bc068304e2716d0a6de2ce45d4bb99e0aab49275..0c2e36e312d25f2b4d5ab75b6c12fc98a7fa50ff 100644 |
| --- a/content/browser/android/web_contents_observer_proxy.cc |
| +++ b/content/browser/android/web_contents_observer_proxy.cc |
| @@ -11,6 +11,7 @@ |
| #include "base/android/scoped_java_ref.h" |
| #include "base/optional.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "components/error_page/common/localized_error.h" |
|
Bernhard Bauer
2017/02/10 16:49:42
Okay, you were calling into components/ from conte
|
| #include "content/browser/renderer_host/render_widget_host_impl.h" |
| #include "content/browser/web_contents/web_contents_impl.h" |
| #include "content/common/android/media_metadata_android.h" |
| @@ -19,6 +20,7 @@ |
| #include "content/public/browser/navigation_handle.h" |
| #include "content/public/common/media_metadata.h" |
| #include "jni/WebContentsObserverProxy_jni.h" |
| +#include "net/base/net_errors.h" |
| using base::android::AttachCurrentThread; |
| using base::android::JavaParamRef; |
| @@ -104,71 +106,22 @@ void WebContentsObserverProxy::DidStopLoading() { |
| Java_WebContentsObserverProxy_didStopLoading(env, obj, jstring_url); |
| } |
| -void WebContentsObserverProxy::DidFailProvisionalLoad( |
| - RenderFrameHost* render_frame_host, |
| - const GURL& validated_url, |
| - int error_code, |
| - const base::string16& error_description, |
| - bool was_ignored_by_handler) { |
| - DidFailLoadInternal(true, !render_frame_host->GetParent(), error_code, |
| - error_description, validated_url, was_ignored_by_handler); |
| -} |
| - |
| void WebContentsObserverProxy::DidFailLoad( |
| RenderFrameHost* render_frame_host, |
| const GURL& validated_url, |
| int error_code, |
| const base::string16& error_description, |
| bool was_ignored_by_handler) { |
| - DidFailLoadInternal(false, !render_frame_host->GetParent(), error_code, |
| - error_description, validated_url, was_ignored_by_handler); |
| -} |
| - |
| -void WebContentsObserverProxy::DidNavigateMainFrame( |
| - const LoadCommittedDetails& details, |
| - const FrameNavigateParams& params) { |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> obj(java_observer_); |
| + ScopedJavaLocalRef<jstring> jstring_error_description( |
| + ConvertUTF16ToJavaString(env, error_description)); |
| ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, params.url.spec())); |
| - ScopedJavaLocalRef<jstring> jstring_base_url( |
| - ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| - |
| - // See http://crbug.com/251330 for why it's determined this way. |
| - url::Replacements<char> replacements; |
| - replacements.ClearRef(); |
| - bool urls_same_ignoring_fragment = |
| - params.url.ReplaceComponents(replacements) == |
| - details.previous_url.ReplaceComponents(replacements); |
| - |
| - // is_fragment_navigation is indicative of the intent of this variable. |
| - // However, there isn't sufficient information here to determine whether this |
| - // is actually a fragment navigation, or a history API navigation to a URL |
| - // that would also be valid for a fragment navigation. |
| - bool is_fragment_navigation = |
| - urls_same_ignoring_fragment && details.is_in_page; |
| - |
| - Java_WebContentsObserverProxy_didNavigateMainFrame( |
| - env, obj, jstring_url, jstring_base_url, |
| - details.is_navigation_to_different_page(), is_fragment_navigation, |
| - details.http_status_code); |
| -} |
| + ConvertUTF8ToJavaString(env, validated_url.spec())); |
| -void WebContentsObserverProxy::DidNavigateAnyFrame( |
| - RenderFrameHost* render_frame_host, |
| - const LoadCommittedDetails& details, |
| - const FrameNavigateParams& params) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> obj(java_observer_); |
| - ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, params.url.spec())); |
| - ScopedJavaLocalRef<jstring> jstring_base_url( |
| - ConvertUTF8ToJavaString(env, params.base_url.spec())); |
| - jboolean jboolean_is_reload = ui::PageTransitionCoreTypeIs( |
| - params.transition, ui::PAGE_TRANSITION_RELOAD); |
| - |
| - Java_WebContentsObserverProxy_didNavigateAnyFrame( |
| - env, obj, jstring_url, jstring_base_url, jboolean_is_reload); |
| + Java_WebContentsObserverProxy_didFailLoad( |
| + env, obj, !render_frame_host->GetParent(), error_code, |
| + jstring_error_description, jstring_url); |
| } |
| void WebContentsObserverProxy::DocumentAvailableInMainFrame() { |
| @@ -177,37 +130,6 @@ void WebContentsObserverProxy::DocumentAvailableInMainFrame() { |
| Java_WebContentsObserverProxy_documentAvailableInMainFrame(env, obj); |
| } |
| -void WebContentsObserverProxy::DidStartProvisionalLoadForFrame( |
| - RenderFrameHost* render_frame_host, |
| - const GURL& validated_url, |
| - bool is_error_page) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> obj(java_observer_); |
| - ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, validated_url.spec())); |
| - // TODO(dcheng): Does Java really need the parent frame ID? It doesn't appear |
| - // to be used at all, and it just adds complexity here. |
| - Java_WebContentsObserverProxy_didStartProvisionalLoadForFrame( |
| - env, obj, render_frame_host->GetRoutingID(), |
| - render_frame_host->GetParent() |
| - ? render_frame_host->GetParent()->GetRoutingID() |
| - : -1, |
| - !render_frame_host->GetParent(), jstring_url, is_error_page); |
| -} |
| - |
| -void WebContentsObserverProxy::DidCommitProvisionalLoadForFrame( |
| - RenderFrameHost* render_frame_host, |
| - const GURL& url, |
| - ui::PageTransition transition_type) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> obj(java_observer_); |
| - ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, url.spec())); |
| - Java_WebContentsObserverProxy_didCommitProvisionalLoadForFrame( |
| - env, obj, render_frame_host->GetRoutingID(), |
| - !render_frame_host->GetParent(), jstring_url, transition_type); |
| -} |
| - |
| void WebContentsObserverProxy::DidStartNavigation( |
| NavigationHandle* navigation_handle) { |
| JNIEnv* env = AttachCurrentThread(); |
| @@ -216,7 +138,7 @@ void WebContentsObserverProxy::DidStartNavigation( |
| ConvertUTF8ToJavaString(env, navigation_handle->GetURL().spec())); |
| Java_WebContentsObserverProxy_didStartNavigation( |
| env, obj, jstring_url, navigation_handle->IsInMainFrame(), |
| - navigation_handle->IsErrorPage()); |
| + navigation_handle->IsSamePage(), navigation_handle->IsErrorPage()); |
| } |
| void WebContentsObserverProxy::DidFinishNavigation( |
| @@ -226,13 +148,39 @@ void WebContentsObserverProxy::DidFinishNavigation( |
| ScopedJavaLocalRef<jstring> jstring_url( |
| ConvertUTF8ToJavaString(env, navigation_handle->GetURL().spec())); |
| + bool is_fragment_navigation = navigation_handle->IsSamePage(); |
| + |
| + if (navigation_handle->HasCommitted()) { |
| + // See http://crbug.com/251330 for why it's determined this way. |
| + url::Replacements<char> replacements; |
| + replacements.ClearRef(); |
| + bool urls_same_ignoring_fragment = |
| + navigation_handle->GetURL().ReplaceComponents(replacements) == |
| + navigation_handle->GetPreviousURL().ReplaceComponents(replacements); |
| + is_fragment_navigation &= urls_same_ignoring_fragment; |
| + } |
| + |
| + base::string16 error_description = |
| + navigation_handle->GetNetErrorCode() == net::OK |
| + ? base::string16() |
| + : error_page::LocalizedError::GetErrorDetails( |
| + net::kErrorDomain, navigation_handle->GetNetErrorCode(), |
| + navigation_handle->IsPost()); |
| + |
| + ScopedJavaLocalRef<jstring> jerror_description( |
| + ConvertUTF16ToJavaString(env, error_description)); |
| Java_WebContentsObserverProxy_didFinishNavigation( |
| env, obj, jstring_url, navigation_handle->IsInMainFrame(), |
| navigation_handle->IsErrorPage(), navigation_handle->HasCommitted(), |
| - navigation_handle->IsSamePage(), |
| + navigation_handle->IsSamePage(), is_fragment_navigation, |
| navigation_handle->HasCommitted() ? navigation_handle->GetPageTransition() |
| : -1, |
| - navigation_handle->GetNetErrorCode()); |
| + navigation_handle->GetNetErrorCode(), jerror_description, |
| + // TODO(shaktisahu): Change default status to -1 after fixing |
| + // crbug/690041. |
| + navigation_handle->GetResponseHeaders() |
| + ? navigation_handle->GetResponseHeaders()->response_code() |
| + : 200); |
| } |
| void WebContentsObserverProxy::DidFinishLoad(RenderFrameHost* render_frame_host, |
| @@ -284,25 +232,6 @@ void WebContentsObserverProxy::DidChangeThemeColor(SkColor color) { |
| Java_WebContentsObserverProxy_didChangeThemeColor(env, obj, color); |
| } |
| -void WebContentsObserverProxy::DidFailLoadInternal( |
| - bool is_provisional_load, |
| - bool is_main_frame, |
| - int error_code, |
| - const base::string16& description, |
| - const GURL& url, |
| - bool was_ignored_by_handler) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> obj(java_observer_); |
| - ScopedJavaLocalRef<jstring> jstring_error_description( |
| - ConvertUTF16ToJavaString(env, description)); |
| - ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, url.spec())); |
| - |
| - Java_WebContentsObserverProxy_didFailLoad( |
| - env, obj, is_provisional_load, is_main_frame, error_code, |
| - jstring_error_description, jstring_url, was_ignored_by_handler); |
| -} |
| - |
| void WebContentsObserverProxy::DidFirstVisuallyNonEmptyPaint() { |
| JNIEnv* env = AttachCurrentThread(); |
| ScopedJavaLocalRef<jobject> obj(java_observer_); |
| @@ -331,18 +260,6 @@ void WebContentsObserverProxy::TitleWasSet(NavigationEntry* entry, |
| Java_WebContentsObserverProxy_titleWasSet(env, obj, jstring_title); |
| } |
| -void WebContentsObserverProxy::DidStartNavigationToPendingEntry( |
| - const GURL& url, |
| - ReloadType reload_type) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jobject> obj(java_observer_); |
| - ScopedJavaLocalRef<jstring> jstring_url( |
| - ConvertUTF8ToJavaString(env, url.spec())); |
| - |
| - Java_WebContentsObserverProxy_didStartNavigationToPendingEntry(env, obj, |
| - jstring_url); |
| -} |
| - |
| void WebContentsObserverProxy::SetToBaseURLForDataURLIfNeeded( |
| std::string* url) { |
| NavigationEntry* entry = |