mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-06-05 21:39:12 +02:00
When running with the overlay Browser enabled (`--show-overlay-browser`), pressing Alt+O will move the overlay Browser to a new top-level Window. Pressing Alt+O again or closing the new Window via the close button will return the Browser to the overlay. Closing the Browser via `window.close()` (in the new Window or overlay) will dismiss the overlay completely as required to maintain consistent internal state. Detection of this state is supported by the new CefBrowserHost::IsReadyToBeClosed method. Draggable regions in the main Browser are updated to account for the presence or absence of the overlay Browser. Support for draggable regions in the overlay Browser in not implemented in cefclient. Behavior with multiple overlays, `window.close()` and draggable regions can be tested by adding `--hide-frame --hide-controls`.
87 lines
2.9 KiB
C++
87 lines
2.9 KiB
C++
// Copyright (c) 2024 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_TESTS_CEFCLIENT_BROWSER_VIEWS_OVERLAY_BROWSER_H_
|
|
#define CEF_TESTS_CEFCLIENT_BROWSER_VIEWS_OVERLAY_BROWSER_H_
|
|
#pragma once
|
|
|
|
#include "include/base/cef_weak_ptr.h"
|
|
#include "include/views/cef_browser_view.h"
|
|
#include "include/views/cef_browser_view_delegate.h"
|
|
#include "include/views/cef_overlay_controller.h"
|
|
|
|
namespace client {
|
|
|
|
class ViewsWindow;
|
|
|
|
// Implements a browser view that receives absolute positioning on top of the
|
|
// main browser view. All methods must be called on the browser process UI
|
|
// thread.
|
|
class ViewsOverlayBrowser : public CefBrowserViewDelegate {
|
|
public:
|
|
explicit ViewsOverlayBrowser(ViewsWindow* owner_window);
|
|
|
|
void Initialize(CefRefPtr<CefWindow> window,
|
|
CefRefPtr<CefClient> client,
|
|
const std::string& url,
|
|
const CefBrowserSettings& settings,
|
|
CefRefPtr<CefRequestContext> request_context);
|
|
void Destroy();
|
|
|
|
bool IsValid() const;
|
|
|
|
// Move the overlay BrowserView to/from a popout Window.
|
|
void ToggleBrowserView();
|
|
|
|
// Update browser bounds.
|
|
void UpdateBounds(CefInsets insets);
|
|
|
|
// Exclude all regions obscured by overlays.
|
|
void UpdateDraggableRegions(std::vector<CefDraggableRegion>& window_regions);
|
|
|
|
bool OnAccelerator(CefRefPtr<CefWindow> window, int command_id);
|
|
|
|
void PopOutWindowDestroyed();
|
|
|
|
private:
|
|
// CefViewDelegate methods:
|
|
CefSize GetMinimumSize(CefRefPtr<CefView> view) override;
|
|
|
|
// CefBrowserViewDelegate methods:
|
|
void OnBrowserDestroyed(CefRefPtr<CefBrowserView> browser_view,
|
|
CefRefPtr<CefBrowser> browser) override;
|
|
CefRefPtr<CefBrowserViewDelegate> GetDelegateForPopupBrowserView(
|
|
CefRefPtr<CefBrowserView> browser_view,
|
|
const CefBrowserSettings& settings,
|
|
CefRefPtr<CefClient> client,
|
|
bool is_devtools) override;
|
|
bool OnPopupBrowserViewCreated(CefRefPtr<CefBrowserView> browser_view,
|
|
CefRefPtr<CefBrowserView> popup_browser_view,
|
|
bool is_devtools) override;
|
|
cef_runtime_style_t GetBrowserRuntimeStyle() override;
|
|
|
|
// Move the BrowserView to a new top-level Window.
|
|
void PopOutBrowserView();
|
|
|
|
// Return the BrowserView to the overlay.
|
|
void PopInBrowserView();
|
|
|
|
ViewsWindow* const owner_window_;
|
|
CefRefPtr<CefWindow> window_;
|
|
CefRefPtr<CefBrowserView> browser_view_;
|
|
CefRefPtr<CefOverlayController> controller_;
|
|
CefInsets last_insets_;
|
|
|
|
CefRefPtr<CefWindow> popout_window_;
|
|
|
|
base::WeakPtrFactory<ViewsOverlayBrowser> weak_ptr_factory_{this};
|
|
|
|
IMPLEMENT_REFCOUNTING(ViewsOverlayBrowser);
|
|
DISALLOW_COPY_AND_ASSIGN(ViewsOverlayBrowser);
|
|
};
|
|
|
|
} // namespace client
|
|
|
|
#endif // CEF_TESTS_CEFCLIENT_BROWSER_VIEWS_OVERLAY_BROWSER_H_
|