diff options
Diffstat (limited to 'content/browser/accessibility/browser_accessibility_cocoa.mm')
-rw-r--r-- | content/browser/accessibility/browser_accessibility_cocoa.mm | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/content/browser/accessibility/browser_accessibility_cocoa.mm b/content/browser/accessibility/browser_accessibility_cocoa.mm index 1b72065..0c50cc6 100644 --- a/content/browser/accessibility/browser_accessibility_cocoa.mm +++ b/content/browser/accessibility/browser_accessibility_cocoa.mm @@ -25,6 +25,7 @@ extern "C" void NSAccessibilityUnregisterUniqueIdForUIElement(id element); using ui::AXNodeData; using content::BrowserAccessibility; +using content::BrowserAccessibilityDelegate; using content::BrowserAccessibilityManager; using content::BrowserAccessibilityManagerMac; using content::ContentClient; @@ -534,9 +535,22 @@ NSDictionary* attributeToMethodNameMap = nil; if (!browserAccessibility_) return NSZeroPoint; - gfx::Rect bounds(origin.x, origin.y, size.width, size.height); - gfx::Point point = [self delegate]->AccessibilityOriginInScreen(bounds); - return NSMakePoint(point.x(), point.y()); + // Get the delegate for the topmost BrowserAccessibilityManager, because + // that's the only one that can convert points to their origin in the screen. + BrowserAccessibilityManager* manager = browserAccessibility_->manager(); + BrowserAccessibility* root = manager->GetRoot(); + while (root->GetParent()) + root = root->GetParent()->manager()->GetRoot(); + manager = root->manager(); + BrowserAccessibilityDelegate* delegate = manager->delegate(); + + if (delegate) { + gfx::Rect bounds(origin.x, origin.y, size.width, size.height); + gfx::Point point = delegate->AccessibilityOriginInScreen(bounds); + return NSMakePoint(point.x(), point.y()); + } else { + return NSZeroPoint; + } } // Returns a string indicating the NSAccessibility role of this object. |