1// Copyright 2013 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/chromeos/file_manager/app_installer.h" 6 7#include "base/strings/stringprintf.h" 8#include "chrome/browser/profiles/profile.h" 9#include "content/public/browser/web_contents.h" 10 11namespace file_manager { 12 13namespace { 14const char kWebContentsDestroyedError[] = "WebContents is destroyed."; 15} // namespace 16 17class AppInstaller::WebContentsObserver 18 : public content::WebContentsObserver { 19 20 public: 21 explicit WebContentsObserver( 22 content::WebContents* web_contents, 23 AppInstaller* parent) 24 : content::WebContentsObserver(web_contents), 25 parent_(parent) { 26 } 27 28 protected: 29 // content::WebContentsObserver implementation. 30 virtual void WebContentsDestroyed( 31 content::WebContents* web_contents) OVERRIDE { 32 parent_->OnWebContentsDestroyed(web_contents); 33 } 34 35 private: 36 AppInstaller* parent_; 37 38 DISALLOW_IMPLICIT_CONSTRUCTORS(WebContentsObserver); 39}; 40 41AppInstaller::AppInstaller( 42 content::WebContents* web_contents, 43 const std::string& webstore_item_id, 44 Profile* profile, 45 const Callback& callback) 46 : extensions::WebstoreStandaloneInstaller( 47 webstore_item_id, 48 profile, 49 callback), 50 callback_(callback), 51 web_contents_(web_contents), 52 web_contents_observer_(new WebContentsObserver(web_contents, this)) { 53} 54 55AppInstaller::~AppInstaller() {} 56 57bool AppInstaller::CheckRequestorAlive() const { 58 // The tab may have gone away - cancel installation in that case. 59 return web_contents_ != NULL; 60} 61 62const GURL& AppInstaller::GetRequestorURL() const { 63 return GURL::EmptyGURL(); 64} 65 66scoped_ptr<ExtensionInstallPrompt::Prompt> 67AppInstaller::CreateInstallPrompt() const { 68 scoped_ptr<ExtensionInstallPrompt::Prompt> prompt( 69 new ExtensionInstallPrompt::Prompt( 70 ExtensionInstallPrompt::INLINE_INSTALL_PROMPT)); 71 72 prompt->SetInlineInstallWebstoreData(localized_user_count(), 73 show_user_count(), 74 average_rating(), 75 rating_count()); 76 return prompt.Pass(); 77} 78 79bool AppInstaller::ShouldShowPostInstallUI() const { 80 return false; 81} 82 83bool AppInstaller::ShouldShowAppInstalledBubble() const { 84 return false; 85} 86 87content::WebContents* AppInstaller::GetWebContents() const { 88 return web_contents_; 89} 90 91bool AppInstaller::CheckInlineInstallPermitted( 92 const base::DictionaryValue& webstore_data, 93 std::string* error) const { 94 DCHECK(error != NULL); 95 DCHECK(error->empty()); 96 return true; 97} 98 99bool AppInstaller::CheckRequestorPermitted( 100 const base::DictionaryValue& webstore_data, 101 std::string* error) const { 102 DCHECK(error != NULL); 103 DCHECK(error->empty()); 104 return true; 105} 106 107void AppInstaller::OnWebContentsDestroyed( 108 content::WebContents* web_contents) { 109 callback_.Run(false, kWebContentsDestroyedError); 110 AbortInstall(); 111} 112 113} // namespace file_manager 114