blob: 8f43dff45f3d085634bc6e1a422cdb47b7a42713 [file] [log] [blame]
// 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/webui_browser_client_view.h"
#include "third_party/blink/public/mojom/page/draggable_region.mojom.h"
#include "third_party/skia/include/core/SkRegion.h"
#include "ui/base/hit_test.h"
#include "ui/base/metadata/metadata_impl_macros.h"
WebUIBrowserClientView::WebUIBrowserClientView(
WebUIBrowserWebContentsDelegate* web_contents_delegate,
views::Widget* widget,
views::View* view)
: ClientView(widget, view), web_contents_delegate_(web_contents_delegate) {
web_contents_delegate_->AddObserver(this);
}
WebUIBrowserClientView::~WebUIBrowserClientView() {
web_contents_delegate_->RemoveObserver(this);
set_contents_view(nullptr);
}
int WebUIBrowserClientView::NonClientHitTest(const gfx::Point& point) {
if (draggable_region_.contains(point.x(), point.y())) {
return HTCAPTION;
}
return ClientView::NonClientHitTest(point);
}
void WebUIBrowserClientView::DraggableRegionsChanged(
const std::vector<blink::mojom::DraggableRegionPtr>& regions) {
SkRegion draggable_region;
for (const blink::mojom::DraggableRegionPtr& region : regions) {
draggable_region.op(
SkIRect::MakeXYWH(region->bounds.x(), region->bounds.y(),
region->bounds.width(), region->bounds.height()),
region->draggable ? SkRegion::kUnion_Op : SkRegion::kDifference_Op);
}
draggable_region_.swap(draggable_region);
}
BEGIN_METADATA(WebUIBrowserClientView)
END_METADATA