1 // Copyright 2014 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_INSTALL_WITH_PROMPT_H_ 6 #define CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_WITH_PROMPT_H_ 7 8 #include "base/basictypes.h" 9 #include "base/memory/scoped_ptr.h" 10 #include "chrome/browser/extensions/webstore_standalone_installer.h" 11 #include "content/public/browser/page_navigator.h" 12 #include "ui/gfx/native_widget_types.h" 13 #include "url/gurl.h" 14 15 namespace content { 16 class WebContents; 17 } 18 19 namespace extensions { 20 21 // Initiates the install of an extension from the webstore. Downloads and parses 22 // metadata from the webstore, shows an install UI and starts the download once 23 // the user confirms. No post-install UI is shown. 24 // 25 // Clients will be notified of success or failure via the |callback| argument 26 // passed into the constructor. 27 // 28 // Clients of this class must be trusted, as verification of the requestor is 29 // skipped. This class stubs out many WebstoreStandaloneInstaller abstract 30 // methods and can be used as a base class. 31 class WebstoreInstallWithPrompt : public WebstoreStandaloneInstaller, 32 public content::PageNavigator { 33 public: 34 // Use this constructor when there is no parent window. The install dialog 35 // will be centered on the screen. 36 WebstoreInstallWithPrompt(const std::string& webstore_item_id, 37 Profile* profile, 38 const Callback& callback); 39 40 // If this constructor is used, the parent of the install dialog will be 41 // |parent_window|. 42 WebstoreInstallWithPrompt(const std::string& webstore_item_id, 43 Profile* profile, 44 gfx::NativeWindow parent_window, 45 const Callback& callback); 46 47 protected: 48 friend class base::RefCountedThreadSafe<WebstoreInstallWithPrompt>; 49 virtual ~WebstoreInstallWithPrompt(); 50 51 // extensions::WebstoreStandaloneInstaller overrides: 52 virtual bool CheckRequestorAlive() const OVERRIDE; 53 virtual const GURL& GetRequestorURL() const OVERRIDE; 54 virtual bool ShouldShowPostInstallUI() const OVERRIDE; 55 virtual bool ShouldShowAppInstalledBubble() const OVERRIDE; 56 virtual content::WebContents* GetWebContents() const OVERRIDE; 57 virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt() 58 const OVERRIDE; 59 virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE; 60 virtual bool CheckInlineInstallPermitted( 61 const base::DictionaryValue& webstore_data, 62 std::string* error) const OVERRIDE; 63 virtual bool CheckRequestorPermitted( 64 const base::DictionaryValue& webstore_data, 65 std::string* error) const OVERRIDE; 66 67 // content::PageNavigator overrides: 68 virtual content::WebContents* OpenURL( 69 const content::OpenURLParams& params) OVERRIDE; 70 71 private: 72 GURL dummy_requestor_url_; 73 74 // A non-visible WebContents used to download data from the webstore. 75 scoped_ptr<content::WebContents> dummy_web_contents_; 76 77 gfx::NativeWindow parent_window_; 78 79 DISALLOW_COPY_AND_ASSIGN(WebstoreInstallWithPrompt); 80 }; 81 82 } // namespace extensions 83 84 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_WITH_PROMPT_H_ 85