Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: chrome/browser/extensions/api/web_navigation/frame_navigation_state_unittest.cc

Issue 2494633004: Remove about:srcdoc url conversion. (Closed)
Patch Set: Rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/macros.h" 5 #include "base/macros.h"
6 #include "base/values.h" 6 #include "base/values.h"
7 #include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h" 7 #include "chrome/browser/extensions/api/web_navigation/frame_navigation_state.h"
8 #include "chrome/test/base/chrome_render_view_host_test_harness.h" 8 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
9 #include "chrome/test/base/testing_profile.h" 9 #include "chrome/test/base/testing_profile.h"
10 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 21 matching lines...) Expand all
32 32
33 // Test that a frame is correctly tracked, and removed once the tab contents 33 // Test that a frame is correctly tracked, and removed once the tab contents
34 // goes away. 34 // goes away.
35 TEST_F(FrameNavigationStateTest, TrackFrame) { 35 TEST_F(FrameNavigationStateTest, TrackFrame) {
36 const GURL url1("http://www.google.com/"); 36 const GURL url1("http://www.google.com/");
37 const GURL url2("http://mail.google.com/"); 37 const GURL url2("http://mail.google.com/");
38 38
39 // Create a main frame. 39 // Create a main frame.
40 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 40 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
41 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh())); 41 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
42 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false, 42 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false);
43 false);
44 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 43 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
45 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh())); 44 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
46 45
47 // Add a sub frame. 46 // Add a sub frame.
48 content::RenderFrameHost* sub_frame = 47 content::RenderFrameHost* sub_frame =
49 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 48 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
50 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 49 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
51 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 50 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
52 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false, 51 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false);
53 false);
54 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 52 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
55 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame)); 53 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
56 54
57 // Check frame state. 55 // Check frame state.
58 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 56 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
59 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame)); 57 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
60 58
61 // Drop the frames. 59 // Drop the frames.
62 navigation_state_.FrameHostDeleted(sub_frame); 60 navigation_state_.FrameHostDeleted(sub_frame);
63 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 61 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
64 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 62 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
65 63
66 navigation_state_.FrameHostDeleted(main_rfh()); 64 navigation_state_.FrameHostDeleted(main_rfh());
67 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 65 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
68 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh())); 66 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
69 } 67 }
70 68
71 // Test that no events can be sent for a frame after an error occurred, but 69 // Test that no events can be sent for a frame after an error occurred, but
72 // before a new navigation happened in this frame. 70 // before a new navigation happened in this frame.
73 TEST_F(FrameNavigationStateTest, ErrorState) { 71 TEST_F(FrameNavigationStateTest, ErrorState) {
74 const GURL url("http://www.google.com/"); 72 const GURL url("http://www.google.com/");
75 73
76 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false, 74 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false);
77 false);
78 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 75 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
79 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 76 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
80 77
81 // After an error occurred, no further events should be sent. 78 // After an error occurred, no further events should be sent.
82 navigation_state_.SetErrorOccurredInFrame(main_rfh()); 79 navigation_state_.SetErrorOccurredInFrame(main_rfh());
83 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 80 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
84 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 81 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
85 82
86 // Navigations to a network error page should be ignored. 83 // Navigations to a network error page should be ignored.
87 navigation_state_.StartTrackingDocumentLoad(main_rfh(), GURL(), false, true, 84 navigation_state_.StartTrackingDocumentLoad(main_rfh(), GURL(), false, true);
88 false);
89 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 85 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
90 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 86 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
91 87
92 // However, when the frame navigates again, it should send events again. 88 // However, when the frame navigates again, it should send events again.
93 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false, 89 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false);
94 false);
95 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 90 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
96 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 91 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
97 } 92 }
98 93
99 // Tests that for a sub frame, no events are send after an error occurred, but 94 // Tests that for a sub frame, no events are send after an error occurred, but
100 // before a new navigation happened in this frame. 95 // before a new navigation happened in this frame.
101 TEST_F(FrameNavigationStateTest, ErrorStateFrame) { 96 TEST_F(FrameNavigationStateTest, ErrorStateFrame) {
102 const GURL url("http://www.google.com/"); 97 const GURL url("http://www.google.com/");
103 98
104 content::RenderFrameHost* sub_frame = 99 content::RenderFrameHost* sub_frame =
105 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 100 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
106 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false, 101 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false);
107 false); 102 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false);
108 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false,
109 false);
110 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 103 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
111 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 104 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
112 105
113 // After an error occurred, no further events should be sent. 106 // After an error occurred, no further events should be sent.
114 navigation_state_.SetErrorOccurredInFrame(sub_frame); 107 navigation_state_.SetErrorOccurredInFrame(sub_frame);
115 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 108 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
116 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 109 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
117 110
118 // Navigations to a network error page should be ignored. 111 // Navigations to a network error page should be ignored.
119 navigation_state_.StartTrackingDocumentLoad(sub_frame, GURL(), false, true, 112 navigation_state_.StartTrackingDocumentLoad(sub_frame, GURL(), false, true);
120 false);
121 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 113 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
122 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 114 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
123 115
124 // However, when the frame navigates again, it should send events again. 116 // However, when the frame navigates again, it should send events again.
125 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false, 117 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false);
126 false);
127 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 118 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
128 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 119 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
129 } 120 }
130 121
131 // Tests that no events are send for a not web-safe scheme. 122 // Tests that no events are send for a not web-safe scheme.
132 TEST_F(FrameNavigationStateTest, WebSafeScheme) { 123 TEST_F(FrameNavigationStateTest, WebSafeScheme) {
133 const GURL url("unsafe://www.google.com/"); 124 const GURL url("unsafe://www.google.com/");
134 125
135 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false, 126 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false);
136 false);
137 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 127 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
138 } 128 }
139 129
140 // Test for <iframe srcdoc=""> frames. 130 // Test for <iframe srcdoc=""> frames.
141 TEST_F(FrameNavigationStateTest, SrcDoc) { 131 TEST_F(FrameNavigationStateTest, SrcDoc) {
142 const GURL url("http://www.google.com/"); 132 const GURL url("http://www.google.com/");
143 const GURL blank("about:blank"); 133 const GURL blank("about:blank");
144 const GURL srcdoc("about:srcdoc"); 134 const GURL srcdoc("about:srcdoc");
145 135
146 content::RenderFrameHost* sub_frame = 136 content::RenderFrameHost* sub_frame =
147 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 137 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
148 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false, 138 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false);
149 false); 139 navigation_state_.StartTrackingDocumentLoad(sub_frame, srcdoc, false, false);
150 navigation_state_.StartTrackingDocumentLoad(sub_frame, blank, false, false, 140
151 true);
152 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 141 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
153 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 142 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
154 143
155 EXPECT_EQ(url, navigation_state_.GetUrl(main_rfh())); 144 EXPECT_EQ(url, navigation_state_.GetUrl(main_rfh()));
156 EXPECT_EQ(srcdoc, navigation_state_.GetUrl(sub_frame)); 145 EXPECT_EQ(srcdoc, navigation_state_.GetUrl(sub_frame));
157 146
158 EXPECT_TRUE(navigation_state_.IsValidUrl(srcdoc)); 147 EXPECT_TRUE(navigation_state_.IsValidUrl(srcdoc));
159 } 148 }
160 149
161 // Test that an individual frame can be detached. 150 // Test that an individual frame can be detached.
162 TEST_F(FrameNavigationStateTest, DetachFrame) { 151 TEST_F(FrameNavigationStateTest, DetachFrame) {
163 const GURL url1("http://www.google.com/"); 152 const GURL url1("http://www.google.com/");
164 const GURL url2("http://mail.google.com/"); 153 const GURL url2("http://mail.google.com/");
165 154
166 // Create a main frame. 155 // Create a main frame.
167 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 156 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
168 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh())); 157 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
169 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false, 158 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false);
170 false);
171 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 159 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
172 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh())); 160 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
173 161
174 // Add a sub frame. 162 // Add a sub frame.
175 content::RenderFrameHost* sub_frame = 163 content::RenderFrameHost* sub_frame =
176 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 164 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
177 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 165 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
178 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 166 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
179 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false, 167 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false);
180 false);
181 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 168 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
182 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame)); 169 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
183 170
184 // Check frame state. 171 // Check frame state.
185 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 172 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
186 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame)); 173 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
187 174
188 // Drop one frame. 175 // Drop one frame.
189 navigation_state_.FrameHostDeleted(sub_frame); 176 navigation_state_.FrameHostDeleted(sub_frame);
190 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 177 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
191 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 178 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
192 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 179 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
193 } 180 }
194 181
195 } // namespace extensions 182 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698