mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2024-12-16 19:39:18 +01:00
019611c764
Under ARC (Automatic Reference Counting), assigning to an Objective-C pointer has different semantics than assigning to a void* pointer. This makes it dangerous to treat the same memory address as an Objective-C pointer in some cases and as a "regular C pointer" in other cases. This change removes the conditional type defines and instead uses void* everywhere. Explicit type casting in combination with ARC annotations makes it safe to get typed Objective-C pointers from the void* pointers. This change enables ARC by default in the CEF binary distribution CMake configuration for the cefclient and cefsimple sample applications. It can be disabled by adding `-DOPTION_USE_ARC=Off` to the CMake command line. ARC is not supported when building Chromium due to the substantial number of changes that would be required in the Chromium code base.
211 lines
7.7 KiB
Objective-C
211 lines
7.7 KiB
Objective-C
// Copyright (c) 2015 The Chromium Embedded Framework 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_TESTS_CEFCLIENT_BROWSER_ROOT_WINDOW_H_
|
|
#define CEF_TESTS_CEFCLIENT_BROWSER_ROOT_WINDOW_H_
|
|
#pragma once
|
|
|
|
#include <set>
|
|
#include <string>
|
|
|
|
#include "include/base/cef_callback_forward.h"
|
|
#include "include/base/cef_ref_counted.h"
|
|
#include "include/cef_browser.h"
|
|
#include "include/views/cef_window.h"
|
|
#include "tests/cefclient/browser/client_types.h"
|
|
#include "tests/cefclient/browser/image_cache.h"
|
|
#include "tests/shared/browser/main_message_loop.h"
|
|
|
|
#if defined(OS_MACOSX) && __OBJC__
|
|
@class NSWindow;
|
|
#endif // defined(OS_MACOSX) && __OBJC__
|
|
|
|
namespace client {
|
|
|
|
// Used to configure how a RootWindow is created.
|
|
struct RootWindowConfig {
|
|
RootWindowConfig();
|
|
|
|
// If true the window will always display above other windows.
|
|
bool always_on_top;
|
|
|
|
// If true the window will show controls.
|
|
bool with_controls;
|
|
|
|
// If true the window will use off-screen rendering.
|
|
bool with_osr;
|
|
|
|
// If true the window is hosting an extension app.
|
|
bool with_extension;
|
|
|
|
// If true the window will be created initially hidden.
|
|
bool initially_hidden;
|
|
|
|
// Requested window position. If |bounds| and |source_bounds| are empty the
|
|
// default window size and location will be used.
|
|
CefRect bounds;
|
|
|
|
// Position of the UI element that triggered the window creation. If |bounds|
|
|
// is empty and |source_bounds| is non-empty the new window will be positioned
|
|
// relative to |source_bounds|. This is currently only implemented for Views-
|
|
// based windows when |initially_hidden| is also true.
|
|
CefRect source_bounds;
|
|
|
|
// Parent window. Only used for Views-based windows.
|
|
CefRefPtr<CefWindow> parent_window;
|
|
|
|
// Callback to be executed when the window is closed. Will be executed on the
|
|
// main thread. This is currently only implemented for Views-based windows.
|
|
base::Closure close_callback;
|
|
|
|
// Initial URL to load.
|
|
std::string url;
|
|
};
|
|
|
|
typedef std::set<CefRefPtr<CefExtension>> ExtensionSet;
|
|
|
|
// Represents a top-level native window in the browser process. While references
|
|
// to this object are thread-safe the methods must be called on the main thread
|
|
// unless otherwise indicated.
|
|
class RootWindow
|
|
: public base::RefCountedThreadSafe<RootWindow, DeleteOnMainThread> {
|
|
public:
|
|
// This interface is implemented by the owner of the RootWindow. The methods
|
|
// of this class will be called on the main thread.
|
|
class Delegate {
|
|
public:
|
|
// Called to retrieve the CefRequestContext for browser. Only called for
|
|
// non-popup browsers. May return NULL.
|
|
virtual CefRefPtr<CefRequestContext> GetRequestContext(
|
|
RootWindow* root_window) = 0;
|
|
|
|
// Returns the ImageCache.
|
|
virtual scoped_refptr<ImageCache> GetImageCache() = 0;
|
|
|
|
// Called to execute a test. See resource.h for |test_id| values.
|
|
virtual void OnTest(RootWindow* root_window, int test_id) = 0;
|
|
|
|
// Called to exit the application.
|
|
virtual void OnExit(RootWindow* root_window) = 0;
|
|
|
|
// Called when the RootWindow has been destroyed.
|
|
virtual void OnRootWindowDestroyed(RootWindow* root_window) = 0;
|
|
|
|
// Called when the RootWindow is activated (becomes the foreground window).
|
|
virtual void OnRootWindowActivated(RootWindow* root_window) = 0;
|
|
|
|
// Called when the browser is created for the RootWindow.
|
|
virtual void OnBrowserCreated(RootWindow* root_window,
|
|
CefRefPtr<CefBrowser> browser) = 0;
|
|
|
|
// Create a window for |extension|. |source_bounds| are the bounds of the
|
|
// UI element, like a button, that triggered the extension.
|
|
virtual void CreateExtensionWindow(CefRefPtr<CefExtension> extension,
|
|
const CefRect& source_bounds,
|
|
CefRefPtr<CefWindow> parent_window,
|
|
const base::Closure& close_callback,
|
|
bool with_osr) = 0;
|
|
|
|
protected:
|
|
virtual ~Delegate() {}
|
|
};
|
|
|
|
// Create a new RootWindow object. This method may be called on any thread.
|
|
// Use RootWindowManager::CreateRootWindow() or CreateRootWindowAsPopup()
|
|
// instead of calling this method directly. |use_views| will be true if the
|
|
// Views framework should be used.
|
|
static scoped_refptr<RootWindow> Create(bool use_views);
|
|
|
|
// Returns the RootWindow associated with the specified |browser_id|. Must be
|
|
// called on the main thread.
|
|
static scoped_refptr<RootWindow> GetForBrowser(int browser_id);
|
|
|
|
#if defined(OS_MACOSX) && __OBJC__
|
|
// Returns the RootWindow associated with the specified |window|. Must be
|
|
// called on the main thread.
|
|
static scoped_refptr<RootWindow> GetForNSWindow(NSWindow* window);
|
|
#endif
|
|
|
|
// Initialize as a normal window. This will create and show a native window
|
|
// hosting a single browser instance. This method may be called on any thread.
|
|
// |delegate| must be non-NULL and outlive this object.
|
|
// Use RootWindowManager::CreateRootWindow() instead of calling this method
|
|
// directly.
|
|
virtual void Init(RootWindow::Delegate* delegate,
|
|
const RootWindowConfig& config,
|
|
const CefBrowserSettings& settings) = 0;
|
|
|
|
// Initialize as a popup window. This is used to attach a new native window to
|
|
// a single browser instance that will be created later. The native window
|
|
// will be created and shown once the browser is available. This method may be
|
|
// called on any thread. |delegate| must be non-NULL and outlive this object.
|
|
// Use RootWindowManager::CreateRootWindowAsPopup() instead of calling this
|
|
// method directly. Called on the UI thread.
|
|
virtual void InitAsPopup(RootWindow::Delegate* delegate,
|
|
bool with_controls,
|
|
bool with_osr,
|
|
const CefPopupFeatures& popupFeatures,
|
|
CefWindowInfo& windowInfo,
|
|
CefRefPtr<CefClient>& client,
|
|
CefBrowserSettings& settings) = 0;
|
|
|
|
enum ShowMode {
|
|
ShowNormal,
|
|
ShowMinimized,
|
|
ShowMaximized,
|
|
ShowNoActivate,
|
|
};
|
|
|
|
// Show the window.
|
|
virtual void Show(ShowMode mode) = 0;
|
|
|
|
// Hide the window.
|
|
virtual void Hide() = 0;
|
|
|
|
// Set the window bounds in screen coordinates.
|
|
virtual void SetBounds(int x, int y, size_t width, size_t height) = 0;
|
|
|
|
// Close the window. If |force| is true onunload handlers will not be
|
|
// executed.
|
|
virtual void Close(bool force) = 0;
|
|
|
|
// Set the device scale factor. Only used in combination with off-screen
|
|
// rendering.
|
|
virtual void SetDeviceScaleFactor(float device_scale_factor) = 0;
|
|
|
|
// Returns the device scale factor. Only used in combination with off-screen
|
|
// rendering.
|
|
virtual float GetDeviceScaleFactor() const = 0;
|
|
|
|
// Returns the browser that this window contains, if any.
|
|
virtual CefRefPtr<CefBrowser> GetBrowser() const = 0;
|
|
|
|
// Returns the native handle for this window, if any.
|
|
virtual ClientWindowHandle GetWindowHandle() const = 0;
|
|
|
|
// Returns true if this window is using windowless rendering (osr).
|
|
virtual bool WithWindowlessRendering() const = 0;
|
|
|
|
// Returns true if this window is hosting an extension app.
|
|
virtual bool WithExtension() const = 0;
|
|
|
|
// Called when the set of loaded extensions changes. The default
|
|
// implementation will create a single window instance for each extension.
|
|
virtual void OnExtensionsChanged(const ExtensionSet& extensions);
|
|
|
|
protected:
|
|
// Allow deletion via scoped_refptr only.
|
|
friend struct DeleteOnMainThread;
|
|
friend class base::RefCountedThreadSafe<RootWindow, DeleteOnMainThread>;
|
|
|
|
RootWindow();
|
|
virtual ~RootWindow();
|
|
|
|
Delegate* delegate_;
|
|
};
|
|
|
|
} // namespace client
|
|
|
|
#endif // CEF_TESTS_CEFCLIENT_BROWSER_ROOT_WINDOW_H_
|