| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/apps/platform_apps/api/webstore_widget_private/app_installer.h" |
| |
| #include "base/macros.h" |
| #include "chrome/common/extensions/webstore_install_result.h" |
| #include "content/public/browser/web_contents.h" |
| #include "content/public/browser/web_contents_observer.h" |
| |
| namespace { |
| const char kWebContentsDestroyedError[] = "WebContents is destroyed."; |
| } // namespace |
| |
| namespace webstore_widget { |
| |
| class AppInstaller::WebContentsObserver : public content::WebContentsObserver { |
| public: |
| WebContentsObserver(content::WebContents* web_contents, AppInstaller* parent) |
| : content::WebContentsObserver(web_contents), parent_(parent) {} |
| |
| protected: |
| // content::WebContentsObserver implementation. |
| void WebContentsDestroyed() override { |
| parent_->OnWebContentsDestroyed(web_contents()); |
| } |
| |
| private: |
| AppInstaller* parent_; |
| |
| DISALLOW_IMPLICIT_CONSTRUCTORS(WebContentsObserver); |
| }; |
| |
| AppInstaller::AppInstaller(content::WebContents* web_contents, |
| const std::string& item_id, |
| Profile* profile, |
| bool silent_installation, |
| Callback callback) |
| : extensions::WebstoreStandaloneInstaller(item_id, |
| profile, |
| std::move(callback)), |
| silent_installation_(silent_installation), |
| web_contents_(web_contents), |
| web_contents_observer_(new WebContentsObserver(web_contents, this)) { |
| DCHECK(web_contents_); |
| } |
| |
| AppInstaller::~AppInstaller() {} |
| |
| bool AppInstaller::CheckRequestorAlive() const { |
| // The tab may have gone away - cancel installation in that case. |
| return web_contents_ != NULL; |
| } |
| |
| std::unique_ptr<ExtensionInstallPrompt::Prompt> |
| AppInstaller::CreateInstallPrompt() const { |
| if (silent_installation_) |
| return nullptr; |
| |
| std::unique_ptr<ExtensionInstallPrompt::Prompt> prompt( |
| new ExtensionInstallPrompt::Prompt( |
| ExtensionInstallPrompt::WEBSTORE_WIDGET_PROMPT)); |
| |
| prompt->SetWebstoreData(localized_user_count(), show_user_count(), |
| average_rating(), rating_count()); |
| return prompt; |
| } |
| |
| bool AppInstaller::ShouldShowPostInstallUI() const { |
| return false; |
| } |
| |
| bool AppInstaller::ShouldShowAppInstalledBubble() const { |
| return false; |
| } |
| |
| content::WebContents* AppInstaller::GetWebContents() const { |
| return web_contents_; |
| } |
| |
| void AppInstaller::OnWebContentsDestroyed(content::WebContents* web_contents) { |
| RunCallback(false, kWebContentsDestroyedError, |
| extensions::webstore_install::OTHER_ERROR); |
| AbortInstall(); |
| } |
| |
| } // namespace webstore_widget |