mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2022 The Chromium Embedded Framework Authors.
 | 
						|
// Portions copyright 2014 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_constrained_window_views_client.h"
 | 
						|
 | 
						|
#include "libcef/browser/browser_host_base.h"
 | 
						|
 | 
						|
#include "base/notreached.h"
 | 
						|
#include "components/web_modal/web_contents_modal_dialog_host.h"
 | 
						|
 | 
						|
namespace {
 | 
						|
 | 
						|
class AlloyConstrainedWindowViewsClient
 | 
						|
    : public constrained_window::ConstrainedWindowViewsClient {
 | 
						|
 public:
 | 
						|
  AlloyConstrainedWindowViewsClient() = default;
 | 
						|
 | 
						|
  AlloyConstrainedWindowViewsClient(const AlloyConstrainedWindowViewsClient&) =
 | 
						|
      delete;
 | 
						|
  AlloyConstrainedWindowViewsClient& operator=(
 | 
						|
      const AlloyConstrainedWindowViewsClient&) = delete;
 | 
						|
 | 
						|
 private:
 | 
						|
  // ConstrainedWindowViewsClient methods:
 | 
						|
  web_modal::ModalDialogHost* GetModalDialogHost(
 | 
						|
      gfx::NativeWindow parent) override {
 | 
						|
    if (auto browser = GetPreferredBrowser(parent)) {
 | 
						|
      return browser->platform_delegate()->GetWebContentsModalDialogHost();
 | 
						|
    }
 | 
						|
    NOTREACHED();
 | 
						|
    return nullptr;
 | 
						|
  }
 | 
						|
 | 
						|
  gfx::NativeView GetDialogHostView(gfx::NativeWindow parent) override {
 | 
						|
    if (auto dialog_host = GetModalDialogHost(parent)) {
 | 
						|
      return dialog_host->GetHostView();
 | 
						|
    }
 | 
						|
    return gfx::NativeView();
 | 
						|
  }
 | 
						|
 | 
						|
  static CefRefPtr<CefBrowserHostBase> GetPreferredBrowser(
 | 
						|
      gfx::NativeWindow parent) {
 | 
						|
    CefRefPtr<CefBrowserHostBase> browser;
 | 
						|
 | 
						|
    // 1. Browser associated with the top-level native window (owning_window).
 | 
						|
    // This should be reliable with windowed browsers. However, |parent| will
 | 
						|
    // always be nullptr with windowless browsers.
 | 
						|
    if (parent) {
 | 
						|
      browser = CefBrowserHostBase::GetBrowserForTopLevelNativeWindow(parent);
 | 
						|
      if (!browser) {
 | 
						|
        LOG(WARNING) << "No browser associated with top-level native window";
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    // 2. Browser most likely to be focused. This may be somewhat iffy with
 | 
						|
    // windowless browsers as there is no guarantee that the client has only
 | 
						|
    // one browser focused at a time.
 | 
						|
    if (!browser) {
 | 
						|
      browser = CefBrowserHostBase::GetLikelyFocusedBrowser();
 | 
						|
      if (!browser) {
 | 
						|
        LOG(WARNING) << "No likely focused browser";
 | 
						|
      }
 | 
						|
    }
 | 
						|
 | 
						|
    return browser;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace
 | 
						|
 | 
						|
std::unique_ptr<constrained_window::ConstrainedWindowViewsClient>
 | 
						|
CreateAlloyConstrainedWindowViewsClient() {
 | 
						|
  return std::make_unique<AlloyConstrainedWindowViewsClient>();
 | 
						|
} |