OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/extensions/bookmark_app_helper.h" | 5 #include "chrome/browser/extensions/bookmark_app_helper.h" |
6 | 6 |
7 #include <cctype> | 7 #include <cctype> |
8 | 8 |
9 #include "base/strings/utf_string_conversions.h" | 9 #include "base/strings/utf_string_conversions.h" |
10 #include "chrome/browser/extensions/crx_installer.h" | 10 #include "chrome/browser/extensions/crx_installer.h" |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 web_app_info.icons.push_back(icon_info); | 110 web_app_info.icons.push_back(icon_info); |
111 } | 111 } |
112 callback.Run(web_app_info); | 112 callback.Run(web_app_info); |
113 } | 113 } |
114 | 114 |
115 } // namespace | 115 } // namespace |
116 | 116 |
117 namespace extensions { | 117 namespace extensions { |
118 | 118 |
119 // static | 119 // static |
| 120 void BookmarkAppHelper::UpdateWebAppInfoFromManifest( |
| 121 const content::Manifest& manifest, |
| 122 WebApplicationInfo* web_app_info) { |
| 123 if (!manifest.short_name.is_null()) |
| 124 web_app_info->title = manifest.short_name.string(); |
| 125 |
| 126 // Give the full length name priority. |
| 127 if (!manifest.name.is_null()) |
| 128 web_app_info->title = manifest.name.string(); |
| 129 |
| 130 // Set the url based on the manifest value, if any. |
| 131 if (manifest.start_url.is_valid()) |
| 132 web_app_info->app_url = manifest.start_url; |
| 133 } |
| 134 |
| 135 // static |
120 std::map<int, SkBitmap> BookmarkAppHelper::ConstrainBitmapsToSizes( | 136 std::map<int, SkBitmap> BookmarkAppHelper::ConstrainBitmapsToSizes( |
121 const std::vector<SkBitmap>& bitmaps, | 137 const std::vector<SkBitmap>& bitmaps, |
122 const std::set<int>& sizes) { | 138 const std::set<int>& sizes) { |
123 std::map<int, SkBitmap> output_bitmaps; | 139 std::map<int, SkBitmap> output_bitmaps; |
124 std::map<int, SkBitmap> ordered_bitmaps; | 140 std::map<int, SkBitmap> ordered_bitmaps; |
125 for (std::vector<SkBitmap>::const_iterator it = bitmaps.begin(); | 141 for (std::vector<SkBitmap>::const_iterator it = bitmaps.begin(); |
126 it != bitmaps.end(); | 142 it != bitmaps.end(); |
127 ++it) { | 143 ++it) { |
128 DCHECK(it->width() == it->height()); | 144 DCHECK(it->width() == it->height()); |
129 ordered_bitmaps[it->width()] = *it; | 145 ordered_bitmaps[it->width()] = *it; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 | 179 |
164 gfx::ImageSkia icon_image( | 180 gfx::ImageSkia icon_image( |
165 new GeneratedIconImageSource(letter, color, output_size), | 181 new GeneratedIconImageSource(letter, color, output_size), |
166 gfx::Size(output_size, output_size)); | 182 gfx::Size(output_size, output_size)); |
167 icon_image.bitmap()->deepCopyTo(&(*bitmaps)[output_size]); | 183 icon_image.bitmap()->deepCopyTo(&(*bitmaps)[output_size]); |
168 } | 184 } |
169 | 185 |
170 BookmarkAppHelper::BookmarkAppHelper(ExtensionService* service, | 186 BookmarkAppHelper::BookmarkAppHelper(ExtensionService* service, |
171 WebApplicationInfo web_app_info, | 187 WebApplicationInfo web_app_info, |
172 content::WebContents* contents) | 188 content::WebContents* contents) |
173 : web_app_info_(web_app_info), | 189 : contents_(contents), |
| 190 web_app_info_(web_app_info), |
174 crx_installer_(extensions::CrxInstaller::CreateSilent(service)) { | 191 crx_installer_(extensions::CrxInstaller::CreateSilent(service)) { |
175 registrar_.Add(this, | 192 registrar_.Add(this, |
176 extensions::NOTIFICATION_CRX_INSTALLER_DONE, | 193 extensions::NOTIFICATION_CRX_INSTALLER_DONE, |
177 content::Source<CrxInstaller>(crx_installer_.get())); | 194 content::Source<CrxInstaller>(crx_installer_.get())); |
178 | 195 |
179 registrar_.Add(this, | 196 registrar_.Add(this, |
180 extensions::NOTIFICATION_EXTENSION_INSTALL_ERROR, | 197 extensions::NOTIFICATION_EXTENSION_INSTALL_ERROR, |
181 content::Source<CrxInstaller>(crx_installer_.get())); | 198 content::Source<CrxInstaller>(crx_installer_.get())); |
182 | 199 |
183 crx_installer_->set_error_on_unsupported_requirements(true); | 200 crx_installer_->set_error_on_unsupported_requirements(true); |
(...skipping 16 matching lines...) Expand all Loading... |
200 web_app_info_icon_urls, | 217 web_app_info_icon_urls, |
201 base::Bind(&BookmarkAppHelper::OnIconsDownloaded, | 218 base::Bind(&BookmarkAppHelper::OnIconsDownloaded, |
202 base::Unretained(this)))); | 219 base::Unretained(this)))); |
203 } | 220 } |
204 | 221 |
205 BookmarkAppHelper::~BookmarkAppHelper() {} | 222 BookmarkAppHelper::~BookmarkAppHelper() {} |
206 | 223 |
207 void BookmarkAppHelper::Create(const CreateBookmarkAppCallback& callback) { | 224 void BookmarkAppHelper::Create(const CreateBookmarkAppCallback& callback) { |
208 callback_ = callback; | 225 callback_ = callback; |
209 | 226 |
210 if (favicon_downloader_.get()) | 227 if (contents_) { |
211 favicon_downloader_->Start(); | 228 contents_->GetManifest(base::Bind(&BookmarkAppHelper::OnDidGetManifest, |
212 else | 229 base::Unretained(this))); |
| 230 } else { |
213 OnIconsDownloaded(true, std::map<GURL, std::vector<SkBitmap> >()); | 231 OnIconsDownloaded(true, std::map<GURL, std::vector<SkBitmap> >()); |
| 232 } |
| 233 } |
| 234 |
| 235 void BookmarkAppHelper::OnDidGetManifest(const content::Manifest& manifest) { |
| 236 if (contents_->IsBeingDestroyed()) |
| 237 return; |
| 238 |
| 239 UpdateWebAppInfoFromManifest(manifest, &web_app_info_); |
| 240 |
| 241 DCHECK(favicon_downloader_.get()); |
| 242 favicon_downloader_->Start(); |
214 } | 243 } |
215 | 244 |
216 void BookmarkAppHelper::OnIconsDownloaded( | 245 void BookmarkAppHelper::OnIconsDownloaded( |
217 bool success, | 246 bool success, |
218 const std::map<GURL, std::vector<SkBitmap> >& bitmaps) { | 247 const std::map<GURL, std::vector<SkBitmap> >& bitmaps) { |
219 // The tab has navigated away during the icon download. Cancel the bookmark | 248 // The tab has navigated away during the icon download. Cancel the bookmark |
220 // app creation. | 249 // app creation. |
221 if (!success) { | 250 if (!success) { |
222 favicon_downloader_.reset(); | 251 favicon_downloader_.reset(); |
223 callback_.Run(NULL, web_app_info_); | 252 callback_.Run(NULL, web_app_info_); |
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 extension, info_list, base::Bind(&OnIconsLoaded, web_app_info, callback)); | 417 extension, info_list, base::Bind(&OnIconsLoaded, web_app_info, callback)); |
389 } | 418 } |
390 | 419 |
391 bool IsValidBookmarkAppUrl(const GURL& url) { | 420 bool IsValidBookmarkAppUrl(const GURL& url) { |
392 URLPattern origin_only_pattern(Extension::kValidWebExtentSchemes); | 421 URLPattern origin_only_pattern(Extension::kValidWebExtentSchemes); |
393 origin_only_pattern.SetMatchAllURLs(true); | 422 origin_only_pattern.SetMatchAllURLs(true); |
394 return url.is_valid() && origin_only_pattern.MatchesURL(url); | 423 return url.is_valid() && origin_only_pattern.MatchesURL(url); |
395 } | 424 } |
396 | 425 |
397 } // namespace extensions | 426 } // namespace extensions |
OLD | NEW |