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

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

Issue 2472253002: Fix navigation requests starting too early and not getting associated with the <webview>. (Closed)
Patch Set: nits Created 4 years, 1 month 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
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/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/command_line.h" 10 #include "base/command_line.h"
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
263 } 263 }
264 264
265 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance, 265 RenderFrameHostImpl::RenderFrameHostImpl(SiteInstance* site_instance,
266 RenderViewHostImpl* render_view_host, 266 RenderViewHostImpl* render_view_host,
267 RenderFrameHostDelegate* delegate, 267 RenderFrameHostDelegate* delegate,
268 RenderWidgetHostDelegate* rwh_delegate, 268 RenderWidgetHostDelegate* rwh_delegate,
269 FrameTree* frame_tree, 269 FrameTree* frame_tree,
270 FrameTreeNode* frame_tree_node, 270 FrameTreeNode* frame_tree_node,
271 int32_t routing_id, 271 int32_t routing_id,
272 int32_t widget_routing_id, 272 int32_t widget_routing_id,
273 bool hidden) 273 bool hidden,
274 bool renderer_initiated_creation)
274 : render_view_host_(render_view_host), 275 : render_view_host_(render_view_host),
275 delegate_(delegate), 276 delegate_(delegate),
276 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)), 277 site_instance_(static_cast<SiteInstanceImpl*>(site_instance)),
277 process_(site_instance->GetProcess()), 278 process_(site_instance->GetProcess()),
278 cross_process_frame_connector_(NULL), 279 cross_process_frame_connector_(NULL),
279 render_frame_proxy_host_(NULL), 280 render_frame_proxy_host_(NULL),
280 frame_tree_(frame_tree), 281 frame_tree_(frame_tree),
281 frame_tree_node_(frame_tree_node), 282 frame_tree_node_(frame_tree_node),
282 parent_(nullptr), 283 parent_(nullptr),
283 render_widget_host_(nullptr), 284 render_widget_host_(nullptr),
284 routing_id_(routing_id), 285 routing_id_(routing_id),
285 is_waiting_for_swapout_ack_(false), 286 is_waiting_for_swapout_ack_(false),
286 render_frame_created_(false), 287 render_frame_created_(false),
287 navigations_suspended_(false), 288 navigations_suspended_(false),
288 is_waiting_for_beforeunload_ack_(false), 289 is_waiting_for_beforeunload_ack_(false),
289 unload_ack_is_for_navigation_(false), 290 unload_ack_is_for_navigation_(false),
290 is_loading_(false), 291 is_loading_(false),
291 pending_commit_(false), 292 pending_commit_(false),
292 nav_entry_id_(0), 293 nav_entry_id_(0),
293 accessibility_reset_token_(0), 294 accessibility_reset_token_(0),
294 accessibility_reset_count_(0), 295 accessibility_reset_count_(0),
295 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID), 296 browser_plugin_embedder_ax_tree_id_(AXTreeIDRegistry::kNoAXTreeID),
296 no_create_browser_accessibility_manager_for_testing_(false), 297 no_create_browser_accessibility_manager_for_testing_(false),
297 web_ui_type_(WebUI::kNoWebUI), 298 web_ui_type_(WebUI::kNoWebUI),
298 pending_web_ui_type_(WebUI::kNoWebUI), 299 pending_web_ui_type_(WebUI::kNoWebUI),
299 should_reuse_web_ui_(false), 300 should_reuse_web_ui_(false),
300 last_navigation_lofi_state_(LOFI_UNSPECIFIED), 301 last_navigation_lofi_state_(LOFI_UNSPECIFIED),
301 frame_host_binding_(this), 302 frame_host_binding_(this),
303 waiting_for_init_(renderer_initiated_creation),
302 weak_ptr_factory_(this) { 304 weak_ptr_factory_(this) {
303 frame_tree_->AddRenderViewHostRef(render_view_host_); 305 frame_tree_->AddRenderViewHostRef(render_view_host_);
304 GetProcess()->AddRoute(routing_id_, this); 306 GetProcess()->AddRoute(routing_id_, this);
305 g_routing_id_frame_map.Get().insert(std::make_pair( 307 g_routing_id_frame_map.Get().insert(std::make_pair(
306 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 308 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
307 this)); 309 this));
308 site_instance_->AddObserver(this); 310 site_instance_->AddObserver(this);
309 GetSiteInstance()->IncrementActiveFrameCount(); 311 GetSiteInstance()->IncrementActiveFrameCount();
310 312
311 if (frame_tree_node_->parent()) { 313 if (frame_tree_node_->parent()) {
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
928 delegate_->RenderFrameDeleted(this); 930 delegate_->RenderFrameDeleted(this);
929 } 931 }
930 } 932 }
931 933
932 if (created && render_widget_host_) 934 if (created && render_widget_host_)
933 render_widget_host_->InitForFrame(); 935 render_widget_host_->InitForFrame();
934 } 936 }
935 937
936 void RenderFrameHostImpl::Init() { 938 void RenderFrameHostImpl::Init() {
937 ResourceDispatcherHost::ResumeBlockedRequestsForFrameFromUI(this); 939 ResourceDispatcherHost::ResumeBlockedRequestsForFrameFromUI(this);
940 if (!waiting_for_init_)
941 return;
942
943 waiting_for_init_ = false;
944 if (pendinging_navigate_) {
945 frame_tree_node()->navigator()->OnBeginNavigation(
946 frame_tree_node(), pendinging_navigate_->first,
947 pendinging_navigate_->second);
948 pendinging_navigate_.reset();
949 }
938 } 950 }
939 951
940 void RenderFrameHostImpl::OnAddMessageToConsole( 952 void RenderFrameHostImpl::OnAddMessageToConsole(
941 int32_t level, 953 int32_t level,
942 const base::string16& message, 954 const base::string16& message,
943 int32_t line_no, 955 int32_t line_no,
944 const base::string16& source_id) { 956 const base::string16& source_id) {
945 if (delegate_->AddMessageToConsole(level, message, line_no, source_id)) 957 if (delegate_->AddMessageToConsole(level, message, line_no, source_id))
946 return; 958 return;
947 959
(...skipping 856 matching lines...) Expand 10 before | Expand all | Expand 10 after
1804 } 1816 }
1805 1817
1806 void RenderFrameHostImpl::OnBeginNavigation( 1818 void RenderFrameHostImpl::OnBeginNavigation(
1807 const CommonNavigationParams& common_params, 1819 const CommonNavigationParams& common_params,
1808 const BeginNavigationParams& begin_params) { 1820 const BeginNavigationParams& begin_params) {
1809 CHECK(IsBrowserSideNavigationEnabled()); 1821 CHECK(IsBrowserSideNavigationEnabled());
1810 if (!is_active()) 1822 if (!is_active())
1811 return; 1823 return;
1812 CommonNavigationParams validated_params = common_params; 1824 CommonNavigationParams validated_params = common_params;
1813 GetProcess()->FilterURL(false, &validated_params.url); 1825 GetProcess()->FilterURL(false, &validated_params.url);
1826
1827 if (waiting_for_init_) {
1828 pendinging_navigate_ =
1829 base::MakeUnique<PendingNavigation>(validated_params, begin_params);
1830 return;
1831 }
1832
1814 frame_tree_node()->navigator()->OnBeginNavigation( 1833 frame_tree_node()->navigator()->OnBeginNavigation(
1815 frame_tree_node(), validated_params, begin_params); 1834 frame_tree_node(), validated_params, begin_params);
1816 } 1835 }
1817 1836
1818 void RenderFrameHostImpl::OnDispatchLoad() { 1837 void RenderFrameHostImpl::OnDispatchLoad() {
1819 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); 1838 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible());
1820 1839
1821 // Don't forward the load event if this RFH is pending deletion. This can 1840 // Don't forward the load event if this RFH is pending deletion. This can
1822 // happen in a race where this RenderFrameHost finishes loading just after 1841 // happen in a race where this RenderFrameHost finishes loading just after
1823 // the frame navigates away. See https://crbug.com/626802. 1842 // the frame navigates away. See https://crbug.com/626802.
(...skipping 1355 matching lines...) Expand 10 before | Expand all | Expand 10 after
3179 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind( 3198 web_bluetooth_service_->SetClientConnectionErrorHandler(base::Bind(
3180 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this))); 3199 &RenderFrameHostImpl::DeleteWebBluetoothService, base::Unretained(this)));
3181 return web_bluetooth_service_.get(); 3200 return web_bluetooth_service_.get();
3182 } 3201 }
3183 3202
3184 void RenderFrameHostImpl::DeleteWebBluetoothService() { 3203 void RenderFrameHostImpl::DeleteWebBluetoothService() {
3185 web_bluetooth_service_.reset(); 3204 web_bluetooth_service_.reset();
3186 } 3205 }
3187 3206
3188 } // namespace content 3207 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/render_frame_host_impl.h ('k') | content/browser/frame_host/render_frame_host_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698