| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2012 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_UI_INTENTS_WEB_INTENT_PICKER_MODEL_H_ | |
| 6 #define CHROME_BROWSER_UI_INTENTS_WEB_INTENT_PICKER_MODEL_H_ | |
| 7 | |
| 8 #include <vector> | |
| 9 | |
| 10 #include "base/basictypes.h" | |
| 11 #include "base/string16.h" | |
| 12 #include "chrome/browser/extensions/extension_install_prompt.h" | |
| 13 #include "googleurl/src/gurl.h" | |
| 14 #include "ui/gfx/image/image.h" | |
| 15 #include "webkit/glue/web_intent_service_data.h" | |
| 16 | |
| 17 namespace content { | |
| 18 class DownloadItem; | |
| 19 } | |
| 20 | |
| 21 class WebIntentPickerModelObserver; | |
| 22 | |
| 23 // Model for the WebIntentPicker. | |
| 24 class WebIntentPickerModel { | |
| 25 public: | |
| 26 // An intent service to display in the picker. | |
| 27 struct InstalledService { | |
| 28 InstalledService( | |
| 29 const string16& title, | |
| 30 const GURL& url, | |
| 31 webkit_glue::WebIntentServiceData::Disposition disposition); | |
| 32 ~InstalledService(); | |
| 33 | |
| 34 // The title of this service. | |
| 35 string16 title; | |
| 36 | |
| 37 // The URL of this service. | |
| 38 GURL url; | |
| 39 | |
| 40 // A favicon of this service. | |
| 41 gfx::Image favicon; | |
| 42 | |
| 43 // The disposition to use when displaying this service. | |
| 44 webkit_glue::WebIntentServiceData::Disposition disposition; | |
| 45 }; | |
| 46 | |
| 47 // A suggested extension to display in the picker. | |
| 48 struct SuggestedExtension { | |
| 49 SuggestedExtension(const string16& title, | |
| 50 const std::string& id, | |
| 51 double average_rating); | |
| 52 ~SuggestedExtension(); | |
| 53 | |
| 54 // The title of the intent service. | |
| 55 string16 title; | |
| 56 | |
| 57 // The id of the extension that provides the intent service. | |
| 58 std::string id; | |
| 59 | |
| 60 // The average rating of the extension. | |
| 61 double average_rating; | |
| 62 | |
| 63 // The extension's icon. | |
| 64 gfx::Image icon; | |
| 65 }; | |
| 66 | |
| 67 WebIntentPickerModel(); | |
| 68 ~WebIntentPickerModel(); | |
| 69 | |
| 70 void set_observer(WebIntentPickerModelObserver* observer) { | |
| 71 observer_ = observer; | |
| 72 } | |
| 73 | |
| 74 const string16& action() const { return action_; } | |
| 75 void set_action(const string16& action) { action_ = action; } | |
| 76 | |
| 77 const string16& type() const { return type_; } | |
| 78 void set_type(const string16& type) { type_ = type; } | |
| 79 | |
| 80 const GURL& default_service_url() const { return default_service_url_; } | |
| 81 void set_default_service_url(const GURL& default_url) { | |
| 82 default_service_url_ = default_url; | |
| 83 } | |
| 84 | |
| 85 // Add a new installed service with |title|, |url| and |disposition| to the | |
| 86 // picker. | |
| 87 void AddInstalledService( | |
| 88 const string16& title, | |
| 89 const GURL& url, | |
| 90 webkit_glue::WebIntentServiceData::Disposition disposition); | |
| 91 | |
| 92 // Remove an installed service from the picker at |index|. | |
| 93 void RemoveInstalledServiceAt(size_t index); | |
| 94 | |
| 95 // Remove all installed services from the picker, and resets to not | |
| 96 // displaying inline disposition. Note that this does not clear the | |
| 97 // observer. | |
| 98 void Clear(); | |
| 99 | |
| 100 // Return the intent service installed at |index|. | |
| 101 const InstalledService& GetInstalledServiceAt(size_t index) const; | |
| 102 | |
| 103 // Return the intent service that uses |url| as its service url, or NULL. | |
| 104 const InstalledService* GetInstalledServiceWithURL(const GURL& url) const; | |
| 105 | |
| 106 // Return the number of intent services in the picker. | |
| 107 size_t GetInstalledServiceCount() const; | |
| 108 | |
| 109 // Update favicon for the intent service with service URL |url| to |image|. | |
| 110 void UpdateFaviconForServiceWithURL(const GURL& url, const gfx::Image& image); | |
| 111 | |
| 112 // Add a list of suggested extensions to the model. | |
| 113 void AddSuggestedExtensions( | |
| 114 const std::vector<SuggestedExtension>& suggestions); | |
| 115 | |
| 116 // Remove the suggested extension with this id. | |
| 117 void RemoveSuggestedExtension(const std::string& id); | |
| 118 | |
| 119 // Return the suggested extension at |index|. | |
| 120 const SuggestedExtension& GetSuggestedExtensionAt(size_t index) const; | |
| 121 | |
| 122 // Return the suggested extension for the given id or NULL if none. | |
| 123 const SuggestedExtension* GetSuggestedExtensionWithId( | |
| 124 const std::string& id) const; | |
| 125 | |
| 126 // Return the number of suggested extensions to be displayed. | |
| 127 size_t GetSuggestedExtensionCount() const; | |
| 128 | |
| 129 // Return the text to use in the "Get more suggestions" link. Returns UTF8. | |
| 130 // Will return an empty string if the link should not be shown. | |
| 131 string16 GetSuggestionsLinkText() const; | |
| 132 | |
| 133 // Set the icon image for the suggested extension with |id|. | |
| 134 void SetSuggestedExtensionIconWithId(const std::string& id, | |
| 135 const gfx::Image& image); | |
| 136 | |
| 137 // Set the picker to display the intent service with |url| inline. | |
| 138 // To clear the current inline disposition set |url| to an empty URL. | |
| 139 void SetInlineDisposition(const GURL& url); | |
| 140 | |
| 141 // Returns true if the picker is currently displaying an inline service. | |
| 142 bool IsInlineDisposition() const; | |
| 143 | |
| 144 // Returns true if there is still a pending request for suggestions from CWS. | |
| 145 bool IsWaitingForSuggestions() const; | |
| 146 | |
| 147 // Set the "waiting for suggestions" status to |waiting| | |
| 148 void SetWaitingForSuggestions(bool waiting); | |
| 149 | |
| 150 // Returns the url of the intent service that is being displayed inline, or | |
| 151 // GURL::EmptyGURL() if none. | |
| 152 const GURL& inline_disposition_url() const { return inline_disposition_url_; } | |
| 153 | |
| 154 // Sets the ID of the extension currently being installed. | |
| 155 void SetPendingExtensionInstallId(const std::string& id); | |
| 156 | |
| 157 // Gets the ID of the extension currently being installed. | |
| 158 const std::string& pending_extension_install_id() const { | |
| 159 return pending_extension_install_id_; | |
| 160 } | |
| 161 | |
| 162 // Updates the pending install download state. | |
| 163 void UpdateExtensionDownloadState(content::DownloadItem* item); | |
| 164 | |
| 165 // Sets the download progress of the extension currently being downloaded. | |
| 166 void SetPendingExtensionInstallDownloadProgress(int progress); | |
| 167 | |
| 168 // Gets the download progress of the extension currently being downloaded. | |
| 169 // Returns -1 if progress is indeterminate, otherwise a value from 0 to 100. | |
| 170 int pending_extension_install_download_progress() const { | |
| 171 return pending_extension_install_download_progress_; | |
| 172 } | |
| 173 | |
| 174 // Sets the status of extension install process. | |
| 175 void SetPendingExtensionInstallStatusString(const string16& status); | |
| 176 | |
| 177 // Gets the status of extension install process. | |
| 178 const string16& pending_extension_install_status_string() const { | |
| 179 return pending_extension_install_status_string_; | |
| 180 } | |
| 181 | |
| 182 // Sets the extension install delegate. | |
| 183 void SetPendingExtensionInstallDelegate( | |
| 184 ExtensionInstallPrompt::Delegate* delegate); | |
| 185 | |
| 186 // Gets the extension install delegate. | |
| 187 ExtensionInstallPrompt::Delegate* pending_extension_install_delegate() const { | |
| 188 return pending_extension_install_delegate_; | |
| 189 } | |
| 190 | |
| 191 // Sets the extension install prompt. | |
| 192 void SetPendingExtensionInstallPrompt( | |
| 193 const ExtensionInstallPrompt::Prompt& prompt); | |
| 194 | |
| 195 // Gets the extension install prompt. | |
| 196 const ExtensionInstallPrompt::Prompt* pending_extension_install_prompt() | |
| 197 const { | |
| 198 return pending_extension_install_prompt_.get(); | |
| 199 } | |
| 200 | |
| 201 // Removes any pending extension install state. | |
| 202 void ClearPendingExtensionInstall(); | |
| 203 | |
| 204 // Set whether the picker should be showing the use-another-app control. | |
| 205 void set_show_use_another_service(bool show) { | |
| 206 show_use_another_service_ = show; | |
| 207 } | |
| 208 | |
| 209 // Whether or not the picker should show the use-another-app control. | |
| 210 bool show_use_another_service() const { | |
| 211 return show_use_another_service_; | |
| 212 } | |
| 213 | |
| 214 private: | |
| 215 // Delete all elements in |installed_services_| and |suggested_extensions_|. | |
| 216 // Note that this method does not reset the observer. | |
| 217 void DestroyAll(); | |
| 218 | |
| 219 // A vector of all installed services in the picker. Each installed service | |
| 220 // is owned by this model. | |
| 221 std::vector<InstalledService*> installed_services_; | |
| 222 | |
| 223 // A vector of all suggested extensions in the picker. | |
| 224 std::vector<SuggestedExtension> suggested_extensions_; | |
| 225 | |
| 226 // The observer to send notifications to, or NULL if none. Not owned. | |
| 227 WebIntentPickerModelObserver* observer_; | |
| 228 | |
| 229 // The url of the intent service that is being displayed inline, or | |
| 230 // GURL::EmptyGURL() if none. | |
| 231 GURL inline_disposition_url_; | |
| 232 | |
| 233 // A cached copy of the action that instantiated the picker. | |
| 234 string16 action_; | |
| 235 | |
| 236 // A cached copy of the type that instantiated the picker. | |
| 237 string16 type_; | |
| 238 | |
| 239 // The non-empty url of the default service if the WebIntentsRegistry | |
| 240 // finds a default service matching the intent being dispatched. | |
| 241 GURL default_service_url_; | |
| 242 | |
| 243 // Indicates that there are still open requests to CWS. | |
| 244 bool waiting_for_suggestions_; | |
| 245 | |
| 246 // Information about the pending extension install. | |
| 247 std::string pending_extension_install_id_; | |
| 248 int pending_extension_install_download_progress_; | |
| 249 string16 pending_extension_install_status_string_; | |
| 250 ExtensionInstallPrompt::Delegate* pending_extension_install_delegate_; | |
| 251 scoped_ptr<ExtensionInstallPrompt::Prompt> pending_extension_install_prompt_; | |
| 252 | |
| 253 // Indicates the use-another-service control should be shown. | |
| 254 bool show_use_another_service_; | |
| 255 | |
| 256 DISALLOW_COPY_AND_ASSIGN(WebIntentPickerModel); | |
| 257 }; | |
| 258 | |
| 259 #endif // CHROME_BROWSER_UI_INTENTS_WEB_INTENT_PICKER_MODEL_H_ | |
| OLD | NEW |