OLD | NEW |
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/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/containers/hash_tables.h" | 9 #include "base/containers/hash_tables.h" |
10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 unload_ack_is_for_navigation_(false), | 160 unload_ack_is_for_navigation_(false), |
161 is_loading_(false), | 161 is_loading_(false), |
162 pending_commit_(false), | 162 pending_commit_(false), |
163 accessibility_reset_token_(0), | 163 accessibility_reset_token_(0), |
164 accessibility_reset_count_(0), | 164 accessibility_reset_count_(0), |
165 no_create_browser_accessibility_manager_for_testing_(false), | 165 no_create_browser_accessibility_manager_for_testing_(false), |
166 weak_ptr_factory_(this) { | 166 weak_ptr_factory_(this) { |
167 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); | 167 bool is_swapped_out = !!(flags & CREATE_RF_SWAPPED_OUT); |
168 bool hidden = !!(flags & CREATE_RF_HIDDEN); | 168 bool hidden = !!(flags & CREATE_RF_HIDDEN); |
169 frame_tree_->AddRenderViewHostRef(render_view_host_); | 169 frame_tree_->AddRenderViewHostRef(render_view_host_); |
| 170 |
| 171 LOG(ERROR) << "RFH[" << this << "]::RFH: " |
| 172 << " routing_id:" << routing_id |
| 173 << " swapped:" << is_swapped_out |
| 174 << " hidden:" << hidden |
| 175 << " site:" << site_instance_->GetSiteURL(); |
| 176 |
170 GetProcess()->AddRoute(routing_id_, this); | 177 GetProcess()->AddRoute(routing_id_, this); |
171 g_routing_id_frame_map.Get().insert(std::make_pair( | 178 g_routing_id_frame_map.Get().insert(std::make_pair( |
172 RenderFrameHostID(GetProcess()->GetID(), routing_id_), | 179 RenderFrameHostID(GetProcess()->GetID(), routing_id_), |
173 this)); | 180 this)); |
174 | 181 |
175 if (is_swapped_out) { | 182 if (is_swapped_out) { |
176 rfh_state_ = STATE_SWAPPED_OUT; | 183 rfh_state_ = STATE_SWAPPED_OUT; |
177 } else { | 184 } else { |
178 rfh_state_ = STATE_DEFAULT; | 185 rfh_state_ = STATE_DEFAULT; |
179 GetSiteInstance()->increment_active_frame_count(); | 186 GetSiteInstance()->increment_active_frame_count(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
214 swapout_event_monitor_timeout_.reset(); | 221 swapout_event_monitor_timeout_.reset(); |
215 | 222 |
216 for (const auto& iter: visual_state_callbacks_) { | 223 for (const auto& iter: visual_state_callbacks_) { |
217 iter.second.Run(false); | 224 iter.second.Run(false); |
218 } | 225 } |
219 | 226 |
220 if (render_widget_host_) { | 227 if (render_widget_host_) { |
221 // Shutdown causes the RenderWidgetHost to delete itself. | 228 // Shutdown causes the RenderWidgetHost to delete itself. |
222 render_widget_host_->Shutdown(); | 229 render_widget_host_->Shutdown(); |
223 } | 230 } |
| 231 LOG(ERROR) << "RFH[" << this << "]::~RFH"; |
224 } | 232 } |
225 | 233 |
226 int RenderFrameHostImpl::GetRoutingID() { | 234 int RenderFrameHostImpl::GetRoutingID() { |
227 return routing_id_; | 235 return routing_id_; |
228 } | 236 } |
229 | 237 |
230 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { | 238 SiteInstanceImpl* RenderFrameHostImpl::GetSiteInstance() { |
231 return site_instance_.get(); | 239 return site_instance_.get(); |
232 } | 240 } |
233 | 241 |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
595 | 603 |
596 return manager->GetFromID(parent_node_id); | 604 return manager->GetFromID(parent_node_id); |
597 } | 605 } |
598 | 606 |
599 bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id, | 607 bool RenderFrameHostImpl::CreateRenderFrame(int parent_routing_id, |
600 int previous_sibling_routing_id, | 608 int previous_sibling_routing_id, |
601 int proxy_routing_id) { | 609 int proxy_routing_id) { |
602 TRACE_EVENT0("navigation", "RenderFrameHostImpl::CreateRenderFrame"); | 610 TRACE_EVENT0("navigation", "RenderFrameHostImpl::CreateRenderFrame"); |
603 DCHECK(!IsRenderFrameLive()) << "Creating frame twice"; | 611 DCHECK(!IsRenderFrameLive()) << "Creating frame twice"; |
604 | 612 |
| 613 LOG(ERROR) << "RFH[" << this << "]::CreateRenderFrame:" |
| 614 << " routing_id:" << routing_id_ |
| 615 << " parent:" << parent_routing_id |
| 616 << " previous_sibling_routing_id:" << previous_sibling_routing_id |
| 617 << " proxy:" << proxy_routing_id; |
| 618 |
605 // The process may (if we're sharing a process with another host that already | 619 // The process may (if we're sharing a process with another host that already |
606 // initialized it) or may not (we have our own process or the old process | 620 // initialized it) or may not (we have our own process or the old process |
607 // crashed) have been initialized. Calling Init multiple times will be | 621 // crashed) have been initialized. Calling Init multiple times will be |
608 // ignored, so this is safe. | 622 // ignored, so this is safe. |
609 if (!GetProcess()->Init()) | 623 if (!GetProcess()->Init()) |
610 return false; | 624 return false; |
611 | 625 |
612 DCHECK(GetProcess()->HasConnection()); | 626 DCHECK(GetProcess()->HasConnection()); |
613 | 627 |
614 FrameMsg_NewFrame_Params params; | 628 FrameMsg_NewFrame_Params params; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
651 // The renderer now has a RenderFrame for this RenderFrameHost. Note that | 665 // The renderer now has a RenderFrame for this RenderFrameHost. Note that |
652 // this path is only used for out-of-process iframes. Main frame RenderFrames | 666 // this path is only used for out-of-process iframes. Main frame RenderFrames |
653 // are created with their RenderView, and same-site iframes are created at the | 667 // are created with their RenderView, and same-site iframes are created at the |
654 // time of OnCreateChildFrame. | 668 // time of OnCreateChildFrame. |
655 SetRenderFrameCreated(true); | 669 SetRenderFrameCreated(true); |
656 | 670 |
657 return true; | 671 return true; |
658 } | 672 } |
659 | 673 |
660 void RenderFrameHostImpl::SetRenderFrameCreated(bool created) { | 674 void RenderFrameHostImpl::SetRenderFrameCreated(bool created) { |
| 675 LOG(ERROR) << "RFH[" << this << "]::SetRFCreated: " |
| 676 << created; |
661 bool was_created = render_frame_created_; | 677 bool was_created = render_frame_created_; |
662 render_frame_created_ = created; | 678 render_frame_created_ = created; |
663 | 679 |
664 // If the current status is different than the new status, the delegate | 680 // If the current status is different than the new status, the delegate |
665 // needs to be notified. | 681 // needs to be notified. |
666 if (delegate_ && (created != was_created)) { | 682 if (delegate_ && (created != was_created)) { |
667 if (created) | 683 if (created) |
668 delegate_->RenderFrameCreated(this); | 684 delegate_->RenderFrameCreated(this); |
669 else | 685 else |
670 delegate_->RenderFrameDeleted(this); | 686 delegate_->RenderFrameDeleted(this); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
752 base::TimeTicks::Now() - ui_timestamp, | 768 base::TimeTicks::Now() - ui_timestamp, |
753 base::TimeDelta::FromMilliseconds(10), | 769 base::TimeDelta::FromMilliseconds(10), |
754 base::TimeDelta::FromMinutes(10), 100); | 770 base::TimeDelta::FromMinutes(10), 100); |
755 } | 771 } |
756 // This message is only sent for top-level frames. TODO(avi): when frame tree | 772 // This message is only sent for top-level frames. TODO(avi): when frame tree |
757 // mirroring works correctly, add a check here to enforce it. | 773 // mirroring works correctly, add a check here to enforce it. |
758 delegate_->DocumentOnLoadCompleted(this); | 774 delegate_->DocumentOnLoadCompleted(this); |
759 } | 775 } |
760 | 776 |
761 void RenderFrameHostImpl::OnDidStartProvisionalLoadForFrame(const GURL& url) { | 777 void RenderFrameHostImpl::OnDidStartProvisionalLoadForFrame(const GURL& url) { |
| 778 LOG(ERROR) << "RFH[" << this << "]::DidStartProvLoad:" |
| 779 << " url:" << url; |
762 frame_tree_node_->navigator()->DidStartProvisionalLoad( | 780 frame_tree_node_->navigator()->DidStartProvisionalLoad( |
763 this, url); | 781 this, url); |
764 } | 782 } |
765 | 783 |
766 void RenderFrameHostImpl::OnDidFailProvisionalLoadWithError( | 784 void RenderFrameHostImpl::OnDidFailProvisionalLoadWithError( |
767 const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params) { | 785 const FrameHostMsg_DidFailProvisionalLoadWithError_Params& params) { |
768 frame_tree_node_->navigator()->DidFailProvisionalLoadWithError(this, params); | 786 frame_tree_node_->navigator()->DidFailProvisionalLoadWithError(this, params); |
769 } | 787 } |
770 | 788 |
771 void RenderFrameHostImpl::OnDidFailLoadWithError( | 789 void RenderFrameHostImpl::OnDidFailLoadWithError( |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
812 // navigating already and sent it before hearing the FrameMsg_Stop message. | 830 // navigating already and sent it before hearing the FrameMsg_Stop message. |
813 // Treat this as an implicit beforeunload ack to allow the pending navigation | 831 // Treat this as an implicit beforeunload ack to allow the pending navigation |
814 // to continue. | 832 // to continue. |
815 if (is_waiting_for_beforeunload_ack_ && | 833 if (is_waiting_for_beforeunload_ack_ && |
816 unload_ack_is_for_navigation_ && | 834 unload_ack_is_for_navigation_ && |
817 !GetParent()) { | 835 !GetParent()) { |
818 base::TimeTicks approx_renderer_start_time = send_before_unload_start_time_; | 836 base::TimeTicks approx_renderer_start_time = send_before_unload_start_time_; |
819 OnBeforeUnloadACK(true, approx_renderer_start_time, base::TimeTicks::Now()); | 837 OnBeforeUnloadACK(true, approx_renderer_start_time, base::TimeTicks::Now()); |
820 } | 838 } |
821 | 839 |
| 840 LOG(ERROR) << "RFH[" << this << "]::DidCommitProvLoad:" |
| 841 << " url:" << validated_params.url; |
| 842 |
822 // If we're waiting for an unload ack from this renderer and we receive a | 843 // If we're waiting for an unload ack from this renderer and we receive a |
823 // Navigate message, then the renderer was navigating before it received the | 844 // Navigate message, then the renderer was navigating before it received the |
824 // unload request. It will either respond to the unload request soon or our | 845 // unload request. It will either respond to the unload request soon or our |
825 // timer will expire. Either way, we should ignore this message, because we | 846 // timer will expire. Either way, we should ignore this message, because we |
826 // have already committed to closing this renderer. | 847 // have already committed to closing this renderer. |
827 if (IsWaitingForUnloadACK()) | 848 if (IsWaitingForUnloadACK()) |
828 return; | 849 return; |
829 | 850 |
830 if (validated_params.report_type == | 851 if (validated_params.report_type == |
831 FrameMsg_UILoadMetricsReportType::REPORT_LINK) { | 852 FrameMsg_UILoadMetricsReportType::REPORT_LINK) { |
(...skipping 627 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1459 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin()); | 1480 delegate_->EnterFullscreenMode(GetLastCommittedURL().GetOrigin()); |
1460 else | 1481 else |
1461 delegate_->ExitFullscreenMode(); | 1482 delegate_->ExitFullscreenMode(); |
1462 | 1483 |
1463 // The previous call might change the fullscreen state. We need to make sure | 1484 // The previous call might change the fullscreen state. We need to make sure |
1464 // the renderer is aware of that, which is done via the resize message. | 1485 // the renderer is aware of that, which is done via the resize message. |
1465 render_view_host_->WasResized(); | 1486 render_view_host_->WasResized(); |
1466 } | 1487 } |
1467 | 1488 |
1468 void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) { | 1489 void RenderFrameHostImpl::OnDidStartLoading(bool to_different_document) { |
| 1490 LOG(ERROR) << "RFH[" << this << "]::OnDidStartLoading"; |
1469 // Any main frame load to a new document should reset the load since it will | 1491 // Any main frame load to a new document should reset the load since it will |
1470 // replace the current page and any frames. | 1492 // replace the current page and any frames. |
1471 if (to_different_document && !GetParent()) | 1493 if (to_different_document && !GetParent()) |
1472 is_loading_ = false; | 1494 is_loading_ = false; |
1473 | 1495 |
1474 // This method should never be called when the frame is loading. | 1496 // This method should never be called when the frame is loading. |
1475 // Unfortunately, it can happen if a history navigation happens during a | 1497 // Unfortunately, it can happen if a history navigation happens during a |
1476 // BeforeUnload or Unload event. | 1498 // BeforeUnload or Unload event. |
1477 // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been | 1499 // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been |
1478 // refactored in Blink. See crbug.com/466089 | 1500 // refactored in Blink. See crbug.com/466089 |
1479 if (is_loading_) { | 1501 if (is_loading_) { |
1480 LOG(WARNING) << "OnDidStartLoading was called twice."; | 1502 LOG(WARNING) << "OnDidStartLoading was called twice."; |
1481 return; | 1503 return; |
1482 } | 1504 } |
1483 | 1505 |
1484 frame_tree_node_->DidStartLoading(to_different_document); | 1506 frame_tree_node_->DidStartLoading(to_different_document); |
1485 is_loading_ = true; | 1507 is_loading_ = true; |
1486 } | 1508 } |
1487 | 1509 |
1488 void RenderFrameHostImpl::OnDidStopLoading() { | 1510 void RenderFrameHostImpl::OnDidStopLoading() { |
| 1511 LOG(ERROR) << "RFH[" << this << "]::OnDidStopLoading"; |
1489 // This method should never be called when the frame is not loading. | 1512 // This method should never be called when the frame is not loading. |
1490 // Unfortunately, it can happen if a history navigation happens during a | 1513 // Unfortunately, it can happen if a history navigation happens during a |
1491 // BeforeUnload or Unload event. | 1514 // BeforeUnload or Unload event. |
1492 // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been | 1515 // TODO(fdegans): Change this to a DCHECK after LoadEventProgress has been |
1493 // refactored in Blink. See crbug.com/466089 | 1516 // refactored in Blink. See crbug.com/466089 |
1494 if (!is_loading_) { | 1517 if (!is_loading_) { |
1495 LOG(WARNING) << "OnDidStopLoading was called twice."; | 1518 LOG(ERROR) << "!!!---!!! OnDidStopLoading was called twice."; |
1496 return; | 1519 return; |
1497 } | 1520 } |
1498 | 1521 |
1499 is_loading_ = false; | 1522 is_loading_ = false; |
1500 frame_tree_node_->DidStopLoading(); | 1523 frame_tree_node_->DidStopLoading(); |
1501 } | 1524 } |
1502 | 1525 |
1503 void RenderFrameHostImpl::OnDidChangeLoadProgress(double load_progress) { | 1526 void RenderFrameHostImpl::OnDidChangeLoadProgress(double load_progress) { |
1504 frame_tree_node_->DidChangeLoadProgress(load_progress); | 1527 frame_tree_node_->DidChangeLoadProgress(load_progress); |
1505 } | 1528 } |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1963 | 1986 |
1964 void RenderFrameHostImpl::InsertVisualStateCallback( | 1987 void RenderFrameHostImpl::InsertVisualStateCallback( |
1965 const VisualStateCallback& callback) { | 1988 const VisualStateCallback& callback) { |
1966 static uint64 next_id = 1; | 1989 static uint64 next_id = 1; |
1967 uint64 key = next_id++; | 1990 uint64 key = next_id++; |
1968 Send(new FrameMsg_VisualStateRequest(routing_id_, key)); | 1991 Send(new FrameMsg_VisualStateRequest(routing_id_, key)); |
1969 visual_state_callbacks_.insert(std::make_pair(key, callback)); | 1992 visual_state_callbacks_.insert(std::make_pair(key, callback)); |
1970 } | 1993 } |
1971 | 1994 |
1972 bool RenderFrameHostImpl::IsRenderFrameLive() { | 1995 bool RenderFrameHostImpl::IsRenderFrameLive() { |
| 1996 LOG(ERROR) << "RFH[" << this << "]::IsRenderFrameLive:" |
| 1997 << " render_frame_created_:" << render_frame_created_ |
| 1998 << " process has connection:" << GetProcess()->HasConnection(); |
1973 bool is_live = GetProcess()->HasConnection() && render_frame_created_; | 1999 bool is_live = GetProcess()->HasConnection() && render_frame_created_; |
1974 | 2000 |
1975 // Sanity check: the RenderView should always be live if the RenderFrame is. | 2001 // Sanity check: the RenderView should always be live if the RenderFrame is. |
1976 DCHECK_IMPLIES(is_live, render_view_host_->IsRenderViewLive()); | 2002 DCHECK_IMPLIES(is_live, render_view_host_->IsRenderViewLive()); |
1977 | 2003 |
1978 return is_live; | 2004 return is_live; |
1979 } | 2005 } |
1980 | 2006 |
1981 #if defined(OS_WIN) | 2007 #if defined(OS_WIN) |
1982 | 2008 |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2092 // We may be returning to an existing NavigationEntry that had been granted | 2118 // We may be returning to an existing NavigationEntry that had been granted |
2093 // file access. If this is a different process, we will need to grant the | 2119 // file access. If this is a different process, we will need to grant the |
2094 // access again. The files listed in the page state are validated when they | 2120 // access again. The files listed in the page state are validated when they |
2095 // are received from the renderer to prevent abuse. | 2121 // are received from the renderer to prevent abuse. |
2096 if (request_params.page_state.IsValid()) { | 2122 if (request_params.page_state.IsValid()) { |
2097 render_view_host_->GrantFileAccessFromPageState(request_params.page_state); | 2123 render_view_host_->GrantFileAccessFromPageState(request_params.page_state); |
2098 } | 2124 } |
2099 } | 2125 } |
2100 | 2126 |
2101 } // namespace content | 2127 } // namespace content |
OLD | NEW |