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

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: Rebase on ToT. 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
« no previous file with comments | « content/common/view_messages.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 897 matching lines...) Expand 10 before | Expand all | Expand 10 after
908 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad( 908 void RenderFrameImpl::didReceiveServerRedirectForProvisionalLoad(
909 blink::WebFrame* frame) { 909 blink::WebFrame* frame) {
910 // TODO(nasko): Move implementation here. Needed state: 910 // TODO(nasko): Move implementation here. Needed state:
911 // * page_id_ 911 // * page_id_
912 render_view_->didReceiveServerRedirectForProvisionalLoad(frame); 912 render_view_->didReceiveServerRedirectForProvisionalLoad(frame);
913 } 913 }
914 914
915 void RenderFrameImpl::didFailProvisionalLoad( 915 void RenderFrameImpl::didFailProvisionalLoad(
916 blink::WebFrame* frame, 916 blink::WebFrame* frame,
917 const blink::WebURLError& error) { 917 const blink::WebURLError& error) {
918 // TODO(nasko): Move implementation here. Needed state: 918 WebDataSource* ds = frame->provisionalDataSource();
919 // * page_id_ 919 DCHECK(ds);
920 // * pending_navigation_params_ 920
921 // Needed methods 921 const WebURLRequest& failed_request = ds->request();
922 // * MaybeLoadAlternateErrorPage 922
923 // * LoadNavigationErrorPage 923 // Call out to RenderViewImpl, so observers are notified.
924 render_view_->didFailProvisionalLoad(frame, error); 924 render_view_->didFailProvisionalLoad(frame, error);
925
926 bool show_repost_interstitial =
927 (error.reason == net::ERR_CACHE_MISS &&
928 EqualsASCII(failed_request.httpMethod(), "POST"));
929
930 FrameHostMsg_DidFailProvisionalLoadWithError_Params params;
931 params.frame_id = frame->identifier();
932 params.frame_unique_name = frame->uniqueName();
933 params.is_main_frame = !frame->parent();
934 params.error_code = error.reason;
935 GetContentClient()->renderer()->GetNavigationErrorStrings(
936 frame,
937 failed_request,
938 error,
939 render_view_->renderer_preferences_.accept_languages,
940 NULL,
941 &params.error_description);
942 params.url = error.unreachableURL;
943 params.showing_repost_interstitial = show_repost_interstitial;
944 Send(new FrameHostMsg_DidFailProvisionalLoadWithError(
945 routing_id_, params));
946
947 // Don't display an error page if this is simply a cancelled load. Aside
948 // from being dumb, WebCore doesn't expect it and it will cause a crash.
949 if (error.reason == net::ERR_ABORTED)
950 return;
951
952 // Don't display "client blocked" error page if browser has asked us not to.
953 if (error.reason == net::ERR_BLOCKED_BY_CLIENT &&
954 render_view_->renderer_preferences_.disable_client_blocked_error_page) {
955 return;
956 }
957
958 // Allow the embedder to suppress an error page.
959 if (GetContentClient()->renderer()->ShouldSuppressErrorPage(
960 error.unreachableURL)) {
961 return;
962 }
963
964 if (RenderThreadImpl::current() &&
965 RenderThreadImpl::current()->layout_test_mode()) {
966 return;
967 }
968
969 // Make sure we never show errors in view source mode.
970 frame->enableViewSourceMode(false);
971
972 DocumentState* document_state = DocumentState::FromDataSource(ds);
973 NavigationState* navigation_state = document_state->navigation_state();
974
975 // If this is a failed back/forward/reload navigation, then we need to do a
976 // 'replace' load. This is necessary to avoid messing up session history.
977 // Otherwise, we do a normal load, which simulates a 'go' navigation as far
978 // as session history is concerned.
979 //
980 // AUTO_SUBFRAME loads should always be treated as loads that do not advance
981 // the page id.
982 //
983 // TODO(davidben): This should also take the failed navigation's replacement
984 // state into account, if a location.replace() failed.
985 bool replace =
986 navigation_state->pending_page_id() != -1 ||
987 PageTransitionCoreTypeIs(navigation_state->transition_type(),
988 PAGE_TRANSITION_AUTO_SUBFRAME);
989
990 // If we failed on a browser initiated request, then make sure that our error
991 // page load is regarded as the same browser initiated request.
992 if (!navigation_state->is_content_initiated()) {
993 render_view_->pending_navigation_params_.reset(new ViewMsg_Navigate_Params);
994 render_view_->pending_navigation_params_->page_id =
995 navigation_state->pending_page_id();
996 render_view_->pending_navigation_params_->pending_history_list_offset =
997 navigation_state->pending_history_list_offset();
998 render_view_->pending_navigation_params_->should_clear_history_list =
999 navigation_state->history_list_was_cleared();
1000 render_view_->pending_navigation_params_->transition =
1001 navigation_state->transition_type();
1002 render_view_->pending_navigation_params_->request_time =
1003 document_state->request_time();
1004 render_view_->pending_navigation_params_->should_replace_current_entry =
1005 replace;
1006 }
1007
1008 // Provide the user with a more helpful error page?
1009 if (render_view_->MaybeLoadAlternateErrorPage(frame, error, replace))
1010 return;
1011
1012 // Fallback to a local error page.
1013 render_view_->LoadNavigationErrorPage(
1014 frame, failed_request, error, std::string(), replace);
925 } 1015 }
926 1016
927 void RenderFrameImpl::didCommitProvisionalLoad(blink::WebFrame* frame, 1017 void RenderFrameImpl::didCommitProvisionalLoad(blink::WebFrame* frame,
928 bool is_new_navigation) { 1018 bool is_new_navigation) {
929 // TODO(nasko): Move implementation here. Needed state: 1019 // TODO(nasko): Move implementation here. Needed state:
930 // * page_id_ 1020 // * page_id_
931 // * next_page_id_ 1021 // * next_page_id_
932 // * history_list_offset_ 1022 // * history_list_offset_
933 // * history_list_length_ 1023 // * history_list_length_
934 // * history_page_ids_ 1024 // * history_page_ids_
(...skipping 496 matching lines...) Expand 10 before | Expand all | Expand 10 after
1431 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) { 1521 void RenderFrameImpl::AddObserver(RenderFrameObserver* observer) {
1432 observers_.AddObserver(observer); 1522 observers_.AddObserver(observer);
1433 } 1523 }
1434 1524
1435 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) { 1525 void RenderFrameImpl::RemoveObserver(RenderFrameObserver* observer) {
1436 observer->RenderFrameGone(); 1526 observer->RenderFrameGone();
1437 observers_.RemoveObserver(observer); 1527 observers_.RemoveObserver(observer);
1438 } 1528 }
1439 1529
1440 } // namespace content 1530 } // namespace content
OLDNEW
« no previous file with comments | « content/common/view_messages.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698