windows_util.cc revision c5cede9ae108bb15f6b7a8aea21c7e1fefa2834c
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.
4
5#include "chrome/browser/extensions/api/tabs/windows_util.h"
6
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"
15
16namespace windows_util {
17
18bool GetWindowFromWindowID(ChromeAsyncExtensionFunction* function,
19                           int window_id,
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;
27    } else {
28      // Otherwise get the focused or most recently added window.
29      *controller = extensions::WindowControllerList::GetInstance()->
30          CurrentWindowForFunction(function);
31    }
32    if (!(*controller)) {
33      function->SetError(extensions::tabs_constants::kNoCurrentWindowError);
34      return false;
35    }
36  } else {
37    *controller = extensions::WindowControllerList::GetInstance()->
38        FindWindowForFunctionById(function, window_id);
39    if (!(*controller)) {
40      function->SetError(extensions::ErrorUtils::FormatErrorMessage(
41          extensions::tabs_constants::kWindowNotFoundError,
42          base::IntToString(window_id)));
43      return false;
44    }
45  }
46  return true;
47}
48
49}  // namespace windows_util
50