| 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..759fad9276dfb0c529172eb638e5f72e3b401cb3 100644
 | 
| --- a/content/browser/android/web_contents_observer_proxy.cc
 | 
| +++ b/content/browser/android/web_contents_observer_proxy.cc
 | 
| @@ -104,71 +104,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 +128,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 +136,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 +146,33 @@ 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;
 | 
| +  }
 | 
| +
 | 
| +  // TODO(shaktisahu): Provide appropriate error description (crbug/690784).
 | 
| +  ScopedJavaLocalRef<jstring> jerror_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 +224,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 +252,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 =
 | 
| 
 |