Chromium Code Reviews| 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 <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 54 RenderFrameHostDelegate* render_frame_delegate, | 54 RenderFrameHostDelegate* render_frame_delegate, |
| 55 RenderViewHostDelegate* render_view_delegate, | 55 RenderViewHostDelegate* render_view_delegate, |
| 56 RenderWidgetHostDelegate* render_widget_delegate, | 56 RenderWidgetHostDelegate* render_widget_delegate, |
| 57 Delegate* delegate) | 57 Delegate* delegate) |
| 58 : frame_tree_node_(frame_tree_node), | 58 : frame_tree_node_(frame_tree_node), |
| 59 delegate_(delegate), | 59 delegate_(delegate), |
| 60 cross_navigation_pending_(false), | 60 cross_navigation_pending_(false), |
| 61 render_frame_delegate_(render_frame_delegate), | 61 render_frame_delegate_(render_frame_delegate), |
| 62 render_view_delegate_(render_view_delegate), | 62 render_view_delegate_(render_view_delegate), |
| 63 render_widget_delegate_(render_widget_delegate), | 63 render_widget_delegate_(render_widget_delegate), |
| 64 pseudo_parent_frame_tree_node_id_(-1), | |
| 64 interstitial_page_(nullptr), | 65 interstitial_page_(nullptr), |
| 65 should_reuse_web_ui_(false), | 66 should_reuse_web_ui_(false), |
| 66 weak_factory_(this) { | 67 weak_factory_(this) { |
| 67 DCHECK(frame_tree_node_); | 68 DCHECK(frame_tree_node_); |
| 68 } | 69 } |
| 69 | 70 |
| 70 RenderFrameHostManager::~RenderFrameHostManager() { | 71 RenderFrameHostManager::~RenderFrameHostManager() { |
| 71 if (pending_render_frame_host_) | 72 if (pending_render_frame_host_) |
| 72 UnsetPendingRenderFrameHost(); | 73 UnsetPendingRenderFrameHost(); |
| 73 | 74 |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 142 ->render_manager() | 143 ->render_manager() |
| 143 ->current_frame_host() | 144 ->current_frame_host() |
| 144 ->GetSiteInstance() | 145 ->GetSiteInstance() |
| 145 ->GetId()); | 146 ->GetId()); |
| 146 if (iter == proxy_hosts_.end()) | 147 if (iter == proxy_hosts_.end()) |
| 147 return NULL; | 148 return NULL; |
| 148 | 149 |
| 149 return iter->second; | 150 return iter->second; |
| 150 } | 151 } |
| 151 | 152 |
| 153 RenderFrameProxyHost* RenderFrameHostManager::GetProxyToEmbedder() { | |
| 154 FrameTreeNode* embedder_frame_tree_node = | |
| 155 FrameTree::GloballyFindByID(pseudo_parent_frame_tree_node_id_); | |
| 156 if (!embedder_frame_tree_node) | |
| 157 return NULL; | |
| 158 RenderFrameProxyHostMap::iterator iter = | |
| 159 proxy_hosts_.find(embedder_frame_tree_node->render_manager() | |
| 160 ->current_frame_host()->GetSiteInstance() | |
| 161 ->GetId()); | |
| 162 if (iter == proxy_hosts_.end()) | |
| 163 return NULL; | |
| 164 return iter->second; | |
| 165 } | |
| 166 | |
| 152 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { | 167 void RenderFrameHostManager::SetPendingWebUI(const GURL& url, int bindings) { |
| 153 pending_web_ui_ = CreateWebUI(url, bindings); | 168 pending_web_ui_ = CreateWebUI(url, bindings); |
| 154 pending_and_current_web_ui_.reset(); | 169 pending_and_current_web_ui_.reset(); |
| 155 } | 170 } |
| 156 | 171 |
| 157 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, | 172 scoped_ptr<WebUIImpl> RenderFrameHostManager::CreateWebUI(const GURL& url, |
| 158 int bindings) { | 173 int bindings) { |
| 159 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); | 174 scoped_ptr<WebUIImpl> new_web_ui(delegate_->CreateWebUIForRenderManager(url)); |
| 160 | 175 |
| 161 // If we have assigned (zero or more) bindings to this NavigationEntry in the | 176 // If we have assigned (zero or more) bindings to this NavigationEntry in the |
| (...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 422 response_started_id_.reset(); | 437 response_started_id_.reset(); |
| 423 } | 438 } |
| 424 | 439 |
| 425 void RenderFrameHostManager::ClearNavigationTransitionData() { | 440 void RenderFrameHostManager::ClearNavigationTransitionData() { |
| 426 render_frame_host_->ClearPendingTransitionRequestData(); | 441 render_frame_host_->ClearPendingTransitionRequestData(); |
| 427 } | 442 } |
| 428 | 443 |
| 429 void RenderFrameHostManager::DidNavigateFrame( | 444 void RenderFrameHostManager::DidNavigateFrame( |
| 430 RenderFrameHostImpl* render_frame_host, | 445 RenderFrameHostImpl* render_frame_host, |
| 431 bool was_caused_by_user_gesture) { | 446 bool was_caused_by_user_gesture) { |
| 447 if (render_frame_host->GetSiteInstance()->GetSiteURL().SchemeIs( | |
|
Fady Samuel
2015/03/04 22:21:06
This doesn't work for other guest types such as <a
Charlie Reis
2015/03/10 04:09:44
Is RenderProcessHostImpl::IsIsolatedGuest() still
lazyboy
2015/04/01 21:47:57
I'm using GetProxyToEmbedder() instead, if we have
| |
| 448 "chrome-guest")) { | |
| 449 RenderFrameProxyHost* proxy_to_embedder = GetProxyToEmbedder(); | |
| 450 DCHECK(proxy_to_embedder); | |
| 451 proxy_to_embedder->SetChildRWHView(current_host()->GetView()); | |
|
Charlie Reis
2015/03/10 04:09:44
This doesn't seem like the right place for these c
lazyboy
2015/04/01 21:47:57
Technically we don't have pending and don't commit
| |
| 452 proxy_to_embedder->SetOverriddenParentFTNID( | |
| 453 pseudo_parent_frame_tree_node_id_); | |
| 454 current_host()->GetView()->Show(); | |
|
Fady Samuel
2015/03/04 22:21:06
This breaks visibility I think.
lazyboy
2015/04/01 21:47:57
Added TODO to investigate.
| |
| 455 } | |
| 456 | |
| 432 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 457 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 433 switches::kEnableBrowserSideNavigation)) { | 458 switches::kEnableBrowserSideNavigation)) { |
| 434 if (render_frame_host == speculative_render_frame_host_.get()) { | 459 if (render_frame_host == speculative_render_frame_host_.get()) { |
| 435 CommitPending(); | 460 CommitPending(); |
| 436 } else if (render_frame_host == render_frame_host_.get()) { | 461 } else if (render_frame_host == render_frame_host_.get()) { |
| 437 // TODO(carlosk): this code doesn't properly handle in-page navigation or | 462 // TODO(carlosk): this code doesn't properly handle in-page navigation or |
| 438 // interwoven navigation requests. | 463 // interwoven navigation requests. |
| 439 DCHECK(!speculative_render_frame_host_); | 464 DCHECK(!speculative_render_frame_host_); |
| 440 } else { | 465 } else { |
| 441 // No one else should be sending us a DidNavigate in this state. | 466 // No one else should be sending us a DidNavigate in this state. |
| (...skipping 1511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1953 void RenderFrameHostManager::DeleteRenderFrameProxyHost( | 1978 void RenderFrameHostManager::DeleteRenderFrameProxyHost( |
| 1954 SiteInstance* instance) { | 1979 SiteInstance* instance) { |
| 1955 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); | 1980 RenderFrameProxyHostMap::iterator iter = proxy_hosts_.find(instance->GetId()); |
| 1956 if (iter != proxy_hosts_.end()) { | 1981 if (iter != proxy_hosts_.end()) { |
| 1957 delete iter->second; | 1982 delete iter->second; |
| 1958 proxy_hosts_.erase(iter); | 1983 proxy_hosts_.erase(iter); |
| 1959 } | 1984 } |
| 1960 } | 1985 } |
| 1961 | 1986 |
| 1962 } // namespace content | 1987 } // namespace content |
| OLD | NEW |