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

Side by Side Diff: chrome/browser/extensions/api/tabs/tabs_api.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: Disable focus event tests on MacOSX 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/tabs_api.h" 5 #include "chrome/browser/extensions/api/tabs/tabs_api.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <limits> 8 #include <limits>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
109 namespace extensions { 109 namespace extensions {
110 110
111 namespace windows = api::windows; 111 namespace windows = api::windows;
112 namespace keys = tabs_constants; 112 namespace keys = tabs_constants;
113 namespace tabs = api::tabs; 113 namespace tabs = api::tabs;
114 114
115 using api::extension_types::InjectDetails; 115 using api::extension_types::InjectDetails;
116 116
117 namespace { 117 namespace {
118 118
119 template <typename T>
120 class ApiParameterExtractor {
121 public:
122 explicit ApiParameterExtractor(T* params) : params_(params) {}
123 ~ApiParameterExtractor() {}
124
125 bool populate_tabs() {
126 if (params_->get_info.get() && params_->get_info->populate.get())
127 return *params_->get_info->populate;
128 return false;
129 }
130
131 const WindowTypeFilter& type_filters() {
132 if (params_->get_info.get() && params_->get_info->window_types.get())
133 return *params_->get_info->window_types.get();
134 return windows_util::GetDefaultWindowTypeFilters();
135 }
136
137 private:
138 T* params_;
139 };
140
119 bool GetBrowserFromWindowID(ChromeUIThreadExtensionFunction* function, 141 bool GetBrowserFromWindowID(ChromeUIThreadExtensionFunction* function,
120 int window_id, 142 int window_id,
121 Browser** browser) { 143 Browser** browser) {
122 std::string error; 144 std::string error;
123 Browser* result; 145 Browser* result;
124 result = 146 result =
125 ExtensionTabUtil::GetBrowserFromWindowID(function, window_id, &error); 147 ExtensionTabUtil::GetBrowserFromWindowID(function, window_id, &error);
126 if (!result) { 148 if (!result) {
127 function->SetError(error); 149 function->SetError(error);
128 return false; 150 return false;
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
258 break; 280 break;
259 } 281 }
260 } 282 }
261 283
262 // Windows --------------------------------------------------------------------- 284 // Windows ---------------------------------------------------------------------
263 285
264 bool WindowsGetFunction::RunSync() { 286 bool WindowsGetFunction::RunSync() {
265 scoped_ptr<windows::Get::Params> params(windows::Get::Params::Create(*args_)); 287 scoped_ptr<windows::Get::Params> params(windows::Get::Params::Create(*args_));
266 EXTENSION_FUNCTION_VALIDATE(params.get()); 288 EXTENSION_FUNCTION_VALIDATE(params.get());
267 289
268 bool populate_tabs = false; 290 ApiParameterExtractor<windows::Get::Params> extractor(params.get());
269 if (params->get_info.get() && params->get_info->populate.get())
270 populate_tabs = *params->get_info->populate;
271
272 WindowController* controller; 291 WindowController* controller;
273 if (!windows_util::GetWindowFromWindowID(this, 292 if (!windows_util::GetWindowFromWindowID(
274 params->window_id, 293 this, params->window_id, extractor.type_filters(), &controller)) {
275 &controller)) {
276 return false; 294 return false;
277 } 295 }
278 296
279 if (populate_tabs) 297 if (extractor.populate_tabs())
280 SetResult(controller->CreateWindowValueWithTabs(extension())); 298 SetResult(controller->CreateWindowValueWithTabs(extension()));
281 else 299 else
282 SetResult(controller->CreateWindowValue()); 300 SetResult(controller->CreateWindowValue());
283 return true; 301 return true;
284 } 302 }
285 303
286 bool WindowsGetCurrentFunction::RunSync() { 304 bool WindowsGetCurrentFunction::RunSync() {
287 scoped_ptr<windows::GetCurrent::Params> params( 305 scoped_ptr<windows::GetCurrent::Params> params(
288 windows::GetCurrent::Params::Create(*args_)); 306 windows::GetCurrent::Params::Create(*args_));
289 EXTENSION_FUNCTION_VALIDATE(params.get()); 307 EXTENSION_FUNCTION_VALIDATE(params.get());
290 308
291 bool populate_tabs = false; 309 ApiParameterExtractor<windows::GetCurrent::Params> extractor(params.get());
292 if (params->get_info.get() && params->get_info->populate.get())
293 populate_tabs = *params->get_info->populate;
294
295 WindowController* controller; 310 WindowController* controller;
296 if (!windows_util::GetWindowFromWindowID(this, 311 if (!windows_util::GetWindowFromWindowID(
297 extension_misc::kCurrentWindowId, 312 this, extension_misc::kCurrentWindowId, extractor.type_filters(),
298 &controller)) { 313 &controller)) {
299 return false; 314 return false;
300 } 315 }
301 if (populate_tabs) 316 if (extractor.populate_tabs())
302 SetResult(controller->CreateWindowValueWithTabs(extension())); 317 SetResult(controller->CreateWindowValueWithTabs(extension()));
303 else 318 else
304 SetResult(controller->CreateWindowValue()); 319 SetResult(controller->CreateWindowValue());
305 return true; 320 return true;
306 } 321 }
307 322
308 bool WindowsGetLastFocusedFunction::RunSync() { 323 bool WindowsGetLastFocusedFunction::RunSync() {
309 scoped_ptr<windows::GetLastFocused::Params> params( 324 scoped_ptr<windows::GetLastFocused::Params> params(
310 windows::GetLastFocused::Params::Create(*args_)); 325 windows::GetLastFocused::Params::Create(*args_));
311 EXTENSION_FUNCTION_VALIDATE(params.get()); 326 EXTENSION_FUNCTION_VALIDATE(params.get());
312 327
313 bool populate_tabs = false; 328 ApiParameterExtractor<windows::GetLastFocused::Params> extractor(
314 if (params->get_info.get() && params->get_info->populate.get()) 329 params.get());
315 populate_tabs = *params->get_info->populate; 330 // The WindowControllerList should contain a list of application,
316 331 // browser and devtools windows.
317 // Note: currently this returns the last active browser. If we decide to 332 WindowController* controller = nullptr;
318 // include other window types (e.g. panels), we will need to add logic to 333 for (auto iter : WindowControllerList::GetInstance()->windows()) {
319 // WindowControllerList that mirrors the active behavior of BrowserList. 334 if (windows_util::CanOperateOnWindow(this, iter,
320 Browser* browser = chrome::FindAnyBrowser( 335 extractor.type_filters())) {
321 GetProfile(), include_incognito(), chrome::GetActiveDesktop()); 336 controller = iter;
322 if (!browser || !browser->window()) { 337 if (controller->window()->IsActive())
338 break; // Use focused window.
339 }
340 }
341 if (!controller) {
323 error_ = keys::kNoLastFocusedWindowError; 342 error_ = keys::kNoLastFocusedWindowError;
324 return false; 343 return false;
325 } 344 }
326 WindowController* controller = 345 if (extractor.populate_tabs())
327 browser->extension_window_controller();
328 if (populate_tabs)
329 SetResult(controller->CreateWindowValueWithTabs(extension())); 346 SetResult(controller->CreateWindowValueWithTabs(extension()));
330 else 347 else
331 SetResult(controller->CreateWindowValue()); 348 SetResult(controller->CreateWindowValue());
332 return true; 349 return true;
333 } 350 }
334 351
335 bool WindowsGetAllFunction::RunSync() { 352 bool WindowsGetAllFunction::RunSync() {
336 scoped_ptr<windows::GetAll::Params> params( 353 scoped_ptr<windows::GetAll::Params> params(
337 windows::GetAll::Params::Create(*args_)); 354 windows::GetAll::Params::Create(*args_));
338 EXTENSION_FUNCTION_VALIDATE(params.get()); 355 EXTENSION_FUNCTION_VALIDATE(params.get());
339 356
340 bool populate_tabs = false; 357 ApiParameterExtractor<windows::GetAll::Params> extractor(params.get());
341 if (params->get_info.get() && params->get_info->populate.get())
342 populate_tabs = *params->get_info->populate;
343
344 base::ListValue* window_list = new base::ListValue(); 358 base::ListValue* window_list = new base::ListValue();
345 const WindowControllerList::ControllerList& windows = 359 const WindowControllerList::ControllerList& windows =
346 WindowControllerList::GetInstance()->windows(); 360 WindowControllerList::GetInstance()->windows();
347 for (WindowControllerList::ControllerList::const_iterator iter = 361 for (WindowControllerList::ControllerList::const_iterator iter =
348 windows.begin(); 362 windows.begin();
349 iter != windows.end(); ++iter) { 363 iter != windows.end(); ++iter) {
350 if (!windows_util::CanOperateOnWindow(this, *iter)) 364 if (!windows_util::CanOperateOnWindow(this, *iter,
365 extractor.type_filters()))
351 continue; 366 continue;
352 if (populate_tabs) 367 if (extractor.populate_tabs())
353 window_list->Append((*iter)->CreateWindowValueWithTabs(extension())); 368 window_list->Append((*iter)->CreateWindowValueWithTabs(extension()));
354 else 369 else
355 window_list->Append((*iter)->CreateWindowValue()); 370 window_list->Append((*iter)->CreateWindowValue());
356 } 371 }
357 SetResult(window_list); 372 SetResult(window_list);
358 return true; 373 return true;
359 } 374 }
360 375
361 bool WindowsCreateFunction::ShouldOpenIncognitoWindow( 376 bool WindowsCreateFunction::ShouldOpenIncognitoWindow(
362 const windows::Create::Params::CreateData* create_data, 377 const windows::Create::Params::CreateData* create_data,
(...skipping 323 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 701
687 return true; 702 return true;
688 } 703 }
689 704
690 bool WindowsUpdateFunction::RunSync() { 705 bool WindowsUpdateFunction::RunSync() {
691 scoped_ptr<windows::Update::Params> params( 706 scoped_ptr<windows::Update::Params> params(
692 windows::Update::Params::Create(*args_)); 707 windows::Update::Params::Create(*args_));
693 EXTENSION_FUNCTION_VALIDATE(params); 708 EXTENSION_FUNCTION_VALIDATE(params);
694 709
695 WindowController* controller; 710 WindowController* controller;
696 if (!windows_util::GetWindowFromWindowID(this, params->window_id, 711 if (!windows_util::GetWindowFromWindowID(
697 &controller)) 712 this, params->window_id, windows_util::GetNoWindowTypeFilters(),
713 &controller))
698 return false; 714 return false;
699 715
700 ui::WindowShowState show_state = 716 ui::WindowShowState show_state =
701 ConvertToWindowShowState(params->update_info.state); 717 ConvertToWindowShowState(params->update_info.state);
702 718
703 if (show_state != ui::SHOW_STATE_FULLSCREEN && 719 if (show_state != ui::SHOW_STATE_FULLSCREEN &&
704 show_state != ui::SHOW_STATE_DEFAULT) 720 show_state != ui::SHOW_STATE_DEFAULT)
705 controller->SetFullscreenMode(false, extension()->url()); 721 controller->SetFullscreenMode(false, extension()->url());
706 722
707 switch (show_state) { 723 switch (show_state) {
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
788 804
789 return true; 805 return true;
790 } 806 }
791 807
792 bool WindowsRemoveFunction::RunSync() { 808 bool WindowsRemoveFunction::RunSync() {
793 scoped_ptr<windows::Remove::Params> params( 809 scoped_ptr<windows::Remove::Params> params(
794 windows::Remove::Params::Create(*args_)); 810 windows::Remove::Params::Create(*args_));
795 EXTENSION_FUNCTION_VALIDATE(params); 811 EXTENSION_FUNCTION_VALIDATE(params);
796 812
797 WindowController* controller; 813 WindowController* controller;
798 if (!windows_util::GetWindowFromWindowID(this, params->window_id, 814 if (!windows_util::GetWindowFromWindowID(
799 &controller)) 815 this, params->window_id, windows_util::GetDefaultWindowTypeFilters(),
816 &controller))
800 return false; 817 return false;
801 818
802 WindowController::Reason reason; 819 WindowController::Reason reason;
803 if (!controller->CanClose(&reason)) { 820 if (!controller->CanClose(&reason)) {
804 if (reason == WindowController::REASON_NOT_EDITABLE) 821 if (reason == WindowController::REASON_NOT_EDITABLE)
805 error_ = keys::kTabStripNotEditableError; 822 error_ = keys::kTabStripNotEditableError;
806 return false; 823 return false;
807 } 824 }
808 controller->window()->Close(); 825 controller->window()->Close();
809 return true; 826 return true;
(...skipping 1218 matching lines...) Expand 10 before | Expand all | Expand 10 after
2028 ZoomModeToZoomSettings(zoom_mode, &zoom_settings); 2045 ZoomModeToZoomSettings(zoom_mode, &zoom_settings);
2029 zoom_settings.default_zoom_factor.reset(new double( 2046 zoom_settings.default_zoom_factor.reset(new double(
2030 content::ZoomLevelToZoomFactor(zoom_controller->GetDefaultZoomLevel()))); 2047 content::ZoomLevelToZoomFactor(zoom_controller->GetDefaultZoomLevel())));
2031 2048
2032 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings); 2049 results_ = api::tabs::GetZoomSettings::Results::Create(zoom_settings);
2033 SendResponse(true); 2050 SendResponse(true);
2034 return true; 2051 return true;
2035 } 2052 }
2036 2053
2037 } // namespace extensions 2054 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698