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

Unified Diff: ios/chrome/browser/favicon/favicon_client_impl.mm

Issue 2609363003: Remove ChromeBrowserProvider::GetFaviconForURL(). (Closed)
Patch Set: Remove incorrect include and obsolete deps. Created 3 years, 11 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
Index: ios/chrome/browser/favicon/favicon_client_impl.mm
diff --git a/ios/chrome/browser/favicon/favicon_client_impl.mm b/ios/chrome/browser/favicon/favicon_client_impl.mm
index 860e48948644cb609d5a93b7a769a95e1f3cba08..5f4876804ac4e8334ecd3aacbeefccb75c7936c6 100644
--- a/ios/chrome/browser/favicon/favicon_client_impl.mm
+++ b/ios/chrome/browser/favicon/favicon_client_impl.mm
@@ -4,11 +4,21 @@
#include "ios/chrome/browser/favicon/favicon_client_impl.h"
+#include <memory>
+
#include "base/bind.h"
#include "base/logging.h"
+#include "base/memory/ptr_util.h"
#include "base/task/cancelable_task_tracker.h"
+#include "base/threading/thread_task_runner_handle.h"
+#include "components/favicon/core/favicon_service.h"
+#include "components/favicon_base/favicon_types.h"
+#include "components/favicon_base/select_favicon_frames.h"
+#include "components/grit/components_scaled_resources.h"
#include "ios/chrome/browser/chrome_url_constants.h"
-#include "ios/public/provider/chrome/browser/chrome_browser_provider.h"
+#include "ui/base/layout.h"
+#include "ui/base/resource/resource_bundle.h"
+#include "ui/gfx/favicon_size.h"
#include "url/gurl.h"
#if !defined(__has_feature) || !__has_feature(objc_arc)
@@ -17,19 +27,58 @@
namespace {
-void RunFaviconCallbackIfNotCanceled(
- const base::CancelableTaskTracker::IsCanceledCallback& is_canceled_cb,
- const favicon_base::FaviconResultsCallback& original_callback,
- const std::vector<favicon_base::FaviconRawBitmapResult>& results) {
- if (!is_canceled_cb.Run()) {
- original_callback.Run(results);
+int GetFaviconResourceIdForNativeURL(const GURL& url) {
+ if (url.host_piece() == kChromeUICrashesHost)
+ return IDR_CRASH_SAD_FAVICON;
+ if (url.host_piece() == kChromeUIFlagsHost)
+ return IDR_FLAGS_FAVICON;
+ if (url.host_piece() == kChromeUIAppleFlagsHost)
+ return IDR_FLAGS_FAVICON;
+ return -1;
+}
+
+void GetFaviconBitmapForNativeURL(
+ const GURL& url,
+ const std::vector<int>& desired_sizes_in_pixel,
+ std::vector<favicon_base::FaviconRawBitmapResult>* favicon_bitmap_results) {
+ const int resource_id = GetFaviconResourceIdForNativeURL(url);
+ if (resource_id == -1)
+ return;
+
+ // Use ui::GetSupportedScaleFactors() because native URL favicon comes from
+ // resources.
+ std::vector<ui::ScaleFactor> scale_factors = ui::GetSupportedScaleFactors();
+
+ std::vector<gfx::Size> candidate_sizes;
+ for (ui::ScaleFactor scale_factor : scale_factors) {
+ float scale = ui::GetScaleForScaleFactor(scale_factor);
+ int candidate_size = static_cast<int>(gfx::kFaviconSize * scale + 0.5f);
+ candidate_sizes.push_back(gfx::Size(candidate_size, candidate_size));
+ }
+
+ std::vector<size_t> selected_indices;
+ SelectFaviconFrameIndices(candidate_sizes, desired_sizes_in_pixel,
+ &selected_indices, nullptr);
+
+ for (size_t selected_index : selected_indices) {
+ ui::ScaleFactor scale_factor = scale_factors[selected_index];
+ favicon_base::FaviconRawBitmapResult favicon_bitmap;
+ favicon_bitmap.icon_type = favicon_base::FAVICON;
+ favicon_bitmap.pixel_size = candidate_sizes[selected_index];
+ favicon_bitmap.bitmap_data =
+ ResourceBundle::GetSharedInstance().LoadDataResourceBytesForScale(
+ resource_id, scale_factor);
+
+ if (!favicon_bitmap.is_valid())
+ continue;
+
+ favicon_bitmap_results->push_back(favicon_bitmap);
}
}
} // namespace
-FaviconClientImpl::FaviconClientImpl(ios::ChromeBrowserState* browser_state)
- : browser_state_(browser_state) {}
+FaviconClientImpl::FaviconClientImpl() {}
FaviconClientImpl::~FaviconClientImpl() {}
@@ -45,13 +94,14 @@ FaviconClientImpl::GetFaviconForNativeApplicationURL(
base::CancelableTaskTracker* tracker) {
DCHECK(tracker);
DCHECK(IsNativeApplicationURL(url));
- base::CancelableTaskTracker::IsCanceledCallback is_canceled_cb;
- base::CancelableTaskTracker::TaskId task_id =
- tracker->NewTrackedTaskId(&is_canceled_cb);
- if (task_id != base::CancelableTaskTracker::kBadTaskId) {
- ios::GetChromeBrowserProvider()->GetFaviconForURL(
- browser_state_, url, desired_sizes_in_pixel,
- base::Bind(&RunFaviconCallbackIfNotCanceled, is_canceled_cb, callback));
- }
- return task_id;
+
+ auto favicon_bitmap_results =
+ base::MakeUnique<std::vector<favicon_base::FaviconRawBitmapResult>>();
+ GetFaviconBitmapForNativeURL(url, desired_sizes_in_pixel,
+ favicon_bitmap_results.get());
+
+ return tracker->PostTask(
+ base::ThreadTaskRunnerHandle::Get().get(), FROM_HERE,
+ base::Bind(&favicon::FaviconService::FaviconResultsCallbackRunner,
+ callback, base::Owned(favicon_bitmap_results.release())));
}
« no previous file with comments | « ios/chrome/browser/favicon/favicon_client_impl.h ('k') | ios/chrome/browser/favicon/favicon_service_factory.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698