mirror of
https://bitbucket.org/chromiumembedded/cef
synced 2024-12-16 11:28:54 +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.
124 lines
3.6 KiB
C++
124 lines
3.6 KiB
C++
// Copyright 2017 The Chromium Embedded Framework Authors. Portions copyright
|
|
// 2013 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_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_
|
|
#define CEF_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_
|
|
#pragma once
|
|
|
|
#include <vector>
|
|
|
|
#include "include/cef_browser.h"
|
|
|
|
#if defined(OS_MACOSX)
|
|
typedef void CefNativeAccessible;
|
|
#if __OBJC__
|
|
#if __has_feature(objc_arc)
|
|
#define CAST_CEF_NATIVE_ACCESSIBLE_TO_NSOBJECT(accessible) \
|
|
(__bridge NSObject*)accessible
|
|
#define CAST_NSOBJECT_TO_CEF_NATIVE_ACCESSIBLE(object) \
|
|
(__bridge CefNativeAccessible*)object
|
|
#else // __has_feature(objc_arc)
|
|
#define CAST_CEF_NATIVE_ACCESSIBLE_TO_NSOBJECT(accessible) (NSObject*)accessible
|
|
#define CAST_NSOBJECT_TO_CEF_NATIVE_ACCESSIBLE(object) \
|
|
(__bridge CefNativeAccessible*)object
|
|
#endif // __has_feature(objc_arc)
|
|
#endif // __OBJC__
|
|
#elif defined(OS_WIN)
|
|
struct IAccessible;
|
|
typedef IAccessible CefNativeAccessible;
|
|
#else
|
|
#error "Unsupported platform"
|
|
#endif
|
|
|
|
namespace client {
|
|
|
|
class OsrAccessibilityHelper;
|
|
|
|
// OsrAXNode is the base class for implementation for the NSAccessibility
|
|
// protocol for interacting with VoiceOver and other accessibility clients.
|
|
class OsrAXNode {
|
|
public:
|
|
// Create and return the platform specific OsrAXNode Object.
|
|
static OsrAXNode* CreateNode(int treeId,
|
|
int nodeId,
|
|
CefRefPtr<CefDictionaryValue> value,
|
|
OsrAccessibilityHelper* helper);
|
|
|
|
// Update Value.
|
|
void UpdateValue(CefRefPtr<CefDictionaryValue> value);
|
|
|
|
// UpdateLocation
|
|
void UpdateLocation(CefRefPtr<CefDictionaryValue> value);
|
|
|
|
// Fire a platform-specific notification that an event has occurred on
|
|
// this object.
|
|
void NotifyAccessibilityEvent(std::string event_type) const;
|
|
|
|
// Call Destroy rather than deleting this, because the subclass may
|
|
// use reference counting.
|
|
void Destroy();
|
|
|
|
// Return NSAccessibility Object for Mac/ IAccessible for Windows
|
|
CefNativeAccessible* GetNativeAccessibleObject(OsrAXNode* parent);
|
|
|
|
CefNativeAccessible* GetParentAccessibleObject() const {
|
|
return parent_ ? parent_->platform_accessibility_ : NULL;
|
|
}
|
|
|
|
OsrAccessibilityHelper* GetAccessibilityHelper() const {
|
|
return accessibility_helper_;
|
|
}
|
|
|
|
int GetChildCount() const;
|
|
|
|
// Return the Child at the specified index
|
|
OsrAXNode* ChildAtIndex(int index) const;
|
|
|
|
const CefString& AxRole() const { return role_; }
|
|
|
|
int OsrAXTreeId() const { return tree_id_; }
|
|
|
|
int OsrAXNodeId() const { return node_id_; }
|
|
|
|
const CefString& AxValue() const { return value_; }
|
|
|
|
const CefString& AxName() const { return name_; }
|
|
|
|
const CefString& AxDescription() const { return description_; }
|
|
|
|
CefRect AxLocation() const;
|
|
|
|
CefWindowHandle GetWindowHandle() const;
|
|
|
|
CefRefPtr<CefBrowser> GetBrowser() const;
|
|
|
|
void SetParent(OsrAXNode* parent);
|
|
|
|
protected:
|
|
OsrAXNode(int treeId,
|
|
int nodeId,
|
|
CefRefPtr<CefDictionaryValue> value,
|
|
OsrAccessibilityHelper* helper);
|
|
|
|
int tree_id_;
|
|
int node_id_;
|
|
int child_tree_id_;
|
|
CefString role_;
|
|
CefString value_;
|
|
CefString name_;
|
|
CefString description_;
|
|
CefRect location_;
|
|
CefPoint scroll_;
|
|
std::vector<int> child_ids_;
|
|
CefNativeAccessible* platform_accessibility_;
|
|
OsrAXNode* parent_;
|
|
int offset_container_id_;
|
|
OsrAccessibilityHelper* accessibility_helper_;
|
|
CefRefPtr<CefDictionaryValue> attributes_;
|
|
};
|
|
|
|
} // namespace client
|
|
|
|
#endif // CEF_TESTS_CEFCLIENT_BROWSER_OSR_ACCESSIBILITY_NODE_H_
|