Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(12)

Side by Side Diff: ui/accessibility/platform/ax_platform_node_mac.mm

Issue 2956593002: cl format
Patch Set: Sash - text markers not needed :/ Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #import "ui/accessibility/platform/ax_platform_node_mac.h" 5 #import "ui/accessibility/platform/ax_platform_node_mac.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 #include <stddef.h> 8 #include <stddef.h>
9 9
10 #include "base/macros.h" 10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h"
11 #include "base/strings/sys_string_conversions.h" 12 #include "base/strings/sys_string_conversions.h"
12 #include "ui/accessibility/ax_action_data.h" 13 #include "ui/accessibility/ax_action_data.h"
13 #include "ui/accessibility/ax_node_data.h" 14 #include "ui/accessibility/ax_node_data.h"
15 #include "ui/accessibility/ax_node_position.h"
16 #include "ui/accessibility/ax_range.h"
14 #include "ui/accessibility/ax_role_properties.h" 17 #include "ui/accessibility/ax_role_properties.h"
15 #include "ui/accessibility/platform/ax_platform_node.h" 18 #include "ui/accessibility/platform/ax_platform_node.h"
16 #include "ui/accessibility/platform/ax_platform_node_delegate.h" 19 #include "ui/accessibility/platform/ax_platform_node_delegate.h"
20 #import "ui/accessibility/platform/text_marker_helper_mac.h"
17 #include "ui/base/l10n/l10n_util.h" 21 #include "ui/base/l10n/l10n_util.h"
18 #import "ui/gfx/mac/coordinate_conversion.h" 22 #import "ui/gfx/mac/coordinate_conversion.h"
19 #include "ui/strings/grit/ui_strings.h" 23 #include "ui/strings/grit/ui_strings.h"
20 24
21 namespace { 25 namespace {
22 26
23 struct RoleMapEntry { 27 struct RoleMapEntry {
24 ui::AXRole value; 28 ui::AXRole value;
25 NSString* nativeValue; 29 NSString* nativeValue;
26 }; 30 };
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 // TODO(patricialor): Add more events. 218 // TODO(patricialor): Add more events.
215 }; 219 };
216 220
217 EventMap event_map; 221 EventMap event_map;
218 for (size_t i = 0; i < arraysize(events); ++i) 222 for (size_t i = 0; i < arraysize(events); ++i)
219 event_map[events[i].value] = events[i].nativeValue; 223 event_map[events[i].value] = events[i].nativeValue;
220 return event_map; 224 return event_map;
221 } 225 }
222 226
223 void NotifyMacEvent(AXPlatformNodeCocoa* target, ui::AXEvent event_type) { 227 void NotifyMacEvent(AXPlatformNodeCocoa* target, ui::AXEvent event_type) {
228 NSLog(@"Notify: %@, %@", target,
229 [AXPlatformNodeCocoa nativeNotificationFromAXEvent:event_type]);
224 NSAccessibilityPostNotification( 230 NSAccessibilityPostNotification(
225 target, [AXPlatformNodeCocoa nativeNotificationFromAXEvent:event_type]); 231 target, [AXPlatformNodeCocoa nativeNotificationFromAXEvent:event_type]);
226 } 232 }
227 233
228 } // namespace 234 } // namespace
229 235
236 namespace ui {
237 namespace {
238
239 using AXNodePositionInstance = AXNodePosition::AXPositionInstance;
240 using AXNodeRange = AXRange<AXNodePositionInstance::element_type>;
241
242 class NodePositionFactory : public ui::PositionFactory {
243 public:
244 explicit NodePositionFactory(AXPlatformNodeCocoa* node) : node_(node) {}
245
246 ui::AXPositionPointer GetRoot() const override;
247 ui::AXRangePointer GetSelection() const override;
248 ui::AXPositionPointer GetFromData(
249 const ui::AXPositionData& data) const override;
250 id GetAccessibilityObject(const ui::AXPositionData& data) const override;
251
252 private:
253 AXPlatformNodeCocoa* node_; // Weak. Transitively owns |this|.
254
255 DISALLOW_COPY_AND_ASSIGN(NodePositionFactory);
256 };
257
258 AXNodeRange CreateRangeFromTextMarkerRange(id marker_range) {
259 ui::AXPositionData start, end;
260 if (![TextMarkerHelperMac getRangeDataFromMarkerRange:marker_range
261 start:&start
262 end:&end]) {
263 return AXNodeRange();
264 }
265
266 return AXNodeRange(AXNodePosition::CreateFromData(start),
267 AXNodePosition::CreateFromData(end));
268 }
269
270 NSString* GetTextForTextMarkerRange(id marker_range) {
271 AXNodeRange range = CreateRangeFromTextMarkerRange(marker_range);
272 if (range.IsNull())
273 return nil;
274 return base::SysUTF16ToNSString(range.GetText());
275 }
276
277 } // namespace
278 } // namespace ui
279
230 @interface AXPlatformNodeCocoa () 280 @interface AXPlatformNodeCocoa ()
231 // Helper function for string attributes that don't require extra processing. 281 // Helper function for string attributes that don't require extra processing.
232 - (NSString*)getStringAttribute:(ui::AXStringAttribute)attribute; 282 - (NSString*)getStringAttribute:(ui::AXStringAttribute)attribute;
233 // Returns AXValue, or nil if AXValue isn't an NSString. 283 // Returns AXValue, or nil if AXValue isn't an NSString.
234 - (NSString*)getAXValueAsString; 284 - (NSString*)getAXValueAsString;
285 // Lazily creates a TextMarkerHelper and returns it.
286 - (TextMarkerHelperMac*)textMarkerHelper;
235 @end 287 @end
236 288
237 @implementation AXPlatformNodeCocoa { 289 @implementation AXPlatformNodeCocoa {
238 ui::AXPlatformNodeBase* node_; // Weak. Retains us. 290 ui::AXPlatformNodeBase* node_; // Weak. Retains us.
291 base::scoped_nsobject<TextMarkerHelperMac> textMarkerHelper_;
239 } 292 }
240 293
241 @synthesize node = node_; 294 @synthesize node = node_;
242 295
243 // A mapping of AX roles to native roles. 296 // A mapping of AX roles to native roles.
244 + (NSString*)nativeRoleFromAXRole:(ui::AXRole)role { 297 + (NSString*)nativeRoleFromAXRole:(ui::AXRole)role {
245 CR_DEFINE_STATIC_LOCAL(RoleMap, role_map, (BuildRoleMap())); 298 CR_DEFINE_STATIC_LOCAL(RoleMap, role_map, (BuildRoleMap()));
246 RoleMap::iterator it = role_map.find(role); 299 RoleMap::iterator it = role_map.find(role);
247 return it != role_map.end() ? it->second : NSAccessibilityUnknownRole; 300 return it != role_map.end() ? it->second : NSAccessibilityUnknownRole;
248 } 301 }
(...skipping 18 matching lines...) Expand all
267 } 320 }
268 return self; 321 return self;
269 } 322 }
270 323
271 - (void)detach { 324 - (void)detach {
272 if (!node_) 325 if (!node_)
273 return; 326 return;
274 NSAccessibilityPostNotification( 327 NSAccessibilityPostNotification(
275 self, NSAccessibilityUIElementDestroyedNotification); 328 self, NSAccessibilityUIElementDestroyedNotification);
276 node_ = nil; 329 node_ = nil;
330
331 // Nothing retains |textMarkerHelper_|, so this should always dealloc.
332 textMarkerHelper_.reset();
277 } 333 }
278 334
279 - (NSRect)boundsInScreen { 335 - (NSRect)boundsInScreen {
280 if (!node_) 336 if (!node_)
281 return NSZeroRect; 337 return NSZeroRect;
282 return gfx::ScreenRectToNSRect(node_->GetBoundsInScreen()); 338 return gfx::ScreenRectToNSRect(node_->GetBoundsInScreen());
283 } 339 }
284 340
285 - (NSString*)getStringAttribute:(ui::AXStringAttribute)attribute { 341 - (NSString*)getStringAttribute:(ui::AXStringAttribute)attribute {
286 std::string attributeValue; 342 std::string attributeValue;
287 if (node_->GetStringAttribute(attribute, &attributeValue)) 343 if (node_->GetStringAttribute(attribute, &attributeValue))
288 return base::SysUTF8ToNSString(attributeValue); 344 return base::SysUTF8ToNSString(attributeValue);
289 return nil; 345 return nil;
290 } 346 }
291 347
292 - (NSString*)getAXValueAsString { 348 - (NSString*)getAXValueAsString {
293 id value = [self AXValue]; 349 id value = [self AXValue];
294 return [value isKindOfClass:[NSString class]] ? value : nil; 350 return [value isKindOfClass:[NSString class]] ? value : nil;
295 } 351 }
296 352
353 - (TextMarkerHelperMac*)textMarkerHelper {
354 if (!textMarkerHelper_ && node_) {
355 DLOG(INFO) << "bail";
356 return nil;
357 textMarkerHelper_.reset([[TextMarkerHelperMac alloc]
358 initWithFactory:base::MakeUnique<ui::NodePositionFactory>(self)]);
359 }
360 return textMarkerHelper_;
361 }
362
297 // NSAccessibility informal protocol implementation. 363 // NSAccessibility informal protocol implementation.
298 364
299 - (BOOL)accessibilityIsIgnored { 365 - (BOOL)accessibilityIsIgnored {
300 return [[self AXRole] isEqualToString:NSAccessibilityUnknownRole] || 366 return [[self AXRole] isEqualToString:NSAccessibilityUnknownRole] ||
301 node_->GetData().HasState(ui::AX_STATE_INVISIBLE); 367 node_->GetData().HasState(ui::AX_STATE_INVISIBLE);
302 } 368 }
303 369
304 - (id)accessibilityHitTest:(NSPoint)point { 370 - (id)accessibilityHitTest:(NSPoint)point {
305 for (AXPlatformNodeCocoa* child in [self AXChildren]) { 371 for (AXPlatformNodeCocoa* child in [self AXChildren]) {
306 if (![child accessibilityIsIgnored] && 372 if (![child accessibilityIsIgnored] &&
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 [[NSMutableArray alloc] init]); 452 [[NSMutableArray alloc] init]);
387 453
388 [axAttributes addObjectsFromArray:kAllRoleAttributes]; 454 [axAttributes addObjectsFromArray:kAllRoleAttributes];
389 455
390 switch (node_->GetData().role) { 456 switch (node_->GetData().role) {
391 case ui::AX_ROLE_TEXT_FIELD: 457 case ui::AX_ROLE_TEXT_FIELD:
392 case ui::AX_ROLE_STATIC_TEXT: 458 case ui::AX_ROLE_STATIC_TEXT:
393 [axAttributes addObject:kTextAttributes]; 459 [axAttributes addObject:kTextAttributes];
394 if (!node_->GetData().HasState(ui::AX_STATE_PROTECTED)) 460 if (!node_->GetData().HasState(ui::AX_STATE_PROTECTED))
395 [axAttributes addObjectsFromArray:kUnprotectedTextAttributes]; 461 [axAttributes addObjectsFromArray:kUnprotectedTextAttributes];
462 [axAttributes
463 addObjectsFromArray:[TextMarkerHelperMac getSupportedAttributes]];
396 // Fallthrough. 464 // Fallthrough.
397 case ui::AX_ROLE_CHECK_BOX: 465 case ui::AX_ROLE_CHECK_BOX:
398 case ui::AX_ROLE_COMBO_BOX: 466 case ui::AX_ROLE_COMBO_BOX:
399 case ui::AX_ROLE_MENU_ITEM_CHECK_BOX: 467 case ui::AX_ROLE_MENU_ITEM_CHECK_BOX:
400 case ui::AX_ROLE_MENU_ITEM_RADIO: 468 case ui::AX_ROLE_MENU_ITEM_RADIO:
401 case ui::AX_ROLE_RADIO_BUTTON: 469 case ui::AX_ROLE_RADIO_BUTTON:
402 case ui::AX_ROLE_SEARCH_BOX: 470 case ui::AX_ROLE_SEARCH_BOX:
403 case ui::AX_ROLE_SLIDER: 471 case ui::AX_ROLE_SLIDER:
404 case ui::AX_ROLE_SLIDER_THUMB: 472 case ui::AX_ROLE_SLIDER_THUMB:
405 case ui::AX_ROLE_TOGGLE_BUTTON: 473 case ui::AX_ROLE_TOGGLE_BUTTON:
406 [axAttributes addObjectsFromArray:kValueAttributes]; 474 [axAttributes addObjectsFromArray:kValueAttributes];
407 break; 475 break;
408 // TODO(tapted): Add additional attributes based on role. 476 // TODO(tapted): Add additional attributes based on role.
409 default: 477 default:
410 break; 478 break;
411 } 479 }
480 if (node_->GetData().role == ui::AX_ROLE_TEXT_FIELD) {
481 NSLog(@"%@ reports %@", [self AXValue], axAttributes.get());
482 }
412 return axAttributes.autorelease(); 483 return axAttributes.autorelease();
413 } 484 }
414 485
486 - (NSArray*)accessibilityParameterizedAttributeNames {
487 static NSArray* const kEditableTextAttributes = [@[
488 NSAccessibilityLineForIndexParameterizedAttribute,
489 NSAccessibilityRangeForLineParameterizedAttribute,
490 NSAccessibilityStringForRangeParameterizedAttribute,
491 NSAccessibilityRangeForPositionParameterizedAttribute,
492 NSAccessibilityRangeForIndexParameterizedAttribute,
493 NSAccessibilityBoundsForRangeParameterizedAttribute,
494 NSAccessibilityRTFForRangeParameterizedAttribute,
495 NSAccessibilityAttributedStringForRangeParameterizedAttribute,
496 NSAccessibilityStyleRangeForIndexParameterizedAttribute,
497 ] retain];
498
499 base::scoped_nsobject<NSMutableArray> axAttributes(
500 [[NSMutableArray alloc] init]);
501 [axAttributes addObjectsFromArray:kEditableTextAttributes];
502 [axAttributes
503 addObjectsFromArray:[TextMarkerHelperMac
504 getSupportedParameterizedAttributesExtended:YES]];
505 NSLog(@"PARAM!: %@ reports %@", [self AXValue], axAttributes.get());
506 return axAttributes.autorelease();
507 }
508
415 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attributeName { 509 - (BOOL)accessibilityIsAttributeSettable:(NSString*)attributeName {
416 if (node_->GetData().HasState(ui::AX_STATE_DISABLED)) 510 if (node_->GetData().HasState(ui::AX_STATE_DISABLED))
417 return NO; 511 return NO;
418 512
419 // Allow certain attributes to be written via an accessibility client. A 513 // Allow certain attributes to be written via an accessibility client. A
420 // writable attribute will only appear as such if the accessibility element 514 // writable attribute will only appear as such if the accessibility element
421 // has a value set for that attribute. 515 // has a value set for that attribute.
422 if ([attributeName 516 if ([attributeName
423 isEqualToString:NSAccessibilitySelectedChildrenAttribute] || 517 isEqualToString:NSAccessibilitySelectedChildrenAttribute] ||
424 [attributeName 518 [attributeName
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 576
483 if (data.action != ui::AX_ACTION_NONE) 577 if (data.action != ui::AX_ACTION_NONE)
484 node_->GetDelegate()->AccessibilityPerformAction(data); 578 node_->GetDelegate()->AccessibilityPerformAction(data);
485 579
486 // TODO(patricialor): Plumb through all the other writable attributes as 580 // TODO(patricialor): Plumb through all the other writable attributes as
487 // specified in accessibilityIsAttributeSettable. 581 // specified in accessibilityIsAttributeSettable.
488 } 582 }
489 583
490 - (id)accessibilityAttributeValue:(NSString*)attribute { 584 - (id)accessibilityAttributeValue:(NSString*)attribute {
491 SEL selector = NSSelectorFromString(attribute); 585 SEL selector = NSSelectorFromString(attribute);
492 if ([self respondsToSelector:selector]) 586 if ([TextMarkerHelperMac instancesRespondToSelector:selector]) {
493 return [self performSelector:selector]; 587 DCHECK(![self respondsToSelector:selector]);
588 NSLog(@"supported: %@", attribute);
589 return [[self textMarkerHelper] performSelector:selector];
590 }
591 if ([self respondsToSelector:selector]) {
592 id result = [self performSelector:selector];
593 if (![attribute isEqualToString:@"AXRole"]) {
594 NSLog(@"Trying: %@ (%@) -> %@", attribute, [self AXValue], result);
595 }
596 return result;
597 }
598 NSLog(@"UNsupported: %@", attribute);
494 return nil; 599 return nil;
495 } 600 }
496 601
602 - (id)accessibilityAttributeValue:(NSString*)attribute
603 forParameter:(id)parameter {
604 SEL selector = NSSelectorFromString([attribute stringByAppendingString:@":"]);
605 DCHECK(selector);
606 NSLog(@"Trying: %@ for %@", attribute, parameter);
607 if ([TextMarkerHelperMac instancesRespondToSelector:selector]) {
608 DCHECK(![self respondsToSelector:selector]);
609 return
610 [[self textMarkerHelper] performSelector:selector withObject:parameter];
611 }
612
613 if ([self respondsToSelector:selector])
614 return [self performSelector:selector withObject:parameter];
615
616 // TODO(tapted): Move these to TextMarkerHelper.
617 if ([attribute isEqualToString:@"AXStringForTextMarkerRange"])
618 return ui::GetTextForTextMarkerRange(parameter);
619
620 if ([attribute isEqualToString:@"AXAttributedStringForTextMarkerRange"]) {
621 if (NSString* str = ui::GetTextForTextMarkerRange(parameter)) {
622 base::scoped_nsobject<NSAttributedString> attrString(
623 [[NSAttributedString alloc] initWithString:str]);
624 return attrString.autorelease();
625 }
626 }
627
628 if ([attribute isEqualToString:@"AXLengthForTextMarkerRange"]) {
629 NSString* text = ui::GetTextForTextMarkerRange(parameter);
630 return [NSNumber numberWithInt:[text length]];
631 }
632 NSLog(@"Usupported: %@ for %@", attribute, parameter);
633 return nil;
634 }
635
497 // NSAccessibility attributes. Order them according to 636 // NSAccessibility attributes. Order them according to
498 // NSAccessibilityConstants.h, or see https://crbug.com/678898. 637 // NSAccessibilityConstants.h, or see https://crbug.com/678898.
499 638
500 - (NSString*)AXRole { 639 - (NSString*)AXRole {
501 if (!node_) 640 if (!node_)
502 return nil; 641 return nil;
503 return [[self class] nativeRoleFromAXRole:node_->GetData().role]; 642 return [[self class] nativeRoleFromAXRole:node_->GetData().role];
504 } 643 }
505 644
506 - (NSString*)AXRoleDescription { 645 - (NSString*)AXRoleDescription {
(...skipping 19 matching lines...) Expand all
526 default: 665 default:
527 break; 666 break;
528 } 667 }
529 return [AXPlatformNodeCocoa nativeSubroleFromAXRole:role]; 668 return [AXPlatformNodeCocoa nativeSubroleFromAXRole:role];
530 } 669 }
531 670
532 - (NSString*)AXHelp { 671 - (NSString*)AXHelp {
533 return [self getStringAttribute:ui::AX_ATTR_DESCRIPTION]; 672 return [self getStringAttribute:ui::AX_ATTR_DESCRIPTION];
534 } 673 }
535 674
675 - (NSString*)AXDescription {
676 return [self getStringAttribute:ui::AX_ATTR_DESCRIPTION];
677 }
678
536 - (id)AXValue { 679 - (id)AXValue {
537 switch (node_->GetData().role) { 680 switch (node_->GetData().role) {
538 case ui::AX_ROLE_TAB: 681 case ui::AX_ROLE_TAB:
539 return [self AXSelected]; 682 return [self AXSelected];
540 case ui::AX_ROLE_STATIC_TEXT: 683 case ui::AX_ROLE_STATIC_TEXT:
541 return [self AXTitle]; 684 return [self AXTitle];
542 default: 685 default:
543 break; 686 break;
544 } 687 }
545 return [self getStringAttribute:ui::AX_ATTR_VALUE]; 688 return [self getStringAttribute:ui::AX_ATTR_VALUE];
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 - (NSValue*)AXSelectedTextRange { 756 - (NSValue*)AXSelectedTextRange {
614 // Selection might not be supported. Return (NSRange){0,0} in that case. 757 // Selection might not be supported. Return (NSRange){0,0} in that case.
615 int start = 0, end = 0; 758 int start = 0, end = 0;
616 node_->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, &start); 759 node_->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_START, &start);
617 node_->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &end); 760 node_->GetIntAttribute(ui::AX_ATTR_TEXT_SEL_END, &end);
618 761
619 // NSRange cannot represent the direction the text was selected in. 762 // NSRange cannot represent the direction the text was selected in.
620 return [NSValue valueWithRange:{std::min(start, end), abs(end - start)}]; 763 return [NSValue valueWithRange:{std::min(start, end), abs(end - start)}];
621 } 764 }
622 765
766 - (NSArray*)AXSelectedTextRanges {
767 return @[ [self AXSelectedTextRange] ];
768 }
769
623 - (NSNumber*)AXNumberOfCharacters { 770 - (NSNumber*)AXNumberOfCharacters {
624 return @([[self getAXValueAsString] length]); 771 return @([[self getAXValueAsString] length]);
625 } 772 }
626 773
627 - (NSValue*)AXVisibleCharacterRange { 774 - (NSValue*)AXVisibleCharacterRange {
628 return [NSValue valueWithRange:{0, [[self getAXValueAsString] length]}]; 775 return [NSValue valueWithRange:{0, [[self getAXValueAsString] length]}];
629 } 776 }
630 777
631 - (NSNumber*)AXInsertionPointLineNumber { 778 - (NSNumber*)AXInsertionPointLineNumber {
632 // Multiline is not supported on views. 779 // Multiline is not supported on views.
633 return @0; 780 return @0;
634 } 781 }
635 782
783 - (id)AXStringForRange:(id)parameter {
784 DCHECK([parameter isKindOfClass:[NSValue class]]);
785 return [[self getAXValueAsString] substringWithRange:[parameter rangeValue]];
786 }
787
788 - (id)AXAttributedStringForRange:(id)parameter {
789 base::scoped_nsobject<NSAttributedString> attributedString(
790 [[NSAttributedString alloc]
791 initWithString:[self AXStringForRange:parameter]]);
792 return attributedString.autorelease();
793 }
794
795 - (id)AXRangeForLine:(id)parameter {
796 DCHECK([parameter isKindOfClass:[NSNumber class]]);
797 DCHECK_EQ(0, [parameter intValue]);
798 id r = [NSValue valueWithRange:{0, [[self getAXValueAsString] length]}];
799 NSLog(@"-> %@", r);
800 return r;
801 }
802
803 - (id)AXLineForIndex:(id)parameter {
804 DCHECK([parameter isKindOfClass:[NSNumber class]]);
805 return @0;
806 }
807
808 - (id)AXOwns {
809 return @[];
810 }
811
812 - (id)AXSharedTextUIElements {
813 return @[ self ];
814 }
815
816 - (id)AXSharedCharacterRange {
817 return [NSValue valueWithRange:{0, [[self getAXValueAsString] length]}];
818 }
819
636 @end 820 @end
637 821
638 namespace ui { 822 namespace ui {
639 823
640 // static 824 // static
641 AXPlatformNode* AXPlatformNode::Create(AXPlatformNodeDelegate* delegate) { 825 AXPlatformNode* AXPlatformNode::Create(AXPlatformNodeDelegate* delegate) {
642 AXPlatformNodeBase* node = new AXPlatformNodeMac(); 826 AXPlatformNodeBase* node = new AXPlatformNodeMac();
643 node->Init(delegate); 827 node->Init(delegate);
644 return node; 828 return node;
645 } 829 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 break; 870 break;
687 } 871 }
688 NotifyMacEvent(native_node_, event_type); 872 NotifyMacEvent(native_node_, event_type);
689 } 873 }
690 874
691 int AXPlatformNodeMac::GetIndexInParent() { 875 int AXPlatformNodeMac::GetIndexInParent() {
692 // TODO(dmazzoni): implement this. http://crbug.com/396137 876 // TODO(dmazzoni): implement this. http://crbug.com/396137
693 return -1; 877 return -1;
694 } 878 }
695 879
880 AXPositionPointer NodePositionFactory::GetRoot() const {
881 if (![node_ node])
882 return nullptr;
883
884 return AXNodePosition::CreateTextPosition(1, [node_ node]->unique_id(), 0,
885 AX_TEXT_AFFINITY_DOWNSTREAM);
886 }
887
888 AXRangePointer NodePositionFactory::GetSelection() const {
889 return AXRangePointer(nullptr, nullptr);
890 }
891
892 AXPositionPointer NodePositionFactory::GetFromData(
893 const AXPositionData& data) const {
894 return AXNodePosition::CreateFromData(data);
895 }
896
897 id NodePositionFactory::GetAccessibilityObject(
898 const AXPositionData& data) const {
899 return node_;
900 }
901
696 } // namespace ui 902 } // namespace ui
OLDNEW
« no previous file with comments | « ui/accessibility/platform/ax_platform_node.h ('k') | ui/accessibility/platform/text_marker_helper_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698