1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/extensions/api/tabs/windows_util.h"
7 #include "base/strings/string_number_conversions.h"
8 #include "chrome/browser/extensions/api/tabs/tabs_constants.h"
9 #include "chrome/browser/extensions/chrome_extension_function.h"
10 #include "chrome/browser/extensions/window_controller.h"
11 #include "chrome/browser/extensions/window_controller_list.h"
12 #include "extensions/browser/extension_function_dispatcher.h"
13 #include "extensions/common/constants.h"
14 #include "extensions/common/error_utils.h"
16 namespace windows_util
{
18 bool GetWindowFromWindowID(ChromeAsyncExtensionFunction
* function
,
20 extensions::WindowController
** controller
) {
21 if (window_id
== extension_misc::kCurrentWindowId
) {
22 extensions::WindowController
* extension_window_controller
=
23 function
->dispatcher()->delegate()->GetExtensionWindowController();
24 // If there is a window controller associated with this extension, use that.
25 if (extension_window_controller
) {
26 *controller
= extension_window_controller
;
28 // Otherwise get the focused or most recently added window.
29 *controller
= extensions::WindowControllerList::GetInstance()->
30 CurrentWindowForFunction(function
);
33 function
->SetError(extensions::tabs_constants::kNoCurrentWindowError
);
37 *controller
= extensions::WindowControllerList::GetInstance()->
38 FindWindowForFunctionById(function
, window_id
);
40 function
->SetError(extensions::ErrorUtils::FormatErrorMessage(
41 extensions::tabs_constants::kWindowNotFoundError
,
42 base::IntToString(window_id
)));
49 } // namespace windows_util