Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/renderer_host/render_view_host.h" | 5 #include "content/browser/renderer_host/render_view_host.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 781 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 792 // action. | 792 // action. |
| 793 void RenderViewHost::OnMsgNavigate(const IPC::Message& msg) { | 793 void RenderViewHost::OnMsgNavigate(const IPC::Message& msg) { |
| 794 // Read the parameters out of the IPC message directly to avoid making another | 794 // Read the parameters out of the IPC message directly to avoid making another |
| 795 // copy when we filter the URLs. | 795 // copy when we filter the URLs. |
| 796 void* iter = NULL; | 796 void* iter = NULL; |
| 797 ViewHostMsg_FrameNavigate_Params validated_params; | 797 ViewHostMsg_FrameNavigate_Params validated_params; |
| 798 if (!IPC::ParamTraits<ViewHostMsg_FrameNavigate_Params>:: | 798 if (!IPC::ParamTraits<ViewHostMsg_FrameNavigate_Params>:: |
| 799 Read(&msg, &iter, &validated_params)) | 799 Read(&msg, &iter, &validated_params)) |
| 800 return; | 800 return; |
| 801 | 801 |
| 802 // If we're waiting for a beforeunload ack from this renderer and we receive | 802 // If we're waiting for a cross-site beforeunload ack from this renderer and |
| 803 // a Navigate message from the main frame, then the renderer was navigating | 803 // we receive a Navigate message from the main frame, then the renderer was |
| 804 // before it received the request. If it is during a cross-site navigation, | 804 // navigating already and sent it before hearing the ViewMsg_Stop message. |
| 805 // then we should forget about the beforeunload, because the navigation will | 805 // We do not want to cancel the pending navigation in this case, since the |
| 806 // now be canceled. (If it is instead during an attempt to close the page, | 806 // old page will soon be stopped. Instead, treat this as a beforeunload ack |
| 807 // we should be sure to keep waiting for the ack, which the new page will | 807 // to allow the pending navigation to continue. |
|
brettw
2011/06/02 08:48:24
This explanation seems reasonable, but I'm trustin
| |
| 808 // send.) | |
| 809 // | |
| 810 // If we did not clear this state, an unresponsiveness timer might think we | |
| 811 // are waiting for an ack but are not in a cross-site navigation, and would | |
| 812 // close the tab. TODO(creis): That timer code should be refactored to only | |
| 813 // close the tab if we explicitly know the user tried to close the tab, and | |
| 814 // not just check for the absence of a cross-site navigation. Once that's | |
| 815 // fixed, this check can go away. | |
| 816 if (is_waiting_for_beforeunload_ack_ && | 808 if (is_waiting_for_beforeunload_ack_ && |
| 817 unload_ack_is_for_cross_site_transition_ && | 809 unload_ack_is_for_cross_site_transition_ && |
| 818 PageTransition::IsMainFrame(validated_params.transition)) { | 810 PageTransition::IsMainFrame(validated_params.transition)) { |
| 819 is_waiting_for_beforeunload_ack_ = false; | 811 OnMsgShouldCloseACK(true); |
| 820 StopHangMonitorTimeout(); | 812 return; |
| 821 } | 813 } |
| 822 | 814 |
| 823 // If we're waiting for an unload ack from this renderer and we receive a | 815 // If we're waiting for an unload ack from this renderer and we receive a |
| 824 // Navigate message, then the renderer was navigating before it received the | 816 // Navigate message, then the renderer was navigating before it received the |
| 825 // unload request. It will either respond to the unload request soon or our | 817 // unload request. It will either respond to the unload request soon or our |
| 826 // timer will expire. Either way, we should ignore this message, because we | 818 // timer will expire. Either way, we should ignore this message, because we |
| 827 // have already committed to closing this renderer. | 819 // have already committed to closing this renderer. |
| 828 if (is_waiting_for_unload_ack_) | 820 if (is_waiting_for_unload_ack_) |
| 829 return; | 821 return; |
| 830 | 822 |
| (...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1278 if (view) { | 1270 if (view) { |
| 1279 view->ShowPopupMenu(params.bounds, | 1271 view->ShowPopupMenu(params.bounds, |
| 1280 params.item_height, | 1272 params.item_height, |
| 1281 params.item_font_size, | 1273 params.item_font_size, |
| 1282 params.selected_item, | 1274 params.selected_item, |
| 1283 params.popup_items, | 1275 params.popup_items, |
| 1284 params.right_aligned); | 1276 params.right_aligned); |
| 1285 } | 1277 } |
| 1286 } | 1278 } |
| 1287 #endif | 1279 #endif |
| OLD | NEW |