| 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 "base/strings/utf_string_conversions.h" | 5 #include "base/strings/utf_string_conversions.h" |
| 6 #include "content/browser/frame_host/navigation_controller_impl.h" | 6 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 7 #include "content/browser/frame_host/navigation_entry_impl.h" | 7 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 8 #include "content/browser/frame_host/navigator.h" | 8 #include "content/browser/frame_host/navigator.h" |
| 9 #include "content/browser/frame_host/render_frame_host_manager.h" | 9 #include "content/browser/frame_host/render_frame_host_manager.h" |
| 10 #include "content/browser/renderer_host/cross_site_transferring_request.h" |
| 10 #include "content/browser/site_instance_impl.h" | 11 #include "content/browser/site_instance_impl.h" |
| 11 #include "content/browser/webui/web_ui_controller_factory_registry.h" | 12 #include "content/browser/webui/web_ui_controller_factory_registry.h" |
| 12 #include "content/common/frame_messages.h" | 13 #include "content/common/frame_messages.h" |
| 13 #include "content/common/view_messages.h" | 14 #include "content/common/view_messages.h" |
| 14 #include "content/public/browser/notification_details.h" | 15 #include "content/public/browser/notification_details.h" |
| 15 #include "content/public/browser/notification_service.h" | 16 #include "content/public/browser/notification_service.h" |
| 16 #include "content/public/browser/notification_source.h" | 17 #include "content/public/browser/notification_source.h" |
| 17 #include "content/public/browser/notification_types.h" | 18 #include "content/public/browser/notification_types.h" |
| 18 #include "content/public/browser/render_process_host.h" | 19 #include "content/public/browser/render_process_host.h" |
| 19 #include "content/public/browser/render_widget_host_iterator.h" | 20 #include "content/public/browser/render_widget_host_iterator.h" |
| (...skipping 1367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1387 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); | 1388 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); |
| 1388 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1389 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1389 TestRenderViewHost* rvh2 = | 1390 TestRenderViewHost* rvh2 = |
| 1390 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); | 1391 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); |
| 1391 | 1392 |
| 1392 // Simulate rvh2's response, which leads to an unload request being sent to | 1393 // Simulate rvh2's response, which leads to an unload request being sent to |
| 1393 // rvh1. | 1394 // rvh1. |
| 1394 std::vector<GURL> url_chain; | 1395 std::vector<GURL> url_chain; |
| 1395 url_chain.push_back(GURL()); | 1396 url_chain.push_back(GURL()); |
| 1396 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( | 1397 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| 1397 rvh2, GlobalRequestID(0, 0), false, url_chain, Referrer(), | 1398 rvh2, GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| 1398 PAGE_TRANSITION_TYPED, 1, false); | 1399 url_chain, Referrer(), PAGE_TRANSITION_TYPED, 1, false); |
| 1399 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1400 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1400 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, | 1401 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| 1401 rvh1->rvh_state()); | 1402 rvh1->rvh_state()); |
| 1402 | 1403 |
| 1403 // Simulate the swap out ack. | 1404 // Simulate the swap out ack. |
| 1404 rvh1->OnSwappedOut(false); | 1405 rvh1->OnSwappedOut(false); |
| 1405 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); | 1406 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); |
| 1406 | 1407 |
| 1407 // The new page commits. | 1408 // The new page commits. |
| 1408 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); | 1409 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1440 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); | 1441 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); |
| 1441 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1442 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1442 TestRenderViewHost* rvh2 = | 1443 TestRenderViewHost* rvh2 = |
| 1443 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); | 1444 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); |
| 1444 | 1445 |
| 1445 // Simulate rvh2's response, which leads to an unload request being sent to | 1446 // Simulate rvh2's response, which leads to an unload request being sent to |
| 1446 // rvh1. | 1447 // rvh1. |
| 1447 std::vector<GURL> url_chain; | 1448 std::vector<GURL> url_chain; |
| 1448 url_chain.push_back(GURL()); | 1449 url_chain.push_back(GURL()); |
| 1449 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( | 1450 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| 1450 rvh2, GlobalRequestID(0, 0), false, url_chain, Referrer(), | 1451 rvh2, GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| 1451 PAGE_TRANSITION_TYPED, 1, false); | 1452 url_chain, Referrer(), PAGE_TRANSITION_TYPED, 1, false); |
| 1452 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1453 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1453 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, | 1454 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| 1454 rvh1->rvh_state()); | 1455 rvh1->rvh_state()); |
| 1455 | 1456 |
| 1456 // Simulate the swap out ack. | 1457 // Simulate the swap out ack. |
| 1457 rvh1->OnSwappedOut(false); | 1458 rvh1->OnSwappedOut(false); |
| 1458 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); | 1459 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_COMMIT, rvh1->rvh_state()); |
| 1459 | 1460 |
| 1460 // The new page commits. | 1461 // The new page commits. |
| 1461 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); | 1462 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1488 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); | 1489 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); |
| 1489 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1490 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1490 TestRenderViewHost* rvh2 = | 1491 TestRenderViewHost* rvh2 = |
| 1491 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); | 1492 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); |
| 1492 | 1493 |
| 1493 // Simulate rvh2's response, which leads to an unload request being sent to | 1494 // Simulate rvh2's response, which leads to an unload request being sent to |
| 1494 // rvh1. | 1495 // rvh1. |
| 1495 std::vector<GURL> url_chain; | 1496 std::vector<GURL> url_chain; |
| 1496 url_chain.push_back(GURL()); | 1497 url_chain.push_back(GURL()); |
| 1497 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( | 1498 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| 1498 rvh2, GlobalRequestID(0, 0), false, url_chain, Referrer(), | 1499 rvh2, GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| 1499 PAGE_TRANSITION_TYPED, 1, false); | 1500 url_chain, Referrer(), PAGE_TRANSITION_TYPED, 1, false); |
| 1500 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1501 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1501 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, | 1502 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| 1502 rvh1->rvh_state()); | 1503 rvh1->rvh_state()); |
| 1503 | 1504 |
| 1504 // The new page commits. | 1505 // The new page commits. |
| 1505 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); | 1506 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| 1506 EXPECT_FALSE(contents()->cross_navigation_pending()); | 1507 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 1507 EXPECT_EQ(rvh2, rvh()); | 1508 EXPECT_EQ(rvh2, rvh()); |
| 1508 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL); | 1509 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL); |
| 1509 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh2->rvh_state()); | 1510 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh2->rvh_state()); |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1541 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); | 1542 rvh1->OnMessageReceived(ViewHostMsg_ShouldClose_ACK(0, true, now, now)); |
| 1542 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1543 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1543 TestRenderViewHost* rvh2 = | 1544 TestRenderViewHost* rvh2 = |
| 1544 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); | 1545 static_cast<TestRenderViewHost*>(contents()->GetPendingRenderViewHost()); |
| 1545 | 1546 |
| 1546 // Simulate rvh2's response, which leads to an unload request being sent to | 1547 // Simulate rvh2's response, which leads to an unload request being sent to |
| 1547 // rvh1. | 1548 // rvh1. |
| 1548 std::vector<GURL> url_chain; | 1549 std::vector<GURL> url_chain; |
| 1549 url_chain.push_back(GURL()); | 1550 url_chain.push_back(GURL()); |
| 1550 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( | 1551 contents()->GetRenderManagerForTesting()->OnCrossSiteResponse( |
| 1551 rvh2, GlobalRequestID(0, 0), false, url_chain, Referrer(), | 1552 rvh2, GlobalRequestID(0, 0), scoped_ptr<CrossSiteTransferringRequest>(), |
| 1552 PAGE_TRANSITION_TYPED, 1, false); | 1553 url_chain, Referrer(), PAGE_TRANSITION_TYPED, 1, false); |
| 1553 EXPECT_TRUE(contents()->cross_navigation_pending()); | 1554 EXPECT_TRUE(contents()->cross_navigation_pending()); |
| 1554 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, | 1555 EXPECT_EQ(RenderViewHostImpl::STATE_WAITING_FOR_UNLOAD_ACK, |
| 1555 rvh1->rvh_state()); | 1556 rvh1->rvh_state()); |
| 1556 | 1557 |
| 1557 // The new page commits. | 1558 // The new page commits. |
| 1558 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); | 1559 contents()->TestDidNavigate(rvh2, 1, kUrl2, PAGE_TRANSITION_TYPED); |
| 1559 EXPECT_FALSE(contents()->cross_navigation_pending()); | 1560 EXPECT_FALSE(contents()->cross_navigation_pending()); |
| 1560 EXPECT_EQ(rvh2, rvh()); | 1561 EXPECT_EQ(rvh2, rvh()); |
| 1561 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL); | 1562 EXPECT_TRUE(contents()->GetPendingRenderViewHost() == NULL); |
| 1562 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh2->rvh_state()); | 1563 EXPECT_EQ(RenderViewHostImpl::STATE_DEFAULT, rvh2->rvh_state()); |
| 1563 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, rvh1->rvh_state()); | 1564 EXPECT_EQ(RenderViewHostImpl::STATE_PENDING_SWAP_OUT, rvh1->rvh_state()); |
| 1564 | 1565 |
| 1565 // Simulate the swap out ack. | 1566 // Simulate the swap out ack. |
| 1566 rvh1->OnSwappedOut(false); | 1567 rvh1->OnSwappedOut(false); |
| 1567 | 1568 |
| 1568 // rvh1 should be swapped out. | 1569 // rvh1 should be swapped out. |
| 1569 EXPECT_FALSE(destruction_observer.rvh_deleted()); | 1570 EXPECT_FALSE(destruction_observer.rvh_deleted()); |
| 1570 EXPECT_TRUE(rvh1->IsSwappedOut()); | 1571 EXPECT_TRUE(rvh1->IsSwappedOut()); |
| 1571 } | 1572 } |
| 1572 | 1573 |
| 1573 } // namespace content | 1574 } // namespace content |
| OLD | NEW |