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

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

Issue 1670673003: Refactor the implementation of the webNavigation extension API. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@Bug-532666-NavigationHandleAPI
Patch Set: Remove UI thread DCHECKs. Created 4 years, 10 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
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_.StartTrackingNavigation(main_rfh(), url1, false, false); 42 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false,
43 navigation_state_.SetNavigationCommitted(main_rfh()); 43 false);
44 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 44 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
45 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh())); 45 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
46 46
47 // Add a sub frame. 47 // Add a sub frame.
48 content::RenderFrameHost* sub_frame = 48 content::RenderFrameHost* sub_frame =
49 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 49 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
50 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 50 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
51 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 51 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
52 navigation_state_.StartTrackingNavigation(sub_frame, url2, false, false); 52 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false,
53 navigation_state_.SetNavigationCommitted(sub_frame); 53 false);
54 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 54 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
55 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame)); 55 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
56 56
57 // Check frame state. 57 // Check frame state.
58 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 58 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
59 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame)); 59 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
60 60
61 // Drop the frames. 61 // Drop the frames.
62 navigation_state_.FrameHostDeleted(sub_frame); 62 navigation_state_.FrameHostDeleted(sub_frame);
63 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 63 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
64 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 64 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
65 65
66 navigation_state_.FrameHostDeleted(main_rfh()); 66 navigation_state_.FrameHostDeleted(main_rfh());
67 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 67 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
68 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh())); 68 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
69 } 69 }
70 70
71 // Test that no events can be sent for a frame after an error occurred, but 71 // Test that no events can be sent for a frame after an error occurred, but
72 // before a new navigation happened in this frame. 72 // before a new navigation happened in this frame.
73 TEST_F(FrameNavigationStateTest, ErrorState) { 73 TEST_F(FrameNavigationStateTest, ErrorState) {
74 const GURL url("http://www.google.com/"); 74 const GURL url("http://www.google.com/");
75 75
76 navigation_state_.StartTrackingNavigation(main_rfh(), url, false, false); 76 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false,
77 false);
77 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 78 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
78 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 79 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
79 80
80 // After an error occurred, no further events should be sent. 81 // After an error occurred, no further events should be sent.
81 navigation_state_.SetErrorOccurredInFrame(main_rfh()); 82 navigation_state_.SetErrorOccurredInFrame(main_rfh());
82 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 83 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
83 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 84 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
84 85
85 // Navigations to a network error page should be ignored. 86 // Navigations to a network error page should be ignored.
86 navigation_state_.StartTrackingNavigation(main_rfh(), GURL(), true, false); 87 navigation_state_.StartTrackingDocumentLoad(main_rfh(), GURL(), false, true,
88 false);
87 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 89 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
88 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 90 EXPECT_TRUE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
89 91
90 // However, when the frame navigates again, it should send events again. 92 // However, when the frame navigates again, it should send events again.
91 navigation_state_.StartTrackingNavigation(main_rfh(), url, false, false); 93 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false,
94 false);
92 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 95 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
93 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh())); 96 EXPECT_FALSE(navigation_state_.GetErrorOccurredInFrame(main_rfh()));
94 } 97 }
95 98
96 // Tests that for a sub frame, no events are send after an error occurred, but 99 // Tests that for a sub frame, no events are send after an error occurred, but
97 // before a new navigation happened in this frame. 100 // before a new navigation happened in this frame.
98 TEST_F(FrameNavigationStateTest, ErrorStateFrame) { 101 TEST_F(FrameNavigationStateTest, ErrorStateFrame) {
99 const GURL url("http://www.google.com/"); 102 const GURL url("http://www.google.com/");
100 103
101 content::RenderFrameHost* sub_frame = 104 content::RenderFrameHost* sub_frame =
102 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 105 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
103 navigation_state_.StartTrackingNavigation(main_rfh(), url, false, false); 106 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false,
104 navigation_state_.StartTrackingNavigation(sub_frame, url, false, false); 107 false);
108 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false,
109 false);
105 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 110 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
106 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 111 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
107 112
108 // After an error occurred, no further events should be sent. 113 // After an error occurred, no further events should be sent.
109 navigation_state_.SetErrorOccurredInFrame(sub_frame); 114 navigation_state_.SetErrorOccurredInFrame(sub_frame);
110 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 115 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
111 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 116 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
112 117
113 // Navigations to a network error page should be ignored. 118 // Navigations to a network error page should be ignored.
114 navigation_state_.StartTrackingNavigation(sub_frame, GURL(), true, false); 119 navigation_state_.StartTrackingDocumentLoad(sub_frame, GURL(), false, true,
120 false);
115 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 121 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
116 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 122 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
117 123
118 // However, when the frame navigates again, it should send events again. 124 // However, when the frame navigates again, it should send events again.
119 navigation_state_.StartTrackingNavigation(sub_frame, url, false, false); 125 navigation_state_.StartTrackingDocumentLoad(sub_frame, url, false, false,
126 false);
120 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 127 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
121 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 128 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
122 } 129 }
123 130
124 // Tests that no events are send for a not web-safe scheme. 131 // Tests that no events are send for a not web-safe scheme.
125 TEST_F(FrameNavigationStateTest, WebSafeScheme) { 132 TEST_F(FrameNavigationStateTest, WebSafeScheme) {
126 const GURL url("unsafe://www.google.com/"); 133 const GURL url("unsafe://www.google.com/");
127 134
128 navigation_state_.StartTrackingNavigation(main_rfh(), url, false, false); 135 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false,
136 false);
129 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 137 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
130 } 138 }
131 139
132 // Test for <iframe srcdoc=""> frames. 140 // Test for <iframe srcdoc=""> frames.
133 TEST_F(FrameNavigationStateTest, SrcDoc) { 141 TEST_F(FrameNavigationStateTest, SrcDoc) {
134 const GURL url("http://www.google.com/"); 142 const GURL url("http://www.google.com/");
135 const GURL blank("about:blank"); 143 const GURL blank("about:blank");
136 const GURL srcdoc("about:srcdoc"); 144 const GURL srcdoc("about:srcdoc");
137 145
138 content::RenderFrameHost* sub_frame = 146 content::RenderFrameHost* sub_frame =
139 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 147 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
140 navigation_state_.StartTrackingNavigation(main_rfh(), url, false, false); 148 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url, false, false,
141 navigation_state_.StartTrackingNavigation(sub_frame, blank, false, true); 149 false);
150 navigation_state_.StartTrackingDocumentLoad(sub_frame, blank, false, false,
151 true);
142 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 152 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
143 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 153 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
144 154
145 EXPECT_EQ(url, navigation_state_.GetUrl(main_rfh())); 155 EXPECT_EQ(url, navigation_state_.GetUrl(main_rfh()));
146 EXPECT_EQ(srcdoc, navigation_state_.GetUrl(sub_frame)); 156 EXPECT_EQ(srcdoc, navigation_state_.GetUrl(sub_frame));
147 157
148 EXPECT_TRUE(navigation_state_.IsValidUrl(srcdoc)); 158 EXPECT_TRUE(navigation_state_.IsValidUrl(srcdoc));
149 } 159 }
150 160
151 // Test that an individual frame can be detached. 161 // Test that an individual frame can be detached.
152 TEST_F(FrameNavigationStateTest, DetachFrame) { 162 TEST_F(FrameNavigationStateTest, DetachFrame) {
153 const GURL url1("http://www.google.com/"); 163 const GURL url1("http://www.google.com/");
154 const GURL url2("http://mail.google.com/"); 164 const GURL url2("http://mail.google.com/");
155 165
156 // Create a main frame. 166 // Create a main frame.
157 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh())); 167 EXPECT_FALSE(navigation_state_.CanSendEvents(main_rfh()));
158 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh())); 168 EXPECT_FALSE(navigation_state_.IsValidFrame(main_rfh()));
159 navigation_state_.StartTrackingNavigation(main_rfh(), url1, false, false); 169 navigation_state_.StartTrackingDocumentLoad(main_rfh(), url1, false, false,
160 navigation_state_.SetNavigationCommitted(main_rfh()); 170 false);
161 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh())); 171 EXPECT_TRUE(navigation_state_.CanSendEvents(main_rfh()));
162 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh())); 172 EXPECT_TRUE(navigation_state_.IsValidFrame(main_rfh()));
163 173
164 // Add a sub frame. 174 // Add a sub frame.
165 content::RenderFrameHost* sub_frame = 175 content::RenderFrameHost* sub_frame =
166 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child"); 176 content::RenderFrameHostTester::For(main_rfh())->AppendChild("child");
167 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 177 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
168 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 178 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
169 navigation_state_.StartTrackingNavigation(sub_frame, url2, false, false); 179 navigation_state_.StartTrackingDocumentLoad(sub_frame, url2, false, false,
170 navigation_state_.SetNavigationCommitted(sub_frame); 180 false);
171 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame)); 181 EXPECT_TRUE(navigation_state_.CanSendEvents(sub_frame));
172 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame)); 182 EXPECT_TRUE(navigation_state_.IsValidFrame(sub_frame));
173 183
174 // Check frame state. 184 // Check frame state.
175 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 185 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
176 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame)); 186 EXPECT_EQ(url2, navigation_state_.GetUrl(sub_frame));
177 187
178 // Drop one frame. 188 // Drop one frame.
179 navigation_state_.FrameHostDeleted(sub_frame); 189 navigation_state_.FrameHostDeleted(sub_frame);
180 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh())); 190 EXPECT_EQ(url1, navigation_state_.GetUrl(main_rfh()));
181 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame)); 191 EXPECT_FALSE(navigation_state_.CanSendEvents(sub_frame));
182 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame)); 192 EXPECT_FALSE(navigation_state_.IsValidFrame(sub_frame));
183 } 193 }
184 194
185 } // namespace extensions 195 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698