diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-03 21:15:04 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-03 21:15:04 +0000 |
commit | b375c5d778c54e62bf74c5c51ce76edb3520e1dc (patch) | |
tree | 539128cf7124a4ec9587408276ca9524cabea227 | |
parent | fc1dd7291703907024908821ad69b8d6903e96d8 (diff) | |
download | chromium_src-b375c5d778c54e62bf74c5c51ce76edb3520e1dc.zip chromium_src-b375c5d778c54e62bf74c5c51ce76edb3520e1dc.tar.gz chromium_src-b375c5d778c54e62bf74c5c51ce76edb3520e1dc.tar.bz2 |
Move favicon from TabContents to TabContentsWrapper.
BUG=71097
TEST=no visible change
Review URL: http://codereview.chromium.org/6909027
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@83966 0039d316-1c4b-4281-b951-d872f2087c98
30 files changed, 233 insertions, 192 deletions
diff --git a/chrome/browser/aeropeek_manager.cc b/chrome/browser/aeropeek_manager.cc index 7c1d3d5..55ba475 100644 --- a/chrome/browser/aeropeek_manager.cc +++ b/chrome/browser/aeropeek_manager.cc @@ -17,6 +17,7 @@ #include "base/win/windows_version.h" #include "chrome/browser/app_icon_win.h" #include "chrome/browser/browser_process.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/tab_contents/thumbnail_generator.h" #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/ui/browser_list.h" @@ -1069,7 +1070,7 @@ void AeroPeekManager::CreateAeroPeekWindowIfNecessary(TabContentsWrapper* tab, GetTabID(tab->tab_contents()), foreground, tab->tab_contents()->GetTitle(), - tab->tab_contents()->GetFavicon()); + tab->favicon_tab_helper()->GetFavicon()); tab_list_.push_back(window); } @@ -1174,7 +1175,7 @@ void AeroPeekManager::TabChangedAt(TabContentsWrapper* contents, // hurting the rendering performance. (These functions just save the // information needed for handling update requests from Windows.) window->SetTitle(contents->tab_contents()->GetTitle()); - window->SetFavicon(contents->tab_contents()->GetFavicon()); + window->SetFavicon(contents->favicon_tab_helper()->GetFavicon()); window->Update(contents->tab_contents()->is_loading()); } diff --git a/chrome/browser/extensions/extension_tabs_module.cc b/chrome/browser/extensions/extension_tabs_module.cc index df2baf2..90db625 100644 --- a/chrome/browser/extensions/extension_tabs_module.cc +++ b/chrome/browser/extensions/extension_tabs_module.cc @@ -8,6 +8,7 @@ #include <vector> #include "base/base64.h" +#include "base/memory/ref_counted_memory.h" #include "base/string_number_conversions.h" #include "base/string_util.h" #include "base/stringprintf.h" diff --git a/chrome/browser/favicon/favicon_tab_helper.cc b/chrome/browser/favicon/favicon_tab_helper.cc index f6908fb..ecaa29b 100644 --- a/chrome/browser/favicon/favicon_tab_helper.cc +++ b/chrome/browser/favicon/favicon_tab_helper.cc @@ -6,7 +6,12 @@ #include "chrome/browser/defaults.h" #include "chrome/browser/favicon/favicon_handler.h" +#include "chrome/browser/history/history.h" +#include "chrome/browser/profiles/profile.h" #include "chrome/common/icon_messages.h" +#include "content/browser/tab_contents/tab_contents.h" +#include "content/browser/webui/web_ui.h" +#include "ui/gfx/codec/png_codec.h" FaviconTabHelper::FaviconTabHelper(TabContents* tab_contents) : TabContentsObserver(tab_contents) { @@ -26,6 +31,73 @@ void FaviconTabHelper::FetchFavicon(const GURL& url) { touch_icon_handler_->FetchFavicon(url); } +SkBitmap FaviconTabHelper::GetFavicon() const { + // Like GetTitle(), we also want to use the favicon for the last committed + // entry rather than a pending navigation entry. + const NavigationController& controller = tab_contents()->controller(); + NavigationEntry* entry = controller.GetTransientEntry(); + if (entry) + return entry->favicon().bitmap(); + + entry = controller.GetLastCommittedEntry(); + if (entry) + return entry->favicon().bitmap(); + return SkBitmap(); +} + +bool FaviconTabHelper::FaviconIsValid() const { + const NavigationController& controller = tab_contents()->controller(); + NavigationEntry* entry = controller.GetTransientEntry(); + if (entry) + return entry->favicon().is_valid(); + + entry = controller.GetLastCommittedEntry(); + if (entry) + return entry->favicon().is_valid(); + + return false; +} + +bool FaviconTabHelper::ShouldDisplayFavicon() { + // Always display a throbber during pending loads. + const NavigationController& controller = tab_contents()->controller(); + if (controller.GetLastCommittedEntry() && controller.pending_entry()) + return true; + + WebUI* web_ui = tab_contents()->GetWebUIForCurrentState(); + if (web_ui) + return !web_ui->hide_favicon(); + return true; +} + +void FaviconTabHelper::SaveFavicon() { + NavigationEntry* entry = tab_contents()->controller().GetActiveEntry(); + if (!entry || entry->url().is_empty()) + return; + + // Make sure the page is in history, otherwise adding the favicon does + // nothing. + HistoryService* history = tab_contents()->profile()-> + GetOriginalProfile()->GetHistoryService(Profile::IMPLICIT_ACCESS); + if (!history) + return; + history->AddPageNoVisitForBookmark(entry->url()); + + FaviconService* service = tab_contents()->profile()-> + GetOriginalProfile()->GetFaviconService(Profile::IMPLICIT_ACCESS); + if (!service) + return; + const NavigationEntry::FaviconStatus& favicon(entry->favicon()); + if (!favicon.is_valid() || favicon.url().is_empty() || + favicon.bitmap().empty()) { + return; + } + std::vector<unsigned char> image_data; + gfx::PNGCodec::EncodeBGRASkBitmap(favicon.bitmap(), false, &image_data); + service->SetFavicon( + entry->url(), favicon.url(), image_data, history::FAVICON); +} + int FaviconTabHelper::DownloadImage(const GURL& image_url, int image_size, history::IconType icon_type, @@ -39,6 +111,25 @@ int FaviconTabHelper::DownloadImage(const GURL& image_url, return 0; } +void FaviconTabHelper::NavigateToPendingEntry( + const GURL& url, + NavigationController::ReloadType reload_type) { + if (reload_type != NavigationController::NO_RELOAD && + !tab_contents()->profile()->IsOffTheRecord()) { + FaviconService* favicon_service = + tab_contents()->profile()->GetFaviconService(Profile::IMPLICIT_ACCESS); + if (favicon_service) + favicon_service->SetFaviconOutOfDateForPage(url); + } +} + +void FaviconTabHelper::DidNavigateMainFramePostCommit( + const NavigationController::LoadCommittedDetails& details, + const ViewHostMsg_FrameNavigate_Params& params) { + // Get the favicon, either from history or request it from the net. + FetchFavicon(details.entry->url()); +} + bool FaviconTabHelper::OnMessageReceived(const IPC::Message& message) { bool message_handled = true; IPC_BEGIN_MESSAGE_MAP(FaviconTabHelper, message) diff --git a/chrome/browser/favicon/favicon_tab_helper.h b/chrome/browser/favicon/favicon_tab_helper.h index 64064f4..a558848 100644 --- a/chrome/browser/favicon/favicon_tab_helper.h +++ b/chrome/browser/favicon/favicon_tab_helper.h @@ -15,7 +15,6 @@ class FaviconHandler; class NavigationEntry; -class Profile; class RefCountedMemory; class SkBitmap; class TabContents; @@ -37,6 +36,22 @@ class FaviconTabHelper : public TabContentsObserver { // Initiates loading the favicon for the specified url. void FetchFavicon(const GURL& url); + // Returns the favicon for this tab, or IDR_DEFAULT_FAVICON if the tab does + // not have a favicon. The default implementation uses the current navigation + // entry. This will return an isNull bitmap if there are no navigation + // entries, which should rarely happen. + SkBitmap GetFavicon() const; + + // Returns true if we are not using the default favicon. + bool FaviconIsValid() const; + + // Returns whether the favicon should be displayed. If this returns false, no + // space is provided for the favicon, and the favicon is never displayed. + virtual bool ShouldDisplayFavicon(); + + // Saves the favicon for the current page. + void SaveFavicon(); + // Initiates loading an image from given |image_url|. Returns a download id // for caller to track the request. When download completes, |callback| is // called with the three params: the download_id, a boolean flag to indicate @@ -57,6 +72,12 @@ class FaviconTabHelper : public TabContentsObserver { private: // TabContentsObserver overrides. + virtual void NavigateToPendingEntry( + const GURL& url, + NavigationController::ReloadType reload_type) OVERRIDE; + virtual void DidNavigateMainFramePostCommit( + const NavigationController::LoadCommittedDetails& details, + const ViewHostMsg_FrameNavigate_Params& params) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; void OnDidDownloadFavicon(int id, diff --git a/chrome/browser/prerender/prerender_manager.cc b/chrome/browser/prerender/prerender_manager.cc index 93fff74..c545f11 100644 --- a/chrome/browser/prerender/prerender_manager.cc +++ b/chrome/browser/prerender/prerender_manager.cc @@ -9,6 +9,7 @@ #include "base/metrics/histogram.h" #include "base/time.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/prerender/prerender_contents.h" #include "chrome/browser/prerender/prerender_final_status.h" #include "chrome/browser/profiles/profile.h" @@ -486,7 +487,10 @@ bool PrerenderManager::MaybeUsePreloadedPageOld(TabContents* tab_contents, if (!icon_url.is_empty()) { std::vector<FaviconURL> urls; urls.push_back(FaviconURL(icon_url, FaviconURL::FAVICON)); - tab_contents->favicon_helper().OnUpdateFaviconURL( + // TODO(avi): move prerendering to use TCWs; remove this. + TabContentsWrapper* wrapper = + TabContentsWrapper::GetCurrentWrapperForContents(tab_contents); + wrapper->favicon_tab_helper()->OnUpdateFaviconURL( prerender_contents->page_id(), urls); } diff --git a/chrome/browser/task_manager/task_manager_resource_providers.cc b/chrome/browser/task_manager/task_manager_resource_providers.cc index 8e98c9d..9e7daf3 100644 --- a/chrome/browser/task_manager/task_manager_resource_providers.cc +++ b/chrome/browser/task_manager/task_manager_resource_providers.cc @@ -20,6 +20,7 @@ #include "chrome/browser/extensions/extension_host.h" #include "chrome/browser/extensions/extension_process_manager.h" #include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/notifications/balloon_collection.h" #include "chrome/browser/notifications/balloon_host.h" #include "chrome/browser/notifications/notification_ui_manager.h" @@ -205,7 +206,7 @@ string16 TaskManagerTabContentsResource::GetTitle() const { } SkBitmap TaskManagerTabContentsResource::GetIcon() const { - return tab_contents_->tab_contents()->GetFavicon(); + return tab_contents_->favicon_tab_helper()->GetFavicon(); } TabContentsWrapper* TaskManagerTabContentsResource::GetTabContents() const { diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc index ed185a4..bc4bd8d 100644 --- a/chrome/browser/ui/browser.cc +++ b/chrome/browser/ui/browser.cc @@ -48,6 +48,7 @@ #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tab_helper.h" #include "chrome/browser/extensions/extension_tabs_module.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/first_run/first_run.h" #include "chrome/browser/google/google_url_tracker.h" #include "chrome/browser/google/google_util.h" @@ -815,10 +816,10 @@ bool Browser::GetSavedMaximizedState() const { } SkBitmap Browser::GetCurrentPageIcon() const { - TabContents* contents = GetSelectedTabContents(); + TabContentsWrapper* contents = GetSelectedTabContentsWrapper(); // |contents| can be NULL since GetCurrentPageIcon() is called by the window // during the window's creation (before tabs have been added). - return contents ? contents->GetFavicon() : SkBitmap(); + return contents ? contents->favicon_tab_helper()->GetFavicon() : SkBitmap(); } string16 Browser::GetWindowTitleForCurrentTab() const { @@ -964,6 +965,7 @@ int Browser::GetIndexOfController( TabContentsWrapper* Browser::GetSelectedTabContentsWrapper() const { return tabstrip_model()->GetSelectedTabContents(); } + TabContentsWrapper* Browser::GetTabContentsWrapperAt(int index) const { return tabstrip_model()->GetTabContentsAt(index); } @@ -1591,13 +1593,13 @@ void Browser::BookmarkCurrentPage() { GURL url; string16 title; - TabContents* tab = GetSelectedTabContents(); - bookmark_utils::GetURLAndTitleToBookmark(tab, &url, &title); + TabContentsWrapper* tab = GetSelectedTabContentsWrapper(); + bookmark_utils::GetURLAndTitleToBookmark(tab->tab_contents(), &url, &title); bool was_bookmarked = model->IsBookmarked(url); if (!was_bookmarked && profile_->IsOffTheRecord()) { // If we're incognito the favicon may not have been saved. Save it now // so that bookmarks have an icon for the page. - tab->SaveFavicon(); + tab->favicon_tab_helper()->SaveFavicon(); } model->SetURLStarred(url, title, true); // Make sure the model actually added a bookmark before showing the star. A diff --git a/chrome/browser/ui/cocoa/hung_renderer_controller.mm b/chrome/browser/ui/cocoa/hung_renderer_controller.mm index 3334bfe..6be12ca 100644 --- a/chrome/browser/ui/cocoa/hung_renderer_controller.mm +++ b/chrome/browser/ui/cocoa/hung_renderer_controller.mm @@ -147,7 +147,7 @@ HungRendererController* g_instance = NULL; if (title.empty()) title = TabContentsWrapper::GetDefaultTitle(); [titles addObject:base::SysUTF16ToNSString(title)]; - [favicons addObject:mac::FaviconForTabContents(it->tab_contents())]; + [favicons addObject:mac::FaviconForTabContents(*it)]; } } hungTitles_.reset([titles copy]); diff --git a/chrome/browser/ui/cocoa/tab_contents/favicon_util.h b/chrome/browser/ui/cocoa/tab_contents/favicon_util.h index 051ef8c..2996745 100644 --- a/chrome/browser/ui/cocoa/tab_contents/favicon_util.h +++ b/chrome/browser/ui/cocoa/tab_contents/favicon_util.h @@ -6,14 +6,14 @@ #define CHROME_BROWSER_UI_COCOA_TAB_CONTENTS_FAVICON_UTIL_H_ @class NSImage; -class TabContents; +class TabContentsWrapper; namespace mac { -// Returns an autoreleased favicon for a given TabContents. If |contents| is -// NULL or there's no favicon for the NavigationEntry, this will return the +// Returns an autoreleased favicon for a given TabContentsWrapper. If |contents| +// is NULL or there's no favicon for the NavigationEntry, this will return the // default image. -NSImage* FaviconForTabContents(TabContents* contents); +NSImage* FaviconForTabContents(TabContentsWrapper* contents); } // namespace mac diff --git a/chrome/browser/ui/cocoa/tab_contents/favicon_util.mm b/chrome/browser/ui/cocoa/tab_contents/favicon_util.mm index 3fcba52..580f9ca 100644 --- a/chrome/browser/ui/cocoa/tab_contents/favicon_util.mm +++ b/chrome/browser/ui/cocoa/tab_contents/favicon_util.mm @@ -8,20 +8,20 @@ #include "app/mac/nsimage_cache.h" #include "base/mac/mac_util.h" -#include "content/browser/tab_contents/tab_contents.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "skia/ext/skia_utils_mac.h" namespace mac { -NSImage* FaviconForTabContents(TabContents* contents) { +NSImage* FaviconForTabContents(TabContentsWrapper* contents) { // TabContents returns IDR_DEFAULT_FAVICON, which is a rasterized version of // the Mac PDF. Use the PDF so the icon in the Omnibox matches the default // favicon. - if (contents && contents->FaviconIsValid()) { + if (contents && contents->favicon_tab_helper()->FaviconIsValid()) { CGColorSpaceRef color_space = base::mac::GetSystemColorSpace(); - NSImage* image = - gfx::SkBitmapToNSImageWithColorSpace(contents->GetFavicon(), - color_space); + NSImage* image = gfx::SkBitmapToNSImageWithColorSpace( + contents->favicon_tab_helper()->GetFavicon(), color_space); // The |image| could be nil if the bitmap is null. In that case, fallback // to the default image. if (image) { diff --git a/chrome/browser/ui/cocoa/tabpose_window.mm b/chrome/browser/ui/cocoa/tabpose_window.mm index bf9e8c3..a8ba03e1 100644 --- a/chrome/browser/ui/cocoa/tabpose_window.mm +++ b/chrome/browser/ui/cocoa/tabpose_window.mm @@ -505,7 +505,7 @@ NSImage* Tile::favicon() const { if (bitmap) return gfx::SkBitmapToNSImage(*bitmap); } - return mac::FaviconForTabContents(contents_->tab_contents()); + return mac::FaviconForTabContents(contents_); } NSRect Tile::GetTitleStartRectRelativeTo(const Tile& tile) const { diff --git a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm index 63b8e2a..958d98b 100644 --- a/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm +++ b/chrome/browser/ui/cocoa/tabs/tab_strip_controller.mm @@ -17,19 +17,19 @@ #include "chrome/browser/autocomplete/autocomplete.h" #include "chrome/browser/autocomplete/autocomplete_classifier.h" #include "chrome/browser/autocomplete/autocomplete_match.h" +#include "chrome/browser/debugger/devtools_window.h" #include "chrome/browser/extensions/extension_tab_helper.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" +#include "chrome/browser/net/url_fixer_upper.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" -#include "chrome/browser/debugger/devtools_window.h" -#include "chrome/browser/net/url_fixer_upper.h" #include "chrome/browser/sidebar/sidebar_container.h" #include "chrome/browser/sidebar/sidebar_manager.h" #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/tabs/tab_strip_selection_model.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_navigator.h" -#include "chrome/browser/ui/find_bar/find_tab_helper.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h" #import "chrome/browser/ui/cocoa/constrained_window_mac.h" #import "chrome/browser/ui/cocoa/image_button_cell.h" @@ -44,9 +44,10 @@ #import "chrome/browser/ui/cocoa/tracking_area.h" #include "chrome/browser/ui/find_bar/find_bar.h" #include "chrome/browser/ui/find_bar/find_bar_controller.h" -#include "chrome/browser/ui/title_prefix_matcher.h" +#include "chrome/browser/ui/find_bar/find_tab_helper.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/browser/ui/tabs/tab_menu_model.h" +#include "chrome/browser/ui/title_prefix_matcher.h" #include "chrome/common/chrome_switches.h" #include "chrome/common/pref_names.h" #include "content/browser/tab_contents/navigation_controller.h" @@ -155,7 +156,7 @@ private: - (void)addSubviewToPermanentList:(NSView*)aView; - (void)regenerateSubviewList; - (NSInteger)indexForContentsView:(NSView*)view; -- (void)updateFaviconForContents:(TabContents*)contents +- (void)updateFaviconForContents:(TabContentsWrapper*)contents atIndex:(NSInteger)modelIndex; - (void)layoutTabsWithAnimation:(BOOL)animate regenerateSubviews:(BOOL)doUpdate; @@ -1192,7 +1193,7 @@ class NotificationBridge : public NotificationObserver { // dragging a tab out into a new window, we have to put the tab's favicon // into the right state up front as we won't be told to do it from anywhere // else. - [self updateFaviconForContents:contents->tab_contents() atIndex:modelIndex]; + [self updateFaviconForContents:contents atIndex:modelIndex]; [self updateCommonTitlePrefix]; @@ -1407,16 +1408,14 @@ class NotificationBridge : public NotificationObserver { // A helper routine for creating an NSImageView to hold the favicon or app icon // for |contents|. -- (NSImageView*)iconImageViewForContents:(TabContents*)contents { - TabContentsWrapper* wrapper = - TabContentsWrapper::GetCurrentWrapperForContents(contents); - BOOL isApp = wrapper->extension_tab_helper()->is_app(); +- (NSImageView*)iconImageViewForContents:(TabContentsWrapper*)contents { + BOOL isApp = contents->extension_tab_helper()->is_app(); NSImage* image = nil; // Favicons come from the renderer, and the renderer draws everything in the // system color space. CGColorSpaceRef colorSpace = base::mac::GetSystemColorSpace(); if (isApp) { - SkBitmap* icon = wrapper->extension_tab_helper()->GetExtensionAppIcon(); + SkBitmap* icon = contents->extension_tab_helper()->GetExtensionAppIcon(); if (icon) image = gfx::SkBitmapToNSImageWithColorSpace(*icon, colorSpace); } else { @@ -1435,7 +1434,7 @@ class NotificationBridge : public NotificationObserver { // Updates the current loading state, replacing the icon view with a favicon, // a throbber, the default icon, or nothing at all. -- (void)updateFaviconForContents:(TabContents*)contents +- (void)updateFaviconForContents:(TabContentsWrapper*)contents atIndex:(NSInteger)modelIndex { if (!contents) return; @@ -1455,19 +1454,19 @@ class NotificationBridge : public NotificationObserver { TabController* tabController = [tabArray_ objectAtIndex:index]; bool oldHasIcon = [tabController iconView] != nil; - bool newHasIcon = contents->ShouldDisplayFavicon() || + bool newHasIcon = contents->favicon_tab_helper()->ShouldDisplayFavicon() || tabStripModel_->IsMiniTab(modelIndex); // Always show icon if mini. TabLoadingState oldState = [tabController loadingState]; TabLoadingState newState = kTabDone; NSImage* throbberImage = nil; - if (contents->is_crashed()) { + if (contents->tab_contents()->is_crashed()) { newState = kTabCrashed; newHasIcon = true; - } else if (contents->waiting_for_response()) { + } else if (contents->tab_contents()->waiting_for_response()) { newState = kTabWaiting; throbberImage = throbberWaitingImage; - } else if (contents->is_loading()) { + } else if (contents->tab_contents()->is_loading()) { newState = kTabLoading; throbberImage = throbberLoadingImage; } @@ -1527,7 +1526,7 @@ class NotificationBridge : public NotificationObserver { if (change != TabStripModelObserver::LOADING_ONLY) [self setTabTitle:tabController withContents:contents->tab_contents()]; - [self updateFaviconForContents:contents->tab_contents() atIndex:modelIndex]; + [self updateFaviconForContents:contents atIndex:modelIndex]; TabContentsController* updatedController = [tabContentsArray_ objectAtIndex:index]; @@ -1584,7 +1583,7 @@ class NotificationBridge : public NotificationObserver { [tabController setPinned:tabStripModel_->IsTabPinned(modelIndex)]; [tabController setApp:tabStripModel_->IsAppTab(modelIndex)]; [tabController setUrl:contents->tab_contents()->GetURL()]; - [self updateFaviconForContents:contents->tab_contents() atIndex:modelIndex]; + [self updateFaviconForContents:contents atIndex:modelIndex]; // If the tab is being restored and it's pinned, the mini state is set after // the tab has already been rendered, so re-layout the tabstrip. In all other // cases, the state is set before the tab is rendered so this isn't needed. diff --git a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc index b46dda6..43767c3 100644 --- a/chrome/browser/ui/content_settings/content_setting_bubble_model.cc +++ b/chrome/browser/ui/content_settings/content_setting_bubble_model.cc @@ -7,6 +7,7 @@ #include "base/command_line.h" #include "base/utf_string_conversions.h" #include "chrome/browser/content_settings/host_content_settings_map.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/geolocation/geolocation_content_settings_map.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" @@ -395,7 +396,7 @@ class ContentSettingPopupBubbleModel : public ContentSettingSingleRadioGroup { title = l10n_util::GetStringUTF8(IDS_TAB_LOADING_TITLE); PopupItem popup_item; popup_item.title = title; - popup_item.bitmap = (*i)->tab_contents()->GetFavicon(); + popup_item.bitmap = (*i)->favicon_tab_helper()->GetFavicon(); popup_item.tab_contents = (*i); add_popup(popup_item); } diff --git a/chrome/browser/ui/gtk/hung_renderer_dialog_gtk.cc b/chrome/browser/ui/gtk/hung_renderer_dialog_gtk.cc index 237d89c..aac3e5a 100644 --- a/chrome/browser/ui/gtk/hung_renderer_dialog_gtk.cc +++ b/chrome/browser/ui/gtk/hung_renderer_dialog_gtk.cc @@ -8,6 +8,7 @@ #include "base/process_util.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/gtk/gtk_util.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" @@ -156,7 +157,7 @@ void HungRendererDialogGtk::ShowForTabContents(TabContents* hung_contents) { std::string title = UTF16ToUTF8(it->tab_contents()->GetTitle()); if (title.empty()) title = UTF16ToUTF8(TabContentsWrapper::GetDefaultTitle()); - SkBitmap favicon = it->tab_contents()->GetFavicon(); + SkBitmap favicon = it->favicon_tab_helper()->GetFavicon(); GdkPixbuf* pixbuf = NULL; if (favicon.width() > 0) diff --git a/chrome/browser/ui/gtk/location_bar_view_gtk.cc b/chrome/browser/ui/gtk/location_bar_view_gtk.cc index 37d7411..65cafac 100644 --- a/chrome/browser/ui/gtk/location_bar_view_gtk.cc +++ b/chrome/browser/ui/gtk/location_bar_view_gtk.cc @@ -22,6 +22,7 @@ #include "chrome/browser/extensions/extension_browser_event_router.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/extensions/extension_tabs_module.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/instant/instant_controller.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engines/template_url.h" @@ -558,7 +559,7 @@ void LocationBarViewGtk::OnSetFocus() { } SkBitmap LocationBarViewGtk::GetFavicon() const { - return GetTabContents()->GetFavicon(); + return GetTabContentsWrapper()->favicon_tab_helper()->GetFavicon(); } string16 LocationBarViewGtk::GetTitle() const { diff --git a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc b/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc index ebc60c8..9394154 100644 --- a/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc +++ b/chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc @@ -10,6 +10,7 @@ #include "base/utf_string_conversions.h" #include "chrome/browser/defaults.h" #include "chrome/browser/extensions/extension_tab_helper.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/gtk/bookmarks/bookmark_utils_gtk.h" @@ -287,6 +288,8 @@ void TabRendererGtk::UpdateData(TabContents* contents, bool app, bool loading_only) { DCHECK(contents); + TabContentsWrapper* wrapper = + TabContentsWrapper::GetCurrentWrapperForContents(contents); theme_service_ = GtkThemeService::GetFrom(contents->profile()); if (!loading_only) { @@ -300,7 +303,7 @@ void TabRendererGtk::UpdateData(TabContents* contents, if (app_icon) data_.favicon = *app_icon; else - data_.favicon = contents->GetFavicon(); + data_.favicon = wrapper->favicon_tab_helper()->GetFavicon(); data_.app = app; // This is kind of a hacky way to determine whether our icon is the default @@ -317,7 +320,7 @@ void TabRendererGtk::UpdateData(TabContents* contents, // Loading state also involves whether we show the favicon, since that's where // we display the throbber. data_.loading = contents->is_loading(); - data_.show_icon = contents->ShouldDisplayFavicon(); + data_.show_icon = wrapper->favicon_tab_helper()->ShouldDisplayFavicon(); } void TabRendererGtk::UpdateFromModel() { diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc index 5da386f7..6f16c26 100644 --- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc +++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.cc @@ -15,6 +15,7 @@ #include "chrome/browser/custom_handlers/register_protocol_handler_infobar_delegate.h" #include "chrome/browser/extensions/extension_tab_helper.h" #include "chrome/browser/extensions/extension_webnavigation_api.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/file_select_helper.h" #include "chrome/browser/history/history.h" #include "chrome/browser/history/top_sites.h" @@ -71,6 +72,7 @@ TabContentsWrapper::TabContentsWrapper(TabContents* contents) blocked_content_tab_helper_.reset(new BlockedContentTabHelper(this)); download_tab_helper_.reset(new DownloadTabHelper(contents)); extension_tab_helper_.reset(new ExtensionTabHelper(this)); + favicon_tab_helper_.reset(new FaviconTabHelper(contents)); find_tab_helper_.reset(new FindTabHelper(contents)); password_manager_delegate_.reset(new PasswordManagerDelegateImpl(contents)); password_manager_.reset( diff --git a/chrome/browser/ui/tab_contents/tab_contents_wrapper.h b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h index 46ae069..d34ea40 100644 --- a/chrome/browser/ui/tab_contents/tab_contents_wrapper.h +++ b/chrome/browser/ui/tab_contents/tab_contents_wrapper.h @@ -32,6 +32,7 @@ class DownloadTabHelper; class Extension; class ExtensionTabHelper; class ExtensionWebNavigationTabObserver; +class FaviconTabHelper; class FileSelectObserver; class FindTabHelper; class NavigationController; @@ -130,6 +131,8 @@ class TabContentsWrapper : public NotificationObserver, FindTabHelper* find_tab_helper() { return find_tab_helper_.get(); } + FaviconTabHelper* favicon_tab_helper() { return favicon_tab_helper_.get(); } + PasswordManager* password_manager() { return password_manager_.get(); } printing::PrintViewManager* print_view_manager() { @@ -196,7 +199,7 @@ class TabContentsWrapper : public NotificationObserver, bool is_starred_; // Shows an info-bar to users when they search from a known search engine and - // have never used the monibox for search before. + // have never used the omnibox for search before. scoped_ptr<OmniboxSearchHint> omnibox_search_hint_; // Tab Helpers --------------------------------------------------------------- @@ -209,6 +212,7 @@ class TabContentsWrapper : public NotificationObserver, scoped_ptr<BlockedContentTabHelper> blocked_content_tab_helper_; scoped_ptr<DownloadTabHelper> download_tab_helper_; scoped_ptr<ExtensionTabHelper> extension_tab_helper_; + scoped_ptr<FaviconTabHelper> favicon_tab_helper_; scoped_ptr<FindTabHelper> find_tab_helper_; // PasswordManager and its delegate. The delegate must outlive the manager, diff --git a/chrome/browser/ui/views/create_application_shortcut_view.cc b/chrome/browser/ui/views/create_application_shortcut_view.cc index ffee0fb..eef988f 100644 --- a/chrome/browser/ui/views/create_application_shortcut_view.cc +++ b/chrome/browser/ui/views/create_application_shortcut_view.cc @@ -8,6 +8,7 @@ #include "base/utf_string_conversions.h" #include "base/win/windows_version.h" #include "chrome/browser/extensions/extension_tab_helper.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" @@ -453,7 +454,7 @@ void CreateUrlApplicationShortcutView::FetchIcon() { pending_download_ = new IconDownloadCallbackFunctor(this); DCHECK(pending_download_); - tab_contents_->tab_contents()->favicon_helper().DownloadImage( + tab_contents_->favicon_tab_helper()->DownloadImage( unprocessed_icons_.back().url, std::max(unprocessed_icons_.back().width, unprocessed_icons_.back().height), diff --git a/chrome/browser/ui/views/hung_renderer_view.cc b/chrome/browser/ui/views/hung_renderer_view.cc index 89db727..2db7e15 100644 --- a/chrome/browser/ui/views/hung_renderer_view.cc +++ b/chrome/browser/ui/views/hung_renderer_view.cc @@ -6,6 +6,7 @@ #include "base/i18n/rtl.h" #include "base/utf_string_conversions.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/ui/browser_list.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/common/chrome_constants.h" @@ -55,7 +56,7 @@ class HungPagesTableModel : public views::GroupTableModel { virtual void GetGroupRangeForItem(int item, views::GroupRange* range); private: - typedef std::vector<TabContents*> TabContentsVector; + typedef std::vector<TabContentsWrapper*> TabContentsVector; TabContentsVector tab_contentses_; ui::TableModelObserver* observer_; @@ -77,7 +78,7 @@ void HungPagesTableModel::InitForTabContents(TabContents* hung_contents) { for (TabContentsIterator it; !it.done(); ++it) { if (it->tab_contents()->GetRenderProcessHost() == hung_contents->GetRenderProcessHost()) - tab_contentses_.push_back((*it)->tab_contents()); + tab_contentses_.push_back(*it); } // The world is different. if (observer_) @@ -93,7 +94,7 @@ int HungPagesTableModel::RowCount() { string16 HungPagesTableModel::GetText(int row, int column_id) { DCHECK(row >= 0 && row < RowCount()); - string16 title = tab_contentses_[row]->GetTitle(); + string16 title = tab_contentses_[row]->tab_contents()->GetTitle(); if (title.empty()) title = TabContentsWrapper::GetDefaultTitle(); // TODO(xji): Consider adding a special case if the title text is a URL, @@ -105,7 +106,7 @@ string16 HungPagesTableModel::GetText(int row, int column_id) { SkBitmap HungPagesTableModel::GetIcon(int row) { DCHECK(row >= 0 && row < RowCount()); - return tab_contentses_.at(row)->GetFavicon(); + return tab_contentses_.at(row)->favicon_tab_helper()->GetFavicon(); } void HungPagesTableModel::SetObserver(ui::TableModelObserver* observer) { diff --git a/chrome/browser/ui/views/location_bar/location_bar_view.cc b/chrome/browser/ui/views/location_bar/location_bar_view.cc index 90eaf29..31c680f 100644 --- a/chrome/browser/ui/views/location_bar/location_bar_view.cc +++ b/chrome/browser/ui/views/location_bar/location_bar_view.cc @@ -17,6 +17,7 @@ #include "chrome/browser/defaults.h" #include "chrome/browser/extensions/extension_browser_event_router.h" #include "chrome/browser/extensions/extension_service.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/instant/instant_controller.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/search_engines/template_url.h" @@ -838,7 +839,7 @@ void LocationBarView::OnSetFocus() { } SkBitmap LocationBarView::GetFavicon() const { - return GetTabContentsFromDelegate(delegate_)->GetFavicon(); + return delegate_->GetTabContentsWrapper()->favicon_tab_helper()->GetFavicon(); } string16 LocationBarView::GetTitle() const { @@ -1040,11 +1041,13 @@ void LocationBarView::WriteDragDataForView(views::View* sender, DCHECK_NE(GetDragOperationsForView(sender, press_pt), ui::DragDropTypes::DRAG_NONE); - TabContents* tab_contents = GetTabContentsFromDelegate(delegate_); + TabContentsWrapper* tab_contents = delegate_->GetTabContentsWrapper(); DCHECK(tab_contents); - drag_utils::SetURLAndDragImage(tab_contents->GetURL(), - UTF16ToWideHack(tab_contents->GetTitle()), - tab_contents->GetFavicon(), data); + drag_utils::SetURLAndDragImage( + tab_contents->tab_contents()->GetURL(), + UTF16ToWideHack(tab_contents->tab_contents()->GetTitle()), + tab_contents->favicon_tab_helper()->GetFavicon(), + data); } int LocationBarView::GetDragOperationsForView(views::View* sender, diff --git a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc index f713844..b77e496 100644 --- a/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc +++ b/chrome/browser/ui/views/tabs/browser_tab_strip_controller.cc @@ -7,6 +7,7 @@ #include "base/auto_reset.h" #include "base/command_line.h" #include "chrome/browser/extensions/extension_tab_helper.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/tabs/tab_strip_model.h" #include "chrome/browser/ui/browser.h" @@ -417,14 +418,14 @@ void BrowserTabStripController::SetTabRendererDataFromModel( if (app_icon) data->favicon = *app_icon; else - data->favicon = contents->GetFavicon(); + data->favicon = wrapper->favicon_tab_helper()->GetFavicon(); data->network_state = TabContentsNetworkState(contents); data->title = contents->GetTitle(); data->url = contents->GetURL(); data->loading = contents->is_loading(); data->crashed_status = contents->crashed_status(); data->incognito = contents->profile()->IsOffTheRecord(); - data->show_icon = contents->ShouldDisplayFavicon(); + data->show_icon = wrapper->favicon_tab_helper()->ShouldDisplayFavicon(); data->mini = model_->IsMiniTab(model_index); data->blocked = model_->IsTabBlocked(model_index); data->app = wrapper->extension_tab_helper()->is_app(); diff --git a/chrome/browser/ui/web_applications/web_app_ui.cc b/chrome/browser/ui/web_applications/web_app_ui.cc index 746679d..b125963 100644 --- a/chrome/browser/ui/web_applications/web_app_ui.cc +++ b/chrome/browser/ui/web_applications/web_app_ui.cc @@ -9,6 +9,7 @@ #include "base/task.h" #include "base/win/windows_version.h" #include "chrome/browser/extensions/extension_tab_helper.h" +#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/web_applications/web_app.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" @@ -133,7 +134,7 @@ void UpdateShortcutWorker::DownloadIcon() { return; } - tab_contents_->tab_contents()->favicon_helper().DownloadImage( + tab_contents_->favicon_tab_helper()->DownloadImage( unprocessed_icons_.back().url, std::max(unprocessed_icons_.back().width, unprocessed_icons_.back().height), @@ -304,7 +305,7 @@ void GetShortcutInfoForTab(TabContentsWrapper* tab_contents_wrapper, tab_contents->GetTitle()) : app_info.title; info->description = app_info.description; - info->favicon = tab_contents->GetFavicon(); + info->favicon = tab_contents_wrapper->favicon_tab_helper()->GetFavicon(); } void UpdateShortcutForTabContents(TabContentsWrapper* tab_contents) { diff --git a/content/browser/webui/web_ui_unittest.cc b/chrome/browser/ui/webui/web_ui_unittest.cc index 8c77777..0d4543c 100644 --- a/content/browser/webui/web_ui_unittest.cc +++ b/chrome/browser/ui/webui/web_ui_unittest.cc @@ -2,16 +2,18 @@ // 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_tab_helper.h" +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" +#include "chrome/browser/ui/tab_contents/test_tab_contents_wrapper.h" #include "chrome/common/url_constants.h" #include "chrome/test/testing_profile.h" #include "content/browser/browser_thread.h" -#include "content/browser/renderer_host/test_render_view_host.h" #include "content/browser/site_instance.h" #include "content/browser/tab_contents/navigation_controller.h" #include "content/browser/tab_contents/test_tab_contents.h" #include "testing/gtest/include/gtest/gtest.h" -class WebUITest : public RenderViewHostTestHarness { +class WebUITest : public TabContentsWrapperTestHarness { public: WebUITest() : ui_thread_(BrowserThread::UI, MessageLoop::current()) {} @@ -19,7 +21,8 @@ class WebUITest : public RenderViewHostTestHarness { // state, through pending, committed, then another navigation. The first page // ID that we should use is passed as a parameter. We'll use the next two // values. This must be increasing for the life of the tests. - static void DoNavigationTest(TabContents* contents, int page_id) { + static void DoNavigationTest(TabContentsWrapper* wrapper, int page_id) { + TabContents* contents = wrapper->tab_contents(); NavigationController* controller = &contents->controller(); // Start a pending load. @@ -32,7 +35,7 @@ class WebUITest : public RenderViewHostTestHarness { // Check the things the pending Web UI should have set. EXPECT_FALSE(contents->ShouldDisplayURL()); - EXPECT_FALSE(contents->ShouldDisplayFavicon()); + EXPECT_FALSE(wrapper->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_TRUE(contents->ShouldShowBookmarkBar()); EXPECT_TRUE(contents->FocusLocationBarByDefault()); @@ -42,7 +45,7 @@ class WebUITest : public RenderViewHostTestHarness { // The same flags should be set as before now that the load has committed. EXPECT_FALSE(contents->ShouldDisplayURL()); - EXPECT_FALSE(contents->ShouldDisplayFavicon()); + EXPECT_FALSE(wrapper->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_TRUE(contents->ShouldShowBookmarkBar()); EXPECT_TRUE(contents->FocusLocationBarByDefault()); @@ -53,7 +56,7 @@ class WebUITest : public RenderViewHostTestHarness { // Check the flags. Some should reflect the new page (URL, title), some // should reflect the old one (bookmark bar) until it has committed. EXPECT_TRUE(contents->ShouldDisplayURL()); - EXPECT_TRUE(contents->ShouldDisplayFavicon()); + EXPECT_TRUE(wrapper->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_TRUE(contents->ShouldShowBookmarkBar()); EXPECT_FALSE(contents->FocusLocationBarByDefault()); @@ -73,7 +76,7 @@ class WebUITest : public RenderViewHostTestHarness { // The state should now reflect a regular page. EXPECT_TRUE(contents->ShouldDisplayURL()); - EXPECT_TRUE(contents->ShouldDisplayFavicon()); + EXPECT_TRUE(wrapper->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_FALSE(contents->ShouldShowBookmarkBar()); EXPECT_FALSE(contents->FocusLocationBarByDefault()); } @@ -88,15 +91,16 @@ class WebUITest : public RenderViewHostTestHarness { // TabContents when we first navigate to a Web UI page, then to a standard // non-DOM-UI page. TEST_F(WebUITest, WebUIToStandard) { - DoNavigationTest(contents(), 1); + DoNavigationTest(contents_wrapper(), 1); // Test the case where we're not doing the initial navigation. This is // slightly different than the very-first-navigation case since the // SiteInstance will be the same (the original TabContents must still be // alive), which will trigger different behavior in RenderViewHostManager. - TestTabContents contents2(profile_.get(), NULL); + TestTabContents* contents2 = new TestTabContents(profile_.get(), NULL); + TabContentsWrapper wrapper2(contents2); - DoNavigationTest(&contents2, 101); + DoNavigationTest(&wrapper2, 101); } TEST_F(WebUITest, WebUIToWebUI) { @@ -111,7 +115,8 @@ TEST_F(WebUITest, WebUIToWebUI) { // The flags should be the same as the non-pending state. EXPECT_FALSE(contents()->ShouldDisplayURL()); - EXPECT_FALSE(contents()->ShouldDisplayFavicon()); + EXPECT_FALSE( + contents_wrapper()->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_TRUE(contents()->ShouldShowBookmarkBar()); EXPECT_TRUE(contents()->FocusLocationBarByDefault()); } @@ -124,14 +129,14 @@ TEST_F(WebUITest, StandardToWebUI) { // The state should now reflect the default. EXPECT_TRUE(contents()->ShouldDisplayURL()); - EXPECT_TRUE(contents()->ShouldDisplayFavicon()); + EXPECT_TRUE(contents_wrapper()->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_FALSE(contents()->ShouldShowBookmarkBar()); EXPECT_FALSE(contents()->FocusLocationBarByDefault()); // Commit the load, the state should be the same. rvh()->SendNavigate(1, std_url); EXPECT_TRUE(contents()->ShouldDisplayURL()); - EXPECT_TRUE(contents()->ShouldDisplayFavicon()); + EXPECT_TRUE(contents_wrapper()->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_FALSE(contents()->ShouldShowBookmarkBar()); EXPECT_FALSE(contents()->FocusLocationBarByDefault()); @@ -139,7 +144,7 @@ TEST_F(WebUITest, StandardToWebUI) { GURL new_tab_url(chrome::kChromeUINewTabURL); controller().LoadURL(new_tab_url, GURL(), PageTransition::LINK); EXPECT_FALSE(contents()->ShouldDisplayURL()); - EXPECT_TRUE(contents()->ShouldDisplayFavicon()); + EXPECT_TRUE(contents_wrapper()->favicon_tab_helper()->ShouldDisplayFavicon()); EXPECT_FALSE(contents()->ShouldShowBookmarkBar()); EXPECT_TRUE(contents()->FocusLocationBarByDefault()); diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi index d97d2d74..bb20efa 100644 --- a/chrome/chrome_tests.gypi +++ b/chrome/chrome_tests.gypi @@ -1776,6 +1776,7 @@ 'browser/ui/webui/print_preview_ui_html_source_unittest.cc', 'browser/ui/webui/sync_internals_ui_unittest.cc', 'browser/ui/webui/theme_source_unittest.cc', + 'browser/ui/webui/web_ui_unittest.cc', 'browser/ui/window_sizer_unittest.cc', 'browser/ui/window_snapshot/window_snapshot_mac_unittest.mm', 'browser/user_style_sheet_watcher_unittest.cc', @@ -1898,7 +1899,6 @@ '../content/browser/tab_contents/navigation_controller_unittest.cc', '../content/browser/tab_contents/navigation_entry_unittest.cc', '../content/browser/tab_contents/render_view_host_manager_unittest.cc', - '../content/browser/webui/web_ui_unittest.cc', '../content/common/font_descriptor_mac_unittest.mm', '../content/common/gpu/gpu_feature_flags_unittest.cc', '../content/common/gpu/gpu_info_unittest.cc', diff --git a/content/browser/DEPS b/content/browser/DEPS index 5a7dec8..245dcfb 100644 --- a/content/browser/DEPS +++ b/content/browser/DEPS @@ -2,7 +2,7 @@ include_rules = [ "+content/gpu", # For gpu_info_collector.h. Needs to move to common\gpu.
# Listing of the remaining #chrome includes in content\browser. People are
- # actively working on reducing this to 0. Do not add anymore!
+ # actively working on reducing this to 0. Do not add any more!
"+chrome/browser/accessibility/browser_accessibility_state.h",
@@ -49,9 +49,6 @@ include_rules = [ "+chrome/browser/external_protocol_handler.h",
- "+chrome/browser/favicon/favicon_tab_helper.h",
- "+chrome/browser/favicon/favicon_service.h",
-
# http://crbug.com/76794
"+chrome/browser/history/history.h",
"+chrome/browser/history/history_types.h",
diff --git a/content/browser/tab_contents/tab_contents.cc b/content/browser/tab_contents/tab_contents.cc index 624691b..4119f0f 100644 --- a/content/browser/tab_contents/tab_contents.cc +++ b/content/browser/tab_contents/tab_contents.cc @@ -23,7 +23,6 @@ #include "chrome/browser/download/download_manager.h" #include "chrome/browser/download/download_request_limiter.h" #include "chrome/browser/external_protocol_handler.h" -#include "chrome/browser/favicon/favicon_service.h" #include "chrome/browser/history/history.h" #include "chrome/browser/history/history_types.h" #include "chrome/browser/load_from_memory_cache_details.h" @@ -343,7 +342,6 @@ TabContents::~TabContents() { void TabContents::AddObservers() { content_settings_delegate_.reset(new TabSpecificContentSettings(this)); - favicon_tab_helper_.reset(new FaviconTabHelper(this)); plugin_observer_.reset(new PluginObserver(this)); net::NetworkChangeNotifier::AddOnlineStateObserver(this); } @@ -482,42 +480,6 @@ bool TabContents::ShouldDisplayURL() { return true; } -SkBitmap TabContents::GetFavicon() const { - // Like GetTitle(), we also want to use the favicon for the last committed - // entry rather than a pending navigation entry. - NavigationEntry* entry = controller_.GetTransientEntry(); - if (entry) - return entry->favicon().bitmap(); - - entry = controller_.GetLastCommittedEntry(); - if (entry) - return entry->favicon().bitmap(); - return SkBitmap(); -} - -bool TabContents::FaviconIsValid() const { - NavigationEntry* entry = controller_.GetTransientEntry(); - if (entry) - return entry->favicon().is_valid(); - - entry = controller_.GetLastCommittedEntry(); - if (entry) - return entry->favicon().is_valid(); - - return false; -} - -bool TabContents::ShouldDisplayFavicon() { - // Always display a throbber during pending loads. - if (controller_.GetLastCommittedEntry() && controller_.pending_entry()) - return true; - - WebUI* web_ui = GetWebUIForCurrentState(); - if (web_ui) - return !web_ui->hide_favicon(); - return true; -} - void TabContents::AddObserver(TabContentsObserver* observer) { observers_.AddObserver(observer); } @@ -673,15 +635,9 @@ bool TabContents::NavigateToEntry( } // Notify observers about navigation. - FOR_EACH_OBSERVER(TabContentsObserver, observers_, NavigateToPendingEntry()); - - if (reload_type != NavigationController::NO_RELOAD && - !profile()->IsOffTheRecord()) { - FaviconService* favicon_service = - profile()->GetFaviconService(Profile::IMPLICIT_ACCESS); - if (favicon_service) - favicon_service->SetFaviconOutOfDateForPage(entry.url()); - } + FOR_EACH_OBSERVER(TabContentsObserver, + observers_, + NavigateToPendingEntry(entry.url(), reload_type)); return true; } @@ -715,34 +671,6 @@ void TabContents::ShowPageInfo(const GURL& url, delegate_->ShowPageInfo(profile(), url, ssl, show_history); } -void TabContents::SaveFavicon() { - NavigationEntry* entry = controller_.GetActiveEntry(); - if (!entry || entry->url().is_empty()) - return; - - // Make sure the page is in history, otherwise adding the favicon does - // nothing. - HistoryService* history = profile()->GetOriginalProfile()->GetHistoryService( - Profile::IMPLICIT_ACCESS); - if (!history) - return; - history->AddPageNoVisitForBookmark(entry->url()); - - FaviconService* service = profile()->GetOriginalProfile()->GetFaviconService( - Profile::IMPLICIT_ACCESS); - if (!service) - return; - const NavigationEntry::FaviconStatus& favicon(entry->favicon()); - if (!favicon.is_valid() || favicon.url().is_empty() || - favicon.bitmap().empty()) { - return; - } - std::vector<unsigned char> image_data; - gfx::PNGCodec::EncodeBGRASkBitmap(favicon.bitmap(), false, &image_data); - service->SetFavicon( - entry->url(), favicon.url(), image_data, history::FAVICON); -} - ConstrainedWindow* TabContents::CreateConstrainedDialog( ConstrainedWindowDelegate* delegate) { ConstrainedWindow* window = @@ -1372,9 +1300,6 @@ void TabContents::DidNavigateMainFramePostCommit( // Allow the new page to set the title again. received_page_title_ = false; - // Get the favicon, either from history or request it from the net. - favicon_tab_helper_->FetchFavicon(details.entry->url()); - if (!details.is_in_page) { // Once the main frame is navigated, we're no longer considered to have // displayed insecure content. diff --git a/content/browser/tab_contents/tab_contents.h b/content/browser/tab_contents/tab_contents.h index 9dc47a6..bfba774 100644 --- a/content/browser/tab_contents/tab_contents.h +++ b/content/browser/tab_contents/tab_contents.h @@ -15,7 +15,6 @@ #include "base/gtest_prod_util.h" #include "base/memory/scoped_ptr.h" #include "base/string16.h" -#include "chrome/browser/favicon/favicon_tab_helper.h" #include "chrome/browser/prefs/pref_change_registrar.h" #include "chrome/browser/tab_contents/tab_specific_content_settings.h" #include "chrome/browser/ui/app_modal_dialogs/js_modal_dialog.h" @@ -152,11 +151,6 @@ class TabContents : public PageNavigator, return view_.get(); } - // Returns the FaviconTabHelper of this TabContents. - FaviconTabHelper& favicon_helper() { - return *favicon_tab_helper_.get(); - } - // Tab navigation state ------------------------------------------------------ // Returns the current navigation properties, which if a navigation is @@ -185,19 +179,6 @@ class TabContents : public PageNavigator, // the user is invited to type into it. virtual bool ShouldDisplayURL(); - // Returns the favicon for this tab, or IDR_DEFAULT_FAVICON if the tab does - // not have a favicon. The default implementation uses the current navigation - // entry. This will return an isNull bitmap if there are no navigation - // entries, which should rarely happen. - SkBitmap GetFavicon() const; - - // Returns true if we are not using the default favicon. - bool FaviconIsValid() const; - - // Returns whether the favicon should be displayed. If this returns false, no - // space is provided for the favicon, and the favicon is never displayed. - virtual bool ShouldDisplayFavicon(); - // Return whether this tab contents is loading a resource. bool is_loading() const { return is_loading_; } @@ -322,9 +303,6 @@ class TabContents : public PageNavigator, const NavigationEntry::SSLStatus& ssl, bool show_history); - // Saves the favicon for the current page. - void SaveFavicon(); - // Window management --------------------------------------------------------- // Create a new window constrained to this TabContents' clip and visibility. @@ -573,6 +551,10 @@ class TabContents : public PageNavigator, // Query the WebUIFactory for the TypeID for the current URL. WebUI::TypeID GetWebUITypeForCurrentState(); + // Returns the WebUI for the current state of the tab. This will either be + // the pending WebUI, the committed WebUI, or NULL. + WebUI* GetWebUIForCurrentState(); + // From RenderViewHostDelegate. virtual RenderViewHostDelegate::ContentSettings* GetContentSettingsDelegate(); @@ -668,10 +650,6 @@ class TabContents : public PageNavigator, void ExpireInfoBars( const NavigationController::LoadCommittedDetails& details); - // Returns the WebUI for the current state of the tab. This will either be - // the pending WebUI, the committed WebUI, or NULL. - WebUI* GetWebUIForCurrentState(); - // Navigation helpers -------------------------------------------------------- // // These functions are helpers for Navigate() and DidNavigate(). @@ -887,9 +865,6 @@ class TabContents : public PageNavigator, // Handles drag and drop event forwarding to extensions. BookmarkDrag* bookmark_drag_; - // Handles downloading favicons. - scoped_ptr<FaviconTabHelper> favicon_tab_helper_; - // RenderViewHost::ContentSettingsDelegate. scoped_ptr<TabSpecificContentSettings> content_settings_delegate_; @@ -959,10 +934,6 @@ class TabContents : public PageNavigator, // once. bool notify_disconnection_; - // Maps from handle to page_id. - typedef std::map<FaviconService::Handle, int32> HistoryRequestMap; - HistoryRequestMap history_requests_; - #if defined(OS_WIN) // Handle to an event that's set when the page is showing a message box (or // equivalent constrained window). Plugin processes check this to know if diff --git a/content/browser/tab_contents/tab_contents_observer.cc b/content/browser/tab_contents/tab_contents_observer.cc index 50bf910..5649de6 100644 --- a/content/browser/tab_contents/tab_contents_observer.cc +++ b/content/browser/tab_contents/tab_contents_observer.cc @@ -25,7 +25,9 @@ void TabContentsObserver::Registrar::Observe(TabContents* tab) { tab_->AddObserver(observer_); } -void TabContentsObserver::NavigateToPendingEntry() { +void TabContentsObserver::NavigateToPendingEntry( + const GURL& url, + NavigationController::ReloadType reload_type) { } void TabContentsObserver::DidNavigateMainFramePostCommit( diff --git a/content/browser/tab_contents/tab_contents_observer.h b/content/browser/tab_contents/tab_contents_observer.h index 9169cb0..bc1aba2 100644 --- a/content/browser/tab_contents/tab_contents_observer.h +++ b/content/browser/tab_contents/tab_contents_observer.h @@ -37,7 +37,9 @@ class TabContentsObserver : public IPC::Channel::Listener, DISALLOW_COPY_AND_ASSIGN(Registrar); }; - virtual void NavigateToPendingEntry(); + virtual void NavigateToPendingEntry( + const GURL& url, + NavigationController::ReloadType reload_type); virtual void DidNavigateMainFramePostCommit( const NavigationController::LoadCommittedDetails& details, |