Commit bfad279d authored by Giovanni Ortuño Urquidi's avatar Giovanni Ortuño Urquidi Committed by Commit Bot

desktop-pwas: Implement PendingAppManager::UninstallApps

UninstallApps adds uninstallation tasks to the queue of tasks and
uninstalls the corresponding extension for the provided URL.

Bug: 876174
Change-Id: Id79adb12a0999332aaec830acb48eadbf62b2abb
Reviewed-on: https://chromium-review.googlesource.com/1196782
Commit-Queue: Giovanni Ortuño Urquidi <ortuno@chromium.org>
Reviewed-by: default avatarDominick Ng <dominickn@chromium.org>
Cr-Commit-Position: refs/heads/master@{#587872}
parent 15b15db4
......@@ -9,14 +9,18 @@
#include <utility>
#include <vector>
#include "base/strings/string16.h"
#include "base/threading/thread_task_runner_handle.h"
#include "base/time/time.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/web_applications/extensions/bookmark_app_shortcut_installation_task.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_prefs.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
#include "extensions/browser/uninstall_reason.h"
namespace extensions {
......@@ -92,6 +96,40 @@ void PendingBookmarkAppManager::InstallApps(
weak_ptr_factory_.GetWeakPtr()));
}
void PendingBookmarkAppManager::UninstallApps(
std::vector<GURL> apps_to_uninstall,
const UninstallCallback& callback) {
for (auto& app_to_uninstall : apps_to_uninstall) {
base::Optional<std::string> extension_id =
extension_ids_map_.Lookup(app_to_uninstall);
if (!extension_id) {
callback.Run(app_to_uninstall, false);
continue;
}
base::Optional<bool> opt =
IsExtensionPresentAndInstalled(extension_id.value());
if (!opt.has_value() || !opt.value()) {
callback.Run(app_to_uninstall, false);
continue;
}
DCHECK(opt.value());
base::string16 error;
bool uninstalled =
ExtensionSystem::Get(profile_)->extension_service()->UninstallExtension(
extension_id.value(), UNINSTALL_REASON_ORPHANED_EXTERNAL_EXTENSION,
&error);
if (!uninstalled) {
LOG(WARNING) << "Couldn't uninstall app with url " << app_to_uninstall
<< ". " << error;
}
callback.Run(app_to_uninstall, uninstalled);
}
}
void PendingBookmarkAppManager::SetFactoriesForTesting(
WebContentsFactory web_contents_factory,
TaskFactory task_factory) {
......@@ -104,13 +142,6 @@ void PendingBookmarkAppManager::SetTimerForTesting(
timer_ = std::move(timer);
}
void PendingBookmarkAppManager::UninstallApps(
std::vector<GURL> apps_to_uninstall,
const UninstallCallback& callback) {
// TODO(crbug.com/876174) implement this method.
NOTIMPLEMENTED();
}
// Returns (as the base::Optional part) whether or not there is already a known
// extension for the given ID. The bool inside the base::Optional is, when
// known, whether the extension is installed (true) or uninstalled (false).
......
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