1// Copyright (c) 2012 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#ifndef CHROME_BROWSER_EXTENSIONS_WEBSTORE_INLINE_INSTALLER_H_ 6#define CHROME_BROWSER_EXTENSIONS_WEBSTORE_INLINE_INSTALLER_H_ 7 8#include <string> 9 10#include "base/memory/ref_counted.h" 11#include "content/public/browser/web_contents_observer.h" 12#include "webstore_standalone_installer.h" 13 14namespace content { 15class WebContents; 16} 17 18namespace extensions { 19 20// Manages inline installs requested by a page: downloads and parses metadata 21// from the webstore, shows the install UI, starts the download once the user 22// confirms, optionally transfers the user to the store if the "View details" 23// link is clicked in the UI, shows the "App installed" bubble and the 24// post-install UI after successful installation. 25// 26// Clients will be notified of success or failure via the |callback| argument 27// passed into the constructor. 28class WebstoreInlineInstaller 29 : public WebstoreStandaloneInstaller, 30 public content::WebContentsObserver { 31 public: 32 typedef WebstoreStandaloneInstaller::Callback Callback; 33 34 WebstoreInlineInstaller(content::WebContents* web_contents, 35 const std::string& webstore_item_id, 36 const GURL& requestor_url, 37 const Callback& callback); 38 39 protected: 40 friend class base::RefCountedThreadSafe<WebstoreInlineInstaller>; 41 42 virtual ~WebstoreInlineInstaller(); 43 44 // Implementations WebstoreStandaloneInstaller Template Method's hooks. 45 virtual bool CheckRequestorAlive() const OVERRIDE; 46 virtual const GURL& GetRequestorURL() const OVERRIDE; 47 virtual bool ShouldShowPostInstallUI() const OVERRIDE; 48 virtual bool ShouldShowAppInstalledBubble() const OVERRIDE; 49 virtual content::WebContents* GetWebContents() const OVERRIDE; 50 virtual scoped_ptr<ExtensionInstallPrompt::Prompt> 51 CreateInstallPrompt() const OVERRIDE; 52 virtual bool CheckInlineInstallPermitted( 53 const base::DictionaryValue& webstore_data, 54 std::string* error) const OVERRIDE; 55 virtual bool CheckRequestorPermitted( 56 const base::DictionaryValue& webstore_data, 57 std::string* error) const OVERRIDE; 58 59 private: 60 // content::WebContentsObserver interface implementation. 61 virtual void WebContentsDestroyed( 62 content::WebContents* web_contents) OVERRIDE; 63 64 // Checks whether the install is initiated by a page in a verified site 65 // (which is at least a domain, but can also have a port or a path). 66 static bool IsRequestorURLInVerifiedSite(const GURL& requestor_url, 67 const std::string& verified_site); 68 69 GURL requestor_url_; 70 71 DISALLOW_IMPLICIT_CONSTRUCTORS(WebstoreInlineInstaller); 72}; 73 74} // namespace extensions 75 76#endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INLINE_INSTALLER_H_ 77