| // Copyright 2018 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. |
| |
| #import "ios/web_view/internal/cwv_favicon_internal.h" |
| |
| #import <UIKit/UIKit.h> |
| |
| #import "net/base/mac/url_conversions.h" |
| #include "ui/gfx/geometry/size.h" |
| #include "url/gurl.h" |
| |
| #if !defined(__has_feature) || !__has_feature(objc_arc) |
| #error "This file requires ARC support." |
| #endif |
| |
| namespace ios_web_view { |
| // Converts web::FaviconURL::IconType to CWVFaviconType. |
| CWVFaviconType ConvertIconTypeFromWebToCWV(web::FaviconURL::IconType iconType) { |
| switch (iconType) { |
| case web::FaviconURL::IconType::kInvalid: |
| return CWVFaviconTypeInvalid; |
| case web::FaviconURL::IconType::kFavicon: |
| return CWVFaviconTypeFavicon; |
| case web::FaviconURL::IconType::kTouchIcon: |
| return CWVFaviconTypeTouchIcon; |
| case web::FaviconURL::IconType::kTouchPrecomposedIcon: |
| return CWVFaviconTypeTouchPrecomposedIcon; |
| case web::FaviconURL::IconType::kWebManifestIcon: |
| return CWVFaviconTypeWebManifestIcon; |
| } |
| } |
| } // namespace ios_web_view |
| |
| @implementation CWVFavicon |
| |
| @synthesize URL = _URL; |
| @synthesize type = _type; |
| @synthesize sizes = _sizes; |
| |
| + (NSArray<CWVFavicon*>*)faviconsFromFaviconURLs: |
| (const std::vector<web::FaviconURL>&)faviconURLs { |
| NSMutableArray<CWVFavicon*>* favicons = [NSMutableArray array]; |
| for (const auto& faviconURL : faviconURLs) { |
| CWVFavicon* favicon = [[CWVFavicon alloc] initWithFaviconURL:faviconURL]; |
| [favicons addObject:favicon]; |
| } |
| return [favicons copy]; |
| } |
| |
| - (instancetype)initWithFaviconURL:(web::FaviconURL)faviconURL { |
| self = [super init]; |
| if (self) { |
| _URL = net::NSURLWithGURL(faviconURL.icon_url); |
| |
| _type = ios_web_view::ConvertIconTypeFromWebToCWV(faviconURL.icon_type); |
| |
| NSMutableArray<NSValue*>* sizes = [NSMutableArray array]; |
| for (const auto& size : faviconURL.icon_sizes) { |
| NSValue* value = |
| [NSValue valueWithCGSize:CGSizeMake(size.width(), size.height())]; |
| [sizes addObject:value]; |
| } |
| _sizes = [sizes copy]; |
| } |
| return self; |
| } |
| |
| @end |