// Copyright 2022 The Chromium Embedded Framework Authors. // Portions copyright 2020 The Chromium 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/alloy/dialogs/alloy_javascript_dialog_manager_delegate.h" #include "libcef/browser/browser_host_base.h" #include "base/logging.h" namespace { class AlloyJavaScriptTabModalDialogManagerDelegateDesktop : public JavaScriptTabModalDialogManagerDelegateDesktop { public: explicit AlloyJavaScriptTabModalDialogManagerDelegateDesktop( content::WebContents* web_contents) : JavaScriptTabModalDialogManagerDelegateDesktop(web_contents), web_contents_(web_contents) {} AlloyJavaScriptTabModalDialogManagerDelegateDesktop( const AlloyJavaScriptTabModalDialogManagerDelegateDesktop&) = delete; AlloyJavaScriptTabModalDialogManagerDelegateDesktop& operator=( const AlloyJavaScriptTabModalDialogManagerDelegateDesktop&) = delete; // javascript_dialogs::TabModalDialogManagerDelegate methods: void WillRunDialog() override {} void DidCloseDialog() override {} void SetTabNeedsAttention(bool attention) override {} bool IsWebContentsForemost() override { if (auto browser = CefBrowserHostBase::GetBrowserForContents(web_contents_)) { return browser->IsVisible(); } return false; } bool IsApp() override { return false; } private: // The WebContents for the tab over which the dialog will be modal. This may // be different from the WebContents that requested the dialog, such as with // Chrome app <webview>s. raw_ptr<content::WebContents> web_contents_; }; } // namespace std::unique_ptr<JavaScriptTabModalDialogManagerDelegateDesktop> CreateAlloyJavaScriptTabModalDialogManagerDelegateDesktop( content::WebContents* web_contents) { return std::make_unique<AlloyJavaScriptTabModalDialogManagerDelegateDesktop>( web_contents); }