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_manager.h" | 5 #include "content/browser/frame_host/render_frame_host_manager.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 1775 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1786 // Prevent the process from exiting while we're trying to use it. | 1786 // Prevent the process from exiting while we're trying to use it. |
1787 if (!swapped_out) { | 1787 if (!swapped_out) { |
1788 new_render_frame_host = proxy->PassFrameHostOwnership(); | 1788 new_render_frame_host = proxy->PassFrameHostOwnership(); |
1789 new_render_frame_host->GetProcess()->AddPendingView(); | 1789 new_render_frame_host->GetProcess()->AddPendingView(); |
1790 | 1790 |
1791 proxy_hosts_->Remove(instance->GetId()); | 1791 proxy_hosts_->Remove(instance->GetId()); |
1792 // NB |proxy| is deleted at this point. | 1792 // NB |proxy| is deleted at this point. |
1793 | 1793 |
1794 // If we are reusing the RenderViewHost and it doesn't already have a | 1794 // If we are reusing the RenderViewHost and it doesn't already have a |
1795 // RenderWidgetHostView, we need to create one if this is the main frame. | 1795 // RenderWidgetHostView, we need to create one if this is the main frame. |
1796 if (!render_view_host->GetWidget()->GetView() && | 1796 if (render_view_host->IsRenderViewLive() && |
1797 !render_view_host->GetWidget()->GetView() && | |
1797 frame_tree_node_->IsMainFrame()) { | 1798 frame_tree_node_->IsMainFrame()) { |
1798 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); | 1799 delegate_->CreateRenderWidgetHostViewForRenderManager(render_view_host); |
1799 } | 1800 } |
1800 } | 1801 } |
1801 } else { | 1802 } else { |
1802 // Create a new RenderFrameHost if we don't find an existing one. | 1803 // Create a new RenderFrameHost if we don't find an existing one. |
1803 | 1804 |
1804 int32 widget_routing_id = MSG_ROUTING_NONE; | 1805 int32 widget_routing_id = MSG_ROUTING_NONE; |
1805 proxy = nullptr; | |
nasko
2015/10/22 23:48:09
This is the main part of this fix. When a proxy ex
| |
1806 | 1806 |
1807 // A RenderFrame in a different process from its parent RenderFrame | 1807 // A RenderFrame in a different process from its parent RenderFrame |
1808 // requires a RenderWidget for input/layout/painting. | 1808 // requires a RenderWidget for input/layout/painting. |
1809 if (frame_tree_node_->parent() && | 1809 if (frame_tree_node_->parent() && |
1810 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != | 1810 frame_tree_node_->parent()->current_frame_host()->GetSiteInstance() != |
1811 instance) { | 1811 instance) { |
1812 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); | 1812 CHECK(SiteIsolationPolicy::AreCrossProcessFramesPossible()); |
1813 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); | 1813 widget_routing_id = instance->GetProcess()->GetNextRoutingID(); |
1814 } | 1814 } |
1815 | 1815 |
(...skipping 832 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2648 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { | 2648 int RenderFrameHostManager::GetOpenerRoutingID(SiteInstance* instance) { |
2649 if (!frame_tree_node_->opener()) | 2649 if (!frame_tree_node_->opener()) |
2650 return MSG_ROUTING_NONE; | 2650 return MSG_ROUTING_NONE; |
2651 | 2651 |
2652 return frame_tree_node_->opener() | 2652 return frame_tree_node_->opener() |
2653 ->render_manager() | 2653 ->render_manager() |
2654 ->GetRoutingIdForSiteInstance(instance); | 2654 ->GetRoutingIdForSiteInstance(instance); |
2655 } | 2655 } |
2656 | 2656 |
2657 } // namespace content | 2657 } // namespace content |
OLD | NEW |