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 edf2fb31aef8055e3fd6dae9e0625f268a2687da..21c033c8e4021874aa97d8ed73b96499a4f6003f 100644 |
--- a/chrome/browser/extensions/api/tabs/tabs_event_router.cc |
+++ b/chrome/browser/extensions/api/tabs/tabs_event_router.cc |
@@ -149,6 +149,9 @@ void TabsEventRouter::RegisterForTabNotifications(WebContents* contents) { |
registrar_.Add(this, chrome::NOTIFICATION_FAVICON_UPDATED, |
content::Source<WebContents>(contents)); |
+ |
+ registrar_.Add(this, content::NOTIFICATION_WEB_CONTENTS_ZOOM_CHANGE, |
+ content::Source<WebContents>(contents)); |
} |
void TabsEventRouter::UnregisterForTabNotifications(WebContents* contents) { |
@@ -158,6 +161,8 @@ void TabsEventRouter::UnregisterForTabNotifications(WebContents* contents) { |
content::Source<WebContents>(contents)); |
registrar_.Remove(this, chrome::NOTIFICATION_FAVICON_UPDATED, |
content::Source<WebContents>(contents)); |
+ registrar_.Remove(this, content::NOTIFICATION_WEB_CONTENTS_ZOOM_CHANGE, |
+ content::Source<WebContents>(contents)); |
} |
void TabsEventRouter::OnBrowserRemoved(Browser* browser) { |
@@ -473,6 +478,27 @@ void TabsEventRouter::DispatchTabUpdatedEvent( |
ExtensionSystem::Get(profile)->event_router()->BroadcastEvent(event.Pass()); |
} |
+void TabsEventRouter::DispatchTabZoomChangeEvent( |
+ WebContents* contents, |
+ double old_zoom_factor, |
+ double new_zoom_factor, |
+ base::DictionaryValue* zoom_settings) { |
+ DCHECK(contents); |
+ scoped_ptr<base::ListValue> args(new base::ListValue); |
+ int tab_id = ExtensionTabUtil::GetTabId(contents); |
+ if (tab_id >= 0) { |
Fady Samuel
2014/04/07 20:01:14
Early exist preferred.
if (tab_id < 0)
return;
paulmeyer
2014/04/07 20:56:10
Done.
|
+ args->AppendInteger(tab_id); |
+ args->AppendDouble(old_zoom_factor); |
+ args->AppendDouble(new_zoom_factor); |
+ args->Append(zoom_settings); |
+ |
+ Profile* profile = Profile::FromBrowserContext( |
+ contents->GetBrowserContext()); |
+ DispatchEvent(profile, tabs::OnZoomChange::kEventName, args.Pass(), |
+ EventRouter::USER_GESTURE_UNKNOWN); |
+ } |
+} |
+ |
TabsEventRouter::TabEntry* TabsEventRouter::GetTabEntry( |
const WebContents* contents) { |
int tab_id = ExtensionTabUtil::GetTabId(contents); |
@@ -502,6 +528,17 @@ void TabsEventRouter::Observe(int type, |
bool icon_url_changed = *content::Details<bool>(details).ptr(); |
if (icon_url_changed) |
FaviconUrlUpdated(content::Source<WebContents>(source).ptr()); |
+ } else if (type == content::NOTIFICATION_WEB_CONTENTS_ZOOM_CHANGE) { |
+ content::ZoomChangeDetails zoom_change_details = |
+ *content::Details<content::ZoomChangeDetails>(details).ptr(); |
+ double old_zoom_factor = |
+ content::ZoomLevelToZoomFactor(zoom_change_details.old_zoom_level); |
+ double new_zoom_factor = |
+ content::ZoomLevelToZoomFactor(zoom_change_details.new_zoom_level); |
+ base::DictionaryValue* zoom_settings = new base::DictionaryValue(); |
+ ZoomModeToZoomSettings(zoom_change_details.zoom_mode, zoom_settings); |
+ DispatchTabZoomChangeEvent(content::Source<WebContents>(source).ptr(), |
+ old_zoom_factor, new_zoom_factor, zoom_settings); |
} else { |
NOTREACHED(); |
} |