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

Side by Side Diff: ios/shared/chrome/browser/tabs/web_state_list_unittest.mm

Issue 2697193004: Add opener-opened relationship between WebState in WebStateList. (Closed)
Patch Set: Fix copy-n-paste error. Created 3 years, 9 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/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper_unittest.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 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 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/shared/chrome/browser/tabs/web_state_list.h" 5 #import "ios/shared/chrome/browser/tabs/web_state_list.h"
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/supports_user_data.h" 9 #include "base/supports_user_data.h"
10 #import "ios/shared/chrome/browser/tabs/web_state_list_observer.h" 10 #import "ios/shared/chrome/browser/tabs/web_state_list_observer.h"
11 #import "ios/web/public/test/fakes/test_navigation_manager.h"
11 #import "ios/web/public/test/fakes/test_web_state.h" 12 #import "ios/web/public/test/fakes/test_web_state.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/platform_test.h" 14 #include "testing/platform_test.h"
14 15
15 namespace { 16 namespace {
16 const char kURL0[] = "https://chromium.org/0"; 17 const char kURL0[] = "https://chromium.org/0";
17 const char kURL1[] = "https://chromium.org/1"; 18 const char kURL1[] = "https://chromium.org/1";
18 const char kURL2[] = "https://chromium.org/2"; 19 const char kURL2[] = "https://chromium.org/2";
19 const char kSupportsUserDataDeathGuardKey = '\0'; 20 const char kSupportsUserDataDeathGuardKey = '\0';
20 21
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 } 91 }
91 92
92 private: 93 private:
93 bool web_state_inserted_called_ = false; 94 bool web_state_inserted_called_ = false;
94 bool web_state_moved_called_ = false; 95 bool web_state_moved_called_ = false;
95 bool web_state_replaced_called_ = false; 96 bool web_state_replaced_called_ = false;
96 bool web_state_detached_called_ = false; 97 bool web_state_detached_called_ = false;
97 98
98 DISALLOW_COPY_AND_ASSIGN(WebStateListTestObserver); 99 DISALLOW_COPY_AND_ASSIGN(WebStateListTestObserver);
99 }; 100 };
101
102 // A fake NavigationManager used to test opener-opened relationship in the
103 // WebStateList.
104 class FakeNavigationManer : public web::TestNavigationManager {
Eugene But (OOO till 7-30) 2017/04/10 21:30:59 Do you want to use existing fake from ios/web/publ
Eugene But (OOO till 7-30) 2017/04/10 21:48:05 Sorry, what I was trying to ask here is: "Do you w
105 public:
106 FakeNavigationManer() = default;
107
108 // web::NavigationManager implementation.
109 int GetCurrentItemIndex() const override { return current_item_index_; }
110
111 int GetLastCommittedItemIndex() const override { return current_item_index_; }
112
113 bool CanGoBack() const override { return current_item_index_ > 0; }
114
115 bool CanGoForward() const override { return current_item_index_ < INT_MAX; }
116
117 void GoBack() override {
118 DCHECK(CanGoBack());
119 --current_item_index_;
120 }
121
122 void GoForward() override {
123 DCHECK(CanGoForward());
124 ++current_item_index_;
125 }
126
127 void GoToIndex(int index) override { current_item_index_ = index; }
128
129 int current_item_index_ = 0;
130
131 DISALLOW_COPY_AND_ASSIGN(FakeNavigationManer);
132 };
133
100 } // namespace 134 } // namespace
101 135
102 class WebStateListTest : public PlatformTest { 136 class WebStateListTest : public PlatformTest {
103 public: 137 public:
104 WebStateListTest() : web_state_list_(WebStateList::WebStateOwned) { 138 WebStateListTest() : web_state_list_(WebStateList::WebStateOwned) {
105 web_state_list_.AddObserver(&observer_); 139 web_state_list_.AddObserver(&observer_);
106 } 140 }
107 141
108 ~WebStateListTest() override { web_state_list_.RemoveObserver(&observer_); } 142 ~WebStateListTest() override { web_state_list_.RemoveObserver(&observer_); }
109 143
110 protected: 144 protected:
111 WebStateList web_state_list_; 145 WebStateList web_state_list_;
112 WebStateListTestObserver observer_; 146 WebStateListTestObserver observer_;
113 147
114 // This method should return std::unique_ptr<> however, due to the complex 148 // This method should return std::unique_ptr<> however, due to the complex
115 // ownership of Tab, WebStateList currently uses raw pointers. Change this 149 // ownership of Tab, WebStateList currently uses raw pointers. Change this
116 // once Tab ownership is sane, see http://crbug.com/546222 for progress. 150 // once Tab ownership is sane, see http://crbug.com/546222 for progress.
117 web::WebState* CreateWebState(const char* url) { 151 web::WebState* CreateWebState(const char* url) {
118 auto test_web_state = base::MakeUnique<web::TestWebState>(); 152 auto test_web_state = base::MakeUnique<web::TestWebState>();
119 test_web_state->SetCurrentURL(GURL(url)); 153 test_web_state->SetCurrentURL(GURL(url));
154 test_web_state->SetNavigationManager(
155 base::MakeUnique<FakeNavigationManer>());
120 return test_web_state.release(); 156 return test_web_state.release();
121 } 157 }
122 158
123 private: 159 private:
124 DISALLOW_COPY_AND_ASSIGN(WebStateListTest); 160 DISALLOW_COPY_AND_ASSIGN(WebStateListTest);
125 }; 161 };
126 162
127 TEST_F(WebStateListTest, IsEmpty) { 163 TEST_F(WebStateListTest, IsEmpty) {
128 EXPECT_EQ(0, web_state_list_.count()); 164 EXPECT_EQ(0, web_state_list_.count());
129 EXPECT_TRUE(web_state_list_.empty()); 165 EXPECT_TRUE(web_state_list_.empty());
130 166
131 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 167 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
132 168
133 EXPECT_TRUE(observer_.web_state_inserted_called()); 169 EXPECT_TRUE(observer_.web_state_inserted_called());
134 EXPECT_EQ(1, web_state_list_.count()); 170 EXPECT_EQ(1, web_state_list_.count());
135 EXPECT_FALSE(web_state_list_.empty()); 171 EXPECT_FALSE(web_state_list_.empty());
136 } 172 }
137 173
138 TEST_F(WebStateListTest, InsertUrlSingle) { 174 TEST_F(WebStateListTest, InsertUrlSingle) {
139 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 175 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
140 176
141 EXPECT_TRUE(observer_.web_state_inserted_called()); 177 EXPECT_TRUE(observer_.web_state_inserted_called());
142 EXPECT_EQ(1, web_state_list_.count()); 178 EXPECT_EQ(1, web_state_list_.count());
143 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 179 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
144 } 180 }
145 181
146 TEST_F(WebStateListTest, InsertUrlMultiple) { 182 TEST_F(WebStateListTest, InsertUrlMultiple) {
147 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 183 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
148 web_state_list_.InsertWebState(0, CreateWebState(kURL1)); 184 web_state_list_.InsertWebState(0, CreateWebState(kURL1), nullptr);
149 web_state_list_.InsertWebState(1, CreateWebState(kURL2)); 185 web_state_list_.InsertWebState(1, CreateWebState(kURL2), nullptr);
150 186
151 EXPECT_TRUE(observer_.web_state_inserted_called()); 187 EXPECT_TRUE(observer_.web_state_inserted_called());
152 EXPECT_EQ(3, web_state_list_.count()); 188 EXPECT_EQ(3, web_state_list_.count());
153 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 189 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
154 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 190 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
155 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 191 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
156 } 192 }
157 193
158 TEST_F(WebStateListTest, MoveWebStateAtRightByOne) { 194 TEST_F(WebStateListTest, MoveWebStateAtRightByOne) {
159 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 195 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
160 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 196 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
161 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 197 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
162 198
163 // Sanity check before closing WebState. 199 // Sanity check before closing WebState.
164 EXPECT_EQ(3, web_state_list_.count()); 200 EXPECT_EQ(3, web_state_list_.count());
165 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 201 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
166 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 202 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
167 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 203 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
168 204
169 observer_.ResetStatistics(); 205 observer_.ResetStatistics();
170 web_state_list_.MoveWebStateAt(0, 1); 206 web_state_list_.MoveWebStateAt(0, 1);
171 207
172 EXPECT_TRUE(observer_.web_state_moved_called()); 208 EXPECT_TRUE(observer_.web_state_moved_called());
173 EXPECT_EQ(3, web_state_list_.count()); 209 EXPECT_EQ(3, web_state_list_.count());
174 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 210 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
175 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 211 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
176 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 212 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
177 } 213 }
178 214
179 TEST_F(WebStateListTest, MoveWebStateAtRightByMoreThanOne) { 215 TEST_F(WebStateListTest, MoveWebStateAtRightByMoreThanOne) {
180 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 216 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
181 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 217 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
182 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 218 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
183 219
184 // Sanity check before closing WebState. 220 // Sanity check before closing WebState.
185 EXPECT_EQ(3, web_state_list_.count()); 221 EXPECT_EQ(3, web_state_list_.count());
186 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 222 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
187 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 223 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
188 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 224 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
189 225
190 observer_.ResetStatistics(); 226 observer_.ResetStatistics();
191 web_state_list_.MoveWebStateAt(0, 2); 227 web_state_list_.MoveWebStateAt(0, 2);
192 228
193 EXPECT_TRUE(observer_.web_state_moved_called()); 229 EXPECT_TRUE(observer_.web_state_moved_called());
194 EXPECT_EQ(3, web_state_list_.count()); 230 EXPECT_EQ(3, web_state_list_.count());
195 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 231 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
196 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 232 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
197 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 233 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
198 } 234 }
199 235
200 TEST_F(WebStateListTest, MoveWebStateAtLeftByOne) { 236 TEST_F(WebStateListTest, MoveWebStateAtLeftByOne) {
201 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 237 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
202 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 238 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
203 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 239 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
204 240
205 // Sanity check before closing WebState. 241 // Sanity check before closing WebState.
206 EXPECT_EQ(3, web_state_list_.count()); 242 EXPECT_EQ(3, web_state_list_.count());
207 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 243 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
208 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 244 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
209 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 245 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
210 246
211 observer_.ResetStatistics(); 247 observer_.ResetStatistics();
212 web_state_list_.MoveWebStateAt(2, 1); 248 web_state_list_.MoveWebStateAt(2, 1);
213 249
214 EXPECT_TRUE(observer_.web_state_moved_called()); 250 EXPECT_TRUE(observer_.web_state_moved_called());
215 EXPECT_EQ(3, web_state_list_.count()); 251 EXPECT_EQ(3, web_state_list_.count());
216 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 252 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
217 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 253 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
218 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 254 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
219 } 255 }
220 256
221 TEST_F(WebStateListTest, MoveWebStateAtLeftByMoreThanOne) { 257 TEST_F(WebStateListTest, MoveWebStateAtLeftByMoreThanOne) {
222 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 258 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
223 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 259 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
224 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 260 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
225 261
226 // Sanity check before closing WebState. 262 // Sanity check before closing WebState.
227 EXPECT_EQ(3, web_state_list_.count()); 263 EXPECT_EQ(3, web_state_list_.count());
228 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 264 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
229 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 265 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
230 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 266 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
231 267
232 observer_.ResetStatistics(); 268 observer_.ResetStatistics();
233 web_state_list_.MoveWebStateAt(2, 0); 269 web_state_list_.MoveWebStateAt(2, 0);
234 270
235 EXPECT_TRUE(observer_.web_state_moved_called()); 271 EXPECT_TRUE(observer_.web_state_moved_called());
236 EXPECT_EQ(3, web_state_list_.count()); 272 EXPECT_EQ(3, web_state_list_.count());
237 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 273 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
238 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 274 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
239 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 275 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
240 } 276 }
241 277
242 TEST_F(WebStateListTest, MoveWebStateAtSameIndex) { 278 TEST_F(WebStateListTest, MoveWebStateAtSameIndex) {
243 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 279 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
244 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 280 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
245 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 281 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
246 282
247 // Sanity check before closing WebState. 283 // Sanity check before closing WebState.
248 EXPECT_EQ(3, web_state_list_.count()); 284 EXPECT_EQ(3, web_state_list_.count());
249 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 285 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
250 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 286 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
251 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 287 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
252 288
253 observer_.ResetStatistics(); 289 observer_.ResetStatistics();
254 web_state_list_.MoveWebStateAt(2, 2); 290 web_state_list_.MoveWebStateAt(2, 2);
255 291
256 EXPECT_FALSE(observer_.web_state_moved_called()); 292 EXPECT_FALSE(observer_.web_state_moved_called());
257 EXPECT_EQ(3, web_state_list_.count()); 293 EXPECT_EQ(3, web_state_list_.count());
258 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 294 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
259 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 295 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
260 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 296 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
261 } 297 }
262 298
263 TEST_F(WebStateListTest, ReplaceWebStateAt) { 299 TEST_F(WebStateListTest, ReplaceWebStateAt) {
264 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 300 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
265 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 301 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
266 302
267 // Sanity check before replacing WebState. 303 // Sanity check before replacing WebState.
268 EXPECT_EQ(2, web_state_list_.count()); 304 EXPECT_EQ(2, web_state_list_.count());
269 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 305 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
270 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 306 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
271 307
272 observer_.ResetStatistics(); 308 observer_.ResetStatistics();
273 std::unique_ptr<web::WebState> old_web_state( 309 std::unique_ptr<web::WebState> old_web_state(
274 web_state_list_.ReplaceWebStateAt(1, CreateWebState(kURL2))); 310 web_state_list_.ReplaceWebStateAt(1, CreateWebState(kURL2), nullptr));
275 311
276 EXPECT_TRUE(observer_.web_state_replaced_called()); 312 EXPECT_TRUE(observer_.web_state_replaced_called());
277 EXPECT_EQ(2, web_state_list_.count()); 313 EXPECT_EQ(2, web_state_list_.count());
278 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 314 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
279 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 315 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
280 EXPECT_EQ(kURL1, old_web_state->GetVisibleURL().spec()); 316 EXPECT_EQ(kURL1, old_web_state->GetVisibleURL().spec());
281 } 317 }
282 318
283 TEST_F(WebStateListTest, DetachWebStateAtIndexBegining) { 319 TEST_F(WebStateListTest, DetachWebStateAtIndexBegining) {
284 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 320 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
285 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 321 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
286 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 322 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
287 323
288 // Sanity check before closing WebState. 324 // Sanity check before closing WebState.
289 EXPECT_EQ(3, web_state_list_.count()); 325 EXPECT_EQ(3, web_state_list_.count());
290 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 326 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
291 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 327 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
292 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 328 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
293 329
294 observer_.ResetStatistics(); 330 observer_.ResetStatistics();
295 web_state_list_.DetachWebStateAt(0); 331 web_state_list_.DetachWebStateAt(0);
296 332
297 EXPECT_TRUE(observer_.web_state_detached_called()); 333 EXPECT_TRUE(observer_.web_state_detached_called());
298 EXPECT_EQ(2, web_state_list_.count()); 334 EXPECT_EQ(2, web_state_list_.count());
299 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 335 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
300 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 336 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
301 } 337 }
302 338
303 TEST_F(WebStateListTest, DetachWebStateAtIndexMiddle) { 339 TEST_F(WebStateListTest, DetachWebStateAtIndexMiddle) {
304 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 340 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
305 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 341 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
306 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 342 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
307 343
308 // Sanity check before closing WebState. 344 // Sanity check before closing WebState.
309 EXPECT_EQ(3, web_state_list_.count()); 345 EXPECT_EQ(3, web_state_list_.count());
310 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 346 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
311 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 347 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
312 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 348 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
313 349
314 observer_.ResetStatistics(); 350 observer_.ResetStatistics();
315 web_state_list_.DetachWebStateAt(1); 351 web_state_list_.DetachWebStateAt(1);
316 352
317 EXPECT_TRUE(observer_.web_state_detached_called()); 353 EXPECT_TRUE(observer_.web_state_detached_called());
318 EXPECT_EQ(2, web_state_list_.count()); 354 EXPECT_EQ(2, web_state_list_.count());
319 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 355 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
320 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 356 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
321 } 357 }
322 358
323 TEST_F(WebStateListTest, DetachWebStateAtIndexLast) { 359 TEST_F(WebStateListTest, DetachWebStateAtIndexLast) {
324 web_state_list_.InsertWebState(0, CreateWebState(kURL0)); 360 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
325 web_state_list_.InsertWebState(1, CreateWebState(kURL1)); 361 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
326 web_state_list_.InsertWebState(2, CreateWebState(kURL2)); 362 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
327 363
328 // Sanity check before closing WebState. 364 // Sanity check before closing WebState.
329 EXPECT_EQ(3, web_state_list_.count()); 365 EXPECT_EQ(3, web_state_list_.count());
330 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 366 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
331 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 367 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
332 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec()); 368 EXPECT_EQ(kURL2, web_state_list_.GetWebStateAt(2)->GetVisibleURL().spec());
333 369
334 observer_.ResetStatistics(); 370 observer_.ResetStatistics();
335 web_state_list_.DetachWebStateAt(2); 371 web_state_list_.DetachWebStateAt(2);
336 372
337 EXPECT_TRUE(observer_.web_state_detached_called()); 373 EXPECT_TRUE(observer_.web_state_detached_called());
338 EXPECT_EQ(2, web_state_list_.count()); 374 EXPECT_EQ(2, web_state_list_.count());
339 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec()); 375 EXPECT_EQ(kURL0, web_state_list_.GetWebStateAt(0)->GetVisibleURL().spec());
340 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec()); 376 EXPECT_EQ(kURL1, web_state_list_.GetWebStateAt(1)->GetVisibleURL().spec());
341 } 377 }
342 378
343 TEST_F(WebStateListTest, OwnershipBorrowed) { 379 TEST_F(WebStateListTest, OwnershipBorrowed) {
344 bool web_state_was_killed = false; 380 bool web_state_was_killed = false;
345 auto test_web_state = base::MakeUnique<web::TestWebState>(); 381 auto test_web_state = base::MakeUnique<web::TestWebState>();
346 test_web_state->SetUserData( 382 test_web_state->SetUserData(
347 &kSupportsUserDataDeathGuardKey, 383 &kSupportsUserDataDeathGuardKey,
348 base::MakeUnique<SupportsUserDataDeathGuard>(&web_state_was_killed)); 384 base::MakeUnique<SupportsUserDataDeathGuard>(&web_state_was_killed));
349 385
350 auto web_state_list = 386 auto web_state_list =
351 base::MakeUnique<WebStateList>(WebStateList::WebStateBorrowed); 387 base::MakeUnique<WebStateList>(WebStateList::WebStateBorrowed);
352 web_state_list->InsertWebState(0, test_web_state.get()); 388 web_state_list->InsertWebState(0, test_web_state.get(), nullptr);
353 EXPECT_FALSE(web_state_was_killed); 389 EXPECT_FALSE(web_state_was_killed);
354 390
355 web_state_list.reset(); 391 web_state_list.reset();
356 EXPECT_FALSE(web_state_was_killed); 392 EXPECT_FALSE(web_state_was_killed);
357 } 393 }
358 394
359 TEST_F(WebStateListTest, OwnershipOwned) { 395 TEST_F(WebStateListTest, OwnershipOwned) {
360 bool web_state_was_killed = false; 396 bool web_state_was_killed = false;
361 auto test_web_state = base::MakeUnique<web::TestWebState>(); 397 auto test_web_state = base::MakeUnique<web::TestWebState>();
362 test_web_state->SetUserData( 398 test_web_state->SetUserData(
363 &kSupportsUserDataDeathGuardKey, 399 &kSupportsUserDataDeathGuardKey,
364 base::MakeUnique<SupportsUserDataDeathGuard>(&web_state_was_killed)); 400 base::MakeUnique<SupportsUserDataDeathGuard>(&web_state_was_killed));
365 401
366 auto web_state_list = 402 auto web_state_list =
367 base::MakeUnique<WebStateList>(WebStateList::WebStateOwned); 403 base::MakeUnique<WebStateList>(WebStateList::WebStateOwned);
368 web_state_list->InsertWebState(0, test_web_state.release()); 404 web_state_list->InsertWebState(0, test_web_state.release(), nullptr);
369 EXPECT_FALSE(web_state_was_killed); 405 EXPECT_FALSE(web_state_was_killed);
370 406
371 web_state_list.reset(); 407 web_state_list.reset();
372 EXPECT_TRUE(web_state_was_killed); 408 EXPECT_TRUE(web_state_was_killed);
373 } 409 }
410
411 TEST_F(WebStateListTest, OpenersEmptyList) {
412 EXPECT_TRUE(web_state_list_.empty());
413
414 EXPECT_EQ(WebStateList::kInvalidIndex,
415 web_state_list_.GetIndexOfNextWebStateOpenedBy(
416 nullptr, WebStateList::kInvalidIndex, false));
417 EXPECT_EQ(WebStateList::kInvalidIndex,
418 web_state_list_.GetIndexOfLastWebStateOpenedBy(
419 nullptr, WebStateList::kInvalidIndex, false));
420
421 EXPECT_EQ(WebStateList::kInvalidIndex,
422 web_state_list_.GetIndexOfNextWebStateOpenedBy(
423 nullptr, WebStateList::kInvalidIndex, true));
424 EXPECT_EQ(WebStateList::kInvalidIndex,
425 web_state_list_.GetIndexOfLastWebStateOpenedBy(
426 nullptr, WebStateList::kInvalidIndex, true));
427 }
428
429 TEST_F(WebStateListTest, OpenersNothingOpened) {
430 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
431 web_state_list_.InsertWebState(1, CreateWebState(kURL1), nullptr);
432 web_state_list_.InsertWebState(2, CreateWebState(kURL2), nullptr);
433
434 for (int index = 0; index < web_state_list_.count(); ++index) {
435 web::WebState* opener = web_state_list_.GetWebStateAt(index);
436 EXPECT_EQ(
437 WebStateList::kInvalidIndex,
438 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, index, false));
439 EXPECT_EQ(
440 WebStateList::kInvalidIndex,
441 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, index, false));
442
443 EXPECT_EQ(
444 WebStateList::kInvalidIndex,
445 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, index, true));
446 EXPECT_EQ(
447 WebStateList::kInvalidIndex,
448 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, index, true));
449 }
450 }
451
452 TEST_F(WebStateListTest, OpenersChildsAfterOpener) {
453 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
454 web::WebState* opener = web_state_list_.GetWebStateAt(0);
455
456 web_state_list_.InsertWebState(1, CreateWebState(kURL1), opener);
457 web_state_list_.InsertWebState(2, CreateWebState(kURL2), opener);
458
459 const int start_index = web_state_list_.GetIndexOfWebState(opener);
460 EXPECT_EQ(1,
461 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
462 false));
463 EXPECT_EQ(2,
464 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
465 false));
466
467 EXPECT_EQ(1,
468 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
469 true));
470 EXPECT_EQ(2,
471 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
472 true));
473
474 // Simulate a navigation on the opener, results should not change if not
475 // using groups, but should now be kInvalidIndex otherwise.
476 opener->GetNavigationManager()->GoForward();
477
478 EXPECT_EQ(1,
479 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
480 false));
481 EXPECT_EQ(2,
482 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
483 false));
484
485 EXPECT_EQ(WebStateList::kInvalidIndex,
486 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
487 true));
488 EXPECT_EQ(WebStateList::kInvalidIndex,
489 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
490 true));
491
492 // Add a new WebState with the same opener. It should be considered the next
493 // WebState if groups are considered and the last independently on whether
494 // groups are used or not.
495 web_state_list_.InsertWebState(3, CreateWebState(kURL2), opener);
496
497 EXPECT_EQ(1,
498 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
499 false));
500 EXPECT_EQ(3,
501 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
502 false));
503
504 EXPECT_EQ(3,
505 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
506 true));
507 EXPECT_EQ(3,
508 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
509 true));
510 }
511
512 TEST_F(WebStateListTest, OpenersChildsBeforeOpener) {
513 web_state_list_.InsertWebState(0, CreateWebState(kURL0), nullptr);
514 web::WebState* opener = web_state_list_.GetWebStateAt(0);
515
516 web_state_list_.InsertWebState(0, CreateWebState(kURL1), opener);
517 web_state_list_.InsertWebState(1, CreateWebState(kURL2), opener);
518
519 const int start_index = web_state_list_.GetIndexOfWebState(opener);
520 EXPECT_EQ(WebStateList::kInvalidIndex,
521 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
522 false));
523 EXPECT_EQ(WebStateList::kInvalidIndex,
524 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
525 false));
526
527 EXPECT_EQ(WebStateList::kInvalidIndex,
528 web_state_list_.GetIndexOfNextWebStateOpenedBy(opener, start_index,
529 true));
530 EXPECT_EQ(WebStateList::kInvalidIndex,
531 web_state_list_.GetIndexOfLastWebStateOpenedBy(opener, start_index,
532 true));
533 }
OLDNEW
« no previous file with comments | « ios/shared/chrome/browser/tabs/web_state_list_fast_enumeration_helper_unittest.mm ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698