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

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

Issue 241223002: Start using RenderFrameProxyHost objects. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Commits the right URL now. Created 6 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 | 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/browser/frame_host/render_frame_host_impl.h" 5 #include "content/browser/frame_host/render_frame_host_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/containers/hash_tables.h" 8 #include "base/containers/hash_tables.h"
9 #include "base/lazy_instance.h" 9 #include "base/lazy_instance.h"
10 #include "base/metrics/user_metrics_action.h" 10 #include "base/metrics/user_metrics_action.h"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 } 125 }
126 126
127 } // namespace 127 } // namespace
128 128
129 RenderFrameHost* RenderFrameHost::FromID(int render_process_id, 129 RenderFrameHost* RenderFrameHost::FromID(int render_process_id,
130 int render_frame_id) { 130 int render_frame_id) {
131 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id); 131 return RenderFrameHostImpl::FromID(render_process_id, render_frame_id);
132 } 132 }
133 133
134 // static 134 // static
135 RenderFrameHostImpl* RenderFrameHostImpl::FromID( 135 RenderFrameHostImpl* RenderFrameHostImpl::FromID(int process_id,
136 int process_id, int routing_id) { 136 int routing_id) {
137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 137 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
138 RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer(); 138 RoutingIDFrameMap* frames = g_routing_id_frame_map.Pointer();
139 RoutingIDFrameMap::iterator it = frames->find( 139 RoutingIDFrameMap::iterator it = frames->find(
140 RenderFrameHostID(process_id, routing_id)); 140 RenderFrameHostID(process_id, routing_id));
141 return it == frames->end() ? NULL : it->second; 141 return it == frames->end() ? NULL : it->second;
142 } 142 }
143 143
144 RenderFrameHostImpl::RenderFrameHostImpl( 144 RenderFrameHostImpl::RenderFrameHostImpl(
145 RenderViewHostImpl* render_view_host, 145 RenderViewHostImpl* render_view_host,
146 RenderFrameHostDelegate* delegate, 146 RenderFrameHostDelegate* delegate,
147 FrameTree* frame_tree, 147 FrameTree* frame_tree,
148 FrameTreeNode* frame_tree_node, 148 FrameTreeNode* frame_tree_node,
149 int routing_id, 149 int routing_id,
150 bool is_swapped_out) 150 bool is_swapped_out)
151 : render_view_host_(render_view_host), 151 : render_view_host_(render_view_host),
152 delegate_(delegate), 152 delegate_(delegate),
153 cross_process_frame_connector_(NULL), 153 cross_process_frame_connector_(NULL),
154 render_frame_proxy_host_(NULL), 154 render_frame_proxy_host_(NULL),
155 frame_tree_(frame_tree), 155 frame_tree_(frame_tree),
156 frame_tree_node_(frame_tree_node), 156 frame_tree_node_(frame_tree_node),
157 routing_id_(routing_id), 157 routing_id_(routing_id),
158 is_swapped_out_(is_swapped_out), 158 is_swapped_out_(is_swapped_out),
159 renderer_initialized_(false),
160 has_received_swap_out_ack_(false),
159 weak_ptr_factory_(this) { 161 weak_ptr_factory_(this) {
162 RenderFrameHostManager* manager = NULL;
163 if (frame_tree_node_->parent()) {
164 manager = frame_tree_node_->parent()->render_manager();
165 }
166 LOG(ERROR) << "RFHI::RFHI[" << this << "]: "
167 << " process:" << GetProcess()->GetID()
168 << ", routing:" << routing_id
169 << ", site:" << GetSiteInstance()->GetSiteURL()
170 << ", parent: " << manager;
160 frame_tree_->RegisterRenderFrameHost(this); 171 frame_tree_->RegisterRenderFrameHost(this);
161 GetProcess()->AddRoute(routing_id_, this); 172 GetProcess()->AddRoute(routing_id_, this);
162 g_routing_id_frame_map.Get().insert(std::make_pair( 173 g_routing_id_frame_map.Get().insert(std::make_pair(
163 RenderFrameHostID(GetProcess()->GetID(), routing_id_), 174 RenderFrameHostID(GetProcess()->GetID(), routing_id_),
164 this)); 175 this));
165 } 176 }
166 177
167 RenderFrameHostImpl::~RenderFrameHostImpl() { 178 RenderFrameHostImpl::~RenderFrameHostImpl() {
168 GetProcess()->RemoveRoute(routing_id_); 179 GetProcess()->RemoveRoute(routing_id_);
169 g_routing_id_frame_map.Get().erase( 180 g_routing_id_frame_map.Get().erase(
170 RenderFrameHostID(GetProcess()->GetID(), routing_id_)); 181 RenderFrameHostID(GetProcess()->GetID(), routing_id_));
171 if (delegate_) 182 if (delegate_)
172 delegate_->RenderFrameDeleted(this); 183 delegate_->RenderFrameDeleted(this);
173 184
174 // Notify the FrameTree that this RFH is going away, allowing it to shut down 185 // Notify the FrameTree that this RFH is going away, allowing it to shut down
175 // the corresponding RenderViewHost if it is no longer needed. 186 // the corresponding RenderViewHost if it is no longer needed.
176 frame_tree_->UnregisterRenderFrameHost(this); 187 frame_tree_->UnregisterRenderFrameHost(this);
188 LOG(ERROR) << "RFHI::~RFHI[" << this << "]";
177 } 189 }
178 190
179 int RenderFrameHostImpl::GetRoutingID() { 191 int RenderFrameHostImpl::GetRoutingID() {
180 return routing_id_; 192 return routing_id_;
181 } 193 }
182 194
183 SiteInstance* RenderFrameHostImpl::GetSiteInstance() { 195 SiteInstance* RenderFrameHostImpl::GetSiteInstance() {
184 return render_view_host_->GetSiteInstance(); 196 return render_view_host_->GetSiteInstance();
185 } 197 }
186 198
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() { 253 RenderViewHost* RenderFrameHostImpl::GetRenderViewHost() {
242 return render_view_host_; 254 return render_view_host_;
243 } 255 }
244 256
245 bool RenderFrameHostImpl::Send(IPC::Message* message) { 257 bool RenderFrameHostImpl::Send(IPC::Message* message) {
246 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) { 258 if (IPC_MESSAGE_ID_CLASS(message->type()) == InputMsgStart) {
247 return render_view_host_->input_router()->SendInput( 259 return render_view_host_->input_router()->SendInput(
248 make_scoped_ptr(message)); 260 make_scoped_ptr(message));
249 } 261 }
250 262
251 if (render_view_host_->IsSwappedOut()) { 263 // Route IPCs through the RenderFrameProxyHost when in swapped out state.
264 // Note: For subframes in --site-per-process mode, we don't use swapped out
265 // RenderFrameHosts.
266 if (frame_tree_node_->IsMainFrame() && render_view_host_->IsSwappedOut()) {
252 DCHECK(render_frame_proxy_host_); 267 DCHECK(render_frame_proxy_host_);
253 return render_frame_proxy_host_->Send(message); 268 return render_frame_proxy_host_->Send(message);
254 } 269 }
255 270
256 return GetProcess()->Send(message); 271 return GetProcess()->Send(message);
257 } 272 }
258 273
259 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) { 274 bool RenderFrameHostImpl::OnMessageReceived(const IPC::Message &msg) {
260 // Filter out most IPC messages if this renderer is swapped out. 275 // Filter out most IPC messages if this renderer is swapped out.
261 // We still want to handle certain ACKs to keep our state consistent. 276 // We still want to handle certain ACKs to keep our state consistent.
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 OnShowDesktopNotification) 339 OnShowDesktopNotification)
325 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel, 340 IPC_MESSAGE_HANDLER(DesktopNotificationHostMsg_Cancel,
326 OnCancelDesktopNotification) 341 OnCancelDesktopNotification)
327 IPC_MESSAGE_HANDLER(FrameHostMsg_TextSurroundingSelectionResponse, 342 IPC_MESSAGE_HANDLER(FrameHostMsg_TextSurroundingSelectionResponse,
328 OnTextSurroundingSelectionResponse) 343 OnTextSurroundingSelectionResponse)
329 IPC_END_MESSAGE_MAP() 344 IPC_END_MESSAGE_MAP()
330 345
331 return handled; 346 return handled;
332 } 347 }
333 348
349 bool RenderFrameHostImpl::CreateRenderFrame(
350 int parent_routing_id) {
ncarter (slow) 2014/06/25 01:07:55 NIT PLEASE INDENT FOUR SPACES OR USE CLANG FORMAT
351 TRACE_EVENT0("frame_host", "RenderFrameHostImpl::CreateRenderFrame");
352 DCHECK(!IsRenderFrameLive()) << "Creating frame twice";
353
354 // The process may (if we're sharing a process with another host that already
355 // initialized it) or may not (we have our own process or the old process
356 // crashed) have been initialized. Calling Init multiple times will be
357 // ignored, so this is safe.
358 if (!GetProcess()->Init())
359 return false;
360
361 DCHECK(GetProcess()->HasConnection());
362 DCHECK(GetProcess()->GetBrowserContext());
363
364 renderer_initialized_ = true;
365 Send(new FrameMsg_NewFrame(routing_id_, parent_routing_id));
366
367 return true;
368 }
369
370 bool RenderFrameHostImpl::IsRenderFrameLive() {
371 return GetProcess()->HasConnection() && renderer_initialized_;
ncarter (slow) 2014/06/25 01:07:55 If I recall correctly, RVHImpl::IsRenderFrameLive
372 }
373
334 void RenderFrameHostImpl::Init() { 374 void RenderFrameHostImpl::Init() {
335 GetProcess()->ResumeRequestsForView(routing_id_); 375 GetProcess()->ResumeRequestsForView(routing_id_);
336 } 376 }
337 377
338 void RenderFrameHostImpl::OnAddMessageToConsole( 378 void RenderFrameHostImpl::OnAddMessageToConsole(
339 int32 level, 379 int32 level,
340 const base::string16& message, 380 const base::string16& message,
341 int32 line_no, 381 int32 line_no,
342 const base::string16& source_id) { 382 const base::string16& source_id) {
343 if (delegate_->AddMessageToConsole(level, message, line_no, source_id)) 383 if (delegate_->AddMessageToConsole(level, message, line_no, source_id))
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
426 // action. 466 // action.
427 void RenderFrameHostImpl::OnNavigate(const IPC::Message& msg) { 467 void RenderFrameHostImpl::OnNavigate(const IPC::Message& msg) {
428 // Read the parameters out of the IPC message directly to avoid making another 468 // Read the parameters out of the IPC message directly to avoid making another
429 // copy when we filter the URLs. 469 // copy when we filter the URLs.
430 PickleIterator iter(msg); 470 PickleIterator iter(msg);
431 FrameHostMsg_DidCommitProvisionalLoad_Params validated_params; 471 FrameHostMsg_DidCommitProvisionalLoad_Params validated_params;
432 if (!IPC::ParamTraits<FrameHostMsg_DidCommitProvisionalLoad_Params>:: 472 if (!IPC::ParamTraits<FrameHostMsg_DidCommitProvisionalLoad_Params>::
433 Read(&msg, &iter, &validated_params)) 473 Read(&msg, &iter, &validated_params))
434 return; 474 return;
435 475
476 LOG(ERROR) << "RFH[" << this << "]::OnNavigate:"
477 << " url:" << validated_params.url;
478
436 // If we're waiting for a cross-site beforeunload ack from this renderer and 479 // If we're waiting for a cross-site beforeunload ack from this renderer and
437 // we receive a Navigate message from the main frame, then the renderer was 480 // we receive a Navigate message from the main frame, then the renderer was
438 // navigating already and sent it before hearing the ViewMsg_Stop message. 481 // navigating already and sent it before hearing the ViewMsg_Stop message.
439 // We do not want to cancel the pending navigation in this case, since the 482 // We do not want to cancel the pending navigation in this case, since the
440 // old page will soon be stopped. Instead, treat this as a beforeunload ack 483 // old page will soon be stopped. Instead, treat this as a beforeunload ack
441 // to allow the pending navigation to continue. 484 // to allow the pending navigation to continue.
442 if (render_view_host_->is_waiting_for_beforeunload_ack_ && 485 if (render_view_host_->is_waiting_for_beforeunload_ack_ &&
443 render_view_host_->unload_ack_is_for_cross_site_transition_ && 486 render_view_host_->unload_ack_is_for_cross_site_transition_ &&
444 PageTransitionIsMainFrame(validated_params.transition)) { 487 PageTransitionIsMainFrame(validated_params.transition)) {
445 OnBeforeUnloadACK(true, send_before_unload_start_time_, 488 OnBeforeUnloadACK(true, send_before_unload_start_time_,
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
537 580
538 render_view_host_->SetState( 581 render_view_host_->SetState(
539 RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK); 582 RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK);
540 render_view_host_->unload_event_monitor_timeout_->Start( 583 render_view_host_->unload_event_monitor_timeout_->Start(
541 base::TimeDelta::FromMilliseconds( 584 base::TimeDelta::FromMilliseconds(
542 RenderViewHostImpl::kUnloadTimeoutMS)); 585 RenderViewHostImpl::kUnloadTimeoutMS));
543 } 586 }
544 587
545 set_render_frame_proxy_host(proxy); 588 set_render_frame_proxy_host(proxy);
546 589
547 if (render_view_host_->IsRenderViewLive()) 590 if (render_view_host_->IsRenderViewLive()) {
591 has_received_swap_out_ack_ = false;
ncarter (slow) 2014/06/25 01:07:56 Do we need this at all? (when looking through this
548 Send(new FrameMsg_SwapOut(routing_id_, proxy->GetRoutingID())); 592 Send(new FrameMsg_SwapOut(routing_id_, proxy->GetRoutingID()));
593 }
549 594
550 if (!GetParent()) 595 if (!GetParent())
551 delegate_->SwappedOut(this); 596 delegate_->SwappedOut(this);
552 597
553 // Allow the navigation to proceed. 598 // Allow the navigation to proceed.
554 frame_tree_node_->render_manager()->SwappedOut(this); 599 frame_tree_node_->render_manager()->SwappedOut(this);
555 } 600 }
556 601
557 void RenderFrameHostImpl::OnBeforeUnloadACK( 602 void RenderFrameHostImpl::OnBeforeUnloadACK(
558 bool proceed, 603 bool proceed,
559 const base::TimeTicks& renderer_before_unload_start_time, 604 const base::TimeTicks& renderer_before_unload_start_time,
560 const base::TimeTicks& renderer_before_unload_end_time) { 605 const base::TimeTicks& renderer_before_unload_end_time) {
606 LOG(ERROR) << "RFHI::OnBeforeUnloadACK[" << this << "]: ";
561 // TODO(creis): Support properly beforeunload on subframes. For now just 607 // TODO(creis): Support properly beforeunload on subframes. For now just
562 // pretend that the handler ran and allowed the navigation to proceed. 608 // pretend that the handler ran and allowed the navigation to proceed.
563 if (GetParent()) { 609 if (GetParent()) {
564 render_view_host_->is_waiting_for_beforeunload_ack_ = false; 610 render_view_host_->is_waiting_for_beforeunload_ack_ = false;
565 frame_tree_node_->render_manager()->OnBeforeUnloadACK( 611 frame_tree_node_->render_manager()->OnBeforeUnloadACK(
566 render_view_host_->unload_ack_is_for_cross_site_transition_, proceed, 612 render_view_host_->unload_ack_is_for_cross_site_transition_, proceed,
567 renderer_before_unload_end_time); 613 renderer_before_unload_end_time);
568 return; 614 return;
569 } 615 }
570 616
571 render_view_host_->decrement_in_flight_event_count(); 617 render_view_host_->decrement_in_flight_event_count();
572 render_view_host_->StopHangMonitorTimeout(); 618 render_view_host_->StopHangMonitorTimeout();
573 // If this renderer navigated while the beforeunload request was in flight, we 619 // If this renderer navigated while the beforeunload request was in flight, we
574 // may have cleared this state in OnNavigate, in which case we can ignore 620 // may have cleared this state in OnNavigate, in which case we can ignore
575 // this message. 621 // this message.
576 // However renderer might also be swapped out but we still want to proceed 622 // However renderer might also be swapped out but we still want to proceed
577 // with navigation, otherwise it would block future navigations. This can 623 // with navigation, otherwise it would block future navigations. This can
578 // happen when pending cross-site navigation is canceled by a second one just 624 // happen when pending cross-site navigation is canceled by a second one just
579 // before OnNavigate while current RVH is waiting for commit but second 625 // before OnNavigate while current RVH is waiting for commit but second
580 // navigation is started from the beginning. 626 // navigation is started from the beginning.
581 if (!render_view_host_->is_waiting_for_beforeunload_ack_) { 627 if (!render_view_host_->is_waiting_for_beforeunload_ack_) {
628 LOG(ERROR) << "RFHI::OnBeforeUnloadACK[" << this << "]: "
629 << "!is_waiting_for_beforeunload_ack_";
582 return; 630 return;
583 } 631 }
584 632
585 render_view_host_->is_waiting_for_beforeunload_ack_ = false; 633 render_view_host_->is_waiting_for_beforeunload_ack_ = false;
586 634
587 base::TimeTicks before_unload_end_time; 635 base::TimeTicks before_unload_end_time;
588 if (!send_before_unload_start_time_.is_null() && 636 if (!send_before_unload_start_time_.is_null() &&
589 !renderer_before_unload_start_time.is_null() && 637 !renderer_before_unload_start_time.is_null() &&
590 !renderer_before_unload_end_time.is_null()) { 638 !renderer_before_unload_end_time.is_null()) {
591 // When passing TimeTicks across process boundaries, we need to compensate 639 // When passing TimeTicks across process boundaries, we need to compensate
(...skipping 13 matching lines...) Expand all
605 frame_tree_node_->render_manager()->OnBeforeUnloadACK( 653 frame_tree_node_->render_manager()->OnBeforeUnloadACK(
606 render_view_host_->unload_ack_is_for_cross_site_transition_, proceed, 654 render_view_host_->unload_ack_is_for_cross_site_transition_, proceed,
607 before_unload_end_time); 655 before_unload_end_time);
608 656
609 // If canceled, notify the delegate to cancel its pending navigation entry. 657 // If canceled, notify the delegate to cancel its pending navigation entry.
610 if (!proceed) 658 if (!proceed)
611 render_view_host_->GetDelegate()->DidCancelLoading(); 659 render_view_host_->GetDelegate()->DidCancelLoading();
612 } 660 }
613 661
614 void RenderFrameHostImpl::OnSwapOutACK() { 662 void RenderFrameHostImpl::OnSwapOutACK() {
663 has_received_swap_out_ack_ = true;
615 OnSwappedOut(false); 664 OnSwappedOut(false);
616 } 665 }
617 666
618 void RenderFrameHostImpl::OnSwappedOut(bool timed_out) { 667 void RenderFrameHostImpl::OnSwappedOut(bool timed_out) {
619 // For now, we only need to update the RVH state machine for top-level swaps. 668 // For now, we only need to update the RVH state machine for top-level swaps.
620 // Subframe swaps (in --site-per-process) can just continue via RFHM. 669 // Subframe swaps (in --site-per-process) can just continue via RFHM.
621 if (!GetParent()) 670 if (!GetParent())
622 render_view_host_->OnSwappedOut(timed_out); 671 render_view_host_->OnSwappedOut(timed_out);
623 else 672 else
624 frame_tree_node_->render_manager()->SwappedOut(this); 673 frame_tree_node_->render_manager()->SwappedOut(this);
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after
823 params.current_history_list_offset = -1; 872 params.current_history_list_offset = -1;
824 params.current_history_list_length = 0; 873 params.current_history_list_length = 0;
825 params.url = url; 874 params.url = url;
826 params.transition = PAGE_TRANSITION_LINK; 875 params.transition = PAGE_TRANSITION_LINK;
827 params.navigation_type = FrameMsg_Navigate_Type::NORMAL; 876 params.navigation_type = FrameMsg_Navigate_Type::NORMAL;
828 Navigate(params); 877 Navigate(params);
829 } 878 }
830 879
831 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) { 880 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_cross_site_transition) {
832 // TODO(creis): Support subframes. 881 // TODO(creis): Support subframes.
882 LOG(ERROR) << "RFHI::DispatchBeforeUnload[" << this << "]: ";
833 if (!render_view_host_->IsRenderViewLive() || GetParent()) { 883 if (!render_view_host_->IsRenderViewLive() || GetParent()) {
884 LOG(ERROR) << "RFHI::DispatchBeforeUnload[" << this << "]: "
885 << "!RenderViewLive or GetParent()";
834 // We don't have a live renderer, so just skip running beforeunload. 886 // We don't have a live renderer, so just skip running beforeunload.
835 render_view_host_->is_waiting_for_beforeunload_ack_ = true; 887 render_view_host_->is_waiting_for_beforeunload_ack_ = true;
836 render_view_host_->unload_ack_is_for_cross_site_transition_ = 888 render_view_host_->unload_ack_is_for_cross_site_transition_ =
837 for_cross_site_transition; 889 for_cross_site_transition;
838 base::TimeTicks now = base::TimeTicks::Now(); 890 base::TimeTicks now = base::TimeTicks::Now();
839 OnBeforeUnloadACK(true, now, now); 891 OnBeforeUnloadACK(true, now, now);
840 return; 892 return;
841 } 893 }
842 894
843 // This may be called more than once (if the user clicks the tab close button 895 // This may be called more than once (if the user clicks the tab close button
844 // several times, or if she clicks the tab close button then the browser close 896 // several times, or if she clicks the tab close button then the browser close
845 // button), and we only send the message once. 897 // button), and we only send the message once.
846 if (render_view_host_->is_waiting_for_beforeunload_ack_) { 898 if (render_view_host_->is_waiting_for_beforeunload_ack_) {
899 LOG(ERROR) << "RFHI::DispatchBeforeUnload[" << this << "]: "
900 << "is_waiting_for_beforeunload_ack";
847 // Some of our close messages could be for the tab, others for cross-site 901 // Some of our close messages could be for the tab, others for cross-site
848 // transitions. We always want to think it's for closing the tab if any 902 // transitions. We always want to think it's for closing the tab if any
849 // of the messages were, since otherwise it might be impossible to close 903 // of the messages were, since otherwise it might be impossible to close
850 // (if there was a cross-site "close" request pending when the user clicked 904 // (if there was a cross-site "close" request pending when the user clicked
851 // the close button). We want to keep the "for cross site" flag only if 905 // the close button). We want to keep the "for cross site" flag only if
852 // both the old and the new ones are also for cross site. 906 // both the old and the new ones are also for cross site.
853 render_view_host_->unload_ack_is_for_cross_site_transition_ = 907 render_view_host_->unload_ack_is_for_cross_site_transition_ =
854 render_view_host_->unload_ack_is_for_cross_site_transition_ && 908 render_view_host_->unload_ack_is_for_cross_site_transition_ &&
855 for_cross_site_transition; 909 for_cross_site_transition;
856 } else { 910 } else {
911 LOG(ERROR) << "RFHI::DispatchBeforeUnload[" << this << "]: "
912 << "send IPC";
857 // Start the hang monitor in case the renderer hangs in the beforeunload 913 // Start the hang monitor in case the renderer hangs in the beforeunload
858 // handler. 914 // handler.
859 render_view_host_->is_waiting_for_beforeunload_ack_ = true; 915 render_view_host_->is_waiting_for_beforeunload_ack_ = true;
860 render_view_host_->unload_ack_is_for_cross_site_transition_ = 916 render_view_host_->unload_ack_is_for_cross_site_transition_ =
861 for_cross_site_transition; 917 for_cross_site_transition;
862 // Increment the in-flight event count, to ensure that input events won't 918 // Increment the in-flight event count, to ensure that input events won't
863 // cancel the timeout timer. 919 // cancel the timeout timer.
864 render_view_host_->increment_in_flight_event_count(); 920 render_view_host_->increment_in_flight_event_count();
865 render_view_host_->StartHangMonitorTimeout( 921 render_view_host_->StartHangMonitorTimeout(
866 TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS)); 922 TimeDelta::FromMilliseconds(RenderViewHostImpl::kUnloadTimeoutMS));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 FROM_HERE, 983 FROM_HERE,
928 base::Bind( 984 base::Bind(
929 &TransitionRequestManager::SetHasPendingTransitionRequest, 985 &TransitionRequestManager::SetHasPendingTransitionRequest,
930 base::Unretained(TransitionRequestManager::GetInstance()), 986 base::Unretained(TransitionRequestManager::GetInstance()),
931 GetProcess()->GetID(), 987 GetProcess()->GetID(),
932 routing_id_, 988 routing_id_,
933 has_pending_request)); 989 has_pending_request));
934 } 990 }
935 991
936 } // namespace content 992 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698