Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/renderer/render_frame_impl.h" | 5 #include "content/renderer/render_frame_impl.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
| (...skipping 833 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 844 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( | 844 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( |
| 845 blink::WebFrame* frame) { | 845 blink::WebFrame* frame) { |
| 846 // TODO(nasko): Move implementation here. Needed state: | 846 // TODO(nasko): Move implementation here. Needed state: |
| 847 // * page_id_ | 847 // * page_id_ |
| 848 render_view_->didReceiveServerRedirectForProvisionalLoad(frame); | 848 render_view_->didReceiveServerRedirectForProvisionalLoad(frame); |
| 849 } | 849 } |
| 850 | 850 |
| 851 void RenderFrameImpl::didFailProvisionalLoad( | 851 void RenderFrameImpl::didFailProvisionalLoad( |
| 852 blink::WebFrame* frame, | 852 blink::WebFrame* frame, |
| 853 const blink::WebURLError& error) { | 853 const blink::WebURLError& error) { |
| 854 // TODO(nasko): Move implementation here. Needed state: | 854 WebDataSource* ds = frame->provisionalDataSource(); |
| 855 // * page_id_ | 855 DCHECK(ds); |
| 856 // * pending_navigation_params_ | 856 |
| 857 // Needed methods | 857 const WebURLRequest& failed_request = ds->request(); |
| 858 // * MaybeLoadAlternateErrorPage | 858 |
| 859 // * LoadNavigationErrorPage | 859 // Call out to RenderViewImpl, so observers are notified. |
| 860 render_view_->didFailProvisionalLoad(frame, error); | 860 render_view_->didFailProvisionalLoad(frame, error); |
| 861 | |
| 862 bool show_repost_interstitial = | |
| 863 (error.reason == net::ERR_CACHE_MISS && | |
| 864 EqualsASCII(failed_request.httpMethod(), "POST")); | |
| 865 | |
| 866 FrameHostMsg_DidFailProvisionalLoadWithError_Params params; | |
| 867 params.frame_id = frame->identifier(); | |
| 868 params.frame_unique_name = frame->uniqueName(); | |
| 869 params.is_main_frame = !frame->parent(); | |
| 870 params.error_code = error.reason; | |
| 871 GetContentClient()->renderer()->GetNavigationErrorStrings( | |
| 872 frame, | |
| 873 failed_request, | |
| 874 error, | |
| 875 render_view_->renderer_preferences_.accept_languages, | |
|
Charlie Reis
2014/01/06 18:13:35
We're relying a lot on being friends with RenderVi
nasko
2014/01/06 18:47:03
I don't have a very concrete long term plan yet, j
Charlie Reis
2014/01/06 19:07:17
Ok. We can try to nail down these plans in the ne
| |
| 876 NULL, | |
| 877 ¶ms.error_description); | |
| 878 params.url = error.unreachableURL; | |
| 879 params.showing_repost_interstitial = show_repost_interstitial; | |
| 880 Send(new FrameHostMsg_DidFailProvisionalLoadWithError( | |
| 881 routing_id_, params)); | |
| 882 | |
| 883 // Don't display an error page if this is simply a cancelled load. Aside | |
| 884 // from being dumb, WebCore doesn't expect it and it will cause a crash. | |
| 885 if (error.reason == net::ERR_ABORTED) | |
| 886 return; | |
| 887 | |
| 888 // Don't display "client blocked" error page if browser has asked us not to. | |
| 889 if (error.reason == net::ERR_BLOCKED_BY_CLIENT && | |
| 890 render_view_->renderer_preferences_.disable_client_blocked_error_page) { | |
| 891 return; | |
| 892 } | |
| 893 | |
| 894 // Allow the embedder to suppress an error page. | |
| 895 if (GetContentClient()->renderer()->ShouldSuppressErrorPage( | |
| 896 error.unreachableURL)) { | |
| 897 return; | |
| 898 } | |
| 899 | |
| 900 if (RenderThreadImpl::current() && | |
| 901 RenderThreadImpl::current()->layout_test_mode()) { | |
| 902 return; | |
| 903 } | |
| 904 | |
| 905 // Make sure we never show errors in view source mode. | |
| 906 frame->enableViewSourceMode(false); | |
| 907 | |
| 908 DocumentState* document_state = DocumentState::FromDataSource(ds); | |
| 909 NavigationState* navigation_state = document_state->navigation_state(); | |
| 910 | |
| 911 // If this is a failed back/forward/reload navigation, then we need to do a | |
| 912 // 'replace' load. This is necessary to avoid messing up session history. | |
| 913 // Otherwise, we do a normal load, which simulates a 'go' navigation as far | |
| 914 // as session history is concerned. | |
| 915 // | |
| 916 // AUTO_SUBFRAME loads should always be treated as loads that do not advance | |
| 917 // the page id. | |
| 918 // | |
| 919 // TODO(davidben): This should also take the failed navigation's replacement | |
| 920 // state into account, if a location.replace() failed. | |
| 921 bool replace = | |
| 922 navigation_state->pending_page_id() != -1 || | |
| 923 PageTransitionCoreTypeIs(navigation_state->transition_type(), | |
| 924 PAGE_TRANSITION_AUTO_SUBFRAME); | |
| 925 | |
| 926 // If we failed on a browser initiated request, then make sure that our error | |
| 927 // page load is regarded as the same browser initiated request. | |
| 928 if (!navigation_state->is_content_initiated()) { | |
| 929 render_view_->pending_navigation_params_.reset(new ViewMsg_Navigate_Params); | |
| 930 render_view_->pending_navigation_params_->page_id = | |
| 931 navigation_state->pending_page_id(); | |
| 932 render_view_->pending_navigation_params_->pending_history_list_offset = | |
| 933 navigation_state->pending_history_list_offset(); | |
| 934 render_view_->pending_navigation_params_->should_clear_history_list = | |
| 935 navigation_state->history_list_was_cleared(); | |
| 936 render_view_->pending_navigation_params_->transition = | |
| 937 navigation_state->transition_type(); | |
| 938 render_view_->pending_navigation_params_->request_time = | |
| 939 document_state->request_time(); | |
| 940 render_view_->pending_navigation_params_->should_replace_current_entry = | |
| 941 replace; | |
| 942 } | |
| 943 | |
| 944 // Provide the user with a more helpful error page? | |
| 945 if (render_view_->MaybeLoadAlternateErrorPage(frame, error, replace)) | |
| 946 return; | |
| 947 | |
| 948 // Fallback to a local error page. | |
| 949 render_view_->LoadNavigationErrorPage( | |
| 950 frame, failed_request, error, std::string(), replace); | |
| 861 } | 951 } |
| 862 | 952 |
| 863 void RenderFrameImpl::didCommitProvisionalLoad(blink::WebFrame* frame, | 953 void RenderFrameImpl::didCommitProvisionalLoad(blink::WebFrame* frame, |
| 864 bool is_new_navigation) { | 954 bool is_new_navigation) { |
| 865 // TODO(nasko): Move implementation here. Needed state: | 955 // TODO(nasko): Move implementation here. Needed state: |
| 866 // * page_id_ | 956 // * page_id_ |
| 867 // * next_page_id_ | 957 // * next_page_id_ |
| 868 // * history_list_offset_ | 958 // * history_list_offset_ |
| 869 // * history_list_length_ | 959 // * history_list_length_ |
| 870 // * history_page_ids_ | 960 // * history_page_ids_ |
| (...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1367 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { | 1457 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { |
| 1368 observers_.AddObserver(observer); | 1458 observers_.AddObserver(observer); |
| 1369 } | 1459 } |
| 1370 | 1460 |
| 1371 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { | 1461 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { |
| 1372 observer->RenderFrameGone(); | 1462 observer->RenderFrameGone(); |
| 1373 observers_.RemoveObserver(observer); | 1463 observers_.RemoveObserver(observer); |
| 1374 } | 1464 } |
| 1375 | 1465 |
| 1376 } // namespace content | 1466 } // namespace content |
| OLD | NEW |