blob: 902f5b625583329ed26fb3cb7ff670738950dc19 [file] [log] [blame]
// Copyright 2020 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef IOS_CHROME_BROWSER_APP_LAUNCHER_APP_LAUNCHER_BROWSER_AGENT_H_
#define IOS_CHROME_BROWSER_APP_LAUNCHER_APP_LAUNCHER_BROWSER_AGENT_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/shared/model/browser/browser_user_data.h"
#import "ios/chrome/browser/tabs/tab_helper_delegate_installer.h"
class OverlayRequestQueue;
// A browser agent that manages opening external apps for navigations that occur
// within one of the Browser's WebStates.
class AppLauncherBrowserAgent
: public BrowserUserData<AppLauncherBrowserAgent> {
public:
~AppLauncherBrowserAgent() override;
private:
friend class BrowserUserData<AppLauncherBrowserAgent>;
explicit AppLauncherBrowserAgent(Browser* browser);
// Helper object that handles delegated AppLauncherTabHelper functionality.
class TabHelperDelegate : public AppLauncherTabHelperDelegate {
public:
explicit TabHelperDelegate(Browser* browser);
~TabHelperDelegate() override;
private:
// AppLauncherTabHelperDelegate:
void LaunchAppForTabHelper(AppLauncherTabHelper* tab_helper,
const GURL& url,
bool link_transition,
base::OnceClosure completion) override;
void ShowRepeatedAppLaunchAlert(
AppLauncherTabHelper* tab_helper,
base::OnceCallback<void(bool)> completion) override;
// Returns the OverlayRequestQueue to use for app launch dialogs from
// `web_state`. Returns the queue for `web_state`'s opener if `web_state`
// is expected to be closed before the app launcher dialog can be shown.
OverlayRequestQueue* GetQueueForAppLaunchDialog(web::WebState* web_state);
// The Browser. Used to fetch the appropriate request queue for app
// launcher dialogs.
Browser* browser_ = nullptr;
};
// Handler for app launches in the Browser.
TabHelperDelegate tab_helper_delegate_;
// The tab helper delegate installer.
TabHelperDelegateInstaller<AppLauncherTabHelper, AppLauncherTabHelperDelegate>
tab_helper_delegate_installer_;
// BrowserUserData key.
BROWSER_USER_DATA_KEY_DECL();
};
#endif // IOS_CHROME_BROWSER_APP_LAUNCHER_APP_LAUNCHER_BROWSER_AGENT_H_