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

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

Issue 384993004: Simplify WebNavigationApi by using RenderFrameHost internally. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove troublesome DCHECKs Created 6 years, 5 months 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 | Annotate | Revision Log
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/values.h" 6 #include "base/values.h"
6 #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"
7 #include "chrome/test/base/testing_profile.h" 9 #include "chrome/test/base/testing_profile.h"
8 #include "testing/gtest/include/gtest/gtest.h" 10 #include "testing/gtest/include/gtest/gtest.h"
9 11
10 namespace extensions { 12 namespace extensions {
11 13
12 content::RenderViewHost* fake_rvh = 14 class FrameNavigationStateTest : public ChromeRenderViewHostTestHarness {
13 reinterpret_cast<content::RenderViewHost*>(31337); 15 protected:
16 FrameNavigationStateTest() {}
17 virtual ~FrameNavigationStateTest() {}
18
19 FrameNavigationState navigation_state_;
20
21 private:
22 DISALLOW_COPY_AND_ASSIGN(FrameNavigationStateTest);
23 };
14 24
15 // Test that a frame is correctly tracked, and removed once the tab contents 25 // Test that a frame is correctly tracked, and removed once the tab contents
16 // goes away. 26 // goes away.
17 TEST(FrameNavigationStateTest, TrackFrame) { 27 TEST_F(FrameNavigationStateTest, TrackFrame) {
18 FrameNavigationState navigation_state;
19 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
20 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
21 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
22 const GURL url1("http://www.google.com/"); 28 const GURL url1("http://www.google.com/");
23 const GURL url2("http://mail.google.com/"); 29 const GURL url2("http://mail.google.com/");
24 30
25 // Create a main frame. 31 // Create a main frame.
26 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 32 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
27 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 33 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
28 navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false, false); 34 navigation_state_.TrackFrame(main_rfh(), url1, false, false);
29 navigation_state.SetNavigationCommitted(frame_id1); 35 navigation_state_.SetNavigationCommitted(main_rfh());
30 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 36 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
31 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 37 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
32 38
33 // Add a sub frame. 39 // Add a sub frame.
34 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 40 content::RenderFrameHost* sub_frame =
35 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 41 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
36 navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false, false); 42 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
37 navigation_state.SetNavigationCommitted(frame_id2); 43 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
38 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 44 navigation_state_.TrackFrame(sub_frame, url2, false, false);
39 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 45 navigation_state_.SetNavigationCommitted(sub_frame);
46 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
47 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
40 48
41 // Check frame state. 49 // Check frame state.
42 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 50 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
43 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 51 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
44 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 52 EXPECT_EQ(main_rfh(), navigation_state_.GetLastCommittedMainFrameHost());
45 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2));
46 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID());
47 53
48 // Drop the frames. 54 // Drop the frames.
49 navigation_state.StopTrackingFramesInRVH(fake_rvh, 55 navigation_state_.StopTrackingFramesInRVH(rvh(), NULL);
50 FrameNavigationState::FrameID()); 56 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
51 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 57 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
52 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 58 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
53 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 59 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
54 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
55 } 60 }
56 61
57 // Test that no events can be sent for a frame after an error occurred, but 62 // Test that no events can be sent for a frame after an error occurred, but
58 // before a new navigation happened in this frame. 63 // before a new navigation happened in this frame.
59 TEST(FrameNavigationStateTest, ErrorState) { 64 TEST_F(FrameNavigationStateTest, ErrorState) {
60 FrameNavigationState navigation_state;
61 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
62 const FrameNavigationState::FrameID frame_id1(42, fake_rvh);
63 const GURL url("http://www.google.com/"); 65 const GURL url("http://www.google.com/");
64 66
65 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 67 navigation_state_.TrackFrame(main_rfh(), url, false, false);
66 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 68 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
67 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 69 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
68 70
69 // After an error occurred, no further events should be sent. 71 // After an error occurred, no further events should be sent.
70 navigation_state.SetErrorOccurredInFrame(frame_id1); 72 navigation_state_.SetErrorOccurredInFrame(main_rfh());
71 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 73 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
72 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 74 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
73 75
74 // Navigations to a network error page should be ignored. 76 // Navigations to a network error page should be ignored.
75 navigation_state.TrackFrame(frame_id1, frame_id0, GURL(), true, true, false); 77 navigation_state_.TrackFrame(main_rfh(), GURL(), true, false);
76 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 78 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
77 EXPECT_TRUE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 79 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
78 80
79 // However, when the frame navigates again, it should send events again. 81 // However, when the frame navigates again, it should send events again.
80 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 82 navigation_state_.TrackFrame(main_rfh(), url, false, false);
81 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 83 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
82 EXPECT_FALSE(navigation_state.GetErrorOccurredInFrame(frame_id1)); 84 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
83 } 85 }
84 86
85 // Tests that for a sub frame, no events are send after an error occurred, but 87 // Tests that for a sub frame, no events are send after an error occurred, but
86 // before a new navigation happened in this frame. 88 // before a new navigation happened in this frame.
87 TEST(FrameNavigationStateTest, ErrorStateFrame) { 89 TEST_F(FrameNavigationStateTest, ErrorStateFrame) {
88 FrameNavigationState navigation_state;
89 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
90 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
91 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
92 const GURL url("http://www.google.com/"); 90 const GURL url("http://www.google.com/");
93 91
94 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 92 content::RenderFrameHost* sub_frame =
95 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false); 93 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
96 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 94 navigation_state_.TrackFrame(main_rfh(), url, false, false);
97 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 95 navigation_state_.TrackFrame(sub_frame, url, false, false);
96 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
97 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
98 98
99 // After an error occurred, no further events should be sent. 99 // After an error occurred, no further events should be sent.
100 navigation_state.SetErrorOccurredInFrame(frame_id2); 100 navigation_state_.SetErrorOccurredInFrame(sub_frame);
101 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 101 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
102 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 102 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
103 103
104 // Navigations to a network error page should be ignored. 104 // Navigations to a network error page should be ignored.
105 navigation_state.TrackFrame(frame_id2, frame_id1, GURL(), false, true, false); 105 navigation_state_.TrackFrame(sub_frame, GURL(), true, false);
106 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 106 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
107 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 107 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
108 108
109 // However, when the frame navigates again, it should send events again. 109 // However, when the frame navigates again, it should send events again.
110 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false); 110 navigation_state_.TrackFrame(sub_frame, url, false, false);
111 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 111 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
112 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 112 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
113 } 113 }
114 114
115 // Tests that no events are send for a not web-safe scheme. 115 // Tests that no events are send for a not web-safe scheme.
116 TEST(FrameNavigationStateTest, WebSafeScheme) { 116 TEST_F(FrameNavigationStateTest, WebSafeScheme) {
117 FrameNavigationState navigation_state;
118 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
119 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
120 const GURL url("unsafe://www.google.com/"); 117 const GURL url("unsafe://www.google.com/");
121 118
122 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 119 navigation_state_.TrackFrame(main_rfh(), url, false, false);
123 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 120 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
124 }
125
126 // Test that parent frame IDs are tracked.
127 TEST(FrameNavigationStateTest, ParentFrameID) {
128 FrameNavigationState navigation_state;
129 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
130 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
131 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
132 const GURL url("http://www.google.com/");
133
134 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false);
135 navigation_state.TrackFrame(frame_id2, frame_id1, url, false, false, false);
136 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1));
137 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2));
138
139 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id1) == frame_id0);
140 EXPECT_TRUE(navigation_state.GetParentFrameID(frame_id2) == frame_id1);
141 } 121 }
142 122
143 // Test for <iframe srcdoc=""> frames. 123 // Test for <iframe srcdoc=""> frames.
144 TEST(FrameNavigationStateTest, SrcDoc) { 124 TEST_F(FrameNavigationStateTest, SrcDoc) {
145 FrameNavigationState navigation_state;
146 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
147 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
148 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
149 const GURL url("http://www.google.com/"); 125 const GURL url("http://www.google.com/");
150 const GURL blank("about:blank"); 126 const GURL blank("about:blank");
151 const GURL srcdoc("about:srcdoc"); 127 const GURL srcdoc("about:srcdoc");
152 128
153 navigation_state.TrackFrame(frame_id1, frame_id0, url, true, false, false); 129 content::RenderFrameHost* sub_frame =
154 navigation_state.TrackFrame(frame_id2, frame_id1, blank, false, false, true); 130 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
155 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 131 navigation_state_.TrackFrame(main_rfh(), url, false, false);
156 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 132 navigation_state_.TrackFrame(sub_frame, blank, false, true);
133 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
134 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
157 135
158 EXPECT_TRUE(navigation_state.GetUrl(frame_id1) == url); 136 EXPECT_EQ(url, navigation_state_.GetUrl(main_rfh()));
159 EXPECT_TRUE(navigation_state.GetUrl(frame_id2) == srcdoc); 137 EXPECT_EQ(srcdoc, navigation_state_.GetUrl(sub_frame));
160 138
161 EXPECT_TRUE(navigation_state.IsValidUrl(srcdoc)); 139 EXPECT_TRUE(navigation_state_.IsValidUrl(srcdoc));
162 } 140 }
163 141
164 // Test that an individual frame can be detached. 142 // Test that an individual frame can be detached.
165 TEST(FrameNavigationStateTest, DetachFrame) { 143 TEST_F(FrameNavigationStateTest, DetachFrame) {
166 FrameNavigationState navigation_state;
167 const FrameNavigationState::FrameID frame_id0(-1, fake_rvh);
168 const FrameNavigationState::FrameID frame_id1(23, fake_rvh);
169 const FrameNavigationState::FrameID frame_id2(42, fake_rvh);
170 const GURL url1("http://www.google.com/"); 144 const GURL url1("http://www.google.com/");
171 const GURL url2("http://mail.google.com/"); 145 const GURL url2("http://mail.google.com/");
172 146
173 // Create a main frame. 147 // Create a main frame.
174 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id1)); 148 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
175 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id1)); 149 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
176 navigation_state.TrackFrame(frame_id1, frame_id0, url1, true, false, false); 150 navigation_state_.TrackFrame(main_rfh(), url1, false, false);
177 navigation_state.SetNavigationCommitted(frame_id1); 151 navigation_state_.SetNavigationCommitted(main_rfh());
178 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id1)); 152 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
179 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id1)); 153 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
180 154
181 // Add a sub frame. 155 // Add a sub frame.
182 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 156 content::RenderFrameHost* sub_frame =
183 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2)); 157 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
184 navigation_state.TrackFrame(frame_id2, frame_id1, url2, false, false, false); 158 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
185 navigation_state.SetNavigationCommitted(frame_id2); 159 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
186 EXPECT_TRUE(navigation_state.CanSendEvents(frame_id2)); 160 navigation_state_.TrackFrame(sub_frame, url2, false, false);
187 EXPECT_TRUE(navigation_state.IsValidFrame(frame_id2)); 161 navigation_state_.SetNavigationCommitted(sub_frame);
162 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
163 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
188 164
189 // Check frame state. 165 // Check frame state.
190 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 166 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
191 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 167 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
192 EXPECT_FALSE(navigation_state.IsMainFrame(frame_id2)); 168 EXPECT_EQ(main_rfh(), navigation_state_.GetLastCommittedMainFrameHost());
193 EXPECT_EQ(url2, navigation_state.GetUrl(frame_id2));
194 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID());
195 169
196 // Drop one frame. 170 // Drop one frame.
197 navigation_state.FrameDetached(frame_id2); 171 navigation_state_.FrameDetached(sub_frame);
198 EXPECT_TRUE(navigation_state.IsMainFrame(frame_id1)); 172 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
199 EXPECT_EQ(url1, navigation_state.GetUrl(frame_id1)); 173 EXPECT_EQ(main_rfh(), navigation_state_.GetLastCommittedMainFrameHost());
200 EXPECT_EQ(frame_id1, navigation_state.GetMainFrameID()); 174 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
201 EXPECT_FALSE(navigation_state.CanSendEvents(frame_id2)); 175 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
202 EXPECT_FALSE(navigation_state.IsValidFrame(frame_id2));
203 } 176 }
204 177
205 } // namespace extensions 178 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698