#include "chrome/browser/apps/link_capturing/web_apps_intent_picker_delegate.h"
#include <map>
#include <string>
#include "base/containers/flat_map.h"
#include "base/feature_list.h"
#include "base/metrics/histogram_functions.h"
#include "base/metrics/user_metrics.h"
#include "base/metrics/user_metrics_action.h"
#include "chrome/browser/apps/link_capturing/apps_intent_picker_delegate.h"
#include "chrome/browser/apps/link_capturing/enable_link_capturing_infobar_delegate.h"
#include "chrome/browser/apps/link_capturing/intent_picker_info.h"
#include "chrome/browser/apps/link_capturing/link_capturing_features.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/web_applications/web_app_icon_manager.h"
#include "chrome/browser/web_applications/web_app_install_info.h"
#include "chrome/browser/web_applications/web_app_provider.h"
#include "chrome/browser/web_applications/web_app_registrar.h"
#include "chrome/browser/web_applications/web_app_ui_manager.h"
#include "chrome/browser/web_applications/web_app_utils.h"
#include "chrome/common/chrome_features.h"
#include "components/webapps/common/web_app_id.h"
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/base/models/image_model.h"
#include "ui/gfx/image/image.h"
#if BUILDFLAG(IS_MAC)
#include "base/task/thread_pool.h"
#include "chrome/browser/apps/link_capturing/mac_intent_picker_helpers.h"
#endif
namespace apps {
WebAppsIntentPickerDelegate::WebAppsIntentPickerDelegate(Profile* profile)
: … { … }
WebAppsIntentPickerDelegate::~WebAppsIntentPickerDelegate() = default;
bool WebAppsIntentPickerDelegate::ShouldShowIntentPickerWithApps() { … }
void WebAppsIntentPickerDelegate::FindAllAppsForUrl(
const GURL& url,
IntentPickerAppsCallback apps_callback) { … }
bool WebAppsIntentPickerDelegate::IsPreferredAppForSupportedLinks(
const webapps::AppId& app_id) { … }
void WebAppsIntentPickerDelegate::LoadSingleAppIcon(
PickerEntryType entry_type,
const std::string& app_id,
int size_in_dep,
IconLoadedCallback icon_loaded_callback) { … }
void WebAppsIntentPickerDelegate::RecordIntentPickerIconEvent(
apps::IntentPickerIconEvent event) { … }
bool WebAppsIntentPickerDelegate::ShouldLaunchAppDirectly(
const GURL& url,
const std::string& app_id,
PickerEntryType entry_type) { … }
void WebAppsIntentPickerDelegate::RecordOutputMetrics(
PickerEntryType entry_type,
IntentPickerCloseReason close_reason,
bool should_persist,
bool should_launch_app) { … }
void WebAppsIntentPickerDelegate::PersistIntentPreferencesForApp(
PickerEntryType entry_type,
const std::string& app_id) { … }
void WebAppsIntentPickerDelegate::LaunchApp(content::WebContents* web_contents,
const GURL& url,
const std::string& launch_name,
PickerEntryType entry_type) { … }
#if BUILDFLAG(IS_MAC)
void WebAppsIntentPickerDelegate::CacheMacAppInfoAndPostFinalCallback(
IntentPickerAppsCallback apps_callback,
std::vector<IntentPickerAppInfo> apps,
MacAppInfo mac_app_info) {
mac_app_info_ = mac_app_info;
if (mac_app_info_.has_value()) {
apps.emplace_back(mac_app_info_.value());
}
base::SequencedTaskRunner::GetCurrentDefault()->PostTask(
FROM_HERE, base::BindOnce(std::move(apps_callback), std::move(apps)));
}
#endif
}