Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(275)

Side by Side Diff: chrome/browser/ui/intents/web_intent_picker_model.cc

Issue 12225076: Delete most web intents code. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 #include "chrome/browser/ui/intents/web_intent_picker_model.h"
6
7 #include <algorithm>
8
9 #include "base/logging.h"
10 #include "base/stl_util.h"
11 #include "chrome/browser/download/download_item_model.h"
12 #include "chrome/browser/ui/intents/web_intent_picker_model_observer.h"
13 #include "content/public/browser/download_item.h"
14 #include "grit/generated_resources.h"
15 #include "grit/ui_resources.h"
16 #include "ui/base/l10n/l10n_util.h"
17 #include "ui/base/resource/resource_bundle.h"
18 #include "ui/gfx/image/image.h"
19
20 namespace {
21
22 const size_t kMaxSuggestionCount = 5; // Maximum number of visible suggestions.
23
24 } // namespace
25
26 WebIntentPickerModel::WebIntentPickerModel()
27 : observer_(NULL),
28 waiting_for_suggestions_(true),
29 pending_extension_install_download_progress_(0),
30 pending_extension_install_delegate_(NULL),
31 show_use_another_service_(true) {
32 }
33
34 WebIntentPickerModel::~WebIntentPickerModel() {
35 DestroyAll();
36 }
37
38 void WebIntentPickerModel::AddInstalledService(
39 const string16& title,
40 const GURL& url,
41 webkit_glue::WebIntentServiceData::Disposition disposition) {
42 // TODO(groby): Revisit to remove O(n^2) complexity.
43 for (size_t i = 0; i < installed_services_.size(); ++i) {
44 InstalledService* service = installed_services_[i];
45 if (service->title == title && service->url == url &&
46 service->disposition == disposition)
47 return;
48 }
49 installed_services_.push_back(new InstalledService(title, url, disposition));
50 if (observer_)
51 observer_->OnModelChanged(this);
52 }
53
54 void WebIntentPickerModel::RemoveInstalledServiceAt(size_t index) {
55 DCHECK_LT(index, installed_services_.size());
56 InstalledService* service = installed_services_[index];
57 installed_services_.erase(installed_services_.begin() + index);
58 delete service;
59 if (observer_)
60 observer_->OnModelChanged(this);
61 }
62
63 void WebIntentPickerModel::Clear() {
64 DestroyAll();
65 action_.clear();
66 type_.clear();
67 inline_disposition_url_ = GURL::EmptyGURL();
68 waiting_for_suggestions_ = true;
69 ClearPendingExtensionInstall();
70 if (observer_)
71 observer_->OnModelChanged(this);
72 }
73
74 const WebIntentPickerModel::InstalledService&
75 WebIntentPickerModel::GetInstalledServiceAt(size_t index) const {
76 DCHECK_LT(index, installed_services_.size());
77 return *installed_services_[index];
78 }
79
80 const WebIntentPickerModel::InstalledService*
81 WebIntentPickerModel::GetInstalledServiceWithURL(const GURL& url) const {
82 for (size_t i = 0; i < installed_services_.size(); ++i) {
83 InstalledService* service = installed_services_[i];
84 if (service->url == url)
85 return service;
86 }
87 return NULL;
88 }
89
90 size_t WebIntentPickerModel::GetInstalledServiceCount() const {
91 return installed_services_.size();
92 }
93
94 void WebIntentPickerModel::UpdateFaviconForServiceWithURL(
95 const GURL& url, const gfx::Image& image) {
96 for (size_t i = 0; i < installed_services_.size(); ++i) {
97 InstalledService* service = installed_services_[i];
98 if (service->url == url) {
99 service->favicon = image;
100 if (observer_)
101 observer_->OnFaviconChanged(this, i);
102 return;
103 }
104 }
105 NOTREACHED(); // Calling this with an invalid URL is not allowed.
106 }
107
108 void WebIntentPickerModel::AddSuggestedExtensions(
109 const std::vector<SuggestedExtension>& suggestions) {
110 suggested_extensions_.insert(suggested_extensions_.end(),
111 suggestions.begin(),
112 suggestions.end());
113 if (observer_)
114 observer_->OnModelChanged(this);
115 }
116
117 void WebIntentPickerModel::RemoveSuggestedExtension(const std::string& id) {
118 std::vector<SuggestedExtension>::iterator it;
119 for (it = suggested_extensions_.begin();
120 it < suggested_extensions_.end();
121 ++it) {
122 SuggestedExtension extension = *it;
123 if (extension.id == id) {
124 suggested_extensions_.erase(it);
125 break;
126 }
127 }
128 }
129
130 const WebIntentPickerModel::SuggestedExtension&
131 WebIntentPickerModel::GetSuggestedExtensionAt(size_t index) const {
132 DCHECK_LT(index, suggested_extensions_.size());
133 return suggested_extensions_[index];
134 }
135
136 const WebIntentPickerModel::SuggestedExtension*
137 WebIntentPickerModel::GetSuggestedExtensionWithId(
138 const std::string& id) const {
139 for (size_t i = 0; i < suggested_extensions_.size(); ++i) {
140 const SuggestedExtension* extension = &suggested_extensions_[i];
141 if (extension->id == id)
142 return extension;
143 }
144 return NULL;
145 }
146
147 size_t WebIntentPickerModel::GetSuggestedExtensionCount() const {
148 return std::min(suggested_extensions_.size(), kMaxSuggestionCount);
149 }
150
151 string16 WebIntentPickerModel::GetSuggestionsLinkText() const {
152 if (suggested_extensions_.size() <= kMaxSuggestionCount)
153 return string16();
154
155 return l10n_util::GetStringUTF16(GetInstalledServiceCount() == 0 ?
156 IDS_INTENT_PICKER_GET_MORE_SERVICES_NONE_INSTALLED :
157 IDS_INTENT_PICKER_GET_MORE_SERVICES);
158 }
159
160 void WebIntentPickerModel::SetSuggestedExtensionIconWithId(
161 const std::string& id,
162 const gfx::Image& image) {
163 for (size_t i = 0; i < suggested_extensions_.size(); ++i) {
164 SuggestedExtension& extension = suggested_extensions_[i];
165 if (extension.id == id) {
166 extension.icon = image;
167
168 if (observer_)
169 observer_->OnExtensionIconChanged(this, extension.id);
170 break;
171 }
172 }
173 }
174
175 void WebIntentPickerModel::SetInlineDisposition(const GURL& url) {
176 inline_disposition_url_ = url;
177 if (!observer_)
178 return;
179
180 if (url.is_empty()) {
181 observer_->OnModelChanged(this);
182 } else {
183 const InstalledService* service = GetInstalledServiceWithURL(url);
184 DCHECK(service);
185 observer_->OnInlineDisposition(service->title, url);
186 }
187 }
188
189 bool WebIntentPickerModel::IsInlineDisposition() const {
190 return !inline_disposition_url_.is_empty();
191 }
192
193 bool WebIntentPickerModel::IsWaitingForSuggestions() const {
194 return waiting_for_suggestions_;
195 }
196
197 void WebIntentPickerModel::SetWaitingForSuggestions(bool waiting) {
198 waiting_for_suggestions_ = waiting;
199 if (observer_)
200 observer_->OnModelChanged(this);
201 }
202
203 void WebIntentPickerModel::SetPendingExtensionInstallId(const std::string& id) {
204 pending_extension_install_id_ = id;
205 if (observer_)
206 observer_->OnModelChanged(this);
207 }
208
209 void WebIntentPickerModel::UpdateExtensionDownloadState(
210 content::DownloadItem* item) {
211 pending_extension_install_download_progress_ = item->PercentComplete();
212 DownloadItemModel download_model(item);
213 pending_extension_install_status_string_ = download_model.GetStatusText();
214 if (observer_)
215 observer_->OnModelChanged(this);
216 }
217
218 void WebIntentPickerModel::SetPendingExtensionInstallDownloadProgress(
219 int progress) {
220 pending_extension_install_download_progress_ = progress;
221 if (observer_)
222 observer_->OnModelChanged(this);
223 }
224
225 void WebIntentPickerModel::SetPendingExtensionInstallStatusString(
226 const string16& status) {
227 pending_extension_install_status_string_ = status;
228 if (observer_)
229 observer_->OnModelChanged(this);
230 }
231
232 void WebIntentPickerModel::SetPendingExtensionInstallDelegate(
233 ExtensionInstallPrompt::Delegate* delegate) {
234 pending_extension_install_delegate_ = delegate;
235 if (observer_)
236 observer_->OnModelChanged(this);
237 }
238
239 void WebIntentPickerModel::SetPendingExtensionInstallPrompt(
240 const ExtensionInstallPrompt::Prompt& prompt) {
241 pending_extension_install_prompt_.reset(
242 new ExtensionInstallPrompt::Prompt(prompt));
243 if (observer_)
244 observer_->OnModelChanged(this);
245 }
246
247 void WebIntentPickerModel::ClearPendingExtensionInstall() {
248 pending_extension_install_id_.clear();
249 pending_extension_install_download_progress_ = 0;
250 pending_extension_install_status_string_.clear();
251 pending_extension_install_delegate_ = NULL;
252 pending_extension_install_prompt_.reset();
253 if (observer_)
254 observer_->OnModelChanged(this);
255 }
256
257 void WebIntentPickerModel::DestroyAll() {
258 STLDeleteElements(&installed_services_);
259 }
260
261 WebIntentPickerModel::InstalledService::InstalledService(
262 const string16& title,
263 const GURL& url,
264 webkit_glue::WebIntentServiceData::Disposition disposition)
265 : title(title),
266 url(url),
267 favicon(ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
268 IDR_DEFAULT_FAVICON)),
269 disposition(disposition) {
270 }
271
272 WebIntentPickerModel::InstalledService::~InstalledService() {
273 }
274
275 WebIntentPickerModel::SuggestedExtension::SuggestedExtension(
276 const string16& title,
277 const std::string& id,
278 double average_rating)
279 : title(title),
280 id(id),
281 average_rating(average_rating),
282 icon(ui::ResourceBundle::GetSharedInstance().GetNativeImageNamed(
283 IDR_DEFAULT_FAVICON)) {
284 }
285
286 WebIntentPickerModel::SuggestedExtension::~SuggestedExtension() {
287 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698