Index: chrome/browser/extensions/api/tabs/tabs_event_router.cc |
diff --git a/chrome/browser/extensions/api/tabs/tabs_event_router.cc b/chrome/browser/extensions/api/tabs/tabs_event_router.cc |
index baab0e12ffeef2f666fae69c5454aeff8b6e8550..8cbd5349d61f2d9d735d9f9355b83a2655213310 100644 |
--- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc |
+++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc |
@@ -11,6 +11,7 @@ |
#include "chrome/browser/extensions/api/tabs/tabs_windows_api.h" |
#include "chrome/browser/extensions/api/tabs/windows_event_router.h" |
#include "chrome/browser/extensions/extension_tab_util.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/browser_iterator.h" |
@@ -94,7 +95,8 @@ base::DictionaryValue* TabsEventRouter::TabEntry::DidNavigate( |
return changed_properties; |
} |
-TabsEventRouter::TabsEventRouter(Profile* profile) : profile_(profile) { |
+TabsEventRouter::TabsEventRouter(Profile* profile) |
+ : profile_(profile), favicon_scoped_observer_(this) { |
DCHECK(!profile->IsOffTheRecord()); |
BrowserList::AddObserver(this); |
@@ -148,8 +150,7 @@ void TabsEventRouter::RegisterForTabNotifications(WebContents* contents) { |
registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
content::Source<WebContents>(contents)); |
- registrar_.Add(this, chrome::NOTIFICATION_FAVICON_UPDATED, |
- content::Source<WebContents>(contents)); |
+ favicon_scoped_observer_.Add(FaviconTabHelper::FromWebContents(contents)); |
ZoomController::FromWebContents(contents)->AddObserver(this); |
} |
@@ -159,8 +160,7 @@ void TabsEventRouter::UnregisterForTabNotifications(WebContents* contents) { |
content::Source<NavigationController>(&contents->GetController())); |
registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
content::Source<WebContents>(contents)); |
- registrar_.Remove(this, chrome::NOTIFICATION_FAVICON_UPDATED, |
- content::Source<WebContents>(contents)); |
+ favicon_scoped_observer_.Remove(FaviconTabHelper::FromWebContents(contents)); |
ZoomController::FromWebContents(contents)->RemoveObserver(this); |
} |
@@ -501,12 +501,8 @@ void TabsEventRouter::Observe(int type, |
content::Source<NavigationController>(&contents->GetController())); |
registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_DESTROYED, |
content::Source<WebContents>(contents)); |
- registrar_.Remove(this, chrome::NOTIFICATION_FAVICON_UPDATED, |
- content::Source<WebContents>(contents)); |
- } else if (type == chrome::NOTIFICATION_FAVICON_UPDATED) { |
- bool icon_url_changed = *content::Details<bool>(details).ptr(); |
- if (icon_url_changed) |
- FaviconUrlUpdated(content::Source<WebContents>(source).ptr()); |
+ favicon_scoped_observer_.Remove( |
+ FaviconTabHelper::FromWebContents(contents)); |
} else { |
NOTREACHED(); |
} |
@@ -585,4 +581,16 @@ void TabsEventRouter::OnZoomChanged( |
EventRouter::USER_GESTURE_UNKNOWN); |
} |
+void TabsEventRouter::OnFaviconAvailable(const gfx::Image& image) { |
+} |
+ |
+void TabsEventRouter::OnFaviconUpdated(favicon::FaviconDriver* favicon_driver, |
+ bool icon_url_changed) { |
+ if (icon_url_changed) { |
+ FaviconTabHelper* favicon_tab_helper = |
+ static_cast<FaviconTabHelper*>(favicon_driver); |
+ FaviconUrlUpdated(favicon_tab_helper->web_contents()); |
+ } |
+} |
+ |
} // namespace extensions |