| // Copyright 2012 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/extensions/window_controller.h" |
| |
| #include <stddef.h> |
| |
| #include <memory> |
| |
| #include "base/types/cxx23_to_underlying.h" |
| #include "base/values.h" |
| #include "chrome/browser/extensions/window_controller_list.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/common/extensions/api/windows.h" |
| |
| namespace extensions { |
| |
| /////////////////////////////////////////////////////////////////////////////// |
| // WindowController |
| |
| // static |
| WindowController::TypeFilter WindowController::GetAllWindowFilter() { |
| // This needs to be updated if there is a change to |
| // extensions::api::windows:WindowType. |
| static_assert(base::to_underlying(api::windows::WindowType::kMaxValue) == 5, |
| "Update extensions WindowController to match WindowType"); |
| return ((1 << base::to_underlying(api::windows::WindowType::kNormal)) | |
| (1 << base::to_underlying(api::windows::WindowType::kPanel)) | |
| (1 << base::to_underlying(api::windows::WindowType::kPopup)) | |
| (1 << base::to_underlying(api::windows::WindowType::kApp)) | |
| (1 << base::to_underlying(api::windows::WindowType::kDevtools))); |
| } |
| |
| // static |
| WindowController::TypeFilter WindowController::GetFilterFromWindowTypes( |
| const std::vector<api::windows::WindowType>& types) { |
| WindowController::TypeFilter filter = kNoWindowFilter; |
| for (auto& window_type : types) |
| filter |= 1 << base::to_underlying(window_type); |
| return filter; |
| } |
| |
| // static |
| WindowController::TypeFilter WindowController::GetFilterFromWindowTypesValues( |
| const base::Value::List* types) { |
| WindowController::TypeFilter filter = WindowController::kNoWindowFilter; |
| if (!types) { |
| return filter; |
| } |
| for (const base::Value& type : *types) { |
| if (!type.is_string()) { |
| continue; |
| } |
| filter |= 1 << base::to_underlying( |
| api::windows::ParseWindowType(type.GetString())); |
| } |
| return filter; |
| } |
| |
| WindowController::WindowController(ui::BaseWindow* window, Profile* profile) |
| : window_(window), profile_(profile) { |
| } |
| |
| WindowController::~WindowController() = default; |
| |
| Browser* WindowController::GetBrowser() const { |
| return nullptr; |
| } |
| |
| bool WindowController::MatchesFilter(TypeFilter filter) const { |
| TypeFilter type = 1 << base::to_underlying( |
| api::windows::ParseWindowType(GetWindowTypeText())); |
| return (type & filter) != 0; |
| } |
| |
| void WindowController::NotifyWindowBoundsChanged() { |
| WindowControllerList::GetInstance()->NotifyWindowBoundsChanged(this); |
| } |
| |
| } // namespace extensions |