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 15namespace content { 16class WebContents; 17} 18 19namespace 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. 31class 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