Commit f54f376f authored by Kurt Horimoto's avatar Kurt Horimoto Committed by Commit Bot

[iOS] Use TabHelperDelegateInstaller for AppLauncherBrowserAgent.

Bug: none
Change-Id: Icc5945a0defa2e488275fa2e396c8e6c616b4a14
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2145956
Commit-Queue: Kurt Horimoto <kkhorimoto@chromium.org>
Reviewed-by: default avatarMark Cogan <marq@chromium.org>
Cr-Commit-Position: refs/heads/master@{#759419}
parent ec77774a
......@@ -28,6 +28,7 @@ source_set("app_launcher") {
"//ios/chrome/browser/overlays",
"//ios/chrome/browser/overlays/public/web_content_area",
"//ios/chrome/browser/reading_list",
"//ios/chrome/browser/tabs",
"//ios/chrome/browser/u2f",
"//ios/chrome/browser/web_state_list",
"//ios/public/provider/chrome/browser",
......
......@@ -6,10 +6,10 @@
#define IOS_CHROME_BROWSER_APP_LAUNCHER_APP_LAUNCHER_BROWSER_AGENT_H_
#include "base/scoped_observer.h"
#import "ios/chrome/browser/app_launcher/app_launcher_tab_helper.h"
#import "ios/chrome/browser/app_launcher/app_launcher_tab_helper_delegate.h"
#import "ios/chrome/browser/main/browser_observer.h"
#import "ios/chrome/browser/main/browser_user_data.h"
#import "ios/chrome/browser/web_state_list/web_state_list_observer.h"
#import "ios/chrome/browser/tabs/tab_helper_delegate_installer.h"
class OverlayRequestQueue;
......@@ -49,57 +49,11 @@ class AppLauncherBrowserAgent
WebStateList* web_state_list_ = nullptr;
};
// Helper object that sets up the delegates for all AppLauncherTabHelpers in
// the Browser's WebStateList.
class TabHelperDelegateInstaller : public WebStateListObserver {
public:
TabHelperDelegateInstaller(AppLauncherTabHelperDelegate* delegate,
WebStateList* web_state_list);
~TabHelperDelegateInstaller() override;
private:
// WebStateListObserver:
void WebStateInsertedAt(WebStateList* web_state_list,
web::WebState* web_state,
int index,
bool activating) override;
void WebStateReplacedAt(WebStateList* web_state_list,
web::WebState* old_web_state,
web::WebState* new_web_state,
int index) override;
void WillDetachWebStateAt(WebStateList* web_state_list,
web::WebState* web_state,
int index) override;
// The delegate that is installed for each WebState in the WebStateList.
AppLauncherTabHelperDelegate* delegate_ = nullptr;
};
// Helper object that unhooks the delegate installer when the Browser is
// destroyed.
class BrowserShutdownHelper : public BrowserObserver {
public:
BrowserShutdownHelper(Browser* browser,
WebStateListObserver* web_state_list_observer);
~BrowserShutdownHelper() override;
private:
// BrowserObserver:
void BrowserDestroyed(Browser* browser) override;
// The WebStateListObserver to detach upon destruction.
WebStateListObserver* web_state_list_observer_ = nullptr;
// Scoped observer for the Browser.
ScopedObserver<Browser, BrowserObserver> scoped_observer_{this};
};
// Handler for app launches in the Browser.
TabHelperDelegate tab_helper_delegate_;
// Installer for tab helper delegates.
TabHelperDelegateInstaller tab_helper_delegate_installer_;
// Helper object for cleaning up the BrowserAgent when the Browser is
// destroyed.
BrowserShutdownHelper shutdown_helper_;
// The tab helper delegate installer.
TabHelperDelegateInstaller<AppLauncherTabHelper, AppLauncherTabHelperDelegate>
tab_helper_delegate_installer_;
// BrowserUserData key.
BROWSER_USER_DATA_KEY_DECL();
};
......
......@@ -74,9 +74,7 @@ void LaunchExternalApp(const GURL url, bool user_accepted = true) {
AppLauncherBrowserAgent::AppLauncherBrowserAgent(Browser* browser)
: tab_helper_delegate_(browser->GetWebStateList()),
tab_helper_delegate_installer_(&tab_helper_delegate_,
browser->GetWebStateList()),
shutdown_helper_(browser, &tab_helper_delegate_installer_) {}
tab_helper_delegate_installer_(&tab_helper_delegate_, browser) {}
AppLauncherBrowserAgent::~AppLauncherBrowserAgent() = default;
......@@ -159,72 +157,3 @@ AppLauncherBrowserAgent::TabHelperDelegate::GetQueueForAppLaunchDialog(
return OverlayRequestQueue::FromWebState(queue_web_state,
OverlayModality::kWebContentArea);
}
#pragma mark - AppLauncherBrowserAgent::TabHelperDelegateInstaller
AppLauncherBrowserAgent::TabHelperDelegateInstaller::TabHelperDelegateInstaller(
AppLauncherTabHelperDelegate* delegate,
WebStateList* web_state_list)
: delegate_(delegate) {
DCHECK(delegate_);
DCHECK(web_state_list);
for (int i = 0; i < web_state_list->count(); ++i) {
AppLauncherTabHelper::FromWebState(web_state_list->GetWebStateAt(i))
->SetDelegate(delegate_);
}
}
AppLauncherBrowserAgent::TabHelperDelegateInstaller::
~TabHelperDelegateInstaller() = default;
#pragma mark WebStateListObserver
void AppLauncherBrowserAgent::TabHelperDelegateInstaller::WebStateInsertedAt(
WebStateList* web_state_list,
web::WebState* web_state,
int index,
bool activating) {
AppLauncherTabHelper::FromWebState(web_state)->SetDelegate(delegate_);
}
void AppLauncherBrowserAgent::TabHelperDelegateInstaller::WebStateReplacedAt(
WebStateList* web_state_list,
web::WebState* old_web_state,
web::WebState* new_web_state,
int index) {
AppLauncherTabHelper::FromWebState(old_web_state)->SetDelegate(nullptr);
AppLauncherTabHelper::FromWebState(new_web_state)->SetDelegate(delegate_);
}
void AppLauncherBrowserAgent::TabHelperDelegateInstaller::WillDetachWebStateAt(
WebStateList* web_state_list,
web::WebState* web_state,
int index) {
AppLauncherTabHelper::FromWebState(web_state)->SetDelegate(nullptr);
}
#pragma mark - AppLauncherBrowserAgent::BrowserShutdownHelper
AppLauncherBrowserAgent::BrowserShutdownHelper::BrowserShutdownHelper(
Browser* browser,
WebStateListObserver* web_state_list_observer)
: web_state_list_observer_(web_state_list_observer) {
DCHECK(browser);
DCHECK(web_state_list_observer_);
scoped_observer_.Add(browser);
browser->GetWebStateList()->AddObserver(web_state_list_observer_);
}
AppLauncherBrowserAgent::BrowserShutdownHelper::~BrowserShutdownHelper() {
// The WebStateListObserver must be detached before destruction.
DCHECK(!web_state_list_observer_);
}
#pragma mark BrowserObserver
void AppLauncherBrowserAgent::BrowserShutdownHelper::BrowserDestroyed(
Browser* browser) {
scoped_observer_.Remove(browser);
browser->GetWebStateList()->RemoveObserver(web_state_list_observer_);
web_state_list_observer_ = nullptr;
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment