OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" | 5 #include "chrome/browser/ui/toolbar/recent_tabs_sub_menu_model.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/command_line.h" | 11 #include "base/command_line.h" |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
14 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
| 15 #include "base/strings/utf_string_conversions.h" |
15 #include "build/build_config.h" | 16 #include "build/build_config.h" |
16 #include "chrome/app/chrome_command_ids.h" | 17 #include "chrome/app/chrome_command_ids.h" |
17 #include "chrome/browser/sessions/chrome_tab_restore_service_client.h" | 18 #include "chrome/browser/sessions/chrome_tab_restore_service_client.h" |
18 #include "chrome/browser/sessions/session_service.h" | 19 #include "chrome/browser/sessions/session_service.h" |
19 #include "chrome/browser/sessions/session_service_factory.h" | 20 #include "chrome/browser/sessions/session_service_factory.h" |
20 #include "chrome/browser/sessions/tab_restore_service_factory.h" | 21 #include "chrome/browser/sessions/tab_restore_service_factory.h" |
| 22 #include "chrome/browser/sync/profile_sync_service_factory.h" |
21 #include "chrome/browser/sync/profile_sync_test_util.h" | 23 #include "chrome/browser/sync/profile_sync_test_util.h" |
22 #include "chrome/browser/ui/browser.h" | 24 #include "chrome/browser/ui/browser.h" |
23 #include "chrome/browser/ui/browser_tabstrip.h" | 25 #include "chrome/browser/ui/browser_tabstrip.h" |
24 #include "chrome/browser/ui/sync/browser_synced_window_delegates_getter.h" | 26 #include "chrome/browser/ui/sync/browser_synced_window_delegates_getter.h" |
25 #include "chrome/browser/ui/tabs/tab_strip_model.h" | 27 #include "chrome/browser/ui/tabs/tab_strip_model.h" |
26 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" | 28 #include "chrome/browser/ui/toolbar/recent_tabs_builder_test_helper.h" |
27 #include "chrome/common/chrome_switches.h" | 29 #include "chrome/common/chrome_switches.h" |
28 #include "chrome/test/base/browser_with_test_window_test.h" | 30 #include "chrome/test/base/browser_with_test_window_test.h" |
29 #include "chrome/test/base/menu_model_test.h" | 31 #include "chrome/test/base/menu_model_test.h" |
30 #include "chrome/test/base/testing_profile.h" | 32 #include "chrome/test/base/testing_profile.h" |
31 #include "components/browser_sync/profile_sync_service_mock.h" | 33 #include "components/browser_sync/profile_sync_service_mock.h" |
32 #include "components/sessions/core/persistent_tab_restore_service.h" | 34 #include "components/sessions/core/persistent_tab_restore_service.h" |
33 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" | 35 #include "components/sessions/core/serialized_navigation_entry_test_helper.h" |
34 #include "components/sessions/core/session_types.h" | 36 #include "components/sessions/core/session_types.h" |
35 #include "components/sync/base/sync_prefs.h" | 37 #include "components/sync/base/sync_prefs.h" |
36 #include "components/sync/device_info/local_device_info_provider_mock.h" | 38 #include "components/sync/device_info/local_device_info_provider_mock.h" |
37 #include "components/sync/driver/sync_client.h" | 39 #include "components/sync/driver/sync_client.h" |
38 #include "components/sync/model/fake_sync_change_processor.h" | 40 #include "components/sync/model/fake_sync_change_processor.h" |
39 #include "components/sync/model/sync_error_factory_mock.h" | 41 #include "components/sync/model/sync_error_factory_mock.h" |
40 #include "components/sync_sessions/sessions_sync_manager.h" | 42 #include "components/sync_sessions/sessions_sync_manager.h" |
41 #include "components/sync_sessions/synced_session.h" | 43 #include "components/sync_sessions/synced_session.h" |
42 #include "content/public/browser/browser_thread.h" | 44 #include "content/public/browser/browser_thread.h" |
43 #include "content/public/test/test_utils.h" | 45 #include "content/public/test/test_utils.h" |
44 #include "testing/gmock/include/gmock/gmock.h" | 46 #include "testing/gmock/include/gmock/gmock.h" |
45 #include "testing/gtest/include/gtest/gtest.h" | 47 #include "testing/gtest/include/gtest/gtest.h" |
46 | 48 |
| 49 using testing::_; |
| 50 using testing::Invoke; |
| 51 using testing::Return; |
| 52 |
47 namespace { | 53 namespace { |
48 | 54 |
49 // This copies parts of MenuModelTest::Delegate and combines them with the | 55 // This copies parts of MenuModelTest::Delegate and combines them with the |
50 // RecentTabsSubMenuModel since RecentTabsSubMenuModel is a | 56 // RecentTabsSubMenuModel since RecentTabsSubMenuModel is a |
51 // SimpleMenuModel::Delegate and not just derived from SimpleMenuModel. | 57 // SimpleMenuModel::Delegate and not just derived from SimpleMenuModel. |
52 class TestRecentTabsSubMenuModel : public RecentTabsSubMenuModel { | 58 class TestRecentTabsSubMenuModel : public RecentTabsSubMenuModel { |
53 public: | 59 public: |
54 TestRecentTabsSubMenuModel(ui::AcceleratorProvider* provider, | 60 TestRecentTabsSubMenuModel(ui::AcceleratorProvider* provider, |
55 Browser* browser, | 61 Browser* browser) |
56 sync_sessions::OpenTabsUIDelegate* delegate) | 62 : RecentTabsSubMenuModel(provider, browser), |
57 : RecentTabsSubMenuModel(provider, browser, delegate), | |
58 execute_count_(0), | 63 execute_count_(0), |
59 enable_count_(0) {} | 64 enable_count_(0) {} |
60 | 65 |
61 // Testing overrides to ui::SimpleMenuModel::Delegate: | 66 // Testing overrides to ui::SimpleMenuModel::Delegate: |
62 bool IsCommandIdEnabled(int command_id) const override { | 67 bool IsCommandIdEnabled(int command_id) const override { |
63 bool val = RecentTabsSubMenuModel::IsCommandIdEnabled(command_id); | 68 bool val = RecentTabsSubMenuModel::IsCommandIdEnabled(command_id); |
64 if (val) | 69 if (val) |
65 ++enable_count_; | 70 ++enable_count_; |
66 return val; | 71 return val; |
67 } | 72 } |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
108 }; | 113 }; |
109 | 114 |
110 class DummyRouter : public sync_sessions::LocalSessionEventRouter { | 115 class DummyRouter : public sync_sessions::LocalSessionEventRouter { |
111 public: | 116 public: |
112 ~DummyRouter() override {} | 117 ~DummyRouter() override {} |
113 void StartRoutingTo( | 118 void StartRoutingTo( |
114 sync_sessions::LocalSessionEventHandler* handler) override {} | 119 sync_sessions::LocalSessionEventHandler* handler) override {} |
115 void Stop() override {} | 120 void Stop() override {} |
116 }; | 121 }; |
117 | 122 |
| 123 class FakeSyncServiceObserverList { |
| 124 public: |
| 125 FakeSyncServiceObserverList() {} |
| 126 ~FakeSyncServiceObserverList() {} |
| 127 |
| 128 void AddObserver(syncer::SyncServiceObserver* observer) { |
| 129 observers_.AddObserver(observer); |
| 130 } |
| 131 |
| 132 void RemoveObserver(syncer::SyncServiceObserver* observer) { |
| 133 observers_.RemoveObserver(observer); |
| 134 } |
| 135 |
| 136 void NotifyConfigureDone() { |
| 137 for (auto& observer : observers_) |
| 138 observer.OnSyncConfigurationCompleted(nullptr); |
| 139 } |
| 140 |
| 141 void NotifyForeignSessionUpdated() { |
| 142 for (auto& observer : observers_) |
| 143 observer.OnForeignSessionUpdated(nullptr); |
| 144 } |
| 145 |
| 146 private: |
| 147 base::ObserverList<syncer::SyncServiceObserver, true> observers_; |
| 148 |
| 149 DISALLOW_COPY_AND_ASSIGN(FakeSyncServiceObserverList); |
| 150 }; |
| 151 |
118 } // namespace | 152 } // namespace |
119 | 153 |
120 class RecentTabsSubMenuModelTest | 154 class RecentTabsSubMenuModelTest |
121 : public BrowserWithTestWindowTest { | 155 : public BrowserWithTestWindowTest { |
122 public: | 156 public: |
123 RecentTabsSubMenuModelTest() | 157 RecentTabsSubMenuModelTest() {} |
124 : sync_service_(CreateProfileSyncServiceParamsForTest(&testing_profile_)), | 158 |
125 local_device_(new syncer::LocalDeviceInfoProviderMock( | 159 void SetUp() override { |
126 "RecentTabsSubMenuModelTest", | 160 BrowserWithTestWindowTest::SetUp(); |
127 "Test Machine", | 161 |
128 "Chromium 10k", | 162 local_device_ = base::MakeUnique<syncer::LocalDeviceInfoProviderMock>( |
129 "Chrome 10k", | 163 "RecentTabsSubMenuModelTest", "Test Machine", "Chromium 10k", |
130 sync_pb::SyncEnums_DeviceType_TYPE_LINUX, | 164 "Chrome 10k", sync_pb::SyncEnums_DeviceType_TYPE_LINUX, "device_id"); |
131 "device_id")), | 165 |
132 dummy_router_(base::MakeUnique<DummyRouter>()), | 166 sync_prefs_ = base::MakeUnique<syncer::SyncPrefs>(profile()->GetPrefs()); |
133 sync_prefs_( | 167 |
134 base::MakeUnique<syncer::SyncPrefs>(testing_profile_.GetPrefs())), | 168 mock_sync_service_ = static_cast<browser_sync::ProfileSyncServiceMock*>( |
135 manager_(base::MakeUnique<sync_sessions::SessionsSyncManager>( | 169 ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse( |
136 sync_service_.GetSyncClient()->GetSyncSessionsClient(), | 170 profile(), BuildMockProfileSyncService)); |
137 sync_prefs_.get(), | 171 |
138 local_device_.get(), | 172 EXPECT_CALL(*mock_sync_service_, AddObserver(_)) |
139 dummy_router_.get(), | 173 .WillRepeatedly(Invoke(&fake_sync_service_observer_list_, |
140 base::Closure(), | 174 &FakeSyncServiceObserverList::AddObserver)); |
141 base::Closure())) { | 175 EXPECT_CALL(*mock_sync_service_, RemoveObserver(_)) |
| 176 .WillRepeatedly(Invoke(&fake_sync_service_observer_list_, |
| 177 &FakeSyncServiceObserverList::RemoveObserver)); |
| 178 |
| 179 manager_ = base::MakeUnique<sync_sessions::SessionsSyncManager>( |
| 180 mock_sync_service_->GetSyncClient()->GetSyncSessionsClient(), |
| 181 sync_prefs_.get(), local_device_.get(), &dummy_router_, |
| 182 base::Bind(&FakeSyncServiceObserverList::NotifyForeignSessionUpdated, |
| 183 base::Unretained(&fake_sync_service_observer_list_)), |
| 184 base::Closure()); |
| 185 |
142 manager_->MergeDataAndStartSyncing( | 186 manager_->MergeDataAndStartSyncing( |
143 syncer::SESSIONS, syncer::SyncDataList(), | 187 syncer::SESSIONS, syncer::SyncDataList(), |
144 std::unique_ptr<syncer::SyncChangeProcessor>( | 188 std::unique_ptr<syncer::SyncChangeProcessor>( |
145 new syncer::FakeSyncChangeProcessor), | 189 new syncer::FakeSyncChangeProcessor), |
146 std::unique_ptr<syncer::SyncErrorFactory>( | 190 std::unique_ptr<syncer::SyncErrorFactory>( |
147 new syncer::SyncErrorFactoryMock)); | 191 new syncer::SyncErrorFactoryMock)); |
148 } | 192 } |
149 | 193 |
| 194 void TearDown() override { |
| 195 manager_.reset(); |
| 196 sync_prefs_.reset(); |
| 197 local_device_.reset(); |
| 198 BrowserWithTestWindowTest::TearDown(); |
| 199 } |
| 200 |
150 void WaitForLoadFromLastSession() { | 201 void WaitForLoadFromLastSession() { |
151 content::RunAllBlockingPoolTasksUntilIdle(); | 202 content::RunAllBlockingPoolTasksUntilIdle(); |
152 } | 203 } |
153 | 204 |
| 205 void DisableSync() { |
| 206 EXPECT_CALL(*mock_sync_service_, IsSyncActive()) |
| 207 .WillRepeatedly(Return(false)); |
| 208 EXPECT_CALL(*mock_sync_service_, IsDataTypeControllerRunning(_)) |
| 209 .WillRepeatedly(Return(false)); |
| 210 EXPECT_CALL(*mock_sync_service_, GetOpenTabsUIDelegateMock()) |
| 211 .WillRepeatedly(Return(nullptr)); |
| 212 } |
| 213 |
| 214 void EnableSync() { |
| 215 EXPECT_CALL(*mock_sync_service_, IsSyncActive()) |
| 216 .WillRepeatedly(Return(true)); |
| 217 EXPECT_CALL(*mock_sync_service_, |
| 218 IsDataTypeControllerRunning(syncer::SESSIONS)) |
| 219 .WillRepeatedly(Return(true)); |
| 220 EXPECT_CALL(*mock_sync_service_, |
| 221 IsDataTypeControllerRunning(syncer::PROXY_TABS)) |
| 222 .WillRepeatedly(Return(true)); |
| 223 EXPECT_CALL(*mock_sync_service_, GetOpenTabsUIDelegateMock()) |
| 224 .WillRepeatedly(Return(manager_.get())); |
| 225 } |
| 226 |
| 227 void NotifySyncEnabled() { |
| 228 fake_sync_service_observer_list_.NotifyConfigureDone(); |
| 229 } |
| 230 |
154 static std::unique_ptr<KeyedService> GetTabRestoreService( | 231 static std::unique_ptr<KeyedService> GetTabRestoreService( |
155 content::BrowserContext* browser_context) { | 232 content::BrowserContext* browser_context) { |
156 return base::MakeUnique<sessions::PersistentTabRestoreService>( | 233 return base::MakeUnique<sessions::PersistentTabRestoreService>( |
157 base::WrapUnique(new ChromeTabRestoreServiceClient( | 234 base::WrapUnique(new ChromeTabRestoreServiceClient( |
158 Profile::FromBrowserContext(browser_context))), | 235 Profile::FromBrowserContext(browser_context))), |
159 nullptr); | 236 nullptr); |
160 } | 237 } |
161 | 238 |
162 sync_sessions::OpenTabsUIDelegate* GetOpenTabsDelegate() { | |
163 return manager_.get(); | |
164 } | |
165 | |
166 void RegisterRecentTabs(RecentTabsBuilderTestHelper* helper) { | 239 void RegisterRecentTabs(RecentTabsBuilderTestHelper* helper) { |
167 helper->ExportToSessionsSyncManager(manager_.get()); | 240 helper->ExportToSessionsSyncManager(manager_.get()); |
168 } | 241 } |
169 | 242 |
170 private: | 243 private: |
171 TestingProfile testing_profile_; | |
172 browser_sync::ProfileSyncServiceMock sync_service_; | |
173 std::unique_ptr<syncer::LocalDeviceInfoProviderMock> local_device_; | 244 std::unique_ptr<syncer::LocalDeviceInfoProviderMock> local_device_; |
174 std::unique_ptr<DummyRouter> dummy_router_; | 245 DummyRouter dummy_router_; |
175 std::unique_ptr<syncer::SyncPrefs> sync_prefs_; | 246 std::unique_ptr<syncer::SyncPrefs> sync_prefs_; |
| 247 FakeSyncServiceObserverList fake_sync_service_observer_list_; |
| 248 browser_sync::ProfileSyncServiceMock* mock_sync_service_ = nullptr; |
176 std::unique_ptr<sync_sessions::SessionsSyncManager> manager_; | 249 std::unique_ptr<sync_sessions::SessionsSyncManager> manager_; |
177 }; | 250 }; |
178 | 251 |
179 // Test disabled "Recently closed" header with no foreign tabs. | 252 // Test disabled "Recently closed" header with no foreign tabs. |
180 TEST_F(RecentTabsSubMenuModelTest, NoTabs) { | 253 TEST_F(RecentTabsSubMenuModelTest, NoTabs) { |
181 TestRecentTabsSubMenuModel model(NULL, browser(), NULL); | 254 DisableSync(); |
| 255 |
| 256 TestRecentTabsSubMenuModel model(nullptr, browser()); |
182 | 257 |
183 // Expected menu: | 258 // Expected menu: |
184 // Menu index Menu items | 259 // Menu index Menu items |
185 // --------------------------------------------- | 260 // --------------------------------------------- |
186 // 0 History | 261 // 0 History |
187 // 1 <separator> | 262 // 1 <separator> |
188 // 2 Recently closed header (disabled) | 263 // 2 Recently closed header (disabled) |
189 // 3 <separator> | 264 // 3 <separator> |
190 // 4 No tabs from other Devices | 265 // 4 No tabs from other Devices |
191 | 266 |
(...skipping 13 matching lines...) Expand all Loading... |
205 base::string16 title; | 280 base::string16 title; |
206 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(0, &url, &title)); | 281 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(0, &url, &title)); |
207 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(1, &url, &title)); | 282 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(1, &url, &title)); |
208 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(2, &url, &title)); | 283 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(2, &url, &title)); |
209 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(3, &url, &title)); | 284 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(3, &url, &title)); |
210 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); | 285 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); |
211 } | 286 } |
212 | 287 |
213 // Test enabled "Recently closed" header with no foreign tabs. | 288 // Test enabled "Recently closed" header with no foreign tabs. |
214 TEST_F(RecentTabsSubMenuModelTest, RecentlyClosedTabsFromCurrentSession) { | 289 TEST_F(RecentTabsSubMenuModelTest, RecentlyClosedTabsFromCurrentSession) { |
| 290 DisableSync(); |
| 291 |
215 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( | 292 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( |
216 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); | 293 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); |
217 | 294 |
218 // Add 2 tabs and close them. | 295 // Add 2 tabs and close them. |
219 AddTab(browser(), GURL("http://foo/1")); | 296 AddTab(browser(), GURL("http://foo/1")); |
220 AddTab(browser(), GURL("http://foo/2")); | 297 AddTab(browser(), GURL("http://foo/2")); |
221 browser()->tab_strip_model()->CloseAllTabs(); | 298 browser()->tab_strip_model()->CloseAllTabs(); |
222 | 299 |
223 TestRecentTabsSubMenuModel model(NULL, browser(), NULL); | 300 TestRecentTabsSubMenuModel model(nullptr, browser()); |
224 // Expected menu: | 301 // Expected menu: |
225 // Menu index Menu items | 302 // Menu index Menu items |
226 // -------------------------------------- | 303 // -------------------------------------- |
227 // 0 History | 304 // 0 History |
228 // 1 <separator> | 305 // 1 <separator> |
229 // 2 Recently closed header | 306 // 2 Recently closed header |
230 // 3 <tab for http://foo/2> | 307 // 3 <tab for http://foo/2> |
231 // 4 <tab for http://foo/1> | 308 // 4 <tab for http://foo/1> |
232 // 5 <separator> | 309 // 5 <separator> |
233 // 6 No tabs from other Devices | 310 // 6 No tabs from other Devices |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 // RecentTabsSubMenuModel. | 345 // RecentTabsSubMenuModel. |
269 #if defined(OS_MACOSX) | 346 #if defined(OS_MACOSX) |
270 #define MAYBE_RecentlyClosedTabsAndWindowsFromLastSession \ | 347 #define MAYBE_RecentlyClosedTabsAndWindowsFromLastSession \ |
271 DISABLED_RecentlyClosedTabsAndWindowsFromLastSession | 348 DISABLED_RecentlyClosedTabsAndWindowsFromLastSession |
272 #else | 349 #else |
273 #define MAYBE_RecentlyClosedTabsAndWindowsFromLastSession \ | 350 #define MAYBE_RecentlyClosedTabsAndWindowsFromLastSession \ |
274 RecentlyClosedTabsAndWindowsFromLastSession | 351 RecentlyClosedTabsAndWindowsFromLastSession |
275 #endif | 352 #endif |
276 TEST_F(RecentTabsSubMenuModelTest, | 353 TEST_F(RecentTabsSubMenuModelTest, |
277 MAYBE_RecentlyClosedTabsAndWindowsFromLastSession) { | 354 MAYBE_RecentlyClosedTabsAndWindowsFromLastSession) { |
| 355 DisableSync(); |
| 356 |
278 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( | 357 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( |
279 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); | 358 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); |
280 | 359 |
281 // Add 2 tabs and close them. | 360 // Add 2 tabs and close them. |
282 AddTab(browser(), GURL("http://wnd/tab0")); | 361 AddTab(browser(), GURL("http://wnd/tab0")); |
283 AddTab(browser(), GURL("http://wnd/tab1")); | 362 AddTab(browser(), GURL("http://wnd/tab1")); |
284 browser()->tab_strip_model()->CloseAllTabs(); | 363 browser()->tab_strip_model()->CloseAllTabs(); |
285 | 364 |
286 // Create a SessionService for the profile (profile owns the service) and add | 365 // Create a SessionService for the profile (profile owns the service) and add |
287 // a window with a tab to this session. | 366 // a window with a tab to this session. |
(...skipping 19 matching lines...) Expand all Loading... |
307 SessionServiceFactory::GetForProfile(profile())-> | 386 SessionServiceFactory::GetForProfile(profile())-> |
308 MoveCurrentSessionToLastSession(); | 387 MoveCurrentSessionToLastSession(); |
309 | 388 |
310 // Create a new TabRestoreService so that it'll load the recently closed tabs | 389 // Create a new TabRestoreService so that it'll load the recently closed tabs |
311 // and windows afresh. | 390 // and windows afresh. |
312 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( | 391 TabRestoreServiceFactory::GetInstance()->SetTestingFactory( |
313 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); | 392 profile(), RecentTabsSubMenuModelTest::GetTabRestoreService); |
314 // Let the shutdown of previous TabRestoreService run. | 393 // Let the shutdown of previous TabRestoreService run. |
315 content::RunAllBlockingPoolTasksUntilIdle(); | 394 content::RunAllBlockingPoolTasksUntilIdle(); |
316 | 395 |
317 TestRecentTabsSubMenuModel model(NULL, browser(), NULL); | 396 TestRecentTabsSubMenuModel model(nullptr, browser()); |
318 TestRecentTabsMenuModelDelegate delegate(&model); | 397 TestRecentTabsMenuModelDelegate delegate(&model); |
319 EXPECT_FALSE(delegate.got_changes()); | 398 EXPECT_FALSE(delegate.got_changes()); |
320 | 399 |
321 // Expected menu before tabs/windows from last session are loaded: | 400 // Expected menu before tabs/windows from last session are loaded: |
322 // Menu index Menu items | 401 // Menu index Menu items |
323 // ---------------------------------------------------------------- | 402 // ---------------------------------------------------------------- |
324 // 0 History | 403 // 0 History |
325 // 1 <separator> | 404 // 1 <separator> |
326 // 2 Recently closed header | 405 // 2 Recently closed header |
327 // 3 <separator> | 406 // 3 <separator> |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
389 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(3, &url, &title)); | 468 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(3, &url, &title)); |
390 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); | 469 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); |
391 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); | 470 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); |
392 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(6, &url, &title)); | 471 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(6, &url, &title)); |
393 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(7, &url, &title)); | 472 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(7, &url, &title)); |
394 } | 473 } |
395 | 474 |
396 // Test disabled "Recently closed" header with multiple sessions, multiple | 475 // Test disabled "Recently closed" header with multiple sessions, multiple |
397 // windows, and multiple enabled tabs from other devices. | 476 // windows, and multiple enabled tabs from other devices. |
398 TEST_F(RecentTabsSubMenuModelTest, OtherDevices) { | 477 TEST_F(RecentTabsSubMenuModelTest, OtherDevices) { |
| 478 EnableSync(); |
| 479 |
399 // Tabs are populated in decreasing timestamp. | 480 // Tabs are populated in decreasing timestamp. |
400 base::Time timestamp = base::Time::Now(); | 481 base::Time timestamp = base::Time::Now(); |
401 const base::TimeDelta time_delta = base::TimeDelta::FromMinutes(10); | 482 const base::TimeDelta time_delta = base::TimeDelta::FromMinutes(10); |
402 | 483 |
403 RecentTabsBuilderTestHelper recent_tabs_builder; | 484 RecentTabsBuilderTestHelper recent_tabs_builder; |
404 | 485 |
405 // Create 1st session : 1 window, 3 tabs | 486 // Create 1st session : 1 window, 3 tabs |
406 recent_tabs_builder.AddSession(); | 487 recent_tabs_builder.AddSession(); |
407 recent_tabs_builder.AddWindow(0); | 488 recent_tabs_builder.AddWindow(0); |
408 for (int i = 0; i < 3; ++i) { | 489 for (int i = 0; i < 3; ++i) { |
(...skipping 23 matching lines...) Expand all Loading... |
432 // 1 <separator> | 513 // 1 <separator> |
433 // 2 Recently closed header (disabled) | 514 // 2 Recently closed header (disabled) |
434 // 3 <separator> | 515 // 3 <separator> |
435 // 4 <section header for 1st session> | 516 // 4 <section header for 1st session> |
436 // 5-7 <3 tabs of the only window of session 0> | 517 // 5-7 <3 tabs of the only window of session 0> |
437 // 8 <separator> | 518 // 8 <separator> |
438 // 9 <section header for 2nd session> | 519 // 9 <section header for 2nd session> |
439 // 10 <the only tab of window 0 of session 1> | 520 // 10 <the only tab of window 0 of session 1> |
440 // 11-12 <2 tabs of window 1 of session 2> | 521 // 11-12 <2 tabs of window 1 of session 2> |
441 | 522 |
442 TestRecentTabsSubMenuModel model(NULL, browser(), GetOpenTabsDelegate()); | 523 TestRecentTabsSubMenuModel model(nullptr, browser()); |
443 int num_items = model.GetItemCount(); | 524 int num_items = model.GetItemCount(); |
444 EXPECT_EQ(13, num_items); | 525 EXPECT_EQ(13, num_items); |
445 model.ActivatedAt(0); | 526 model.ActivatedAt(0); |
446 EXPECT_TRUE(model.IsEnabledAt(0)); | 527 EXPECT_TRUE(model.IsEnabledAt(0)); |
447 model.ActivatedAt(1); | 528 model.ActivatedAt(1); |
448 EXPECT_TRUE(model.IsEnabledAt(1)); | 529 EXPECT_TRUE(model.IsEnabledAt(1)); |
449 model.ActivatedAt(2); | 530 model.ActivatedAt(2); |
450 EXPECT_FALSE(model.IsEnabledAt(2)); | 531 EXPECT_FALSE(model.IsEnabledAt(2)); |
451 model.ActivatedAt(3); | 532 model.ActivatedAt(3); |
452 EXPECT_TRUE(model.IsEnabledAt(3)); | 533 EXPECT_TRUE(model.IsEnabledAt(3)); |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
490 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); | 571 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); |
491 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(6, &url, &title)); | 572 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(6, &url, &title)); |
492 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(7, &url, &title)); | 573 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(7, &url, &title)); |
493 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(8, &url, &title)); | 574 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(8, &url, &title)); |
494 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(9, &url, &title)); | 575 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(9, &url, &title)); |
495 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(10, &url, &title)); | 576 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(10, &url, &title)); |
496 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(11, &url, &title)); | 577 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(11, &url, &title)); |
497 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(12, &url, &title)); | 578 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(12, &url, &title)); |
498 } | 579 } |
499 | 580 |
500 // Per http://crbug.com/603744, MaxSessionsAndRecenty fails intermittently on | 581 // Mac doesn't support the dynamic menu. |
501 // windows, linux and mac. | 582 #if defined(OS_MACOSX) |
502 #if defined(OS_WIN) || defined(OS_LINUX) || defined(OS_MACOSX) | 583 #define MAYBE_OtherDevicesDynamicUpdate DISABLED_OtherDevicesDynamicUpdate |
503 #define MAYBE_MaxSessionsAndRecency DISABLED_MaxSessionsAndRecency | |
504 #else | 584 #else |
505 #define MAYBE_MaxSessionsAndRecency MaxSessionsAndRecency | 585 #define MAYBE_OtherDevicesDynamicUpdate OtherDevicesDynamicUpdate |
506 #endif | 586 #endif |
507 TEST_F(RecentTabsSubMenuModelTest, MAYBE_MaxSessionsAndRecency) { | 587 TEST_F(RecentTabsSubMenuModelTest, MAYBE_OtherDevicesDynamicUpdate) { |
| 588 // Create menu with disabled synchronization. |
| 589 DisableSync(); |
| 590 |
| 591 // Before creating menu fill foreign sessions. |
| 592 base::Time update_timestamp = |
| 593 base::Time::Now() - base::TimeDelta::FromMinutes(10); |
| 594 |
| 595 RecentTabsBuilderTestHelper recent_tabs_builder; |
| 596 |
| 597 // Create one session with one window and one tab. |
| 598 recent_tabs_builder.AddSession(); |
| 599 recent_tabs_builder.AddWindow(0); |
| 600 recent_tabs_builder.AddTabWithInfo(0, 0, update_timestamp, base::string16()); |
| 601 |
| 602 RegisterRecentTabs(&recent_tabs_builder); |
| 603 |
| 604 // Verify that data is populated correctly in RecentTabsSubMenuModel. |
| 605 // Expected menu: |
| 606 // Menu index Menu items |
| 607 // ----------------------------------------------------- |
| 608 // 0 History |
| 609 // 1 <separator> |
| 610 // 2 Recently closed header (disabled) |
| 611 // 3 <separator> |
| 612 // 4 No tabs from other Devices |
| 613 |
| 614 TestRecentTabsSubMenuModel model(nullptr, browser()); |
| 615 EXPECT_EQ(5, model.GetItemCount()); |
| 616 model.ActivatedAt(4); |
| 617 EXPECT_FALSE(model.IsEnabledAt(4)); |
| 618 |
| 619 EXPECT_EQ(0, model.enable_count()); |
| 620 EXPECT_EQ(1, model.execute_count()); |
| 621 |
| 622 EXPECT_EQ(nullptr, model.GetLabelFontListAt(4)); |
| 623 |
| 624 std::string url; |
| 625 base::string16 title; |
| 626 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); |
| 627 |
| 628 // Enable synchronization and notify menu that synchronization was enabled. |
| 629 int previous_enable_count = model.enable_count(); |
| 630 int previous_execute_count = model.execute_count(); |
| 631 |
| 632 EnableSync(); |
| 633 NotifySyncEnabled(); |
| 634 |
| 635 // Verify that data is populated correctly in RecentTabsSubMenuModel. |
| 636 // Expected menu: |
| 637 // Menu index Menu items |
| 638 // ----------------------------------------------------- |
| 639 // 0 History |
| 640 // 1 <separator> |
| 641 // 2 Recently closed header (disabled) |
| 642 // 3 <separator> |
| 643 // 4 <section header for 1st session> |
| 644 // 5 <tab of the only window of session 0> |
| 645 |
| 646 EXPECT_EQ(6, model.GetItemCount()); |
| 647 model.ActivatedAt(4); |
| 648 EXPECT_FALSE(model.IsEnabledAt(4)); |
| 649 model.ActivatedAt(5); |
| 650 EXPECT_TRUE(model.IsEnabledAt(5)); |
| 651 |
| 652 EXPECT_EQ(previous_enable_count + 1, model.enable_count()); |
| 653 EXPECT_EQ(previous_execute_count + 2, model.execute_count()); |
| 654 |
| 655 EXPECT_NE(nullptr, model.GetLabelFontListAt(4)); |
| 656 EXPECT_EQ(nullptr, model.GetLabelFontListAt(5)); |
| 657 |
| 658 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); |
| 659 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); |
| 660 |
| 661 // Make changes dynamically. |
| 662 previous_enable_count = model.enable_count(); |
| 663 previous_execute_count = model.execute_count(); |
| 664 |
| 665 update_timestamp = base::Time::Now() - base::TimeDelta::FromMinutes(5); |
| 666 |
| 667 // Add tab to the only window. |
| 668 recent_tabs_builder.AddTabWithInfo(0, 0, update_timestamp, base::string16()); |
| 669 |
| 670 RegisterRecentTabs(&recent_tabs_builder); |
| 671 |
| 672 // Verify that data is populated correctly in RecentTabsSubMenuModel. |
| 673 // Expected menu: |
| 674 // Menu index Menu items |
| 675 // ----------------------------------------------------- |
| 676 // 0 History |
| 677 // 1 <separator> |
| 678 // 2 Recently closed header (disabled) |
| 679 // 3 <separator> |
| 680 // 4 <section header for 1st session> |
| 681 // 5 <new added tab of the only window of session 0> |
| 682 // 6 <tab of the only window of session 0> |
| 683 |
| 684 EXPECT_EQ(7, model.GetItemCount()); |
| 685 model.ActivatedAt(4); |
| 686 EXPECT_FALSE(model.IsEnabledAt(4)); |
| 687 model.ActivatedAt(5); |
| 688 EXPECT_TRUE(model.IsEnabledAt(5)); |
| 689 model.ActivatedAt(6); |
| 690 EXPECT_TRUE(model.IsEnabledAt(6)); |
| 691 |
| 692 EXPECT_EQ(previous_enable_count + 2, model.enable_count()); |
| 693 EXPECT_EQ(previous_execute_count + 3, model.execute_count()); |
| 694 |
| 695 EXPECT_NE(nullptr, model.GetLabelFontListAt(4)); |
| 696 EXPECT_EQ(nullptr, model.GetLabelFontListAt(5)); |
| 697 EXPECT_EQ(nullptr, model.GetLabelFontListAt(6)); |
| 698 |
| 699 EXPECT_FALSE(model.GetURLAndTitleForItemAtIndex(4, &url, &title)); |
| 700 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(5, &url, &title)); |
| 701 EXPECT_TRUE(model.GetURLAndTitleForItemAtIndex(6, &url, &title)); |
| 702 } |
| 703 |
| 704 TEST_F(RecentTabsSubMenuModelTest, MaxSessionsAndRecency) { |
| 705 EnableSync(); |
| 706 |
508 // Create 4 sessions : each session has 1 window with 1 tab each. | 707 // Create 4 sessions : each session has 1 window with 1 tab each. |
509 RecentTabsBuilderTestHelper recent_tabs_builder; | 708 RecentTabsBuilderTestHelper recent_tabs_builder; |
510 for (int s = 0; s < 4; ++s) { | 709 for (int s = 0; s < 4; ++s) { |
511 recent_tabs_builder.AddSession(); | 710 recent_tabs_builder.AddSession(); |
512 recent_tabs_builder.AddWindow(s); | 711 recent_tabs_builder.AddWindow(s); |
513 recent_tabs_builder.AddTab(s, 0); | 712 recent_tabs_builder.AddTab(s, 0); |
514 } | 713 } |
515 RegisterRecentTabs(&recent_tabs_builder); | 714 RegisterRecentTabs(&recent_tabs_builder); |
516 | 715 |
517 // Verify that data is populated correctly in RecentTabsSubMenuModel. | 716 // Verify that data is populated correctly in RecentTabsSubMenuModel. |
518 // Expected menu: | 717 // Expected menu: |
519 // - max sessions is 3, so only 3 most-recent sessions will show. | 718 // - max sessions is 3, so only 3 most-recent sessions will show. |
520 // Menu index Menu items | 719 // Menu index Menu items |
521 // ---------------------------------------------------------- | 720 // ---------------------------------------------------------- |
522 // 0 History | 721 // 0 History |
523 // 1 <separator> | 722 // 1 <separator> |
524 // 2 Recently closed header (disabled) | 723 // 2 Recently closed header (disabled) |
525 // 3 <separator> | 724 // 3 <separator> |
526 // 4 <section header for 1st session> | 725 // 4 <section header for 1st session> |
527 // 5 <the only tab of the only window of session 3> | 726 // 5 <the only tab of the only window of session 3> |
528 // 6 <separator> | 727 // 6 <separator> |
529 // 7 <section header for 2nd session> | 728 // 7 <section header for 2nd session> |
530 // 8 <the only tab of the only window of session 2> | 729 // 8 <the only tab of the only window of session 2> |
531 // 9 <separator> | 730 // 9 <separator> |
532 // 10 <section header for 3rd session> | 731 // 10 <section header for 3rd session> |
533 // 11 <the only tab of the only window of session 1> | 732 // 11 <the only tab of the only window of session 1> |
534 | 733 |
535 TestRecentTabsSubMenuModel model(NULL, browser(), GetOpenTabsDelegate()); | 734 TestRecentTabsSubMenuModel model(nullptr, browser()); |
536 int num_items = model.GetItemCount(); | 735 int num_items = model.GetItemCount(); |
537 EXPECT_EQ(12, num_items); | 736 EXPECT_EQ(12, num_items); |
538 | 737 |
539 std::vector<base::string16> tab_titles = | 738 std::vector<base::string16> tab_titles = |
540 recent_tabs_builder.GetTabTitlesSortedByRecency(); | 739 recent_tabs_builder.GetTabTitlesSortedByRecency(); |
541 EXPECT_EQ(tab_titles[0], model.GetLabelAt(5)); | 740 EXPECT_EQ(tab_titles[0], model.GetLabelAt(5)); |
542 EXPECT_EQ(tab_titles[1], model.GetLabelAt(8)); | 741 EXPECT_EQ(tab_titles[1], model.GetLabelAt(8)); |
543 EXPECT_EQ(tab_titles[2], model.GetLabelAt(11)); | 742 EXPECT_EQ(tab_titles[2], model.GetLabelAt(11)); |
544 } | 743 } |
545 | 744 |
546 TEST_F(RecentTabsSubMenuModelTest, MaxTabsPerSessionAndRecency) { | 745 TEST_F(RecentTabsSubMenuModelTest, MaxTabsPerSessionAndRecency) { |
| 746 EnableSync(); |
| 747 |
547 // Create a session: 2 windows with 5 tabs each. | 748 // Create a session: 2 windows with 5 tabs each. |
548 RecentTabsBuilderTestHelper recent_tabs_builder; | 749 RecentTabsBuilderTestHelper recent_tabs_builder; |
549 recent_tabs_builder.AddSession(); | 750 recent_tabs_builder.AddSession(); |
550 for (int w = 0; w < 2; ++w) { | 751 for (int w = 0; w < 2; ++w) { |
551 recent_tabs_builder.AddWindow(0); | 752 recent_tabs_builder.AddWindow(0); |
552 for (int t = 0; t < 5; ++t) | 753 for (int t = 0; t < 5; ++t) |
553 recent_tabs_builder.AddTab(0, w); | 754 recent_tabs_builder.AddTab(0, w); |
554 } | 755 } |
555 RegisterRecentTabs(&recent_tabs_builder); | 756 RegisterRecentTabs(&recent_tabs_builder); |
556 | 757 |
557 // Verify that data is populated correctly in RecentTabsSubMenuModel. | 758 // Verify that data is populated correctly in RecentTabsSubMenuModel. |
558 // Expected menu: | 759 // Expected menu: |
559 // - max tabs per session is 4, so only 4 most-recent tabs will show, | 760 // - max tabs per session is 4, so only 4 most-recent tabs will show, |
560 // independent of which window they came from. | 761 // independent of which window they came from. |
561 // Menu index Menu items | 762 // Menu index Menu items |
562 // --------------------------------------------- | 763 // --------------------------------------------- |
563 // 0 History | 764 // 0 History |
564 // 1 <separator> | 765 // 1 <separator> |
565 // 2 Recently closed header (disabled) | 766 // 2 Recently closed header (disabled) |
566 // 3 <separator> | 767 // 3 <separator> |
567 // 4 <section header for session> | 768 // 4 <section header for session> |
568 // 5-8 <4 most-recent tabs of session> | 769 // 5-8 <4 most-recent tabs of session> |
569 | 770 |
570 TestRecentTabsSubMenuModel model(NULL, browser(), GetOpenTabsDelegate()); | 771 TestRecentTabsSubMenuModel model(nullptr, browser()); |
571 int num_items = model.GetItemCount(); | 772 int num_items = model.GetItemCount(); |
572 EXPECT_EQ(9, num_items); | 773 EXPECT_EQ(9, num_items); |
573 | 774 |
574 std::vector<base::string16> tab_titles = | 775 std::vector<base::string16> tab_titles = |
575 recent_tabs_builder.GetTabTitlesSortedByRecency(); | 776 recent_tabs_builder.GetTabTitlesSortedByRecency(); |
576 for (int i = 0; i < 4; ++i) | 777 for (int i = 0; i < 4; ++i) |
577 EXPECT_EQ(tab_titles[i], model.GetLabelAt(i + 5)); | 778 EXPECT_EQ(tab_titles[i], model.GetLabelAt(i + 5)); |
578 } | 779 } |
579 | 780 |
580 TEST_F(RecentTabsSubMenuModelTest, MaxWidth) { | 781 TEST_F(RecentTabsSubMenuModelTest, MaxWidth) { |
| 782 EnableSync(); |
| 783 |
581 // Create 1 session with 1 window and 1 tab. | 784 // Create 1 session with 1 window and 1 tab. |
582 RecentTabsBuilderTestHelper recent_tabs_builder; | 785 RecentTabsBuilderTestHelper recent_tabs_builder; |
583 recent_tabs_builder.AddSession(); | 786 recent_tabs_builder.AddSession(); |
584 recent_tabs_builder.AddWindow(0); | 787 recent_tabs_builder.AddWindow(0); |
585 recent_tabs_builder.AddTab(0, 0); | 788 recent_tabs_builder.AddTab(0, 0); |
586 RegisterRecentTabs(&recent_tabs_builder); | 789 RegisterRecentTabs(&recent_tabs_builder); |
587 | 790 |
588 // Menu index Menu items | 791 // Menu index Menu items |
589 // ---------------------------------------------------------- | 792 // ---------------------------------------------------------- |
590 // 0 History | 793 // 0 History |
591 // 1 <separator> | 794 // 1 <separator> |
592 // 2 Recently closed header (disabled) | 795 // 2 Recently closed header (disabled) |
593 // 3 <separator> | 796 // 3 <separator> |
594 // 4 <section header for 1st session> | 797 // 4 <section header for 1st session> |
595 // 5 <the only tab of the only window of session 1> | 798 // 5 <the only tab of the only window of session 1> |
596 | 799 |
597 TestRecentTabsSubMenuModel model(NULL, browser(), GetOpenTabsDelegate()); | 800 TestRecentTabsSubMenuModel model(nullptr, browser()); |
598 EXPECT_EQ(6, model.GetItemCount()); | 801 EXPECT_EQ(6, model.GetItemCount()); |
599 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(2)); | 802 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(2)); |
600 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(3)); | 803 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(3)); |
601 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(4)); | 804 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(4)); |
602 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(5)); | 805 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(5)); |
603 } | 806 } |
604 | 807 |
605 TEST_F(RecentTabsSubMenuModelTest, MaxWidthNoDevices) { | 808 TEST_F(RecentTabsSubMenuModelTest, MaxWidthNoDevices) { |
| 809 DisableSync(); |
| 810 |
606 // Expected menu: | 811 // Expected menu: |
607 // Menu index Menu items | 812 // Menu index Menu items |
608 // -------------------------------------------- | 813 // -------------------------------------------- |
609 // 0 History | 814 // 0 History |
610 // 1 <separator> | 815 // 1 <separator> |
611 // 2 Recently closed heaer (disabled) | 816 // 2 Recently closed heaer (disabled) |
612 // 3 <separator> | 817 // 3 <separator> |
613 // 4 No tabs from other Devices | 818 // 4 No tabs from other Devices |
614 | 819 |
615 TestRecentTabsSubMenuModel model(NULL, browser(), NULL); | 820 TestRecentTabsSubMenuModel model(nullptr, browser()); |
616 EXPECT_EQ(5, model.GetItemCount()); | 821 EXPECT_EQ(5, model.GetItemCount()); |
617 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(2)); | 822 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(2)); |
618 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(3)); | 823 EXPECT_NE(-1, model.GetMaxWidthForItemAtIndex(3)); |
619 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(4)); | 824 EXPECT_EQ(-1, model.GetMaxWidthForItemAtIndex(4)); |
620 } | 825 } |
OLD | NEW |