Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / extensions / external_install_error.h
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_EXTERNAL_INSTALL_ERROR_H_
6 #define CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_ERROR_H_
7
8 #include <string>
9
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"
15
16 class Browser;
17 class ExtensionInstallPromptShowParams;
18 class ExtensionInstallUI;
19 class GlobalError;
20 class GlobalErrorService;
21
22 namespace content {
23 class BrowserContext;
24 }
25
26 namespace extensions {
27 class Extension;
28 class ExternalInstallManager;
29 class WebstoreDataFetcher;
30
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
35 // destruction.
36 class ExternalInstallError : public ExtensionInstallPrompt::Delegate,
37                              public WebstoreDataFetcherDelegate {
38  public:
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).
43   enum AlertType {
44     BUBBLE_ALERT,
45     MENU_ALERT
46   };
47
48   ExternalInstallError(content::BrowserContext* browser_context,
49                        const std::string& extension_id,
50                        AlertType error_type,
51                        ExternalInstallManager* manager);
52   ~ExternalInstallError() override;
53
54   // ExtensionInstallPrompt::Delegate implementation.
55   void InstallUIProceed() override;
56   void InstallUIAbort(bool user_initiated) override;
57
58   // Show the associated dialog. This should only be called once the dialog is
59   // ready.
60   void ShowDialog(Browser* browser);
61
62   // Return the associated extension, or NULL.
63   const Extension* GetExtension() const;
64
65   const std::string& extension_id() const { return extension_id_; }
66   AlertType alert_type() const { return alert_type_; }
67
68  private:
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;
74
75   // Called when data fetching has completed (either successfully or not).
76   void OnFetchComplete();
77
78   // Called when the dialog has been successfully populated, and is ready to be
79   // shown.
80   void OnDialogReady(ExtensionInstallPromptShowParams* show_params,
81                      ExtensionInstallPrompt::Delegate* prompt_delegate,
82                      scoped_refptr<ExtensionInstallPrompt::Prompt> prompt);
83
84   // The associated BrowserContext.
85   content::BrowserContext* browser_context_;
86
87   // The id of the external extension.
88   std::string extension_id_;
89
90   // The type of alert to show the user.
91   AlertType alert_type_;
92
93   // The owning ExternalInstallManager.
94   ExternalInstallManager* manager_;
95
96   // The associated GlobalErrorService.
97   GlobalErrorService* error_service_;
98
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_;
103
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_;
107
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_;
111
112   base::WeakPtrFactory<ExternalInstallError> weak_factory_;
113
114   DISALLOW_COPY_AND_ASSIGN(ExternalInstallError);
115 };
116
117 }  // namespace extensions
118
119 #endif  // CHROME_BROWSER_EXTENSIONS_EXTERNAL_INSTALL_ERROR_H_