910e62b5创建于 1月15日历史提交
// Copyright 2025 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/ui/webui_browser/browser_elements_webui_browser.h"

#include "chrome/browser/ui/browser_window/public/browser_window_interface.h"
#include "ui/base/interaction/framework_specific_implementation.h"
#include "ui/views/interaction/element_tracker_views.h"

DEFINE_FRAMEWORK_SPECIFIC_METADATA_SUBCLASS(BrowserElementsWebUiBrowser,
                                            BrowserElementsViews)

BrowserElementsWebUiBrowser::BrowserElementsWebUiBrowser(
    BrowserWindowInterface& browser)
    : BrowserElementsViews(browser) {}

BrowserElementsWebUiBrowser::~BrowserElementsWebUiBrowser() = default;

// static
BrowserElementsWebUiBrowser* BrowserElementsWebUiBrowser::From(
    BrowserWindowInterface* browser) {
  auto* const base = BrowserElements::From(browser);
  return base ? base->AsA<BrowserElementsWebUiBrowser>() : nullptr;
}

void BrowserElementsWebUiBrowser::Init(views::Widget* browser_widget) {
  // TODO(webium): Fix ChromeOS. On ChromeOS, browser_widget is null because of
  // a memory issue in WebUIBrowserWindow::GetNativeWindow(). See the comment
  // there.
#if !BUILDFLAG(IS_CHROMEOS)
  CHECK(browser_widget);
#endif
  browser_widget_ = browser_widget;
}

void BrowserElementsWebUiBrowser::TearDown() {
  browser_widget_ = nullptr;
}

ui::ElementContext BrowserElementsWebUiBrowser::GetContext() {
  // TODO(webium): Remove this after fixing ChromeOS.
#if BUILDFLAG(IS_CHROMEOS)
  if (!browser_widget_) {
    return ui::ElementContext();
  }
#endif

  return views::ElementTrackerViews::GetContextForWidget(browser_widget_);
}

views::Widget* BrowserElementsWebUiBrowser::GetPrimaryWindowWidget() {
  return browser_widget_;
}

bool BrowserElementsWebUiBrowser::IsInitialized() const {
  return browser_widget_ != nullptr;
}