2016-01-19 21:09:01 +01:00
|
|
|
// Copyright 2016 The Chromium Embedded Framework Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by a BSD-style license that can be found
|
|
|
|
// in the LICENSE file.
|
|
|
|
|
|
|
|
#ifndef CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_VIEW_H_
|
|
|
|
#define CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_VIEW_H_
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "include/views/cef_browser_view_delegate.h"
|
|
|
|
|
|
|
|
#include "libcef/browser/views/view_view.h"
|
|
|
|
|
|
|
|
#include "ui/views/controls/webview/webview.h"
|
|
|
|
|
|
|
|
// Extend views::WebView with a no-argument constructor as required by the
|
|
|
|
// CefViewView template.
|
|
|
|
class WebViewEx : public views::WebView {
|
|
|
|
public:
|
2022-04-14 21:12:23 +02:00
|
|
|
WebViewEx() : views::WebView(nullptr) {
|
|
|
|
// Mouse events on draggable regions will not be handled by the WebView.
|
|
|
|
// Avoid the resulting DCHECK in NativeViewHost::OnMousePressed by
|
|
|
|
// configuring the NativeViewHost not to process events via the view
|
|
|
|
// hierarchy.
|
|
|
|
holder()->SetCanProcessEventsWithinSubtree(false);
|
|
|
|
}
|
2016-01-19 21:09:01 +01:00
|
|
|
};
|
|
|
|
|
2017-05-17 11:29:28 +02:00
|
|
|
class CefBrowserViewView
|
|
|
|
: public CefViewView<WebViewEx, CefBrowserViewDelegate> {
|
2016-01-19 21:09:01 +01:00
|
|
|
public:
|
2021-12-06 21:40:25 +01:00
|
|
|
using ParentClass = CefViewView<WebViewEx, CefBrowserViewDelegate>;
|
|
|
|
|
|
|
|
CefBrowserViewView(const CefBrowserViewView&) = delete;
|
|
|
|
CefBrowserViewView& operator=(const CefBrowserViewView&) = delete;
|
2016-01-19 21:09:01 +01:00
|
|
|
|
|
|
|
class Delegate {
|
|
|
|
public:
|
|
|
|
// Called when the BrowserView has been added to a parent view.
|
|
|
|
virtual void OnBrowserViewAdded() = 0;
|
|
|
|
|
2019-07-17 20:47:27 +02:00
|
|
|
// Called when the BrowserView bounds have changed.
|
|
|
|
virtual void OnBoundsChanged() = 0;
|
|
|
|
|
2023-08-31 19:16:46 +02:00
|
|
|
// Called when the BrowserView receives a gesture event.
|
|
|
|
// Returns true if the gesture was handled.
|
|
|
|
virtual bool OnGestureEvent(ui::GestureEvent* event) = 0;
|
2023-05-26 11:05:33 +02:00
|
|
|
|
2016-01-19 21:09:01 +01:00
|
|
|
protected:
|
|
|
|
virtual ~Delegate() {}
|
|
|
|
};
|
|
|
|
|
|
|
|
// |cef_delegate| may be nullptr.
|
|
|
|
// |browser_view_delegate| must be non-nullptr.
|
|
|
|
CefBrowserViewView(CefBrowserViewDelegate* cef_delegate,
|
|
|
|
Delegate* browser_view_delegate);
|
|
|
|
|
|
|
|
// View methods:
|
|
|
|
void ViewHierarchyChanged(
|
2019-04-16 16:38:48 +02:00
|
|
|
const views::ViewHierarchyChangedDetails& details) override;
|
2019-07-17 20:47:27 +02:00
|
|
|
void OnBoundsChanged(const gfx::Rect& previous_bounds) override;
|
2023-05-26 11:05:33 +02:00
|
|
|
void OnGestureEvent(ui::GestureEvent* event) override;
|
2016-01-19 21:09:01 +01:00
|
|
|
|
|
|
|
private:
|
|
|
|
// Not owned by this object.
|
|
|
|
Delegate* browser_view_delegate_;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // CEF_LIBCEF_BROWSER_VIEWS_BROWSER_VIEW_VIEW_H_
|