1// 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 7#include "base/memory/ref_counted.h" 8#include "chrome/browser/extensions/extension_install_prompt.h" 9#include "chrome/browser/extensions/extension_service.h" 10#include "chrome/browser/profiles/profile.h" 11#include "content/public/browser/web_contents.h" 12#include "extensions/browser/extension_system.h" 13 14namespace extensions { 15 16namespace { 17const char kCouldNotUninstallExtension[] = "Failed to uninstall the extension."; 18const char kTabClosed[] = "Tab was closed."; 19} 20 21WebstoreReinstaller::WebstoreReinstaller( 22 content::WebContents* web_contents, 23 const std::string& extension_id, 24 const WebstoreStandaloneInstaller::Callback& callback) 25 : WebstoreStandaloneInstaller( 26 extension_id, 27 Profile::FromBrowserContext(web_contents->GetBrowserContext()), 28 callback), 29 content::WebContentsObserver(web_contents) { 30} 31 32WebstoreReinstaller::~WebstoreReinstaller() { 33} 34 35void WebstoreReinstaller::BeginReinstall() { 36 WebstoreStandaloneInstaller::BeginInstall(); 37} 38 39bool WebstoreReinstaller::CheckRequestorAlive() const { 40 return web_contents() != NULL; 41} 42 43const GURL& WebstoreReinstaller::GetRequestorURL() const { 44 return GURL::EmptyGURL(); 45} 46 47scoped_refptr<ExtensionInstallPrompt::Prompt> 48WebstoreReinstaller::CreateInstallPrompt() const { 49 scoped_refptr<ExtensionInstallPrompt::Prompt> prompt( 50 new ExtensionInstallPrompt::Prompt( 51 ExtensionInstallPrompt::REPAIR_PROMPT)); 52 prompt->SetWebstoreData(localized_user_count(), 53 show_user_count(), 54 average_rating(), 55 rating_count()); 56 return prompt; 57} 58 59bool WebstoreReinstaller::ShouldShowPostInstallUI() const { 60 return false; 61} 62 63bool WebstoreReinstaller::ShouldShowAppInstalledBubble() const { 64 return false; 65} 66 67content::WebContents* WebstoreReinstaller::GetWebContents() const { 68 return web_contents(); 69} 70 71bool WebstoreReinstaller::CheckInlineInstallPermitted( 72 const base::DictionaryValue& webstore_data, 73 std::string* error) const { 74 return true; 75} 76 77bool WebstoreReinstaller::CheckRequestorPermitted( 78 const base::DictionaryValue& webstore_data, 79 std::string* error) const { 80 return true; 81} 82 83void WebstoreReinstaller::WebContentsDestroyed() { 84 // Run the callback now, because AbortInstall() doesn't do it. 85 RunCallback(false, kTabClosed, webstore_install::ABORTED); 86 AbortInstall(); 87} 88 89void WebstoreReinstaller::InstallUIProceed() { 90 if (!ExtensionSystem::Get(profile())->extension_service()->UninstallExtension( 91 id(), 92 UNINSTALL_REASON_REINSTALL, 93 base::Bind(&WebstoreReinstaller::OnDeletionDone, this), 94 NULL)) { 95 // Run the callback now, because AbortInstall() doesn't do it. 96 RunCallback( 97 false, kCouldNotUninstallExtension, webstore_install::OTHER_ERROR); 98 AbortInstall(); 99 } 100} 101 102void WebstoreReinstaller::OnDeletionDone() { 103 WebstoreStandaloneInstaller::InstallUIProceed(); 104} 105 106} // namespace extensions 107