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

Side by Side Diff: ios/web/web_state/ui/crw_wk_navigation_states_unittest.mm

Issue 2950853002: Gracefully handle didCommitNavigation: call after didFinishNavigation: (Closed)
Patch Set: Updated comments Created 3 years, 6 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
« no previous file with comments | « ios/web/web_state/ui/crw_wk_navigation_states.mm ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 #import "ios/web/web_state/ui/crw_wk_navigation_states.h" 5 #import "ios/web/web_state/ui/crw_wk_navigation_states.h"
6 6
7 #import <WebKit/WebKit.h> 7 #import <WebKit/WebKit.h>
8 8
9 #import "ios/web/web_state/navigation_context_impl.h" 9 #import "ios/web/web_state/navigation_context_impl.h"
10 #include "net/http/http_response_headers.h" 10 #include "net/http/http_response_headers.h"
(...skipping 25 matching lines...) Expand all
36 WKNavigation* navigation1_; 36 WKNavigation* navigation1_;
37 WKNavigation* navigation2_; 37 WKNavigation* navigation2_;
38 WKNavigation* navigation3_; 38 WKNavigation* navigation3_;
39 CRWWKNavigationStates* states_; 39 CRWWKNavigationStates* states_;
40 }; 40 };
41 41
42 // Tests |removeNavigation:| method. 42 // Tests |removeNavigation:| method.
43 TEST_F(CRWWKNavigationStatesTest, RemovingNavigation) { 43 TEST_F(CRWWKNavigationStatesTest, RemovingNavigation) {
44 // navigation_1 is the only navigation and it is the latest. 44 // navigation_1 is the only navigation and it is the latest.
45 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; 45 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_];
46 ASSERT_EQ(WKNavigationState::REQUESTED,
47 [states_ stateForNavigation:navigation1_]);
46 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]); 48 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]);
47 [states_ removeNavigation:navigation1_]; 49 [states_ removeNavigation:navigation1_];
48 ASSERT_FALSE([states_ lastAddedNavigation]); 50 EXPECT_FALSE([states_ lastAddedNavigation]);
51 EXPECT_EQ(WKNavigationState::NONE, [states_ stateForNavigation:navigation1_]);
49 } 52 }
50 53
51 // Tests |lastAddedNavigation| method. 54 // Tests |lastAddedNavigation| method.
52 TEST_F(CRWWKNavigationStatesTest, LastAddedNavigation) { 55 TEST_F(CRWWKNavigationStatesTest, LastAddedNavigation) {
53 // navigation_1 is the only navigation and it is the latest. 56 // navigation_1 is the only navigation and it is the latest.
54 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; 57 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_];
58 EXPECT_EQ(WKNavigationState::REQUESTED,
59 [states_ stateForNavigation:navigation1_]);
55 EXPECT_EQ(navigation1_, [states_ lastAddedNavigation]); 60 EXPECT_EQ(navigation1_, [states_ lastAddedNavigation]);
56 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); 61 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]);
57 62
58 // navigation_2 is added later and hence the latest. 63 // navigation_2 is added later and hence the latest.
59 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation2_]; 64 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation2_];
65 EXPECT_EQ(WKNavigationState::REQUESTED,
66 [states_ stateForNavigation:navigation2_]);
60 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); 67 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]);
61 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); 68 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]);
62 69
63 // Updating state for existing navigation does not make it the latest. 70 // Updating state for existing navigation does not make it the latest.
64 [states_ setState:WKNavigationState::STARTED forNavigation:navigation1_]; 71 [states_ setState:WKNavigationState::STARTED forNavigation:navigation1_];
72 EXPECT_EQ(WKNavigationState::STARTED,
73 [states_ stateForNavigation:navigation1_]);
65 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); 74 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]);
66 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); 75 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]);
67 76
68 // navigation_2 is still the latest. 77 // navigation_2 is still the latest.
69 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_]; 78 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_];
79 EXPECT_EQ(WKNavigationState::STARTED,
80 [states_ stateForNavigation:navigation2_]);
70 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]); 81 EXPECT_EQ(navigation2_, [states_ lastAddedNavigation]);
71 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]); 82 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]);
72 83
73 // navigation_3 is added later and hence the latest. 84 // navigation_3 is added later and hence the latest.
74 std::unique_ptr<web::NavigationContextImpl> context = 85 std::unique_ptr<web::NavigationContextImpl> context =
75 NavigationContextImpl::CreateNavigationContext( 86 NavigationContextImpl::CreateNavigationContext(
76 nullptr /*web_state*/, GURL(kTestUrl1), 87 nullptr /*web_state*/, GURL(kTestUrl1),
77 ui::PageTransition::PAGE_TRANSITION_SERVER_REDIRECT); 88 ui::PageTransition::PAGE_TRANSITION_SERVER_REDIRECT);
78 [states_ setContext:std::move(context) forNavigation:navigation3_]; 89 [states_ setContext:std::move(context) forNavigation:navigation3_];
79 EXPECT_EQ(navigation3_, [states_ lastAddedNavigation]); 90 EXPECT_EQ(navigation3_, [states_ lastAddedNavigation]);
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
115 EXPECT_EQ(GURL(kTestUrl2), 126 EXPECT_EQ(GURL(kTestUrl2),
116 [states_ contextForNavigation:navigation1_]->GetUrl()); 127 [states_ contextForNavigation:navigation1_]->GetUrl());
117 EXPECT_FALSE([states_ contextForNavigation:navigation1_]->IsSameDocument()); 128 EXPECT_FALSE([states_ contextForNavigation:navigation1_]->IsSameDocument());
118 EXPECT_EQ(error, [states_ contextForNavigation:navigation1_]->GetError()); 129 EXPECT_EQ(error, [states_ contextForNavigation:navigation1_]->GetError());
119 } 130 }
120 131
121 // Tests null WKNavigation object. 132 // Tests null WKNavigation object.
122 TEST_F(CRWWKNavigationStatesTest, NullNavigation) { 133 TEST_F(CRWWKNavigationStatesTest, NullNavigation) {
123 // navigation_1 is the only navigation and it is the latest. 134 // navigation_1 is the only navigation and it is the latest.
124 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; 135 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_];
136 EXPECT_EQ(WKNavigationState::REQUESTED,
137 [states_ stateForNavigation:navigation1_]);
125 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]); 138 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]);
126 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); 139 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]);
127 140
128 // null navigation is added later and hence the latest. 141 // null navigation is added later and hence the latest.
129 [states_ setState:WKNavigationState::STARTED forNavigation:nil]; 142 [states_ setState:WKNavigationState::STARTED forNavigation:nil];
143 EXPECT_EQ(WKNavigationState::STARTED, [states_ stateForNavigation:nil]);
130 EXPECT_FALSE([states_ lastAddedNavigation]); 144 EXPECT_FALSE([states_ lastAddedNavigation]);
131 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]); 145 EXPECT_EQ(WKNavigationState::STARTED, [states_ lastAddedNavigationState]);
132 146
133 // navigation_1 is the latest again after removing null navigation. 147 // navigation_1 is the latest again after removing null navigation.
134 [states_ removeNavigation:nil]; 148 [states_ removeNavigation:nil];
135 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]); 149 ASSERT_EQ(navigation1_, [states_ lastAddedNavigation]);
136 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]); 150 EXPECT_EQ(WKNavigationState::REQUESTED, [states_ lastAddedNavigationState]);
137 } 151 }
138 152
139 // Tests -[CRWWKNavigationStates pendingNavigations]. 153 // Tests -[CRWWKNavigationStates pendingNavigations].
140 TEST_F(CRWWKNavigationStatesTest, PendingNavigations) { 154 TEST_F(CRWWKNavigationStatesTest, PendingNavigations) {
141 ASSERT_EQ(0U, [states_ pendingNavigations].count); 155 ASSERT_EQ(0U, [states_ pendingNavigations].count);
142 156
143 // Add pending navigation_1. 157 // Add pending navigation_1.
144 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_]; 158 [states_ setState:WKNavigationState::REQUESTED forNavigation:navigation1_];
159 ASSERT_EQ(WKNavigationState::REQUESTED,
160 [states_ stateForNavigation:navigation1_]);
145 ASSERT_EQ(1U, [states_ pendingNavigations].count); 161 ASSERT_EQ(1U, [states_ pendingNavigations].count);
146 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]); 162 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]);
147 163
148 // Add pending navigation_2. 164 // Add pending navigation_2.
149 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_]; 165 [states_ setState:WKNavigationState::STARTED forNavigation:navigation2_];
166 ASSERT_EQ(WKNavigationState::STARTED,
167 [states_ stateForNavigation:navigation2_]);
150 ASSERT_EQ(2U, [states_ pendingNavigations].count); 168 ASSERT_EQ(2U, [states_ pendingNavigations].count);
151 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]); 169 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]);
152 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 170 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
153 171
154 // Add pending navigation_3. 172 // Add pending navigation_3.
155 [states_ setState:WKNavigationState::STARTED forNavigation:navigation3_]; 173 [states_ setState:WKNavigationState::STARTED forNavigation:navigation3_];
174 ASSERT_EQ(WKNavigationState::STARTED,
175 [states_ stateForNavigation:navigation3_]);
156 ASSERT_EQ(3U, [states_ pendingNavigations].count); 176 ASSERT_EQ(3U, [states_ pendingNavigations].count);
157 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]); 177 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]);
158 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 178 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
159 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 179 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
160 180
161 // Add pending null navigation. 181 // Add pending null navigation.
162 [states_ setState:WKNavigationState::STARTED forNavigation:nil]; 182 [states_ setState:WKNavigationState::STARTED forNavigation:nil];
183 ASSERT_EQ(WKNavigationState::STARTED, [states_ stateForNavigation:nil]);
163 ASSERT_EQ(4U, [states_ pendingNavigations].count); 184 ASSERT_EQ(4U, [states_ pendingNavigations].count);
164 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]); 185 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation1_]);
165 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 186 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
166 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 187 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
167 EXPECT_TRUE([[states_ pendingNavigations] containsObject:[NSNull null]]); 188 EXPECT_TRUE([[states_ pendingNavigations] containsObject:[NSNull null]]);
168 189
169 // Provisionally fail null navigation. 190 // Provisionally fail null navigation.
170 [states_ setState:WKNavigationState::PROVISIONALY_FAILED forNavigation:nil]; 191 [states_ setState:WKNavigationState::PROVISIONALY_FAILED forNavigation:nil];
192 ASSERT_EQ(WKNavigationState::PROVISIONALY_FAILED,
193 [states_ stateForNavigation:nil]);
171 ASSERT_EQ(3U, [states_ pendingNavigations].count); 194 ASSERT_EQ(3U, [states_ pendingNavigations].count);
172 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 195 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
173 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 196 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
174 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 197 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
175 198
176 // Commit navigation_1. 199 // Commit navigation_1.
177 [states_ setState:WKNavigationState::COMMITTED forNavigation:navigation1_]; 200 [states_ setState:WKNavigationState::COMMITTED forNavigation:navigation1_];
201 ASSERT_EQ(WKNavigationState::COMMITTED,
202 [states_ stateForNavigation:navigation1_]);
178 ASSERT_EQ(2U, [states_ pendingNavigations].count); 203 ASSERT_EQ(2U, [states_ pendingNavigations].count);
179 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 204 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
180 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 205 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
181 206
182 // Finish navigation_1. 207 // Finish navigation_1.
183 [states_ setState:WKNavigationState::FINISHED forNavigation:navigation1_]; 208 [states_ setState:WKNavigationState::FINISHED forNavigation:navigation1_];
209 ASSERT_EQ(WKNavigationState::FINISHED,
210 [states_ stateForNavigation:navigation1_]);
184 ASSERT_EQ(2U, [states_ pendingNavigations].count); 211 ASSERT_EQ(2U, [states_ pendingNavigations].count);
185 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]); 212 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation2_]);
186 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 213 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
187 214
188 // Remove navigation_2. 215 // Remove navigation_2.
189 [states_ removeNavigation:navigation2_]; 216 [states_ removeNavigation:navigation2_];
190 ASSERT_EQ(1U, [states_ pendingNavigations].count); 217 ASSERT_EQ(1U, [states_ pendingNavigations].count);
191 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]); 218 EXPECT_TRUE([[states_ pendingNavigations] containsObject:navigation3_]);
192 219
193 // Fail navigation_3. 220 // Fail navigation_3.
194 [states_ setState:WKNavigationState::FAILED forNavigation:navigation3_]; 221 [states_ setState:WKNavigationState::FAILED forNavigation:navigation3_];
222 ASSERT_EQ(WKNavigationState::FAILED,
223 [states_ stateForNavigation:navigation3_]);
195 ASSERT_EQ(0U, [states_ pendingNavigations].count); 224 ASSERT_EQ(0U, [states_ pendingNavigations].count);
196 } 225 }
197 226
198 } // namespace web 227 } // namespace web
OLDNEW
« no previous file with comments | « ios/web/web_state/ui/crw_wk_navigation_states.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698