blob: 282a84bd58c287c488aa9003af99c00e94470770 [file] [log] [blame]
rdevlin.cronin5f6b69d2014-09-20 01:23:351// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/extensions/webstore_reinstaller.h"
6
Devlin Cronin1cf10162019-01-04 01:07:517#include <utility>
8
rdevlin.cronin5f6b69d2014-09-20 01:23:359#include "base/memory/ref_counted.h"
10#include "chrome/browser/extensions/extension_install_prompt.h"
11#include "chrome/browser/extensions/extension_service.h"
12#include "chrome/browser/profiles/profile.h"
13#include "content/public/browser/web_contents.h"
14#include "extensions/browser/extension_system.h"
15
16namespace extensions {
17
18namespace {
19const char kCouldNotUninstallExtension[] = "Failed to uninstall the extension.";
20const char kTabClosed[] = "Tab was closed.";
21}
22
23WebstoreReinstaller::WebstoreReinstaller(
24 content::WebContents* web_contents,
25 const std::string& extension_id,
Devlin Cronin1cf10162019-01-04 01:07:5126 WebstoreStandaloneInstaller::Callback callback)
rdevlin.cronin5f6b69d2014-09-20 01:23:3527 : WebstoreStandaloneInstaller(
28 extension_id,
29 Profile::FromBrowserContext(web_contents->GetBrowserContext()),
Devlin Cronin1cf10162019-01-04 01:07:5130 std::move(callback)),
rdevlin.cronin5f6b69d2014-09-20 01:23:3531 content::WebContentsObserver(web_contents) {
Minh X. Nguyen45479012017-08-18 21:35:3632 DCHECK(
33 ExtensionPrefs::Get(web_contents->GetBrowserContext())
34 ->HasDisableReason(extension_id, disable_reason::DISABLE_CORRUPTED));
rdevlin.cronin5f6b69d2014-09-20 01:23:3535}
36
37WebstoreReinstaller::~WebstoreReinstaller() {
38}
39
40void WebstoreReinstaller::BeginReinstall() {
41 WebstoreStandaloneInstaller::BeginInstall();
42}
43
44bool WebstoreReinstaller::CheckRequestorAlive() const {
45 return web_contents() != NULL;
46}
47
dchengc963c7142016-04-08 03:55:2248std::unique_ptr<ExtensionInstallPrompt::Prompt>
rdevlin.cronin5f6b69d2014-09-20 01:23:3549WebstoreReinstaller::CreateInstallPrompt() const {
dchengc963c7142016-04-08 03:55:2250 std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt(
rdevlin.cronin5f6b69d2014-09-20 01:23:3551 new ExtensionInstallPrompt::Prompt(
52 ExtensionInstallPrompt::REPAIR_PROMPT));
53 prompt->SetWebstoreData(localized_user_count(),
54 show_user_count(),
55 average_rating(),
56 rating_count());
dcheng1fc00f12015-12-26 22:18:0357 return prompt;
rdevlin.cronin5f6b69d2014-09-20 01:23:3558}
59
60bool WebstoreReinstaller::ShouldShowPostInstallUI() const {
61 return false;
62}
63
64bool WebstoreReinstaller::ShouldShowAppInstalledBubble() const {
65 return false;
66}
67
68content::WebContents* WebstoreReinstaller::GetWebContents() const {
69 return web_contents();
70}
71
rdevlin.cronin5f6b69d2014-09-20 01:23:3572void WebstoreReinstaller::WebContentsDestroyed() {
73 // Run the callback now, because AbortInstall() doesn't do it.
74 RunCallback(false, kTabClosed, webstore_install::ABORTED);
75 AbortInstall();
76}
77
rdevlin.cronin41593052016-01-08 01:40:1278void WebstoreReinstaller::OnInstallPromptDone(
79 ExtensionInstallPrompt::Result result) {
80 if (result != ExtensionInstallPrompt::Result::ACCEPTED) {
81 WebstoreStandaloneInstaller::OnInstallPromptDone(result);
82 return;
83 }
84
rdevlin.cronin5f6b69d2014-09-20 01:23:3585 if (!ExtensionSystem::Get(profile())->extension_service()->UninstallExtension(
86 id(),
87 UNINSTALL_REASON_REINSTALL,
rdevlin.cronin5f6b69d2014-09-20 01:23:3588 NULL)) {
89 // Run the callback now, because AbortInstall() doesn't do it.
90 RunCallback(
91 false, kCouldNotUninstallExtension, webstore_install::OTHER_ERROR);
92 AbortInstall();
Devlin Cronin218df7f2017-11-21 21:41:3193 return;
rdevlin.cronin5f6b69d2014-09-20 01:23:3594 }
Devlin Cronin218df7f2017-11-21 21:41:3195 WebstoreStandaloneInstaller::OnInstallPromptDone(result);
rdevlin.cronin5f6b69d2014-09-20 01:23:3596}
97
98} // namespace extensions