From ba638ecda16b54d3f17259b860e705609cf11827 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sat, 25 Nov 2017 16:11:24 -0800 Subject: [PATCH] =?UTF-8?q?Normalize=20homePageURL=20in=20FaviconDownloade?= =?UTF-8?q?r=20=E2=80=94=20this=20avoids=20doing=20duplicate=20work=20for?= =?UTF-8?q?=20http://foo.com/=20and=20http://foo.com=20=E2=80=94=20they?= =?UTF-8?q?=E2=80=99re=20both=20treated=20as=20http://foo.com/?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Evergreen/Favicons/FaviconDownloader.swift | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/Evergreen/Favicons/FaviconDownloader.swift b/Evergreen/Favicons/FaviconDownloader.swift index f59a74f52..ef4717d72 100644 --- a/Evergreen/Favicons/FaviconDownloader.swift +++ b/Evergreen/Favicons/FaviconDownloader.swift @@ -61,7 +61,7 @@ final class FaviconDownloader { func favicon(withHomePageURL homePageURL: String) -> NSImage? { - guard let seekingFavicon = seekingFavicon(with: homePageURL) else { + guard let seekingFavicon = seekingFavicon(with: normalizedHomePageURL(homePageURL)) else { return nil } return favicon(withSeekingFavicon: seekingFavicon) @@ -92,6 +92,26 @@ final class FaviconDownloader { private extension FaviconDownloader { + private static let localeForLowercasing = Locale(identifier: "en_US") + + func normalizedHomePageURL(_ url: String) -> String { + + // Many times the homePageURL is missing a trailing /. + // We add one when needed. + + guard !url.hasSuffix("/") else { + return url + } + let lowercasedURL = url.lowercased(with: FaviconDownloader.localeForLowercasing) + guard lowercasedURL.hasPrefix("http://") || lowercasedURL.hasPrefix("https://") else { + return url + } + guard url.components(separatedBy: "/").count < 4 else { + return url + } + return url + "/" + } + @discardableResult func favicon(withSeekingFavicon seekingFavicon: SeekingFavicon) -> NSImage? {