| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/android/webapps/add_to_homescreen_data_fetcher.h" | 5 #include "chrome/browser/android/webapps/add_to_homescreen_data_fetcher.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/location.h" | 10 #include "base/location.h" |
| (...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 290 background_task_runner_.get(), FROM_HERE, | 290 background_task_runner_.get(), FROM_HERE, |
| 291 base::Bind(&AddToHomescreenDataFetcher:: | 291 base::Bind(&AddToHomescreenDataFetcher:: |
| 292 CreateLauncherIconFromFaviconInBackground, | 292 CreateLauncherIconFromFaviconInBackground, |
| 293 base::Unretained(this), bitmap_result), | 293 base::Unretained(this), bitmap_result), |
| 294 base::Bind(&AddToHomescreenDataFetcher::NotifyObserver, | 294 base::Bind(&AddToHomescreenDataFetcher::NotifyObserver, |
| 295 base::RetainedRef(this))); | 295 base::RetainedRef(this))); |
| 296 } | 296 } |
| 297 | 297 |
| 298 SkBitmap AddToHomescreenDataFetcher::CreateLauncherIconFromFaviconInBackground( | 298 SkBitmap AddToHomescreenDataFetcher::CreateLauncherIconFromFaviconInBackground( |
| 299 const favicon_base::FaviconRawBitmapResult& bitmap_result) { | 299 const favicon_base::FaviconRawBitmapResult& bitmap_result) { |
| 300 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); | 300 base::ThreadRestrictions::AssertIOAllowed(); |
| 301 | 301 |
| 302 SkBitmap raw_icon; | 302 SkBitmap raw_icon; |
| 303 if (bitmap_result.is_valid()) { | 303 if (bitmap_result.is_valid()) { |
| 304 gfx::PNGCodec::Decode(bitmap_result.bitmap_data->front(), | 304 gfx::PNGCodec::Decode(bitmap_result.bitmap_data->front(), |
| 305 bitmap_result.bitmap_data->size(), &raw_icon); | 305 bitmap_result.bitmap_data->size(), &raw_icon); |
| 306 } | 306 } |
| 307 | 307 |
| 308 shortcut_info_.best_primary_icon_url = bitmap_result.icon_url; | 308 shortcut_info_.best_primary_icon_url = bitmap_result.icon_url; |
| 309 return CreateLauncherIconInBackground(raw_icon); | 309 return CreateLauncherIconInBackground(raw_icon); |
| 310 } | 310 } |
| 311 | 311 |
| 312 void AddToHomescreenDataFetcher::CreateLauncherIcon(const SkBitmap& raw_icon) { | 312 void AddToHomescreenDataFetcher::CreateLauncherIcon(const SkBitmap& raw_icon) { |
| 313 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 313 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 314 base::PostTaskAndReplyWithResult( | 314 base::PostTaskAndReplyWithResult( |
| 315 background_task_runner_.get(), FROM_HERE, | 315 background_task_runner_.get(), FROM_HERE, |
| 316 base::Bind(&AddToHomescreenDataFetcher::CreateLauncherIconInBackground, | 316 base::Bind(&AddToHomescreenDataFetcher::CreateLauncherIconInBackground, |
| 317 base::Unretained(this), raw_icon), | 317 base::Unretained(this), raw_icon), |
| 318 base::Bind(&AddToHomescreenDataFetcher::NotifyObserver, | 318 base::Bind(&AddToHomescreenDataFetcher::NotifyObserver, |
| 319 base::RetainedRef(this))); | 319 base::RetainedRef(this))); |
| 320 } | 320 } |
| 321 | 321 |
| 322 SkBitmap AddToHomescreenDataFetcher::CreateLauncherIconInBackground( | 322 SkBitmap AddToHomescreenDataFetcher::CreateLauncherIconInBackground( |
| 323 const SkBitmap& raw_icon) { | 323 const SkBitmap& raw_icon) { |
| 324 DCHECK(content::BrowserThread::GetBlockingPool()->RunsTasksOnCurrentThread()); | 324 base::ThreadRestrictions::AssertIOAllowed(); |
| 325 | 325 |
| 326 SkBitmap primary_icon; | 326 SkBitmap primary_icon; |
| 327 bool is_generated = false; | 327 bool is_generated = false; |
| 328 if (weak_observer_) { | 328 if (weak_observer_) { |
| 329 primary_icon = weak_observer_->FinalizeLauncherIconInBackground( | 329 primary_icon = weak_observer_->FinalizeLauncherIconInBackground( |
| 330 raw_icon, shortcut_info_.url, &is_generated); | 330 raw_icon, shortcut_info_.url, &is_generated); |
| 331 } | 331 } |
| 332 | 332 |
| 333 if (is_generated) | 333 if (is_generated) |
| 334 shortcut_info_.best_primary_icon_url = GURL(); | 334 shortcut_info_.best_primary_icon_url = GURL(); |
| 335 | 335 |
| 336 return primary_icon; | 336 return primary_icon; |
| 337 } | 337 } |
| 338 | 338 |
| 339 void AddToHomescreenDataFetcher::NotifyObserver(const SkBitmap& primary_icon) { | 339 void AddToHomescreenDataFetcher::NotifyObserver(const SkBitmap& primary_icon) { |
| 340 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); | 340 DCHECK_CURRENTLY_ON(content::BrowserThread::UI); |
| 341 if (!web_contents() || !weak_observer_ || is_icon_saved_) | 341 if (!web_contents() || !weak_observer_ || is_icon_saved_) |
| 342 return; | 342 return; |
| 343 | 343 |
| 344 is_icon_saved_ = true; | 344 is_icon_saved_ = true; |
| 345 primary_icon_ = primary_icon; | 345 primary_icon_ = primary_icon; |
| 346 is_ready_ = true; | 346 is_ready_ = true; |
| 347 weak_observer_->OnDataAvailable(shortcut_info_, primary_icon_, badge_icon_); | 347 weak_observer_->OnDataAvailable(shortcut_info_, primary_icon_, badge_icon_); |
| 348 } | 348 } |
| OLD | NEW |