mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2025-02-01 11:57:04 +01:00
8f240861e3
Implementation notes: - Chromium change: CookieMonster::SetCookieableSchemes needs to be called immediately after the CookieMonster is created in NetworkContext:: ApplyContextParamsToBuilder. Add a Profile::GetCookieableSchemes method and NetworkContextParams.cookieable_schemes member (set from ProfileNetworkContextService::CreateNetworkContextParams) to support that. - Chromium change: Add a ContentBrowserClient::HandleExternalProtocol variant that exposes additional NetworkService request information. - GetResourceResponseFilter is not yet implemented. API changes: - Resource-related callbacks have been moved from CefRequestHandler to a new CefResourceRequestHandler interface which is returned via the GetResourceRequestHandler method. If the CefRequestHandler declines to handle a resource it can optionally be handled by the CefRequestContextHandler, if any, associated with the loading context. - The OnProtocolExecution callback has been moved from CefRequestHandler to CefResourceRequestHandler and will be called if a custom scheme request is unhandled. - Cookie send/save permission callbacks have been moved from CefRequestHandler and CefResourceHandler to CefResourceRequestHandler. - New methods added to CefResourceHandler that better match NetworkService execution sequence expectations. The old methods are now deprecated. - New methods added to CefRequest and CefResponse. Known behavior changes with the NetworkService implementation: - Modifying the |new_url| parameter in OnResourceRedirect will no longer result in the method being called an additional time (likely a bug in the old implementation). - Modifying the request URL in OnResourceResponse would previously cause a redirect. This behavior is now deprecated because the NetworkService does not support this functionality when using default network loaders. Temporary support has been added in combination with CefResourceHandler usage only. - Other changes to the request object in OnResourceResponse will now cause the request to be restarted. This means that OnBeforeResourceLoad, etc, will be called an additional time with the new request information. - CefResponse::GetMimeType will now be empty for non-200 responses. - Requests using custom schemes can now be handled via CefResourceRequestHandler with the same callback behavior as builtin schemes. - Redirects of custom scheme requests will now be followed as expected. - Default handling of builtin schemes can now be disabled by setting |disable_default_handling| to true in GetResourceRequestHandler. - Unhandled requests (custom scheme or builtin scheme with default handling disabled) will fail with an CefResponse::GetError value of ERR_UNKNOWN_URL_SCHEME. - The CefSchemeHandlerFactory::Create callback will now include cookie headers. To test: - Run `cefclient --enable-network-service`. All resources should load successfully (this tests the transparent proxy capability). - All tests pass with NetworkService disabled. - The following tests pass with NetworkService enabled: - CookieTest.* - FrameTest.* (excluding .*Nav) - NavigationTest.* (excluding .Redirect*) - RequestHandlerTest.* - RequestContextTest.Basic* - RequestContextTest.Popup* - RequestTest.* - ResourceManagerTest.* - ResourceRequestHandlerTest.* (excluding .Filter*) - SchemeHandlerTest.* - StreamResourceHandlerTest.*
294 lines
12 KiB
C++
294 lines
12 KiB
C++
// 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 <string>
|
|
#include <vector>
|
|
|
|
#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.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;
|
|
|
|
// 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<CefBrowserPlatformDelegate> 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<CefBrowserView> GetBrowserView() const;
|
|
#endif // defined(USE_AURA)
|
|
|
|
// 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<CefClient> 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 content::NativeWebKeyboardEvent& event) = 0;
|
|
virtual void SendMouseEvent(const blink::WebMouseEvent& event) = 0;
|
|
virtual void SendMouseWheelEvent(const blink::WebMouseWheelEvent& event) = 0;
|
|
|
|
// Send touch events.
|
|
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);
|
|
|
|
// Translate CEF events to Chromium/Blink events.
|
|
virtual void TranslateKeyEvent(content::NativeWebKeyboardEvent& result,
|
|
const CefKeyEvent& key_event) const = 0;
|
|
virtual void TranslateClickEvent(blink::WebMouseEvent& result,
|
|
const CefMouseEvent& mouse_event,
|
|
CefBrowserHost::MouseButtonType type,
|
|
bool mouseUp,
|
|
int clickCount) const = 0;
|
|
virtual void TranslateMoveEvent(blink::WebMouseEvent& result,
|
|
const CefMouseEvent& mouse_event,
|
|
bool mouseLeave) const = 0;
|
|
virtual void TranslateWheelEvent(blink::WebMouseWheelEvent& result,
|
|
const CefMouseEvent& mouse_event,
|
|
int deltaX,
|
|
int deltaY) const = 0;
|
|
|
|
// 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<CefFileDialogRunner> CreateFileDialogRunner();
|
|
|
|
// Create the platform-specific JavaScript dialog runner.
|
|
virtual std::unique_ptr<CefJavaScriptDialogRunner>
|
|
CreateJavaScriptDialogRunner();
|
|
|
|
// Create the platform-specific menu runner.
|
|
virtual std::unique_ptr<CefMenuRunner> 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<CefCompositionUnderline>& 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<CefDragData> 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<content::AXLocationChangeNotificationDetails>& locData);
|
|
|
|
protected:
|
|
// Allow deletion via scoped_ptr only.
|
|
friend std::default_delete<CefBrowserPlatformDelegate>;
|
|
|
|
CefBrowserPlatformDelegate();
|
|
virtual ~CefBrowserPlatformDelegate();
|
|
|
|
static int TranslateModifiers(uint32 cef_modifiers);
|
|
|
|
CefBrowserHostImpl* browser_; // Not owned by this object.
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN(CefBrowserPlatformDelegate);
|
|
};
|
|
|
|
#endif // CEF_LIBCEF_BROWSER_BROWSER_PLATFORM_DELEGATE_H_
|