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

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

Powered by Google App Engine
This is Rietveld 408576698