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_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt() 51 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() OVERRIDE; 62 63 // Checks whether the install is initiated by a page in a verified site 64 // (which is at least a domain, but can also have a port or a path). 65 static bool IsRequestorURLInVerifiedSite(const GURL& requestor_url, 66 const std::string& verified_site); 67 68 GURL requestor_url_; 69 70 DISALLOW_IMPLICIT_CONSTRUCTORS(WebstoreInlineInstaller); 71}; 72 73} // namespace extensions 74 75#endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INLINE_INSTALLER_H_ 76