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..e5cab99e90c90c3ec41c0a024c8a6e66304dee4f 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, |
not at google - send to devlin
2014/04/09 03:52:11
it's a shame this uses notifications rather than a
paulmeyer
2014/04/11 03:01:02
Jam just expressed something similar about the not
|
+ 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)); |
not at google - send to devlin
2014/04/09 03:52:11
this code should be using registar_.RemoveAll()
paulmeyer
2014/04/11 03:01:02
I agree, although I'm not using this notification
not at google - send to devlin
2014/04/11 15:04:25
Probably not. Somebody can clean those up separate
|
} |
void TabsEventRouter::OnBrowserRemoved(Browser* browser) { |
@@ -473,6 +478,28 @@ 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) |
+ return; |
+ |
+ args->AppendInteger(tab_id); |
+ args->AppendDouble(old_zoom_factor); |
+ args->AppendDouble(new_zoom_factor); |
+ args->Append(zoom_settings); |
not at google - send to devlin
2014/04/09 03:52:11
a model will be getting generated for OnZoomChange
paulmeyer
2014/04/11 03:01:02
Done.
|
+ |
+ 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 +529,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(); |
} |