Revert "Fix dismissal of select popups on NotifyMoveOrResizeStarted (see issue #3294)"

This reverts commit 5f4bccd672.

Reason for revert: This change causes a native parented browser to lose focus
on move (fixes issue #3426).
This commit is contained in:
Marshall Greenblatt 2023-01-06 13:33:32 -05:00
parent e65da8fab8
commit b66c2d1bea
6 changed files with 29 additions and 2 deletions

View File

@ -261,12 +261,15 @@ void CefBrowserPlatformDelegateAlloy::SendCaptureLostEvent() {
#if BUILDFLAG(IS_WIN) || (BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC)) #if BUILDFLAG(IS_WIN) || (BUILDFLAG(IS_POSIX) && !BUILDFLAG(IS_MAC))
void CefBrowserPlatformDelegateAlloy::NotifyMoveOrResizeStarted() { void CefBrowserPlatformDelegateAlloy::NotifyMoveOrResizeStarted() {
if (!web_contents_) { if (!browser_) {
return; return;
} }
// Dismiss any existing popups. // Dismiss any existing popups.
web_contents_->ClearFocusedElement(); auto frame = browser_->GetMainFrame();
if (frame && frame->IsValid()) {
static_cast<CefFrameHostImpl*>(frame.get())->NotifyMoveOrResizeStarted();
}
} }
#endif #endif

View File

@ -304,6 +304,13 @@ void CefFrameHostImpl::RefreshAttributes() {
} }
} }
void CefFrameHostImpl::NotifyMoveOrResizeStarted() {
SendToRenderFrame(__FUNCTION__,
base::BindOnce([](const RenderFrameType& render_frame) {
render_frame->MoveOrResizeStarted();
}));
}
void CefFrameHostImpl::LoadRequest(cef::mojom::RequestParamsPtr params) { void CefFrameHostImpl::LoadRequest(cef::mojom::RequestParamsPtr params) {
if (!url_util::FixupGURL(params->url)) { if (!url_util::FixupGURL(params->url)) {
return; return;

View File

@ -82,6 +82,10 @@ class CefFrameHostImpl : public CefFrame, public cef::mojom::BrowserFrame {
void SetFocused(bool focused); void SetFocused(bool focused);
void RefreshAttributes(); void RefreshAttributes();
// Notification that a move or resize of the renderer's containing window has
// started. Used on Windows and Linux with the Alloy runtime.
void NotifyMoveOrResizeStarted();
// Load the specified request. // Load the specified request.
void LoadRequest(cef::mojom::RequestParamsPtr params); void LoadRequest(cef::mojom::RequestParamsPtr params);

View File

@ -79,6 +79,10 @@ interface RenderFrame {
// Loading has stopped. // Loading has stopped.
DidStopLoading(); DidStopLoading();
// Move or resize of the renderer's containing window has started. Used on
// Windows and Linux with the Alloy runtime.
MoveOrResizeStarted();
}; };
// Interface for communicating with a frame in the browser process. // Interface for communicating with a frame in the browser process.

View File

@ -832,6 +832,14 @@ void CefFrameImpl::DidStopLoading() {
} }
} }
void CefFrameImpl::MoveOrResizeStarted() {
if (frame_) {
auto web_view = frame_->View();
if (web_view)
web_view->CancelPagePopup();
}
}
void CefFrameImpl::ContextLifecycleStateChanged( void CefFrameImpl::ContextLifecycleStateChanged(
blink::mojom::blink::FrameLifecycleState state) { blink::mojom::blink::FrameLifecycleState state) {
if (state == blink::mojom::FrameLifecycleState::kFrozen && IsMain() && if (state == blink::mojom::FrameLifecycleState::kFrozen && IsMain() &&

View File

@ -162,6 +162,7 @@ class CefFrameImpl
int32_t startLine) override; int32_t startLine) override;
void LoadRequest(cef::mojom::RequestParamsPtr params) override; void LoadRequest(cef::mojom::RequestParamsPtr params) override;
void DidStopLoading() override; void DidStopLoading() override;
void MoveOrResizeStarted() override;
// blink_glue::CefExecutionContextLifecycleStateObserver methods: // blink_glue::CefExecutionContextLifecycleStateObserver methods:
void ContextLifecycleStateChanged( void ContextLifecycleStateChanged(