Commit 3954e294 authored by nancy's avatar nancy Committed by Commit Bot

Modify ExtensionApps to remove the dependency on LaunchService

Modify ExtensionApps to call UI Extensions application_launch API
OpenApplication directly to launch apps.

Add extension enable flow to LaunchAppWithIntent.

Move RecordUninstallCanceledAction after construction and deconstruction
functions following coding convention.

BUG=1061843

Change-Id: Iee27aecd57d4c0cf955bafb4085cad01fe94fe8e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2114596
Commit-Queue: Nancy Wang <nancylingwang@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#753097}
parent 661a646f
...@@ -4,7 +4,6 @@ ...@@ -4,7 +4,6 @@
#include "chrome/browser/apps/app_service/extension_apps.h" #include "chrome/browser/apps/app_service/extension_apps.h"
#include <memory>
#include <utility> #include <utility>
#include <vector> #include <vector>
...@@ -15,6 +14,7 @@ ...@@ -15,6 +14,7 @@
#include "base/bind.h" #include "base/bind.h"
#include "base/bind_helpers.h" #include "base/bind_helpers.h"
#include "base/callback.h" #include "base/callback.h"
#include "base/feature_list.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
...@@ -23,7 +23,6 @@ ...@@ -23,7 +23,6 @@
#include "base/strings/stringprintf.h" #include "base/strings/stringprintf.h"
#include "chrome/browser/apps/app_service/app_icon_factory.h" #include "chrome/browser/apps/app_service/app_icon_factory.h"
#include "chrome/browser/apps/app_service/menu_util.h" #include "chrome/browser/apps/app_service/menu_util.h"
#include "chrome/browser/apps/launch_service/launch_service.h"
#include "chrome/browser/chromeos/arc/arc_util.h" #include "chrome/browser/chromeos/arc/arc_util.h"
#include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_interface.h" #include "chrome/browser/chromeos/child_accounts/time_limits/app_time_limit_interface.h"
#include "chrome/browser/chromeos/crostini/crostini_util.h" #include "chrome/browser/chromeos/crostini/crostini_util.h"
...@@ -45,9 +44,11 @@ ...@@ -45,9 +44,11 @@
#include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/browser_list.h"
#include "chrome/browser/ui/chrome_pages.h" #include "chrome/browser/ui/chrome_pages.h"
#include "chrome/browser/ui/extensions/app_launch_params.h" #include "chrome/browser/ui/extensions/app_launch_params.h"
#include "chrome/browser/ui/extensions/application_launch.h"
#include "chrome/browser/ui/extensions/extension_enable_flow.h" #include "chrome/browser/ui/extensions/extension_enable_flow.h"
#include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h" #include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
#include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h" #include "chrome/browser/web_applications/components/externally_installed_web_app_prefs.h"
#include "chrome/browser/web_applications/components/web_app_constants.h" #include "chrome/browser/web_applications/components/web_app_constants.h"
#include "chrome/browser/web_applications/components/web_app_helpers.h" #include "chrome/browser/web_applications/components/web_app_helpers.h"
...@@ -183,9 +184,7 @@ class ExtensionAppsEnableFlow : public ExtensionEnableFlowDelegate { ...@@ -183,9 +184,7 @@ class ExtensionAppsEnableFlow : public ExtensionEnableFlowDelegate {
~ExtensionAppsEnableFlow() override {} ~ExtensionAppsEnableFlow() override {}
using Callback = base::OnceCallback<void()>; void Run(base::OnceClosure callback) {
void Run(Callback callback) {
callback_ = std::move(callback); callback_ = std::move(callback);
if (!flow_) { if (!flow_) {
...@@ -210,34 +209,12 @@ class ExtensionAppsEnableFlow : public ExtensionEnableFlowDelegate { ...@@ -210,34 +209,12 @@ class ExtensionAppsEnableFlow : public ExtensionEnableFlowDelegate {
Profile* profile_; Profile* profile_;
std::string app_id_; std::string app_id_;
Callback callback_; base::OnceClosure callback_;
std::unique_ptr<ExtensionEnableFlow> flow_; std::unique_ptr<ExtensionEnableFlow> flow_;
DISALLOW_COPY_AND_ASSIGN(ExtensionAppsEnableFlow); DISALLOW_COPY_AND_ASSIGN(ExtensionAppsEnableFlow);
}; };
void ExtensionApps::RecordUninstallCanceledAction(Profile* profile,
const std::string& app_id) {
const extensions::Extension* extension =
extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension(
app_id);
if (!extension) {
return;
}
if (extension->from_bookmark()) {
UMA_HISTOGRAM_ENUMERATION(
"Webapp.UninstallDialogAction",
extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED,
extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST);
} else {
UMA_HISTOGRAM_ENUMERATION(
"Extensions.UninstallDialogAction",
extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED,
extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST);
}
}
ExtensionApps::ExtensionApps( ExtensionApps::ExtensionApps(
const mojo::Remote<apps::mojom::AppService>& app_service, const mojo::Remote<apps::mojom::AppService>& app_service,
Profile* profile, Profile* profile,
...@@ -263,6 +240,29 @@ ExtensionApps::~ExtensionApps() { ...@@ -263,6 +240,29 @@ ExtensionApps::~ExtensionApps() {
} }
} }
// static
void ExtensionApps::RecordUninstallCanceledAction(Profile* profile,
const std::string& app_id) {
const extensions::Extension* extension =
extensions::ExtensionRegistry::Get(profile)->GetInstalledExtension(
app_id);
if (!extension) {
return;
}
if (extension->from_bookmark()) {
UMA_HISTOGRAM_ENUMERATION(
"Webapp.UninstallDialogAction",
extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED,
extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST);
} else {
UMA_HISTOGRAM_ENUMERATION(
"Extensions.UninstallDialogAction",
extensions::ExtensionUninstallDialog::CLOSE_ACTION_CANCELED,
extensions::ExtensionUninstallDialog::CLOSE_ACTION_LAST);
}
}
void ExtensionApps::FlushMojoCallsForTesting() { void ExtensionApps::FlushMojoCallsForTesting() {
receiver_.FlushForTesting(); receiver_.FlushForTesting();
} }
...@@ -311,6 +311,12 @@ void ExtensionApps::Initialize( ...@@ -311,6 +311,12 @@ void ExtensionApps::Initialize(
weak_factory_.GetWeakPtr())); weak_factory_.GetWeakPtr()));
} }
if (app_type_ == apps::mojom::AppType::kWeb &&
base::FeatureList::IsEnabled(features::kDesktopPWAsUnifiedLaunch)) {
web_app_launch_manager_ =
std::make_unique<web_app::WebAppLaunchManager>(profile_);
}
// Remaining initialization is only relevant to the kExtension app type. // Remaining initialization is only relevant to the kExtension app type.
if (app_type_ != apps::mojom::AppType::kExtension) { if (app_type_ != apps::mojom::AppType::kExtension) {
return; return;
...@@ -418,7 +424,10 @@ void ExtensionApps::Launch(const std::string& app_id, ...@@ -418,7 +424,10 @@ void ExtensionApps::Launch(const std::string& app_id,
extensions::ExtensionRegistry::Get(profile_)->GetInstalledExtension( extensions::ExtensionRegistry::Get(profile_)->GetInstalledExtension(
app_id); app_id);
if (!extension || !extensions::util::IsAppLaunchable(app_id, profile_) || if (!extension || !extensions::util::IsAppLaunchable(app_id, profile_) ||
RunExtensionEnableFlow(app_id, event_flags, launch_source, display_id)) { RunExtensionEnableFlow(
app_id,
base::BindOnce(&ExtensionApps::Launch, weak_factory_.GetWeakPtr(),
app_id, event_flags, launch_source, display_id))) {
return; return;
} }
...@@ -463,7 +472,7 @@ void ExtensionApps::Launch(const std::string& app_id, ...@@ -463,7 +472,7 @@ void ExtensionApps::Launch(const std::string& app_id,
extension_url, extension_urls::kWebstoreSourceField, source_value); extension_url, extension_urls::kWebstoreSourceField, source_value);
} }
apps::LaunchService::Get(profile_)->OpenApplication(params); LaunchImpl(params);
} }
void ExtensionApps::LaunchAppWithIntent(const std::string& app_id, void ExtensionApps::LaunchAppWithIntent(const std::string& app_id,
...@@ -474,9 +483,20 @@ void ExtensionApps::LaunchAppWithIntent(const std::string& app_id, ...@@ -474,9 +483,20 @@ void ExtensionApps::LaunchAppWithIntent(const std::string& app_id,
return; return;
} }
AppLaunchParams params = CreateAppLaunchParamsForIntent(app_id, intent); const extensions::Extension* extension =
extensions::ExtensionRegistry::Get(profile_)->GetInstalledExtension(
app_id);
if (!extension || !extensions::util::IsAppLaunchable(app_id, profile_) ||
RunExtensionEnableFlow(
app_id,
base::BindOnce(&ExtensionApps::LaunchAppWithIntent,
weak_factory_.GetWeakPtr(), app_id, std::move(intent),
launch_source, display_id))) {
return;
}
apps::LaunchService::Get(profile_)->OpenApplication(params); AppLaunchParams params = CreateAppLaunchParamsForIntent(app_id, intent);
LaunchImpl(params);
} }
void ExtensionApps::SetPermission(const std::string& app_id, void ExtensionApps::SetPermission(const std::string& app_id,
...@@ -1276,11 +1296,8 @@ void ExtensionApps::ConvertVector(const extensions::ExtensionSet& extensions, ...@@ -1276,11 +1296,8 @@ void ExtensionApps::ConvertVector(const extensions::ExtensionSet& extensions,
} }
} }
bool ExtensionApps::RunExtensionEnableFlow( bool ExtensionApps::RunExtensionEnableFlow(const std::string& app_id,
const std::string& app_id, base::OnceClosure callback) {
int32_t event_flags,
apps::mojom::LaunchSource launch_source,
int64_t display_id) {
if (extensions::util::IsAppLaunchableWithoutEnabling(app_id, profile_)) { if (extensions::util::IsAppLaunchableWithoutEnabling(app_id, profile_)) {
return false; return false;
} }
...@@ -1290,9 +1307,7 @@ bool ExtensionApps::RunExtensionEnableFlow( ...@@ -1290,9 +1307,7 @@ bool ExtensionApps::RunExtensionEnableFlow(
std::make_unique<ExtensionAppsEnableFlow>(profile_, app_id); std::make_unique<ExtensionAppsEnableFlow>(profile_, app_id);
} }
enable_flow_map_[app_id]->Run( enable_flow_map_[app_id]->Run(std::move(callback));
base::BindOnce(&ExtensionApps::Launch, weak_factory_.GetWeakPtr(), app_id,
event_flags, launch_source, display_id));
return true; return true;
} }
...@@ -1432,4 +1447,19 @@ void ExtensionApps::GetMenuModelForChromeBrowserApp( ...@@ -1432,4 +1447,19 @@ void ExtensionApps::GetMenuModelForChromeBrowserApp(
std::move(callback).Run(std::move(menu_items)); std::move(callback).Run(std::move(menu_items));
} }
void ExtensionApps::LaunchImpl(const AppLaunchParams& params) {
if (web_app_launch_manager_) {
web_app_launch_manager_->OpenApplication(params);
return;
}
if (params.container ==
apps::mojom::LaunchContainer::kLaunchContainerWindow &&
app_type_ == apps::mojom::AppType::kWeb) {
web_app::RecordAppWindowLaunch(profile_, params.app_id);
}
::OpenApplication(profile_, params);
}
} // namespace apps } // namespace apps
...@@ -6,15 +6,18 @@ ...@@ -6,15 +6,18 @@
#define CHROME_BROWSER_APPS_APP_SERVICE_EXTENSION_APPS_H_ #define CHROME_BROWSER_APPS_APP_SERVICE_EXTENSION_APPS_H_
#include <map> #include <map>
#include <memory>
#include <string> #include <string>
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/scoped_observer.h" #include "base/scoped_observer.h"
#include "chrome/browser/apps/app_service/app_icon_factory.h" #include "chrome/browser/apps/app_service/app_icon_factory.h"
#include "chrome/browser/apps/app_service/app_launch_params.h"
#include "chrome/browser/apps/app_service/icon_key_util.h" #include "chrome/browser/apps/app_service/icon_key_util.h"
#include "chrome/browser/apps/app_service/paused_apps.h" #include "chrome/browser/apps/app_service/paused_apps.h"
#include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h" #include "chrome/browser/ui/app_list/arc/arc_app_list_prefs.h"
#include "chrome/browser/ui/web_applications/web_app_launch_manager.h"
#include "chrome/services/app_service/public/cpp/instance.h" #include "chrome/services/app_service/public/cpp/instance.h"
#include "chrome/services/app_service/public/cpp/instance_registry.h" #include "chrome/services/app_service/public/cpp/instance_registry.h"
#include "chrome/services/app_service/public/mojom/app_service.mojom.h" #include "chrome/services/app_service/public/mojom/app_service.mojom.h"
...@@ -55,16 +58,16 @@ class ExtensionApps : public apps::mojom::Publisher, ...@@ -55,16 +58,16 @@ class ExtensionApps : public apps::mojom::Publisher,
public content_settings::Observer, public content_settings::Observer,
public ArcAppListPrefs::Observer { public ArcAppListPrefs::Observer {
public: public:
// Record uninstall dialog action for Web apps and Chrome apps.
static void RecordUninstallCanceledAction(Profile* profile,
const std::string& app_id);
ExtensionApps(const mojo::Remote<apps::mojom::AppService>& app_service, ExtensionApps(const mojo::Remote<apps::mojom::AppService>& app_service,
Profile* profile, Profile* profile,
apps::mojom::AppType app_type, apps::mojom::AppType app_type,
apps::InstanceRegistry* instance_registry); apps::InstanceRegistry* instance_registry);
~ExtensionApps() override; ~ExtensionApps() override;
// Record uninstall dialog action for Web apps and Chrome apps.
static void RecordUninstallCanceledAction(Profile* profile,
const std::string& app_id);
void FlushMojoCallsForTesting(); void FlushMojoCallsForTesting();
void Shutdown(); void Shutdown();
...@@ -161,11 +164,9 @@ class ExtensionApps : public apps::mojom::Publisher, ...@@ -161,11 +164,9 @@ class ExtensionApps : public apps::mojom::Publisher,
// Checks if extension is disabled and if enable flow should be started. // Checks if extension is disabled and if enable flow should be started.
// Returns true if extension enable flow is started or there is already one // Returns true if extension enable flow is started or there is already one
// running. // running, and run |callback| to launch the app.
bool RunExtensionEnableFlow(const std::string& app_id, bool RunExtensionEnableFlow(const std::string& app_id,
int32_t event_flags, base::OnceClosure callback);
apps::mojom::LaunchSource launch_source,
int64_t display_id);
static bool IsBlacklisted(const std::string& app_id); static bool IsBlacklisted(const std::string& app_id);
...@@ -209,6 +210,8 @@ class ExtensionApps : public apps::mojom::Publisher, ...@@ -209,6 +210,8 @@ class ExtensionApps : public apps::mojom::Publisher,
void GetMenuModelForChromeBrowserApp(apps::mojom::MenuType menu_type, void GetMenuModelForChromeBrowserApp(apps::mojom::MenuType menu_type,
GetMenuModelCallback callback); GetMenuModelCallback callback);
void LaunchImpl(const AppLaunchParams& params);
mojo::Receiver<apps::mojom::Publisher> receiver_{this}; mojo::Receiver<apps::mojom::Publisher> receiver_{this};
mojo::RemoteSet<apps::mojom::Subscriber> subscribers_; mojo::RemoteSet<apps::mojom::Subscriber> subscribers_;
...@@ -246,6 +249,9 @@ class ExtensionApps : public apps::mojom::Publisher, ...@@ -246,6 +249,9 @@ class ExtensionApps : public apps::mojom::Publisher,
// Registrar used to monitor the profile prefs. // Registrar used to monitor the profile prefs.
PrefChangeRegistrar profile_pref_change_registrar_; PrefChangeRegistrar profile_pref_change_registrar_;
// TODO(crbug.com/1061843): Remove web_app_launch_manager_ when BMO launches.
std::unique_ptr<web_app::WebAppLaunchManager> web_app_launch_manager_;
base::WeakPtrFactory<ExtensionApps> weak_factory_{this}; base::WeakPtrFactory<ExtensionApps> weak_factory_{this};
DISALLOW_COPY_AND_ASSIGN(ExtensionApps); DISALLOW_COPY_AND_ASSIGN(ExtensionApps);
......
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