Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(177)

Side by Side Diff: chrome/browser/extensions/api/tabs/windows_event_router.cc

Issue 1099553002: extensions: windows: list all windows from the current profile (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: nit Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/extensions/api/tabs/windows_event_router.h" 5 #include "chrome/browser/extensions/api/tabs/windows_event_router.h"
6 6
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "chrome/browser/chrome_notification_types.h" 8 #include "chrome/browser/chrome_notification_types.h"
9 #include "chrome/browser/extensions/api/tabs/app_base_window.h" 9 #include "chrome/browser/extensions/api/tabs/app_base_window.h"
10 #include "chrome/browser/extensions/api/tabs/app_window_controller.h" 10 #include "chrome/browser/extensions/api/tabs/app_window_controller.h"
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 const content::NotificationDetails& details) { 131 const content::NotificationDetails& details) {
132 #if defined(OS_MACOSX) 132 #if defined(OS_MACOSX)
133 if (chrome::NOTIFICATION_NO_KEY_WINDOW == type) { 133 if (chrome::NOTIFICATION_NO_KEY_WINDOW == type) {
134 OnActiveWindowChanged(nullptr); 134 OnActiveWindowChanged(nullptr);
135 return; 135 return;
136 } 136 }
137 #endif 137 #endif
138 } 138 }
139 139
140 static bool WillDispatchWindowFocusedEvent( 140 static bool WillDispatchWindowFocusedEvent(
141 BrowserContext* new_active_context, 141 WindowController* window_controller,
142 int window_id,
143 BrowserContext* context, 142 BrowserContext* context,
144 const Extension* extension, 143 const Extension* extension,
145 base::ListValue* event_args, 144 base::ListValue* event_args,
146 const base::DictionaryValue* listener_filter) { 145 const base::DictionaryValue* listener_filter) {
146 int window_id = window_controller ? window_controller->GetWindowId()
147 : extension_misc::kUnknownWindowId;
148 Profile* new_active_context =
149 window_controller ? window_controller->profile() : nullptr;
150
147 // When switching between windows in the default and incognito profiles, 151 // When switching between windows in the default and incognito profiles,
148 // dispatch WINDOW_ID_NONE to extensions whose profile lost focus that 152 // dispatch WINDOW_ID_NONE to extensions whose profile lost focus that
149 // can't see the new focused window across the incognito boundary. 153 // can't see the new focused window across the incognito boundary.
150 // See crbug.com/46610. 154 // See crbug.com/46610.
151 if (new_active_context && new_active_context != context && 155 if (new_active_context && new_active_context != context &&
152 !util::CanCrossIncognito(extension, context)) { 156 !util::CanCrossIncognito(extension, context)) {
153 event_args->Clear(); 157 event_args->Clear();
154 event_args->Append(new base::FundamentalValue( 158 event_args->Append(new base::FundamentalValue(
155 extension_misc::kUnknownWindowId)); 159 extension_misc::kUnknownWindowId));
156 } else { 160 } else {
(...skipping 21 matching lines...) Expand all
178 focused_profile_ = window_profile; 182 focused_profile_ = window_profile;
179 focused_window_id_ = window_id; 183 focused_window_id_ = window_id;
180 184
181 if (!HasEventListener(windows::OnFocusChanged::kEventName)) 185 if (!HasEventListener(windows::OnFocusChanged::kEventName))
182 return; 186 return;
183 187
184 scoped_ptr<Event> event(new Event(events::WINDOWS_ON_FOCUS_CHANGED, 188 scoped_ptr<Event> event(new Event(events::WINDOWS_ON_FOCUS_CHANGED,
185 windows::OnFocusChanged::kEventName, 189 windows::OnFocusChanged::kEventName,
186 make_scoped_ptr(new base::ListValue()))); 190 make_scoped_ptr(new base::ListValue())));
187 event->will_dispatch_callback = 191 event->will_dispatch_callback =
188 base::Bind(&WillDispatchWindowFocusedEvent, 192 base::Bind(&WillDispatchWindowFocusedEvent, window_controller);
189 static_cast<BrowserContext*>(window_profile), 193 // Set the window type to 'normal' if we don't have a window
190 window_id); 194 // controller, so the event is not filtered.
195 event->filter_info.SetWindowType(window_controller
196 ? window_controller->GetWindowTypeText()
197 : keys::kWindowTypeValueNormal);
191 EventRouter::Get(profile_)->BroadcastEvent(event.Pass()); 198 EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
192 } 199 }
193 200
194 void WindowsEventRouter::DispatchEvent(events::HistogramValue histogram_value, 201 void WindowsEventRouter::DispatchEvent(events::HistogramValue histogram_value,
195 const std::string& event_name, 202 const std::string& event_name,
196 WindowController* window_controller, 203 WindowController* window_controller,
197 scoped_ptr<base::ListValue> args) { 204 scoped_ptr<base::ListValue> args) {
198 scoped_ptr<Event> event(new Event(histogram_value, event_name, args.Pass())); 205 scoped_ptr<Event> event(new Event(histogram_value, event_name, args.Pass()));
199 event->restrict_to_browser_context = window_controller->profile(); 206 event->restrict_to_browser_context = window_controller->profile();
207 event->filter_info.SetWindowType(window_controller->GetWindowTypeText());
200 EventRouter::Get(profile_)->BroadcastEvent(event.Pass()); 208 EventRouter::Get(profile_)->BroadcastEvent(event.Pass());
201 } 209 }
202 210
203 bool WindowsEventRouter::HasEventListener(const std::string& event_name) { 211 bool WindowsEventRouter::HasEventListener(const std::string& event_name) {
204 return EventRouter::Get(profile_)->HasEventListener(event_name); 212 return EventRouter::Get(profile_)->HasEventListener(event_name);
205 } 213 }
206 214
207 void WindowsEventRouter::AddAppWindow(extensions::AppWindow* app_window) { 215 void WindowsEventRouter::AddAppWindow(extensions::AppWindow* app_window) {
208 scoped_ptr<AppWindowController> controller(new AppWindowController( 216 scoped_ptr<AppWindowController> controller(new AppWindowController(
209 app_window, make_scoped_ptr(new AppBaseWindow(app_window)), profile_)); 217 app_window, make_scoped_ptr(new AppBaseWindow(app_window)), profile_));
210 app_windows_.set(app_window->session_id().id(), controller.Pass()); 218 app_windows_.set(app_window->session_id().id(), controller.Pass());
211 } 219 }
212 220
213 } // namespace extensions 221 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/tabs/tabs_test.cc ('k') | chrome/browser/extensions/api/tabs/windows_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698