diff --git a/shell/browser/api/electron_api_web_contents_view.cc b/shell/browser/api/electron_api_web_contents_view.cc index 360d03d050..9b393fa28a 100644 --- a/shell/browser/api/electron_api_web_contents_view.cc +++ b/shell/browser/api/electron_api_web_contents_view.cc @@ -83,8 +83,16 @@ void WebContentsView::ApplyBorderRadius() { int WebContentsView::NonClientHitTest(const gfx::Point& point) { if (api_web_contents_) { + // Convert the point to the contents view's coordinate space rather than + // the InspectableWebContentsView's coordinate space, because the draggable + // region is relative to the web content area. When DevTools is docked + // (e.g. to the left), the contents view is offset within the parent, + // so we need to account for that offset. + auto* inspectable_view = + api_web_contents_->inspectable_web_contents()->GetView(); + auto* contents_view = inspectable_view->GetContentsView(); gfx::Point local_point(point); - views::View::ConvertPointFromWidget(view(), &local_point); + views::View::ConvertPointFromWidget(contents_view, &local_point); SkRegion* region = api_web_contents_->draggable_region(); if (region && region->contains(local_point.x(), local_point.y())) return HTCAPTION; diff --git a/shell/browser/ui/inspectable_web_contents_view.h b/shell/browser/ui/inspectable_web_contents_view.h index ff2ee86365..56760bebcb 100644 --- a/shell/browser/ui/inspectable_web_contents_view.h +++ b/shell/browser/ui/inspectable_web_contents_view.h @@ -62,9 +62,9 @@ class InspectableWebContentsView : public views::View { // views::View: void Layout(PassKey) override; - private: views::View* GetContentsView() const; + private: // Owns us. raw_ptr inspectable_web_contents_;