Chromium Code Reviews| 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(); |
| } |