Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/macros.h" | 6 #include "base/macros.h" |
| 7 #include "base/time/time.h" | 7 #include "base/time/time.h" |
| 8 #include "content/browser/frame_host/navigation_controller_impl.h" | 8 #include "content/browser/frame_host/navigation_controller_impl.h" |
| 9 #include "content/browser/frame_host/navigation_entry_impl.h" | 9 #include "content/browser/frame_host/navigation_entry_impl.h" |
| 10 #include "content/browser/frame_host/navigation_request.h" | 10 #include "content/browser/frame_host/navigation_request.h" |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 29 #include "net/http/http_response_headers.h" | 29 #include "net/http/http_response_headers.h" |
| 30 #include "net/url_request/redirect_info.h" | 30 #include "net/url_request/redirect_info.h" |
| 31 #include "ui/base/page_transition_types.h" | 31 #include "ui/base/page_transition_types.h" |
| 32 #include "url/url_constants.h" | 32 #include "url/url_constants.h" |
| 33 | 33 |
| 34 namespace content { | 34 namespace content { |
| 35 | 35 |
| 36 class NavigatorTestWithBrowserSideNavigation | 36 class NavigatorTestWithBrowserSideNavigation |
| 37 : public RenderViewHostImplTestHarness { | 37 : public RenderViewHostImplTestHarness { |
| 38 public: | 38 public: |
| 39 // Re-defines the private RenderFrameHostManager::SiteInstanceDescriptor here | |
| 40 // to allow access to it from tests. | |
| 41 typedef RenderFrameHostManager::SiteInstanceDescriptor SiteInstanceDescriptor; | |
| 42 | |
| 39 void SetUp() override { | 43 void SetUp() override { |
| 40 EnableBrowserSideNavigation(); | 44 EnableBrowserSideNavigation(); |
| 41 RenderViewHostImplTestHarness::SetUp(); | 45 RenderViewHostImplTestHarness::SetUp(); |
| 42 } | 46 } |
| 43 | 47 |
| 44 TestNavigationURLLoader* GetLoaderForNavigationRequest( | 48 TestNavigationURLLoader* GetLoaderForNavigationRequest( |
| 45 NavigationRequest* request) const { | 49 NavigationRequest* request) const { |
| 46 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); | 50 return static_cast<TestNavigationURLLoader*>(request->loader_for_testing()); |
| 47 } | 51 } |
| 48 | 52 |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 83 bool DidRenderFrameHostRequestCommit(RenderFrameHostImpl* rfh) { | 87 bool DidRenderFrameHostRequestCommit(RenderFrameHostImpl* rfh) { |
| 84 MockRenderProcessHost* rph = | 88 MockRenderProcessHost* rph = |
| 85 static_cast<MockRenderProcessHost*>(rfh->GetProcess()); | 89 static_cast<MockRenderProcessHost*>(rfh->GetProcess()); |
| 86 const FrameMsg_CommitNavigation* commit_message = | 90 const FrameMsg_CommitNavigation* commit_message = |
| 87 static_cast<const FrameMsg_CommitNavigation*>( | 91 static_cast<const FrameMsg_CommitNavigation*>( |
| 88 rph->sink().GetUniqueMessageMatching( | 92 rph->sink().GetUniqueMessageMatching( |
| 89 FrameMsg_CommitNavigation::ID)); | 93 FrameMsg_CommitNavigation::ID)); |
| 90 return commit_message && | 94 return commit_message && |
| 91 rfh->GetRoutingID() == commit_message->routing_id(); | 95 rfh->GetRoutingID() == commit_message->routing_id(); |
| 92 } | 96 } |
| 97 | |
| 98 SiteInstance* ConvertToSiteInstance(RenderFrameHostManager* rfhm, | |
| 99 const SiteInstanceDescriptor& descriptor, | |
| 100 SiteInstance* candidate_instance) { | |
| 101 return rfhm->ConvertToSiteInstance(descriptor, candidate_instance); | |
| 102 } | |
| 93 }; | 103 }; |
| 94 | 104 |
| 95 // PlzNavigate: Test a complete browser-initiated navigation starting with a | 105 // PlzNavigate: Test a complete browser-initiated navigation starting with a |
| 96 // non-live renderer. | 106 // non-live renderer. |
| 97 TEST_F(NavigatorTestWithBrowserSideNavigation, | 107 TEST_F(NavigatorTestWithBrowserSideNavigation, |
| 98 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { | 108 SimpleBrowserInitiatedNavigationFromNonLiveRenderer) { |
| 99 const GURL kUrl("http://chromium.org/"); | 109 const GURL kUrl("http://chromium.org/"); |
| 100 | 110 |
| 101 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); | 111 EXPECT_FALSE(main_test_rfh()->IsRenderFrameLive()); |
| 102 | 112 |
| (...skipping 887 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 990 TestRenderFrameHost* main_rfh = main_test_rfh(); | 1000 TestRenderFrameHost* main_rfh = main_test_rfh(); |
| 991 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); | 1001 main_rfh->SendRendererInitiatedNavigationRequest(kUrl2, true); |
| 992 navigation_request = GetNavigationRequestForFrameTreeNode(node); | 1002 navigation_request = GetNavigationRequestForFrameTreeNode(node); |
| 993 ASSERT_TRUE(navigation_request); | 1003 ASSERT_TRUE(navigation_request); |
| 994 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, | 1004 EXPECT_EQ(NavigationRequest::RESPONSE_STARTED, |
| 995 navigation_request->state()); | 1005 navigation_request->state()); |
| 996 EXPECT_FALSE(navigation_request->loader_for_testing()); | 1006 EXPECT_FALSE(navigation_request->loader_for_testing()); |
| 997 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); | 1007 EXPECT_FALSE(GetSpeculativeRenderFrameHost(node)); |
| 998 } | 1008 } |
| 999 | 1009 |
| 1010 TEST_F(NavigatorTestWithBrowserSideNavigation, | |
|
Charlie Reis
2015/04/02 21:23:25
Let's give a roadmap for the test in a comment bef
carlosk
2015/04/03 16:11:19
Done.
| |
| 1011 SiteInstanceDescriptionConversion) { | |
| 1012 // Navigate to set a current SiteInstance on the RenderFrameHost. | |
| 1013 GURL kUrl1("http://a.com"); | |
| 1014 contents()->NavigateAndCommit(kUrl1); | |
| 1015 SiteInstance* current_instance = main_test_rfh()->GetSiteInstance(); | |
| 1016 ASSERT_TRUE(current_instance); | |
| 1017 | |
| 1018 // Convert a descriptor pointing to the current instance. | |
| 1019 RenderFrameHostManager* rfhm = | |
| 1020 main_test_rfh()->frame_tree_node()->render_manager(); | |
| 1021 { | |
| 1022 SiteInstanceDescriptor descriptor(current_instance); | |
| 1023 SiteInstance* converted_instance = | |
| 1024 ConvertToSiteInstance(rfhm, descriptor, nullptr); | |
| 1025 EXPECT_EQ(current_instance, converted_instance); | |
| 1026 } | |
|
carlosk
2015/04/02 17:15:05
I used a lot of scoping here to avoid mixing up th
Charlie Reis
2015/04/02 21:23:24
Acknowledged.
| |
| 1027 | |
| 1028 // Convert a descriptor pointing an instance unrelated to the current one, | |
| 1029 // with a different site. | |
| 1030 GURL kUrl2("http://b.com"); | |
| 1031 scoped_refptr<SiteInstanceImpl> unrelated_instance( | |
| 1032 static_cast<SiteInstanceImpl*>( | |
| 1033 SiteInstanceImpl::Create(browser_context()))); | |
| 1034 unrelated_instance->SetSite(kUrl2); | |
| 1035 EXPECT_FALSE( | |
| 1036 current_instance->IsRelatedSiteInstance(unrelated_instance.get())); | |
| 1037 { | |
| 1038 SiteInstanceDescriptor descriptor(unrelated_instance.get()); | |
| 1039 SiteInstance* converted_instance = | |
| 1040 ConvertToSiteInstance(rfhm, descriptor, nullptr); | |
| 1041 EXPECT_EQ(unrelated_instance.get(), converted_instance); | |
| 1042 } | |
| 1043 | |
| 1044 // Convert a descriptor of a related instance with the same site as the | |
| 1045 // current one. | |
| 1046 GURL kUrlSameSiteAs1("http://www.a.com/foo"); | |
| 1047 { | |
| 1048 SiteInstanceDescriptor descriptor(kUrlSameSiteAs1, true, browser_context()); | |
| 1049 SiteInstance* converted_instance = | |
| 1050 ConvertToSiteInstance(rfhm, descriptor, nullptr); | |
| 1051 EXPECT_EQ(current_instance, converted_instance); | |
| 1052 } | |
| 1053 | |
| 1054 // Convert a descriptor of a related instance with a site different from the | |
| 1055 // current one. | |
| 1056 GURL kUrlSameSiteAs2("http://www.b.com/foo"); | |
| 1057 scoped_refptr<SiteInstance> related_instance; | |
| 1058 { | |
| 1059 SiteInstanceDescriptor descriptor(kUrlSameSiteAs2, true, browser_context()); | |
| 1060 related_instance = ConvertToSiteInstance(rfhm, descriptor, nullptr); | |
| 1061 // Should return a new instance, related to the current, set to the new site | |
| 1062 // URL. | |
| 1063 EXPECT_TRUE( | |
| 1064 current_instance->IsRelatedSiteInstance(related_instance.get())); | |
| 1065 EXPECT_NE(current_instance, related_instance.get()); | |
| 1066 EXPECT_NE(unrelated_instance.get(), related_instance.get()); | |
| 1067 EXPECT_EQ( | |
| 1068 SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlSameSiteAs2), | |
|
Charlie Reis
2015/04/02 21:23:25
nit: s/SiteInstanceImpl/SiteInstance/
Also, I'm n
carlosk
2015/04/03 16:11:19
Done.
Also replaced SiteInstanceImpl::Create + Se
| |
| 1069 related_instance->GetSiteURL()); | |
| 1070 } | |
| 1071 | |
| 1072 // Convert a descriptor of an unrelated instance with the same site as the | |
| 1073 // current one. | |
| 1074 { | |
| 1075 SiteInstanceDescriptor descriptor(kUrlSameSiteAs1, false, | |
| 1076 browser_context()); | |
| 1077 scoped_refptr<SiteInstance> converted_instance_1 = | |
| 1078 ConvertToSiteInstance(rfhm, descriptor, nullptr); | |
| 1079 // Should return a new instance, unrelated to the current one, set to the | |
| 1080 // provided site URL. | |
| 1081 EXPECT_FALSE( | |
| 1082 current_instance->IsRelatedSiteInstance(converted_instance_1.get())); | |
| 1083 EXPECT_NE(current_instance, converted_instance_1.get()); | |
| 1084 EXPECT_NE(unrelated_instance.get(), converted_instance_1.get()); | |
| 1085 EXPECT_EQ( | |
| 1086 SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlSameSiteAs1), | |
| 1087 converted_instance_1->GetSiteURL()); | |
| 1088 | |
| 1089 // Does the same but this time using unrelated_instance as a candidate, | |
| 1090 // which has a different site. | |
| 1091 scoped_refptr<SiteInstance> converted_instance_2 = | |
| 1092 ConvertToSiteInstance(rfhm, descriptor, unrelated_instance.get()); | |
| 1093 // Should return yet another new instance, unrelated to the current one, set | |
| 1094 // to the same site URL. | |
| 1095 EXPECT_FALSE( | |
| 1096 current_instance->IsRelatedSiteInstance(converted_instance_2.get())); | |
| 1097 EXPECT_NE(current_instance, converted_instance_2.get()); | |
| 1098 EXPECT_NE(unrelated_instance.get(), converted_instance_2.get()); | |
| 1099 EXPECT_NE(converted_instance_1.get(), converted_instance_2.get()); | |
| 1100 EXPECT_EQ( | |
| 1101 SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlSameSiteAs1), | |
| 1102 converted_instance_2->GetSiteURL()); | |
| 1103 | |
| 1104 // Converts once more but with converted_instance_1 as a candidate. | |
| 1105 SiteInstance* converted_instance_3 = | |
| 1106 ConvertToSiteInstance(rfhm, descriptor, converted_instance_1.get()); | |
| 1107 // Should return converted_instance_1 | |
|
Charlie Reis
2015/04/02 21:23:25
nit: End with period.
Also mention "because the si
carlosk
2015/04/03 16:11:19
Done.
| |
| 1108 EXPECT_EQ(converted_instance_1.get(), converted_instance_3); | |
| 1109 } | |
| 1110 | |
| 1111 // Convert a descriptor of an unrelated instance with the same site of | |
| 1112 // related_instance and using it as a candidate. | |
| 1113 { | |
| 1114 SiteInstanceDescriptor descriptor(kUrlSameSiteAs2, false, | |
| 1115 browser_context()); | |
| 1116 scoped_refptr<SiteInstance> converted_instance = | |
| 1117 ConvertToSiteInstance(rfhm, descriptor, related_instance.get()); | |
| 1118 // Should return a new instance, unrelated to the current, set to the | |
| 1119 // provided site URL. | |
| 1120 EXPECT_FALSE( | |
| 1121 current_instance->IsRelatedSiteInstance(converted_instance.get())); | |
| 1122 EXPECT_NE(related_instance.get(), converted_instance.get()); | |
| 1123 EXPECT_NE(unrelated_instance.get(), converted_instance.get()); | |
|
Charlie Reis
2015/04/02 21:23:25
As in case #5, can we add a line to ensure that Co
carlosk
2015/04/03 16:11:19
Done.
| |
| 1124 EXPECT_EQ( | |
| 1125 SiteInstanceImpl::GetSiteForURL(browser_context(), kUrlSameSiteAs2), | |
| 1126 converted_instance->GetSiteURL()); | |
| 1127 } | |
| 1128 } | |
| 1129 | |
| 1000 } // namespace content | 1130 } // namespace content |
| OLD | NEW |