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

Side by Side Diff: content/browser/frame_host/navigation_handle_impl.cc

Issue 2967363002: Refactor NavigationHandleImpl::RegisterNavigationThrottles. (Closed)
Patch Set: Addressed comments (@clamy) (and rebase...) Created 3 years, 5 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
« no previous file with comments | « content/browser/frame_host/navigation_handle_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/browser/frame_host/navigation_handle_impl.h" 5 #include "content/browser/frame_host/navigation_handle_impl.h"
6 6
7 #include <iterator> 7 #include <iterator>
8 8
9 #include "base/debug/dump_without_crashing.h" 9 #include "base/debug/dump_without_crashing.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 1080 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 } 1091 }
1092 1092
1093 if (!callback.is_null()) 1093 if (!callback.is_null())
1094 callback.Run(result); 1094 callback.Run(result);
1095 1095
1096 // No code after running the callback, as it might have resulted in our 1096 // No code after running the callback, as it might have resulted in our
1097 // destruction. 1097 // destruction.
1098 } 1098 }
1099 1099
1100 void NavigationHandleImpl::RegisterNavigationThrottles() { 1100 void NavigationHandleImpl::RegisterNavigationThrottles() {
1101 // Register the navigation throttles. The vector returned by 1101 // Note: |throttle_| might not be empty. Some NavigationThrottles might have
1102 // CreateThrottlesForNavigation is not assigned to throttles_ directly because 1102 // been registered with RegisterThrottleForTesting. These must reside at the
1103 // it would overwrite any throttles previously added with 1103 // end of |throttles_|. TestNavigationManagerThrottle expects that the
1104 // RegisterThrottleForTesting. 1104 // NavigationThrottles added for test are the last NavigationThrottles to
1105 // TODO(carlosk, arthursonzogni): should simplify this to either use 1105 // execute. Take them out while appending the rest of the
1106 // |throttles_| directly (except for the case described above) or 1106 // NavigationThrottles.
1107 // |throttles_to_register| for registering all throttles. 1107 std::vector<std::unique_ptr<NavigationThrottle>> testing_throttles =
1108 std::vector<std::unique_ptr<NavigationThrottle>> throttles_to_register = 1108 std::move(throttles_);
1109 GetDelegate()->CreateThrottlesForNavigation(this); 1109
1110 throttles_ = GetDelegate()->CreateThrottlesForNavigation(this);
1110 1111
1111 // Check for renderer-inititated main frame navigations to data URLs. This is 1112 // Check for renderer-inititated main frame navigations to data URLs. This is
1112 // done first as it may block the main frame navigation altogether. 1113 // done first as it may block the main frame navigation altogether.
1113 std::unique_ptr<NavigationThrottle> data_url_navigation_throttle = 1114 AddThrottle(DataUrlNavigationThrottle::CreateThrottleForNavigation(this));
1114 DataUrlNavigationThrottle::CreateThrottleForNavigation(this);
1115 if (data_url_navigation_throttle)
1116 throttles_to_register.push_back(std::move(data_url_navigation_throttle));
1117 1115
1118 std::unique_ptr<content::NavigationThrottle> ancestor_throttle = 1116 AddThrottle(AncestorThrottle::MaybeCreateThrottleFor(this));
1119 content::AncestorThrottle::MaybeCreateThrottleFor(this); 1117 AddThrottle(FormSubmissionThrottle::MaybeCreateThrottleFor(this));
1120 if (ancestor_throttle)
1121 throttles_.push_back(std::move(ancestor_throttle));
1122
1123 std::unique_ptr<content::NavigationThrottle> form_submission_throttle =
1124 content::FormSubmissionThrottle::MaybeCreateThrottleFor(this);
1125 if (form_submission_throttle)
1126 throttles_.push_back(std::move(form_submission_throttle));
1127 1118
1128 // Check for mixed content. This is done after the AncestorThrottle and the 1119 // Check for mixed content. This is done after the AncestorThrottle and the
1129 // FormSubmissionThrottle so that when folks block mixed content with a CSP 1120 // FormSubmissionThrottle so that when folks block mixed content with a CSP
1130 // policy, they don't get a warning. They'll still get a warning in the 1121 // policy, they don't get a warning. They'll still get a warning in the
1131 // console about CSP blocking the load. 1122 // console about CSP blocking the load.
1132 std::unique_ptr<NavigationThrottle> mixed_content_throttle = 1123 AddThrottle(
1133 MixedContentNavigationThrottle::CreateThrottleForNavigation(this); 1124 MixedContentNavigationThrottle::CreateThrottleForNavigation(this));
1134 if (mixed_content_throttle)
1135 throttles_to_register.push_back(std::move(mixed_content_throttle));
1136 1125
1137 std::unique_ptr<NavigationThrottle> devtools_throttle = 1126 AddThrottle(RenderFrameDevToolsAgentHost::CreateThrottleForNavigation(this));
1138 RenderFrameDevToolsAgentHost::CreateThrottleForNavigation(this);
1139 if (devtools_throttle)
1140 throttles_to_register.push_back(std::move(devtools_throttle));
1141 1127
1142 throttles_.insert(throttles_.begin(), 1128 // Insert all testing NavigationThrottles last.
1143 std::make_move_iterator(throttles_to_register.begin()), 1129 throttles_.insert(throttles_.end(),
1144 std::make_move_iterator(throttles_to_register.end())); 1130 std::make_move_iterator(testing_throttles.begin()),
1131 std::make_move_iterator(testing_throttles.end()));
1132 }
1133
1134 void NavigationHandleImpl::AddThrottle(
1135 std::unique_ptr<NavigationThrottle> throttle) {
1136 if (throttle)
1137 throttles_.push_back(std::move(throttle));
1145 } 1138 }
1146 1139
1147 bool NavigationHandleImpl::IsSelfReferentialURL() { 1140 bool NavigationHandleImpl::IsSelfReferentialURL() {
1148 // about: URLs should be exempted since they are reserved for other purposes 1141 // about: URLs should be exempted since they are reserved for other purposes
1149 // and cannot be the source of infinite recursion. See 1142 // and cannot be the source of infinite recursion. See
1150 // https://crbug.com/341858 . 1143 // https://crbug.com/341858 .
1151 if (url_.SchemeIs("about")) 1144 if (url_.SchemeIs("about"))
1152 return false; 1145 return false;
1153 1146
1154 // Browser-triggered navigations should be exempted. 1147 // Browser-triggered navigations should be exempted.
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
1191 // Stop expecting a navigation to the current site URL in the current expected 1184 // Stop expecting a navigation to the current site URL in the current expected
1192 // process. 1185 // process.
1193 SetExpectedProcess(nullptr); 1186 SetExpectedProcess(nullptr);
1194 1187
1195 // Update the site URL and the expected process. 1188 // Update the site URL and the expected process.
1196 site_url_ = new_site_url; 1189 site_url_ = new_site_url;
1197 SetExpectedProcess(post_redirect_process); 1190 SetExpectedProcess(post_redirect_process);
1198 } 1191 }
1199 1192
1200 } // namespace content 1193 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_handle_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698