Home | History | Annotate | Download | only in tabs
      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/extension_function_dispatcher.h"
     11 #include "chrome/browser/extensions/window_controller.h"
     12 #include "chrome/browser/extensions/window_controller_list.h"
     13 #include "chrome/common/extensions/extension_constants.h"
     14 #include "extensions/common/error_utils.h"
     15 
     16 namespace windows_util {
     17 
     18 bool 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