Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 118553006: Move DidFailProvisionalLoad handling from RenderView(Host) to RenderFrame(Host). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Huh? Created 6 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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
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 &params.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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698