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_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 902 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 913 | 913 |
| 914 // There may be no proxy if there are no active views in the process. | 914 // There may be no proxy if there are no active views in the process. |
| 915 int proxy_routing_id = MSG_ROUTING_NONE; | 915 int proxy_routing_id = MSG_ROUTING_NONE; |
| 916 FrameReplicationState replication_state; | 916 FrameReplicationState replication_state; |
| 917 if (proxy) { | 917 if (proxy) { |
| 918 set_render_frame_proxy_host(proxy); | 918 set_render_frame_proxy_host(proxy); |
| 919 proxy_routing_id = proxy->GetRoutingID(); | 919 proxy_routing_id = proxy->GetRoutingID(); |
| 920 replication_state = proxy->frame_tree_node()->current_replication_state(); | 920 replication_state = proxy->frame_tree_node()->current_replication_state(); |
| 921 } | 921 } |
| 922 | 922 |
| 923 // TODO(clamy): if the frame has no unload handlers and |proxy| is null, it | |
| 924 // could be discarded immediately, improving performance. However that means | |
| 925 // losing the last sync of PageState. | |
| 923 if (IsRenderFrameLive()) { | 926 if (IsRenderFrameLive()) { |
| 924 Send(new FrameMsg_SwapOut(routing_id_, proxy_routing_id, is_loading, | 927 Send(new FrameMsg_SwapOut(routing_id_, proxy_routing_id, is_loading, |
| 925 replication_state)); | 928 replication_state)); |
| 926 } | 929 } |
| 927 | 930 |
| 928 if (!GetParent()) | 931 if (!GetParent()) |
| 929 delegate_->SwappedOut(this); | 932 delegate_->SwappedOut(this); |
| 930 } | 933 } |
| 931 | 934 |
| 932 void RenderFrameHostImpl::OnBeforeUnloadACK( | 935 void RenderFrameHostImpl::OnBeforeUnloadACK( |
| (...skipping 611 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1544 this, validated_url, source_site_instance, params.referrer, | 1547 this, validated_url, source_site_instance, params.referrer, |
| 1545 params.disposition, params.should_replace_current_entry, | 1548 params.disposition, params.should_replace_current_entry, |
| 1546 params.user_gesture); | 1549 params.user_gesture); |
| 1547 } | 1550 } |
| 1548 | 1551 |
| 1549 void RenderFrameHostImpl::Stop() { | 1552 void RenderFrameHostImpl::Stop() { |
| 1550 Send(new FrameMsg_Stop(routing_id_)); | 1553 Send(new FrameMsg_Stop(routing_id_)); |
| 1551 } | 1554 } |
| 1552 | 1555 |
| 1553 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_navigation) { | 1556 void RenderFrameHostImpl::DispatchBeforeUnload(bool for_navigation) { |
| 1554 // TODO(creis): Support beforeunload on subframes. For now just pretend that | 1557 // Skip running beforeUnload if: |
| 1558 // - the renderer is not live. | |
| 1559 // - the frame is a subframe. | |
| 1560 // - this is a cross-site navigation and the current frame has no | |
| 1561 // beforeUnload handler registered. | |
| 1562 // TODO(creis): Support beforeUnload on subframes. For now just pretend that | |
| 1555 // the handler ran and allowed the navigation to proceed. | 1563 // the handler ran and allowed the navigation to proceed. |
| 1556 if (GetParent() || !IsRenderFrameLive()) { | 1564 // TODO(clamy): Skip beforeUnload when closing a frame with no registered |
| 1557 // We don't have a live renderer, so just skip running beforeunload. | 1565 // beforeUnload handlers. |
|
clamy
2015/02/16 17:43:53
We currently only skip waiting for beforeUnload in
| |
| 1566 if (GetParent() || !IsRenderFrameLive() || | |
| 1567 (!has_beforeunload_handlers_ && for_navigation)) { | |
| 1558 if (base::CommandLine::ForCurrentProcess()->HasSwitch( | 1568 if (base::CommandLine::ForCurrentProcess()->HasSwitch( |
| 1559 switches::kEnableBrowserSideNavigation)) { | 1569 switches::kEnableBrowserSideNavigation)) { |
| 1560 frame_tree_node_->navigator()->OnBeforeUnloadACK( | 1570 frame_tree_node_->navigator()->OnBeforeUnloadACK( |
| 1561 frame_tree_node_, true); | 1571 frame_tree_node_, true); |
| 1562 } else { | 1572 } else { |
| 1563 frame_tree_node_->render_manager()->OnBeforeUnloadACK( | 1573 frame_tree_node_->render_manager()->OnBeforeUnloadACK( |
| 1564 for_navigation, true, base::TimeTicks::Now()); | 1574 for_navigation, true, base::TimeTicks::Now()); |
| 1565 } | 1575 } |
| 1566 return; | 1576 return; |
| 1567 } | 1577 } |
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1886 void RenderFrameHostImpl::DidUseGeolocationPermission() { | 1896 void RenderFrameHostImpl::DidUseGeolocationPermission() { |
| 1887 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); | 1897 RenderFrameHost* top_frame = frame_tree_node()->frame_tree()->GetMainFrame(); |
| 1888 GetContentClient()->browser()->RegisterPermissionUsage( | 1898 GetContentClient()->browser()->RegisterPermissionUsage( |
| 1889 PERMISSION_GEOLOCATION, | 1899 PERMISSION_GEOLOCATION, |
| 1890 delegate_->GetAsWebContents(), | 1900 delegate_->GetAsWebContents(), |
| 1891 GetLastCommittedURL().GetOrigin(), | 1901 GetLastCommittedURL().GetOrigin(), |
| 1892 top_frame->GetLastCommittedURL().GetOrigin()); | 1902 top_frame->GetLastCommittedURL().GetOrigin()); |
| 1893 } | 1903 } |
| 1894 | 1904 |
| 1895 } // namespace content | 1905 } // namespace content |
| OLD | NEW |