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

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

Powered by Google App Engine
This is Rietveld 408576698