blob: 036437f279efd4c086b3b6b5ddbbc2114201c00b [file] [log] [blame]
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#import "ios/chrome/browser/tabs/tab_helper_util.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
#error "This file requires ARC support."
#endif
#import "components/favicon/ios/web_favicon_driver.h"
#include "components/history/core/browser/top_sites.h"
#import "components/history/ios/browser/web_state_top_sites_observer.h"
#include "components/keyed_service/core/service_access_type.h"
#import "components/signin/ios/browser/account_consistency_service.h"
#include "ios/chrome/browser/bookmarks/bookmark_model_factory.h"
#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
#include "ios/chrome/browser/favicon/favicon_service_factory.h"
#import "ios/chrome/browser/find_in_page/find_tab_helper.h"
#include "ios/chrome/browser/history/history_service_factory.h"
#include "ios/chrome/browser/history/top_sites_factory.h"
#import "ios/chrome/browser/infobars/infobar_manager_impl.h"
#include "ios/chrome/browser/reading_list/reading_list_model_factory.h"
#import "ios/chrome/browser/reading_list/reading_list_web_state_observer.h"
#import "ios/chrome/browser/sessions/ios_chrome_session_tab_helper.h"
#import "ios/chrome/browser/signin/account_consistency_service_factory.h"
#import "ios/chrome/browser/ssl/ios_security_state_tab_helper.h"
#import "ios/chrome/browser/store_kit/store_kit_tab_helper.h"
#import "ios/chrome/browser/sync/ios_chrome_synced_tab_delegate.h"
#import "ios/chrome/browser/tabs/legacy_tab_helper.h"
#import "ios/chrome/browser/tabs/tab.h"
#import "ios/chrome/browser/tabs/tab_private.h"
#import "ios/chrome/browser/translate/chrome_ios_translate_client.h"
#import "ios/chrome/browser/web/blocked_popup_tab_helper.h"
#import "ios/chrome/browser/web/network_activity_indicator_tab_helper.h"
#import "ios/chrome/browser/web/page_placeholder_tab_helper.h"
#import "ios/chrome/browser/web/repost_form_tab_helper.h"
#import "ios/chrome/browser/web/sad_tab_tab_helper.h"
#import "ios/chrome/browser/web/tab_id_tab_helper.h"
#import "ios/public/provider/chrome/browser/chrome_browser_provider.h"
#import "ios/web/public/web_state/web_state.h"
void AttachTabHelpers(web::WebState* web_state) {
// TabIdHelper sets up the tab ID which is required for the creation of the
// Tab by LegacyTabHelper.
TabIdTabHelper::CreateForWebState(web_state);
LegacyTabHelper::CreateForWebState(web_state);
Tab* tab = LegacyTabHelper::GetTabForWebState(web_state);
DCHECK(tab);
ios::ChromeBrowserState* browser_state =
ios::ChromeBrowserState::FromBrowserState(web_state->GetBrowserState());
// IOSChromeSessionTabHelper sets up the session ID used by other helpers,
// so it needs to be created before them.
IOSChromeSessionTabHelper::CreateForWebState(web_state);
NetworkActivityIndicatorTabHelper::CreateForWebState(web_state, tab.tabId);
IOSChromeSyncedTabDelegate::CreateForWebState(web_state);
InfoBarManagerImpl::CreateForWebState(web_state);
IOSSecurityStateTabHelper::CreateForWebState(web_state);
RepostFormTabHelper::CreateForWebState(web_state);
BlockedPopupTabHelper::CreateForWebState(web_state);
FindTabHelper::CreateForWebState(web_state, tab.findInPageControllerDelegate);
StoreKitTabHelper::CreateForWebState(web_state);
SadTabTabHelper::CreateForWebState(web_state);
PagePlaceholderTabHelper::CreateForWebState(web_state, tab);
ReadingListModel* model =
ReadingListModelFactory::GetForBrowserState(browser_state);
ReadingListWebStateObserver::FromWebState(web_state, model);
if (AccountConsistencyService* account_consistency_service =
ios::AccountConsistencyServiceFactory::GetForBrowserState(
browser_state)) {
account_consistency_service->SetWebStateHandler(web_state, tab);
}
ChromeIOSTranslateClient::CreateForWebState(web_state);
ios::ChromeBrowserState* original_browser_state =
browser_state->GetOriginalChromeBrowserState();
favicon::WebFaviconDriver::CreateForWebState(
web_state,
ios::FaviconServiceFactory::GetForBrowserState(
original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
ios::HistoryServiceFactory::GetForBrowserState(
original_browser_state, ServiceAccessType::IMPLICIT_ACCESS),
ios::BookmarkModelFactory::GetForBrowserState(original_browser_state));
history::WebStateTopSitesObserver::CreateForWebState(
web_state,
ios::TopSitesFactory::GetForBrowserState(original_browser_state).get());
// Allow the embedder to attach tab helpers.
ios::GetChromeBrowserProvider()->AttachTabHelpers(web_state, tab);
// Allow the Tab to attach tab helper like objects (all those objects should
// really be tab helpers and created above).
[tab attachTabHelpers];
}