| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #import "ios/chrome/app/main_controller.h" |
| |
| #import "base/test/ios/wait_util.h" |
| #import "components/open_from_clipboard/clipboard_recent_content.h" |
| #import "components/open_from_clipboard/fake_clipboard_recent_content.h" |
| #import "ios/chrome/app/application_delegate/app_state.h" |
| #import "ios/chrome/browser/bookmarks/model/account_bookmark_model_factory.h" |
| #import "ios/chrome/browser/bookmarks/model/bookmark_model_factory.h" |
| #import "ios/chrome/browser/bookmarks/model/legacy_bookmark_model.h" |
| #import "ios/chrome/browser/bookmarks/model/legacy_bookmark_model_test_helpers.h" |
| #import "ios/chrome/browser/bookmarks/model/local_or_syncable_bookmark_model_factory.h" |
| #import "ios/chrome/browser/reading_list/model/reading_list_model_factory.h" |
| #import "ios/chrome/browser/reading_list/model/reading_list_test_utils.h" |
| #import "ios/chrome/browser/sessions/fake_tab_restore_service.h" |
| #import "ios/chrome/browser/sessions/ios_chrome_tab_restore_service_factory.h" |
| #import "ios/chrome/browser/shared/model/browser_state/test_chrome_browser_state.h" |
| #import "ios/chrome/browser/web_state_list/model/web_usage_enabler/web_usage_enabler_browser_agent.h" |
| #import "ios/web/public/test/web_task_environment.h" |
| #import "testing/gmock/include/gmock/gmock.h" |
| #import "testing/platform_test.h" |
| #import "third_party/ocmock/OCMock/OCMock.h" |
| #import "third_party/ocmock/gtest_support.h" |
| |
| // Tests MainController. |
| class MainControllerTest : public PlatformTest { |
| protected: |
| MainControllerTest() { |
| ClipboardRecentContent::SetInstance( |
| std::make_unique<FakeClipboardRecentContent>()); |
| |
| TestChromeBrowserState::Builder builder; |
| builder.AddTestingFactory(IOSChromeTabRestoreServiceFactory::GetInstance(), |
| FakeTabRestoreService::GetTestingFactory()); |
| builder.AddTestingFactory( |
| ios::LocalOrSyncableBookmarkModelFactory::GetInstance(), |
| ios::LocalOrSyncableBookmarkModelFactory::GetDefaultFactory()); |
| builder.AddTestingFactory( |
| ReadingListModelFactory::GetInstance(), |
| base::BindRepeating(&BuildReadingListModelWithFakeStorage, |
| std::vector<scoped_refptr<ReadingListEntry>>())); |
| builder.AddTestingFactory(ios::BookmarkModelFactory::GetInstance(), |
| ios::BookmarkModelFactory::GetDefaultFactory()); |
| |
| browser_state_ = builder.Build(); |
| |
| LegacyBookmarkModel* bookmarks_model = |
| ios::LocalOrSyncableBookmarkModelFactory::GetForBrowserState( |
| browser_state_.get()); |
| WaitForLegacyBookmarkModelToLoad(bookmarks_model); |
| LegacyBookmarkModel* account_bookmark_model = |
| ios::AccountBookmarkModelFactory::GetForBrowserState( |
| browser_state_.get()); |
| WaitForLegacyBookmarkModelToLoad(account_bookmark_model); |
| |
| app_state_ = [[AppState alloc] initWithStartupInformation:nil]; |
| } |
| |
| ~MainControllerTest() override { |
| ClipboardRecentContent::SetInstance(nullptr); |
| } |
| |
| MainController* CreateMainController() { |
| MainController* main_controller = [[MainController alloc] init]; |
| main_controller.appState = app_state_; |
| return main_controller; |
| } |
| |
| web::WebTaskEnvironment task_environment_; |
| AppState* app_state_; |
| std::unique_ptr<TestChromeBrowserState> browser_state_; |
| }; |
| |
| // Tests removing the browsing data with no interface provider. There is no |
| // clear repro steps for this issue but it is happening in the wild. Prevent |
| // regression on crbug.com/1522188. |
| TEST_F(MainControllerTest, RemoveBrowsingDataNoInterfaceProvider) { |
| MainController* main_controller = CreateMainController(); |
| |
| base::RunLoop run_loop; |
| [main_controller |
| removeBrowsingDataForBrowserState:browser_state_.get() |
| timePeriod:browsing_data::TimePeriod::ALL_TIME |
| removeMask:BrowsingDataRemoveMask::REMOVE_ALL |
| completionBlock:base::CallbackToBlock( |
| run_loop.QuitClosure())]; |
| run_loop.Run(); |
| } |