// Copyright 2018 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. #ifndef COMPONENTS_REMOTE_COCOA_BROWSER_WINDOW_H_ #define COMPONENTS_REMOTE_COCOA_BROWSER_WINDOW_H_ #include "components/remote_cocoa/browser/remote_cocoa_browser_export.h" #include "ui/gfx/native_widget_types.h" namespace remote_cocoa { namespace mojom { class NativeWidgetNSWindow; } // namespace mojom class ApplicationHost; class NativeWidgetNSWindowBridge; // A class used to look up associated structures from a gfx::NativeWindow in the // browser process. class REMOTE_COCOA_BROWSER_EXPORT ScopedNativeWindowMapping { public: ScopedNativeWindowMapping( gfx::NativeWindow native_window, ApplicationHost* app_host, NativeWidgetNSWindowBridge* in_process_window_bridge, mojom::NativeWidgetNSWindow* mojo_interface); ~ScopedNativeWindowMapping(); ApplicationHost* application_host() const { return application_host_; } NativeWidgetNSWindowBridge* in_process_window_bridge() const { return in_process_window_bridge_; } mojom::NativeWidgetNSWindow* mojo_interface() const { return mojo_interface_; } private: const gfx::NativeWindow native_window_; ApplicationHost* const application_host_; NativeWidgetNSWindowBridge* const in_process_window_bridge_; mojom::NativeWidgetNSWindow* const mojo_interface_; }; // Return the application host for the specified browser-side gfx::NativeWindow. // Is non-nullptr for all views::Widget-backed NSWindows. ApplicationHost* REMOTE_COCOA_BROWSER_EXPORT GetWindowApplicationHost(gfx::NativeWindow window); // Return the mojo interface for the specified browser-side gfx::NativeWindow. // Is non-nullptr for all views::Widget-backed NSWindows. mojom::NativeWidgetNSWindow* REMOTE_COCOA_BROWSER_EXPORT GetWindowMojoInterface(gfx::NativeWindow window); // Returns true if the specified NSWindow corresponds to an NSWindow that is // being viewed in a remote process. bool REMOTE_COCOA_BROWSER_EXPORT IsWindowRemote(gfx::NativeWindow window); // Create a transparent NSWindow that is in the same position as |window|, // but is at the ModalPanel window level, so that it will appear over all // other window. NSWindow* REMOTE_COCOA_BROWSER_EXPORT CreateInProcessTransparentClone(gfx::NativeWindow window); } // namespace remote_cocoa #endif // COMPONENTS_REMOTE_COCOA_BROWSER_WINDOW_H_