// 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_utils.h" #include "chrome/browser/bookmarks/bookmark_model_factory.h" #include "chrome/browser/favicon/favicon_service_factory.h" #include "chrome/browser/history/history_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search/search.h" #include "chrome/common/url_constants.h" #include "content/public/common/favicon_url.h" namespace favicon { void CreateContentFaviconDriverForWebContents( content::WebContents* web_contents) { DCHECK(web_contents); if (ContentFaviconDriver::FromWebContents(web_contents)) return; Profile* original_profile = Profile::FromBrowserContext(web_contents->GetBrowserContext()) ->GetOriginalProfile(); return ContentFaviconDriver::CreateForWebContents( web_contents, FaviconServiceFactory::GetForProfile( original_profile, ServiceAccessType::IMPLICIT_ACCESS), HistoryServiceFactory::GetForProfile(original_profile, ServiceAccessType::IMPLICIT_ACCESS), BookmarkModelFactory::GetForProfileIfExists(original_profile)); } bool ShouldDisplayFavicon(content::WebContents* web_contents) { // Always display a throbber during pending loads. const content::NavigationController& controller = web_contents->GetController(); if (controller.GetLastCommittedEntry() && controller.GetPendingEntry()) return true; GURL url = web_contents->GetURL(); if (url.SchemeIs(content::kChromeUIScheme) && url.host_piece() == chrome::kChromeUINewTabHost) { return false; } // No favicon on Instant New Tab Pages. if (search::IsInstantNTP(web_contents)) return false; return true; } } // namespace favicon