158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)// found in the LICENSE file. 458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "chrome/browser/chromeos/file_manager/app_installer.h" 658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 75f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/common/extensions/webstore_install_result.h" 858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "content/public/browser/web_contents.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/browser/web_contents_observer.h" 105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace file_manager { 1258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 1358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)namespace { 1458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)const char kWebContentsDestroyedError[] = "WebContents is destroyed."; 1558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace 1658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass AppInstaller::WebContentsObserver : public content::WebContentsObserver { 1858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) public: 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch WebContentsObserver(content::WebContents* web_contents, AppInstaller* parent) 2058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) : content::WebContentsObserver(web_contents), 2158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) parent_(parent) { 2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 2458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) protected: 2558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // content::WebContentsObserver implementation. 26010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) virtual void WebContentsDestroyed() OVERRIDE { 27010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) parent_->OnWebContentsDestroyed(web_contents()); 2858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) } 2958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) private: 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) AppInstaller* parent_; 3258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 3358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DISALLOW_IMPLICIT_CONSTRUCTORS(WebContentsObserver); 3458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}; 3558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 36116680a4aac90f2aa7413d9095a592090648e557Ben MurdochAppInstaller::AppInstaller(content::WebContents* web_contents, 37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const std::string& item_id, 38116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch Profile* profile, 395f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) bool silent_installation, 40116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const Callback& callback) 41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch : extensions::WebstoreStandaloneInstaller(item_id, profile, callback), 425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) silent_installation_(silent_installation), 4358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) callback_(callback), 4458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_contents_(web_contents), 4558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) web_contents_observer_(new WebContentsObserver(web_contents, this)) { 4658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 4758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppInstaller::~AppInstaller() {} 4958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool AppInstaller::CheckRequestorAlive() const { 5158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) // The tab may have gone away - cancel installation in that case. 5258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return web_contents_ != NULL; 5358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)const GURL& AppInstaller::GetRequestorURL() const { 5658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return GURL::EmptyGURL(); 5758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)scoped_refptr<ExtensionInstallPrompt::Prompt> 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)AppInstaller::CreateInstallPrompt() const { 615f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if (silent_installation_) 625f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) return NULL; 635f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) scoped_refptr<ExtensionInstallPrompt::Prompt> prompt( 6558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) new ExtensionInstallPrompt::Prompt( 6658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) ExtensionInstallPrompt::INLINE_INSTALL_PROMPT)); 6758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) prompt->SetWebstoreData(localized_user_count(), 695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) show_user_count(), 705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) average_rating(), 715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) rating_count()); 72f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) return prompt; 7358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool AppInstaller::ShouldShowPostInstallUI() const { 7658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 7758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 7858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool AppInstaller::ShouldShowAppInstalledBubble() const { 8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return false; 8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)content::WebContents* AppInstaller::GetWebContents() const { 8458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return web_contents_; 8558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 8658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool AppInstaller::CheckInlineInstallPermitted( 8858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::DictionaryValue& webstore_data, 8958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string* error) const { 9058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(error != NULL); 9158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(error->empty()); 9258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 9358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 9458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool AppInstaller::CheckRequestorPermitted( 9658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) const base::DictionaryValue& webstore_data, 9758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) std::string* error) const { 9858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(error != NULL); 9958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) DCHECK(error->empty()); 10058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) return true; 10158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 10258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void AppInstaller::OnWebContentsDestroyed( 10458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) content::WebContents* web_contents) { 1055f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) callback_.Run(false, 1065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) kWebContentsDestroyedError, 1075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::webstore_install::OTHER_ERROR); 10858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) AbortInstall(); 10958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} 11058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) 11158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)} // namespace file_manager 112