| // Copyright (c) 2019 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. |
| |
| #include "libcef/browser/web_contents_dialog_helper.h" |
| |
| #include "libcef/browser/browser_platform_delegate.h" |
| |
| #include "chrome/browser/platform_util.h" |
| #include "components/web_modal/web_contents_modal_dialog_manager.h" |
| |
| #if defined(USE_AURA) |
| #include "ui/views/widget/widget.h" |
| #endif |
| |
| CefWebContentsDialogHelper::CefWebContentsDialogHelper( |
| content::WebContents* web_contents, |
| CefBrowserPlatformDelegate* browser_delegate) |
| : browser_delegate_(browser_delegate), weak_factory_(this) { |
| web_modal::WebContentsModalDialogManager::CreateForWebContents(web_contents); |
| web_modal::WebContentsModalDialogManager::FromWebContents(web_contents) |
| ->SetDelegate(this); |
| } |
| |
| base::RepeatingClosure CefWebContentsDialogHelper::GetBoundsChangedCallback() { |
| return base::BindRepeating(&CefWebContentsDialogHelper::OnBoundsChanged, |
| weak_factory_.GetWeakPtr()); |
| } |
| |
| bool CefWebContentsDialogHelper::IsWebContentsVisible( |
| content::WebContents* web_contents) { |
| return platform_util::IsVisible(web_contents->GetNativeView()); |
| } |
| |
| web_modal::WebContentsModalDialogHost* |
| CefWebContentsDialogHelper::GetWebContentsModalDialogHost() { |
| return this; |
| } |
| |
| gfx::NativeView CefWebContentsDialogHelper::GetHostView() const { |
| #if defined(USE_AURA) |
| return browser_delegate_->GetWindowWidget()->GetNativeView(); |
| #else |
| NOTIMPLEMENTED(); |
| return gfx::NativeView(); |
| #endif |
| } |
| |
| gfx::Point CefWebContentsDialogHelper::GetDialogPosition( |
| const gfx::Size& size) { |
| return browser_delegate_->GetDialogPosition(size); |
| } |
| |
| gfx::Size CefWebContentsDialogHelper::GetMaximumDialogSize() { |
| return browser_delegate_->GetMaximumDialogSize(); |
| } |
| |
| void CefWebContentsDialogHelper::AddObserver( |
| web_modal::ModalDialogHostObserver* observer) { |
| if (observer && !observer_list_.HasObserver(observer)) |
| observer_list_.AddObserver(observer); |
| } |
| |
| void CefWebContentsDialogHelper::RemoveObserver( |
| web_modal::ModalDialogHostObserver* observer) { |
| observer_list_.RemoveObserver(observer); |
| } |
| |
| void CefWebContentsDialogHelper::OnBoundsChanged() { |
| for (auto& observer : observer_list_) |
| observer.OnPositionRequiresUpdate(); |
| } |