// Copyright (c) 2015 The Chromium Embedded Framework Authors. // Portions copyright (c) 2011 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 CEF_LIBCEF_BROWSER_BROWSER_PLATFORM_DELEGATE_H_ #define CEF_LIBCEF_BROWSER_BROWSER_PLATFORM_DELEGATE_H_ #include #include #include "include/cef_client.h" #include "include/cef_drag_data.h" #include "include/internal/cef_types.h" #include "include/views/cef_browser_view.h" #include "libcef/browser/browser_host_impl.h" #include "base/callback_forward.h" #include "content/public/browser/web_contents.h" namespace blink { class WebMouseEvent; class WebMouseWheelEvent; class WebInputEvent; class WebTouchEvent; } // namespace blink namespace content { struct NativeWebKeyboardEvent; class RenderViewHost; class RenderViewHostDelegateView; class WebContentsView; } // namespace content #if defined(USE_AURA) namespace views { class Widget; } #endif class CefBrowserInfo; class CefFileDialogRunner; class CefJavaScriptDialogRunner; class CefMenuRunner; class CefWebContentsDialogHelper; // Provides platform-specific implementations of browser functionality. All // methods are called on the browser process UI thread unless otherwise // indicated. class CefBrowserPlatformDelegate { public: // Create a new CefBrowserPlatformDelegate instance. May be called on multiple // threads. static std::unique_ptr Create( CefBrowserHostImpl::CreateParams& create_params); // Called to create the view objects for a new WebContents. Will only be // called a single time per instance. May be called on multiple threads. Only // used with windowless rendering. virtual void CreateViewForWebContents( content::WebContentsView** view, content::RenderViewHostDelegateView** delegate_view); // Called after the WebContents for the browser is created. Will only be // called a single time per instance. virtual void WebContentsCreated(content::WebContents* web_contents); // Called after the RenderViewHost is created. virtual void RenderViewCreated(content::RenderViewHost* render_view_host); // Called after the owning CefBrowserHostImpl is created. Will only be called // a single time per instance. Do not send any client notifications from this // method. virtual void BrowserCreated(CefBrowserHostImpl* browser); // Send any notifications related to browser creation. Called after // BrowserCreated(). virtual void NotifyBrowserCreated(); // Send any notifications related to browser destruction. Called before // BrowserDestroyed(). virtual void NotifyBrowserDestroyed(); // Called before the owning CefBrowserHostImpl is destroyed. Will only be // called a single time per instance. All references to the CefBrowserHostImpl // and WebContents should be cleared when this method is called. Do not send // any client notifications from this method. virtual void BrowserDestroyed(CefBrowserHostImpl* browser); // Create the window that hosts the browser. Will only be called a single time // per instance. Only used with windowed rendering. virtual bool CreateHostWindow(); // Sends a message to close the window that hosts the browser. On native // platforms this will be done via the OS. DestroyBrowser will be called after // the native window has closed. Only used with windowed rendering. virtual void CloseHostWindow(); // Return the OS handle for the window that hosts the browser. For windowed // rendering this will return the most immediate parent window handle. For // windowless rendering this will return the parent window handle specified by // the client, which may be NULL. May be called on multiple threads. virtual CefWindowHandle GetHostWindowHandle() const = 0; #if defined(USE_AURA) // Returns the Widget owner for the browser window. Only used with windowed // rendering. virtual views::Widget* GetWindowWidget() const; // Returns the BrowserView associated with this browser. Only used with views- // based browsers. virtual CefRefPtr GetBrowserView() const; #endif // Called after the WebContents have been created for a new popup browser // parented to this browser but before the CefBrowserHostImpl is created for // the popup. |is_devtools| will be true if the popup will host DevTools. This // method will be called before WebContentsCreated() is called on // |new_platform_delegate|. Do not make the new browser visible in this // callback. virtual void PopupWebContentsCreated( const CefBrowserSettings& settings, CefRefPtr client, content::WebContents* new_web_contents, CefBrowserPlatformDelegate* new_platform_delegate, bool is_devtools); // Called after the CefBrowserHostImpl is created for a new popup browser // parented to this browser. |is_devtools| will be true if the popup will host // DevTools. This method will be called immediately after // CefLifeSpanHandler::OnAfterCreated() for the popup browser. It is safe to // make the new browser visible in this callback (for example, add the browser // to a window and show it). virtual void PopupBrowserCreated(CefBrowserHostImpl* new_browser, bool is_devtools); // Returns the background color for the browser. The alpha component will be // either SK_AlphaTRANSPARENT or SK_AlphaOPAQUE (e.g. fully transparent or // fully opaque). SK_AlphaOPAQUE will always be returned for windowed // browsers. SK_ColorTRANSPARENT may be returned for windowless browsers to // enable transparency. virtual SkColor GetBackgroundColor() const = 0; virtual bool CanUseSharedTexture() const = 0; virtual bool CanUseExternalBeginFrame() const = 0; // Notify the window that it was resized. virtual void SynchronizeVisualProperties() = 0; // Send input events. virtual void SendKeyEvent(const CefKeyEvent& event) = 0; virtual void SendMouseClickEvent(const CefMouseEvent& event, CefBrowserHost::MouseButtonType type, bool mouseUp, int clickCount) = 0; virtual void SendMouseMoveEvent(const CefMouseEvent& event, bool mouseLeave) = 0; virtual void SendMouseWheelEvent(const CefMouseEvent& event, int deltaX, int deltaY) = 0; virtual void SendTouchEvent(const CefTouchEvent& event) = 0; // Send focus event. The browser's WebContents may be NULL when this method is // called. virtual void SendFocusEvent(bool setFocus) = 0; // Send capture lost event. virtual void SendCaptureLostEvent(); #if defined(OS_WIN) || (defined(OS_POSIX) && !defined(OS_MACOSX)) // The window hosting the browser is about to be moved or resized. Only used // on Windows and Linux. virtual void NotifyMoveOrResizeStarted(); // Resize the host window to the given dimensions. Only used with windowed // rendering on Windows and Linux. virtual void SizeTo(int width, int height); #endif // Convert from view coordinates to screen coordinates. Potential display // scaling will be applied to the result. virtual gfx::Point GetScreenPoint(const gfx::Point& view) const = 0; // Open the specified text in the default text editor. virtual void ViewText(const std::string& text) = 0; // Forward the keyboard event to the application or frame window to allow // processing of shortcut keys. virtual bool HandleKeyboardEvent( const content::NativeWebKeyboardEvent& event) = 0; // Invoke platform specific handling for the external protocol. static void HandleExternalProtocol(const GURL& url); // Returns the OS event handle, if any, associated with |event|. virtual CefEventHandle GetEventHandle( const content::NativeWebKeyboardEvent& event) const = 0; // Create the platform-specific file dialog runner. virtual std::unique_ptr CreateFileDialogRunner(); // Create the platform-specific JavaScript dialog runner. virtual std::unique_ptr CreateJavaScriptDialogRunner(); // Create the platform-specific menu runner. virtual std::unique_ptr CreateMenuRunner() = 0; // Returns true if this delegate implements windowless rendering. May be // called on multiple threads. virtual bool IsWindowless() const = 0; // Returns true if this delegate implements views-hosted browser handling. May // be called on multiple threads. virtual bool IsViewsHosted() const = 0; // Notify the browser that it was hidden. Only used with windowless rendering. virtual void WasHidden(bool hidden); // Notify the browser that screen information has changed. Only used with // windowless rendering. virtual void NotifyScreenInfoChanged(); // Invalidate the view. Only used with windowless rendering. virtual void Invalidate(cef_paint_element_type_t type); virtual void SendExternalBeginFrame(); // Set the windowless frame rate. Only used with windowless rendering. virtual void SetWindowlessFrameRate(int frame_rate); // IME-related callbacks. See documentation in CefBrowser and // CefRenderHandler. Only used with windowless rendering. virtual void ImeSetComposition( const CefString& text, const std::vector& underlines, const CefRange& replacement_range, const CefRange& selection_range); virtual void ImeCommitText(const CefString& text, const CefRange& replacement_range, int relative_cursor_pos); virtual void ImeFinishComposingText(bool keep_selection); virtual void ImeCancelComposition(); // Drag/drop-related callbacks. See documentation in CefRenderHandler. Only // used with windowless rendering. virtual void DragTargetDragEnter(CefRefPtr drag_data, const CefMouseEvent& event, cef_drag_operations_mask_t allowed_ops); virtual void DragTargetDragOver(const CefMouseEvent& event, cef_drag_operations_mask_t allowed_ops); virtual void DragTargetDragLeave(); virtual void DragTargetDrop(const CefMouseEvent& event); virtual void StartDragging(const content::DropData& drop_data, blink::WebDragOperationsMask allowed_ops, const gfx::ImageSkia& image, const gfx::Vector2d& image_offset, const content::DragEventSourceInfo& event_info, content::RenderWidgetHostImpl* source_rwh); virtual void UpdateDragCursor(blink::WebDragOperation operation); virtual void DragSourceEndedAt(int x, int y, cef_drag_operations_mask_t op); virtual void DragSourceSystemDragEnded(); virtual void AccessibilityEventReceived( const content::AXEventNotificationDetails& eventData); virtual void AccessibilityLocationChangesReceived( const std::vector& locData); virtual gfx::Point GetDialogPosition(const gfx::Size& size); virtual gfx::Size GetMaximumDialogSize(); protected: // Allow deletion via scoped_ptr only. friend std::default_delete; CefBrowserPlatformDelegate(); virtual ~CefBrowserPlatformDelegate(); base::RepeatingClosure GetBoundsChangedCallback(); static int TranslateWebEventModifiers(uint32 cef_modifiers); CefBrowserHostImpl* browser_ = nullptr; // Not owned by this object. private: // Used for the print preview dialog. std::unique_ptr web_contents_dialog_helper_; DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegate); }; #endif // CEF_LIBCEF_BROWSER_BROWSER_PLATFORM_DELEGATE_H_