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.
5 #ifndef CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_ERROR_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_ERROR_H_
10 #include "base/macros.h"
11 #include "base/memory/scoped_ptr.h"
12 #include "base/memory/weak_ptr.h"
13 #include "chrome/browser/extensions/extension_install_prompt.h"
14 #include "chrome/browser/extensions/webstore_data_fetcher_delegate.h"
17 class ExtensionInstallPromptShowParams
;
18 class ExtensionInstallUI
;
20 class GlobalErrorService
;
26 namespace extensions
{
28 class ExternalInstallManager
;
29 class WebstoreDataFetcher
;
31 // An error to show the user an extension has been externally installed. The
32 // error will automatically fetch data about the extension from the webstore (if
33 // possible) and will handle adding itself to the GlobalErrorService when
34 // initialized and removing itself from the GlobalErrorService upon
36 class ExternalInstallError
: public ExtensionInstallPrompt::Delegate
,
37 public WebstoreDataFetcherDelegate
{
39 // The possible types of errors to show. A menu alert adds a menu item to the
40 // wrench, which spawns an extension install dialog when clicked. The bubble
41 // alert also adds an item, but spawns a bubble instead (less invasive and
42 // easier to dismiss).
48 ExternalInstallError(content::BrowserContext
* browser_context
,
49 const std::string
& extension_id
,
51 ExternalInstallManager
* manager
);
52 ~ExternalInstallError() override
;
54 // ExtensionInstallPrompt::Delegate implementation.
55 void InstallUIProceed() override
;
56 void InstallUIAbort(bool user_initiated
) override
;
58 // Show the associated dialog. This should only be called once the dialog is
60 void ShowDialog(Browser
* browser
);
62 // Return the associated extension, or NULL.
63 const Extension
* GetExtension() const;
65 const std::string
& extension_id() const { return extension_id_
; }
66 AlertType
alert_type() const { return alert_type_
; }
69 // WebstoreDataFetcherDelegate implementation.
70 void OnWebstoreRequestFailure() override
;
71 void OnWebstoreResponseParseSuccess(
72 scoped_ptr
<base::DictionaryValue
> webstore_data
) override
;
73 void OnWebstoreResponseParseFailure(const std::string
& error
) override
;
75 // Called when data fetching has completed (either successfully or not).
76 void OnFetchComplete();
78 // Called when the dialog has been successfully populated, and is ready to be
80 void OnDialogReady(ExtensionInstallPromptShowParams
* show_params
,
81 ExtensionInstallPrompt::Delegate
* prompt_delegate
,
82 scoped_refptr
<ExtensionInstallPrompt::Prompt
> prompt
);
84 // The associated BrowserContext.
85 content::BrowserContext
* browser_context_
;
87 // The id of the external extension.
88 std::string extension_id_
;
90 // The type of alert to show the user.
91 AlertType alert_type_
;
93 // The owning ExternalInstallManager.
94 ExternalInstallManager
* manager_
;
96 // The associated GlobalErrorService.
97 GlobalErrorService
* error_service_
;
99 // The UI for showing the error.
100 scoped_ptr
<ExtensionInstallPrompt
> install_ui_
;
101 scoped_ptr
<ExtensionInstallPromptShowParams
> install_ui_show_params_
;
102 scoped_refptr
<ExtensionInstallPrompt::Prompt
> prompt_
;
104 // The UI for the given error, which will take the form of either a menu
105 // alert or a bubble alert (depending on the |alert_type_|.
106 scoped_ptr
<GlobalError
> global_error_
;
108 // The WebstoreDataFetcher to use in order to populate the error with webstore
109 // information of the extension.
110 scoped_ptr
<WebstoreDataFetcher
> webstore_data_fetcher_
;
112 base::WeakPtrFactory
<ExternalInstallError
> weak_factory_
;
114 DISALLOW_COPY_AND_ASSIGN(ExternalInstallError
);
117 } // namespace extensions
119 #endif // CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_ERROR_H_