|  | // 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 |