mirror of
				https://bitbucket.org/chromiumembedded/cef
				synced 2025-06-05 21:39:12 +02:00 
			
		
		
		
	Implement accessibility enhancements (issue #1217)
- Add new CefBrowserHost::SetAccessibilityState method for toggling accessibility state when readers are detected by the client. - Add new CefAccessibilityHandler interface for the delivery of accessibility notifications to windowless (OSR) clients. - Fix delivery of CefFocusHandler callbacks to windowless clients. - cefclient: Add example windowless accessibility implementation on Windows and macOS. - cefclient: Automatically detect screen readers on Windows and macOS.
This commit is contained in:
		
				
					committed by
					
						 Marshall Greenblatt
						Marshall Greenblatt
					
				
			
			
				
	
			
			
			
						parent
						
							64fcfa6068
						
					
				
				
					commit
					816f700d3e
				
			
							
								
								
									
										81
									
								
								libcef_dll/cpptoc/accessibility_handler_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								libcef_dll/cpptoc/accessibility_handler_cpptoc.cc
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | ||||
| // Copyright (c) 2017 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. | ||||
| // | ||||
| // --------------------------------------------------------------------------- | ||||
| // | ||||
| // This file was generated by the CEF translator tool. If making changes by | ||||
| // hand only do so within the body of existing method and function | ||||
| // implementations. See the translator.README.txt file in the tools directory | ||||
| // for more information. | ||||
| // | ||||
|  | ||||
| #include "libcef_dll/cpptoc/accessibility_handler_cpptoc.h" | ||||
| #include "libcef_dll/ctocpp/value_ctocpp.h" | ||||
|  | ||||
|  | ||||
| namespace { | ||||
|  | ||||
| // MEMBER FUNCTIONS - Body may be edited by hand. | ||||
|  | ||||
| void CEF_CALLBACK accessibility_handler_on_accessibility_tree_change( | ||||
|     struct _cef_accessibility_handler_t* self, struct _cef_value_t* value) { | ||||
|   // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING | ||||
|  | ||||
|   DCHECK(self); | ||||
|   if (!self) | ||||
|     return; | ||||
|   // Verify param: value; type: refptr_diff | ||||
|   DCHECK(value); | ||||
|   if (!value) | ||||
|     return; | ||||
|  | ||||
|   // Execute | ||||
|   CefAccessibilityHandlerCppToC::Get(self)->OnAccessibilityTreeChange( | ||||
|       CefValueCToCpp::Wrap(value)); | ||||
| } | ||||
|  | ||||
| void CEF_CALLBACK accessibility_handler_on_accessibility_location_change( | ||||
|     struct _cef_accessibility_handler_t* self, struct _cef_value_t* value) { | ||||
|   // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING | ||||
|  | ||||
|   DCHECK(self); | ||||
|   if (!self) | ||||
|     return; | ||||
|   // Verify param: value; type: refptr_diff | ||||
|   DCHECK(value); | ||||
|   if (!value) | ||||
|     return; | ||||
|  | ||||
|   // Execute | ||||
|   CefAccessibilityHandlerCppToC::Get(self)->OnAccessibilityLocationChange( | ||||
|       CefValueCToCpp::Wrap(value)); | ||||
| } | ||||
|  | ||||
| }  // namespace | ||||
|  | ||||
|  | ||||
| // CONSTRUCTOR - Do not edit by hand. | ||||
|  | ||||
| CefAccessibilityHandlerCppToC::CefAccessibilityHandlerCppToC() { | ||||
|   GetStruct()->on_accessibility_tree_change = | ||||
|       accessibility_handler_on_accessibility_tree_change; | ||||
|   GetStruct()->on_accessibility_location_change = | ||||
|       accessibility_handler_on_accessibility_location_change; | ||||
| } | ||||
|  | ||||
| template<> CefRefPtr<CefAccessibilityHandler> CefCppToCRefCounted<CefAccessibilityHandlerCppToC, | ||||
|     CefAccessibilityHandler, cef_accessibility_handler_t>::UnwrapDerived( | ||||
|     CefWrapperType type, cef_accessibility_handler_t* s) { | ||||
|   NOTREACHED() << "Unexpected class type: " << type; | ||||
|   return NULL; | ||||
| } | ||||
|  | ||||
| #if DCHECK_IS_ON() | ||||
| template<> base::AtomicRefCount CefCppToCRefCounted<CefAccessibilityHandlerCppToC, | ||||
|     CefAccessibilityHandler, cef_accessibility_handler_t>::DebugObjCt = 0; | ||||
| #endif | ||||
|  | ||||
| template<> CefWrapperType CefCppToCRefCounted<CefAccessibilityHandlerCppToC, | ||||
|     CefAccessibilityHandler, cef_accessibility_handler_t>::kWrapperType = | ||||
|     WT_ACCESSIBILITY_HANDLER; | ||||
							
								
								
									
										34
									
								
								libcef_dll/cpptoc/accessibility_handler_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										34
									
								
								libcef_dll/cpptoc/accessibility_handler_cpptoc.h
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,34 @@ | ||||
| // Copyright (c) 2017 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. | ||||
| // | ||||
| // --------------------------------------------------------------------------- | ||||
| // | ||||
| // This file was generated by the CEF translator tool. If making changes by | ||||
| // hand only do so within the body of existing method and function | ||||
| // implementations. See the translator.README.txt file in the tools directory | ||||
| // for more information. | ||||
| // | ||||
|  | ||||
| #ifndef CEF_LIBCEF_DLL_CPPTOC_ACCESSIBILITY_HANDLER_CPPTOC_H_ | ||||
| #define CEF_LIBCEF_DLL_CPPTOC_ACCESSIBILITY_HANDLER_CPPTOC_H_ | ||||
| #pragma once | ||||
|  | ||||
| #if !defined(WRAPPING_CEF_SHARED) | ||||
| #error This file can be included wrapper-side only | ||||
| #endif | ||||
|  | ||||
| #include "include/cef_accessibility_handler.h" | ||||
| #include "include/capi/cef_accessibility_handler_capi.h" | ||||
| #include "libcef_dll/cpptoc/cpptoc_ref_counted.h" | ||||
|  | ||||
| // Wrap a C++ class with a C structure. | ||||
| // This class may be instantiated and accessed wrapper-side only. | ||||
| class CefAccessibilityHandlerCppToC | ||||
|     : public CefCppToCRefCounted<CefAccessibilityHandlerCppToC, | ||||
|         CefAccessibilityHandler, cef_accessibility_handler_t> { | ||||
|  public: | ||||
|   CefAccessibilityHandlerCppToC(); | ||||
| }; | ||||
|  | ||||
| #endif  // CEF_LIBCEF_DLL_CPPTOC_ACCESSIBILITY_HANDLER_CPPTOC_H_ | ||||
| @@ -1005,6 +1005,19 @@ struct _cef_navigation_entry_t* CEF_CALLBACK browser_host_get_visible_navigation | ||||
|   return CefNavigationEntryCppToC::Wrap(_retval); | ||||
| } | ||||
|  | ||||
| void CEF_CALLBACK browser_host_set_accessibility_state( | ||||
|     struct _cef_browser_host_t* self, cef_state_t accessibility_state) { | ||||
|   // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING | ||||
|  | ||||
|   DCHECK(self); | ||||
|   if (!self) | ||||
|     return; | ||||
|  | ||||
|   // Execute | ||||
|   CefBrowserHostCppToC::Get(self)->SetAccessibilityState( | ||||
|       accessibility_state); | ||||
| } | ||||
|  | ||||
| }  // namespace | ||||
|  | ||||
|  | ||||
| @@ -1072,6 +1085,7 @@ CefBrowserHostCppToC::CefBrowserHostCppToC() { | ||||
|       browser_host_drag_source_system_drag_ended; | ||||
|   GetStruct()->get_visible_navigation_entry = | ||||
|       browser_host_get_visible_navigation_entry; | ||||
|   GetStruct()->set_accessibility_state = browser_host_set_accessibility_state; | ||||
| } | ||||
|  | ||||
| template<> CefRefPtr<CefBrowserHost> CefCppToCRefCounted<CefBrowserHostCppToC, | ||||
|   | ||||
| @@ -10,6 +10,7 @@ | ||||
| // for more information. | ||||
| // | ||||
|  | ||||
| #include "libcef_dll/cpptoc/accessibility_handler_cpptoc.h" | ||||
| #include "libcef_dll/cpptoc/render_handler_cpptoc.h" | ||||
| #include "libcef_dll/ctocpp/browser_ctocpp.h" | ||||
| #include "libcef_dll/ctocpp/drag_data_ctocpp.h" | ||||
| @@ -19,6 +20,22 @@ namespace { | ||||
|  | ||||
| // MEMBER FUNCTIONS - Body may be edited by hand. | ||||
|  | ||||
| cef_accessibility_handler_t* CEF_CALLBACK render_handler_get_accessibility_handler( | ||||
|     struct _cef_render_handler_t* self) { | ||||
|   // AUTO-GENERATED CONTENT - DELETE THIS COMMENT BEFORE MODIFYING | ||||
|  | ||||
|   DCHECK(self); | ||||
|   if (!self) | ||||
|     return NULL; | ||||
|  | ||||
|   // Execute | ||||
|   CefRefPtr<CefAccessibilityHandler> _retval = CefRenderHandlerCppToC::Get( | ||||
|       self)->GetAccessibilityHandler(); | ||||
|  | ||||
|   // Return type: refptr_same | ||||
|   return CefAccessibilityHandlerCppToC::Wrap(_retval); | ||||
| } | ||||
|  | ||||
| int CEF_CALLBACK render_handler_get_root_screen_rect( | ||||
|     struct _cef_render_handler_t* self, cef_browser_t* browser, | ||||
|     cef_rect_t* rect) { | ||||
| @@ -396,6 +413,8 @@ void CEF_CALLBACK render_handler_on_ime_composition_range_changed( | ||||
| // CONSTRUCTOR - Do not edit by hand. | ||||
|  | ||||
| CefRenderHandlerCppToC::CefRenderHandlerCppToC() { | ||||
|   GetStruct()->get_accessibility_handler = | ||||
|       render_handler_get_accessibility_handler; | ||||
|   GetStruct()->get_root_screen_rect = render_handler_get_root_screen_rect; | ||||
|   GetStruct()->get_view_rect = render_handler_get_view_rect; | ||||
|   GetStruct()->get_screen_point = render_handler_get_screen_point; | ||||
|   | ||||
		Reference in New Issue
	
	Block a user