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

Unified Diff: chrome/browser/favicon/favicon_service.cc

Issue 983043003: Componentize FaviconService and FaviconHandler (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@favicon_service
Patch Set: Fix android_aosp (reverted the change by mistake by switching computer) Created 5 years, 9 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/favicon/favicon_service_factory.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/favicon/favicon_service.cc
diff --git a/chrome/browser/favicon/favicon_service.cc b/chrome/browser/favicon/favicon_service.cc
deleted file mode 100644
index 98dadeabcf223b77ac859eadc264ea804413172c..0000000000000000000000000000000000000000
--- a/chrome/browser/favicon/favicon_service.cc
+++ /dev/null
@@ -1,391 +0,0 @@
-// Copyright (c) 2012 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/browser/favicon/favicon_service.h"
-
-#include <cmath>
-
-#include "base/hash.h"
-#include "base/single_thread_task_runner.h"
-#include "base/thread_task_runner_handle.h"
-#include "components/favicon/core/browser/favicon_client.h"
-#include "components/favicon_base/favicon_util.h"
-#include "components/favicon_base/select_favicon_frames.h"
-#include "components/history/core/browser/history_service.h"
-#include "third_party/skia/include/core/SkBitmap.h"
-#include "ui/gfx/codec/png_codec.h"
-#include "ui/gfx/favicon_size.h"
-#include "ui/gfx/image/image_skia.h"
-#include "url/gurl.h"
-
-using base::Bind;
-
-namespace {
-
-// Helper to run callback with empty results if we cannot get the history
-// service.
-base::CancelableTaskTracker::TaskId RunWithEmptyResultAsync(
- const favicon_base::FaviconResultsCallback& callback,
- base::CancelableTaskTracker* tracker) {
- scoped_refptr<base::SingleThreadTaskRunner> thread_runner(
- base::ThreadTaskRunnerHandle::Get());
- return tracker->PostTask(
- thread_runner.get(), FROM_HERE,
- Bind(callback, std::vector<favicon_base::FaviconRawBitmapResult>()));
-}
-
-// Returns a vector of pixel edge sizes from |size_in_dip| and
-// favicon_base::GetFaviconScales().
-std::vector<int> GetPixelSizesForFaviconScales(int size_in_dip) {
- std::vector<float> scales = favicon_base::GetFaviconScales();
- std::vector<int> sizes_in_pixel;
- for (size_t i = 0; i < scales.size(); ++i) {
- sizes_in_pixel.push_back(std::ceil(size_in_dip * scales[i]));
- }
- return sizes_in_pixel;
-}
-
-} // namespace
-
-FaviconService::FaviconService(FaviconClient* favicon_client,
- history::HistoryService* history_service)
- : history_service_(history_service), favicon_client_(favicon_client) {
-}
-
-FaviconService::~FaviconService() {
-}
-
-// static
-void FaviconService::FaviconResultsCallbackRunner(
- const favicon_base::FaviconResultsCallback& callback,
- const std::vector<favicon_base::FaviconRawBitmapResult>* results) {
- callback.Run(*results);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImage(
- const GURL& icon_url,
- const favicon_base::FaviconImageCallback& callback,
- base::CancelableTaskTracker* tracker) {
- favicon_base::FaviconResultsCallback callback_runner =
- Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
- base::Unretained(this), callback, gfx::kFaviconSize);
- if (history_service_) {
- std::vector<GURL> icon_urls;
- icon_urls.push_back(icon_url);
- return history_service_->GetFavicons(
- icon_urls,
- favicon_base::FAVICON,
- GetPixelSizesForFaviconScales(gfx::kFaviconSize),
- callback_runner,
- tracker);
- }
- return RunWithEmptyResultAsync(callback_runner, tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetRawFavicon(
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- int desired_size_in_pixel,
- const favicon_base::FaviconRawBitmapCallback& callback,
- base::CancelableTaskTracker* tracker) {
- favicon_base::FaviconResultsCallback callback_runner =
- Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
- base::Unretained(this),
- callback,
- desired_size_in_pixel);
-
- if (history_service_) {
- std::vector<GURL> icon_urls;
- icon_urls.push_back(icon_url);
- std::vector<int> desired_sizes_in_pixel;
- desired_sizes_in_pixel.push_back(desired_size_in_pixel);
-
- return history_service_->GetFavicons(
- icon_urls, icon_type, desired_sizes_in_pixel, callback_runner, tracker);
- }
- return RunWithEmptyResultAsync(callback_runner, tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetFavicon(
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- int desired_size_in_dip,
- const favicon_base::FaviconResultsCallback& callback,
- base::CancelableTaskTracker* tracker) {
- if (history_service_) {
- std::vector<GURL> icon_urls;
- icon_urls.push_back(icon_url);
- return history_service_->GetFavicons(
- icon_urls,
- icon_type,
- GetPixelSizesForFaviconScales(desired_size_in_dip),
- callback,
- tracker);
- }
- return RunWithEmptyResultAsync(callback, tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetFaviconImageForPageURL(
- const GURL& page_url,
- const favicon_base::FaviconImageCallback& callback,
- base::CancelableTaskTracker* tracker) {
- return GetFaviconForPageURLImpl(
- page_url,
- favicon_base::FAVICON,
- GetPixelSizesForFaviconScales(gfx::kFaviconSize),
- Bind(&FaviconService::RunFaviconImageCallbackWithBitmapResults,
- base::Unretained(this),
- callback,
- gfx::kFaviconSize),
- tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetRawFaviconForPageURL(
- const GURL& page_url,
- int icon_types,
- int desired_size_in_pixel,
- const favicon_base::FaviconRawBitmapCallback& callback,
- base::CancelableTaskTracker* tracker) {
- std::vector<int> desired_sizes_in_pixel;
- desired_sizes_in_pixel.push_back(desired_size_in_pixel);
- return GetFaviconForPageURLImpl(
- page_url,
- icon_types,
- desired_sizes_in_pixel,
- Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
- base::Unretained(this),
- callback,
- desired_size_in_pixel),
- tracker);
-}
-
-base::CancelableTaskTracker::TaskId
-FaviconService::GetLargestRawFaviconForPageURL(
- const GURL& page_url,
- const std::vector<int>& icon_types,
- int minimum_size_in_pixels,
- const favicon_base::FaviconRawBitmapCallback& callback,
- base::CancelableTaskTracker* tracker) {
- favicon_base::FaviconResultsCallback favicon_results_callback =
- Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
- base::Unretained(this),
- callback,
- 0);
- if (favicon_client_ && favicon_client_->IsNativeApplicationURL(page_url)) {
- std::vector<int> desired_sizes_in_pixel;
- desired_sizes_in_pixel.push_back(0);
- return favicon_client_->GetFaviconForNativeApplicationURL(
- page_url, desired_sizes_in_pixel, favicon_results_callback, tracker);
- }
- if (history_service_) {
- return history_service_->GetLargestFaviconForURL(page_url, icon_types,
- minimum_size_in_pixels, callback, tracker);
- }
- return RunWithEmptyResultAsync(favicon_results_callback, tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURL(
- const GURL& page_url,
- int icon_types,
- int desired_size_in_dip,
- const favicon_base::FaviconResultsCallback& callback,
- base::CancelableTaskTracker* tracker) {
- return GetFaviconForPageURLImpl(
- page_url,
- icon_types,
- GetPixelSizesForFaviconScales(desired_size_in_dip),
- callback,
- tracker);
-}
-
-base::CancelableTaskTracker::TaskId
-FaviconService::UpdateFaviconMappingsAndFetch(
- const GURL& page_url,
- const std::vector<GURL>& icon_urls,
- int icon_types,
- int desired_size_in_dip,
- const favicon_base::FaviconResultsCallback& callback,
- base::CancelableTaskTracker* tracker) {
- if (history_service_) {
- return history_service_->UpdateFaviconMappingsAndFetch(
- page_url,
- icon_urls,
- icon_types,
- GetPixelSizesForFaviconScales(desired_size_in_dip),
- callback,
- tracker);
- }
- return RunWithEmptyResultAsync(callback, tracker);
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetLargestRawFaviconForID(
- favicon_base::FaviconID favicon_id,
- const favicon_base::FaviconRawBitmapCallback& callback,
- base::CancelableTaskTracker* tracker) {
- // Use 0 as |desired_size| to get the largest bitmap for |favicon_id| without
- // any resizing.
- int desired_size = 0;
- favicon_base::FaviconResultsCallback callback_runner =
- Bind(&FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults,
- base::Unretained(this),
- callback,
- desired_size);
-
- if (history_service_) {
- return history_service_->GetFaviconForID(
- favicon_id, desired_size, callback_runner, tracker);
- }
- return RunWithEmptyResultAsync(callback_runner, tracker);
-}
-
-void FaviconService::SetFaviconOutOfDateForPage(const GURL& page_url) {
- if (history_service_)
- history_service_->SetFaviconsOutOfDateForPage(page_url);
-}
-
-void FaviconService::CloneFavicon(const GURL& old_page_url,
- const GURL& new_page_url) {
- if (history_service_)
- history_service_->CloneFavicons(old_page_url, new_page_url);
-}
-
-void FaviconService::SetImportedFavicons(
- const favicon_base::FaviconUsageDataList& favicon_usage) {
- if (history_service_)
- history_service_->SetImportedFavicons(favicon_usage);
-}
-
-void FaviconService::MergeFavicon(
- const GURL& page_url,
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- scoped_refptr<base::RefCountedMemory> bitmap_data,
- const gfx::Size& pixel_size) {
- if (history_service_) {
- history_service_->MergeFavicon(page_url, icon_url, icon_type, bitmap_data,
- pixel_size);
- }
-}
-
-void FaviconService::SetFavicons(const GURL& page_url,
- const GURL& icon_url,
- favicon_base::IconType icon_type,
- const gfx::Image& image) {
- if (!history_service_)
- return;
-
- gfx::ImageSkia image_skia = image.AsImageSkia();
- image_skia.EnsureRepsForSupportedScales();
- const std::vector<gfx::ImageSkiaRep>& image_reps = image_skia.image_reps();
- std::vector<SkBitmap> bitmaps;
- const std::vector<float> favicon_scales = favicon_base::GetFaviconScales();
- for (size_t i = 0; i < image_reps.size(); ++i) {
- // Don't save if the scale isn't one of supported favicon scales.
- if (std::find(favicon_scales.begin(),
- favicon_scales.end(),
- image_reps[i].scale()) == favicon_scales.end()) {
- continue;
- }
- bitmaps.push_back(image_reps[i].sk_bitmap());
- }
- history_service_->SetFavicons(page_url, icon_type, icon_url, bitmaps);
-}
-
-void FaviconService::UnableToDownloadFavicon(const GURL& icon_url) {
- MissingFaviconURLHash url_hash = base::Hash(icon_url.spec());
- missing_favicon_urls_.insert(url_hash);
-}
-
-bool FaviconService::WasUnableToDownloadFavicon(const GURL& icon_url) const {
- MissingFaviconURLHash url_hash = base::Hash(icon_url.spec());
- return missing_favicon_urls_.find(url_hash) != missing_favicon_urls_.end();
-}
-
-void FaviconService::ClearUnableToDownloadFavicons() {
- missing_favicon_urls_.clear();
-}
-
-base::CancelableTaskTracker::TaskId FaviconService::GetFaviconForPageURLImpl(
- const GURL& page_url,
- int icon_types,
- const std::vector<int>& desired_sizes_in_pixel,
- const favicon_base::FaviconResultsCallback& callback,
- base::CancelableTaskTracker* tracker) {
- if (favicon_client_ && favicon_client_->IsNativeApplicationURL(page_url)) {
- return favicon_client_->GetFaviconForNativeApplicationURL(
- page_url, desired_sizes_in_pixel, callback, tracker);
- }
- if (history_service_) {
- return history_service_->GetFaviconsForURL(page_url,
- icon_types,
- desired_sizes_in_pixel,
- callback,
- tracker);
- }
- return RunWithEmptyResultAsync(callback, tracker);
-}
-
-void FaviconService::RunFaviconImageCallbackWithBitmapResults(
- const favicon_base::FaviconImageCallback& callback,
- int desired_size_in_dip,
- const std::vector<favicon_base::FaviconRawBitmapResult>&
- favicon_bitmap_results) {
- favicon_base::FaviconImageResult image_result;
- image_result.image = favicon_base::SelectFaviconFramesFromPNGs(
- favicon_bitmap_results,
- favicon_base::GetFaviconScales(),
- desired_size_in_dip);
- favicon_base::SetFaviconColorSpace(&image_result.image);
-
- image_result.icon_url = image_result.image.IsEmpty() ?
- GURL() : favicon_bitmap_results[0].icon_url;
- callback.Run(image_result);
-}
-
-void FaviconService::RunFaviconRawBitmapCallbackWithBitmapResults(
- const favicon_base::FaviconRawBitmapCallback& callback,
- int desired_size_in_pixel,
- const std::vector<favicon_base::FaviconRawBitmapResult>&
- favicon_bitmap_results) {
- if (favicon_bitmap_results.empty() || !favicon_bitmap_results[0].is_valid()) {
- callback.Run(favicon_base::FaviconRawBitmapResult());
- return;
- }
-
- favicon_base::FaviconRawBitmapResult bitmap_result =
- favicon_bitmap_results[0];
-
- // If the desired size is 0, SelectFaviconFrames() will return the largest
- // bitmap without doing any resizing. As |favicon_bitmap_results| has bitmap
- // data for a single bitmap, return it and avoid an unnecessary decode.
- if (desired_size_in_pixel == 0) {
- callback.Run(bitmap_result);
- return;
- }
-
- // If history bitmap is already desired pixel size, return early.
- if (bitmap_result.pixel_size.width() == desired_size_in_pixel &&
- bitmap_result.pixel_size.height() == desired_size_in_pixel) {
- callback.Run(bitmap_result);
- return;
- }
-
- // Convert raw bytes to SkBitmap, resize via SelectFaviconFrames(), then
- // convert back.
- std::vector<float> desired_favicon_scales;
- desired_favicon_scales.push_back(1.0f);
- gfx::Image resized_image = favicon_base::SelectFaviconFramesFromPNGs(
- favicon_bitmap_results, desired_favicon_scales, desired_size_in_pixel);
-
- std::vector<unsigned char> resized_bitmap_data;
- if (!gfx::PNGCodec::EncodeBGRASkBitmap(resized_image.AsBitmap(), false,
- &resized_bitmap_data)) {
- callback.Run(favicon_base::FaviconRawBitmapResult());
- return;
- }
-
- bitmap_result.bitmap_data = base::RefCountedBytes::TakeVector(
- &resized_bitmap_data);
- callback.Run(bitmap_result);
-}
« no previous file with comments | « chrome/browser/favicon/favicon_service.h ('k') | chrome/browser/favicon/favicon_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698