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 void set_show_post_install_ui(bool show) { show_post_install_ui_ = show; } 52 53 // extensions::WebstoreStandaloneInstaller overrides: 54 virtual bool CheckRequestorAlive() const OVERRIDE; 55 virtual const GURL& GetRequestorURL() const OVERRIDE; 56 virtual bool ShouldShowPostInstallUI() const OVERRIDE; 57 virtual bool ShouldShowAppInstalledBubble() const OVERRIDE; 58 virtual content::WebContents* GetWebContents() const OVERRIDE; 59 virtual scoped_refptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt() 60 const OVERRIDE; 61 virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE; 62 virtual bool CheckInlineInstallPermitted( 63 const base::DictionaryValue& webstore_data, 64 std::string* error) const OVERRIDE; 65 virtual bool CheckRequestorPermitted( 66 const base::DictionaryValue& webstore_data, 67 std::string* error) const OVERRIDE; 68 69 // content::PageNavigator overrides: 70 virtual content::WebContents* OpenURL( 71 const content::OpenURLParams& params) OVERRIDE; 72 73 private: 74 bool show_post_install_ui_; 75 76 GURL dummy_requestor_url_; 77 78 // A non-visible WebContents used to download data from the webstore. 79 scoped_ptr<content::WebContents> dummy_web_contents_; 80 81 gfx::NativeWindow parent_window_; 82 83 DISALLOW_COPY_AND_ASSIGN(WebstoreInstallWithPrompt); 84 }; 85 86 } // namespace extensions 87 88 #endif // CHROME_BROWSER_EXTENSIONS_WEBSTORE_INSTALL_WITH_PROMPT_H_ 89