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

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 273423004: Migrate accessibility from RenderView to RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Get rid of ForEachFrameAndPendingFrame Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <QuartzCore/QuartzCore.h> 8 #include <QuartzCore/QuartzCore.h>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 2163 matching lines...) Expand 10 before | Expand all | Expand 10 after
2174 RenderWidgetHostViewMacDictionaryHelper helper(this); 2174 RenderWidgetHostViewMacDictionaryHelper helper(this);
2175 helper.ShowDefinitionForSelection(); 2175 helper.ShowDefinitionForSelection();
2176 } 2176 }
2177 2177
2178 void RenderWidgetHostViewMac::SetBackgroundOpaque(bool opaque) { 2178 void RenderWidgetHostViewMac::SetBackgroundOpaque(bool opaque) {
2179 RenderWidgetHostViewBase::SetBackgroundOpaque(opaque); 2179 RenderWidgetHostViewBase::SetBackgroundOpaque(opaque);
2180 if (render_widget_host_) 2180 if (render_widget_host_)
2181 render_widget_host_->SetBackgroundOpaque(opaque); 2181 render_widget_host_->SetBackgroundOpaque(opaque);
2182 } 2182 }
2183 2183
2184 void RenderWidgetHostViewMac::CreateBrowserAccessibilityManagerIfNeeded() { 2184 BrowserAccessibilityManager*
2185 if (!GetBrowserAccessibilityManager()) { 2185 RenderWidgetHostViewMac::CreateBrowserAccessibilityManager(
2186 SetBrowserAccessibilityManager( 2186 BrowserAccessibilityDelegate* delegate) {
2187 new BrowserAccessibilityManagerMac( 2187 return new BrowserAccessibilityManagerMac(
2188 cocoa_view_, 2188 cocoa_view_,
2189 BrowserAccessibilityManagerMac::GetEmptyDocument(), 2189 BrowserAccessibilityManagerMac::GetEmptyDocument(),
2190 render_widget_host_)); 2190 delegate);
2191 }
2192 } 2191 }
2193 2192
2194 gfx::Point RenderWidgetHostViewMac::AccessibilityOriginInScreen( 2193 gfx::Point RenderWidgetHostViewMac::AccessibilityOriginInScreen(
2195 const gfx::Rect& bounds) { 2194 const gfx::Rect& bounds) {
2196 NSPoint origin = NSMakePoint(bounds.x(), bounds.y()); 2195 NSPoint origin = NSMakePoint(bounds.x(), bounds.y());
2197 NSSize size = NSMakeSize(bounds.width(), bounds.height()); 2196 NSSize size = NSMakeSize(bounds.width(), bounds.height());
2198 origin.y = NSHeight([cocoa_view_ bounds]) - origin.y; 2197 origin.y = NSHeight([cocoa_view_ bounds]) - origin.y;
2199 NSPoint originInWindow = [cocoa_view_ convertPoint:origin toView:nil]; 2198 NSPoint originInWindow = [cocoa_view_ convertPoint:origin toView:nil];
2200 NSPoint originInScreen = 2199 NSPoint originInScreen =
2201 [[cocoa_view_ window] convertBaseToScreen:originInWindow]; 2200 [[cocoa_view_ window] convertBaseToScreen:originInWindow];
2202 originInScreen.y = originInScreen.y - size.height; 2201 originInScreen.y = originInScreen.y - size.height;
2203 return gfx::Point(originInScreen.x, originInScreen.y); 2202 return gfx::Point(originInScreen.x, originInScreen.y);
2204 } 2203 }
2205 2204
2206 void RenderWidgetHostViewMac::OnAccessibilitySetFocus(int accObjId) { 2205 void RenderWidgetHostViewMac::AccessibilityShowMenu(const gfx::Point& point) {
2207 // Immediately set the focused item even though we have not officially set 2206 NSPoint location = NSMakePoint(point.x(), point.y());
2208 // focus on it as VoiceOver expects to get the focused item after this
2209 // method returns.
2210 BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
2211 if (manager)
2212 manager->SetFocus(manager->GetFromID(accObjId), false);
2213 }
2214
2215 void RenderWidgetHostViewMac::AccessibilityShowMenu(int accObjId) {
2216 BrowserAccessibilityManager* manager = GetBrowserAccessibilityManager();
2217 if (!manager)
2218 return;
2219 BrowserAccessibilityCocoa* obj =
2220 manager->GetFromID(accObjId)->ToBrowserAccessibilityCocoa();
2221
2222 // Performs a right click copying WebKit's
2223 // accessibilityPerformShowMenuAction.
2224 NSPoint objOrigin = [obj origin];
2225 NSSize size = [[obj size] sizeValue];
2226 gfx::Point origin = AccessibilityOriginInScreen(
2227 gfx::Rect(objOrigin.x, objOrigin.y, size.width, size.height));
2228 NSPoint location = NSMakePoint(origin.x(), origin.y());
2229 location = [[cocoa_view_ window] convertScreenToBase:location]; 2207 location = [[cocoa_view_ window] convertScreenToBase:location];
2230 location.x += size.width/2;
2231 location.y += size.height/2;
2232
2233 NSEvent* fakeRightClick = [NSEvent 2208 NSEvent* fakeRightClick = [NSEvent
2234 mouseEventWithType:NSRightMouseDown 2209 mouseEventWithType:NSRightMouseDown
2235 location:location 2210 location:location
2236 modifierFlags:0 2211 modifierFlags:0
2237 timestamp:0 2212 timestamp:0
2238 windowNumber:[[cocoa_view_ window] windowNumber] 2213 windowNumber:[[cocoa_view_ window] windowNumber]
2239 context:[NSGraphicsContext currentContext] 2214 context:[NSGraphicsContext currentContext]
2240 eventNumber:0 2215 eventNumber:0
2241 clickCount:1 2216 clickCount:1
2242 pressure:0]; 2217 pressure:0];
2243 2218
2244 [cocoa_view_ mouseEvent:fakeRightClick]; 2219 [cocoa_view_ mouseEvent:fakeRightClick];
2245 } 2220 }
2246 2221
2247
2248
2249 void RenderWidgetHostViewMac::SetTextInputActive(bool active) { 2222 void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
2250 if (active) { 2223 if (active) {
2251 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD) 2224 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
2252 EnablePasswordInput(); 2225 EnablePasswordInput();
2253 else 2226 else
2254 DisablePasswordInput(); 2227 DisablePasswordInput();
2255 } else { 2228 } else {
2256 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD) 2229 if (text_input_type_ == ui::TEXT_INPUT_TYPE_PASSWORD)
2257 DisablePasswordInput(); 2230 DisablePasswordInput();
2258 } 2231 }
(...skipping 1312 matching lines...) Expand 10 before | Expand all | Expand 10 after
3571 return [fullArray subarrayWithRange:NSMakeRange(index, length)]; 3544 return [fullArray subarrayWithRange:NSMakeRange(index, length)];
3572 } 3545 }
3573 3546
3574 - (NSUInteger)accessibilityArrayAttributeCount:(NSString *)attribute { 3547 - (NSUInteger)accessibilityArrayAttributeCount:(NSString *)attribute {
3575 NSArray* fullArray = [self accessibilityAttributeValue:attribute]; 3548 NSArray* fullArray = [self accessibilityAttributeValue:attribute];
3576 return [fullArray count]; 3549 return [fullArray count];
3577 } 3550 }
3578 3551
3579 - (id)accessibilityAttributeValue:(NSString *)attribute { 3552 - (id)accessibilityAttributeValue:(NSString *)attribute {
3580 BrowserAccessibilityManager* manager = 3553 BrowserAccessibilityManager* manager =
3581 renderWidgetHostView_->GetBrowserAccessibilityManager(); 3554 renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
3582 3555
3583 // Contents specifies document view of RenderWidgetHostViewCocoa provided by 3556 // Contents specifies document view of RenderWidgetHostViewCocoa provided by
3584 // BrowserAccessibilityManager. Children includes all subviews in addition to 3557 // BrowserAccessibilityManager. Children includes all subviews in addition to
3585 // contents. Currently we do not have subviews besides the document view. 3558 // contents. Currently we do not have subviews besides the document view.
3586 if (([attribute isEqualToString:NSAccessibilityChildrenAttribute] || 3559 if (([attribute isEqualToString:NSAccessibilityChildrenAttribute] ||
3587 [attribute isEqualToString:NSAccessibilityContentsAttribute]) && 3560 [attribute isEqualToString:NSAccessibilityContentsAttribute]) &&
3588 manager) { 3561 manager) {
3589 return [NSArray arrayWithObjects:manager-> 3562 return [NSArray arrayWithObjects:manager->
3590 GetRoot()->ToBrowserAccessibilityCocoa(), nil]; 3563 GetRoot()->ToBrowserAccessibilityCocoa(), nil];
3591 } else if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) { 3564 } else if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
3592 return NSAccessibilityScrollAreaRole; 3565 return NSAccessibilityScrollAreaRole;
3593 } 3566 }
3594 id ret = [super accessibilityAttributeValue:attribute]; 3567 id ret = [super accessibilityAttributeValue:attribute];
3595 return ret; 3568 return ret;
3596 } 3569 }
3597 3570
3598 - (NSArray*)accessibilityAttributeNames { 3571 - (NSArray*)accessibilityAttributeNames {
3599 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease]; 3572 NSMutableArray* ret = [[[NSMutableArray alloc] init] autorelease];
3600 [ret addObject:NSAccessibilityContentsAttribute]; 3573 [ret addObject:NSAccessibilityContentsAttribute];
3601 [ret addObjectsFromArray:[super accessibilityAttributeNames]]; 3574 [ret addObjectsFromArray:[super accessibilityAttributeNames]];
3602 return ret; 3575 return ret;
3603 } 3576 }
3604 3577
3605 - (id)accessibilityHitTest:(NSPoint)point { 3578 - (id)accessibilityHitTest:(NSPoint)point {
3606 if (!renderWidgetHostView_->GetBrowserAccessibilityManager()) 3579 BrowserAccessibilityManager* manager =
3580 renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
3581 if (!manager)
3607 return self; 3582 return self;
3608 NSPoint pointInWindow = [[self window] convertScreenToBase:point]; 3583 NSPoint pointInWindow = [[self window] convertScreenToBase:point];
3609 NSPoint localPoint = [self convertPoint:pointInWindow fromView:nil]; 3584 NSPoint localPoint = [self convertPoint:pointInWindow fromView:nil];
3610 localPoint.y = NSHeight([self bounds]) - localPoint.y; 3585 localPoint.y = NSHeight([self bounds]) - localPoint.y;
3611 BrowserAccessibilityCocoa* root = renderWidgetHostView_-> 3586 BrowserAccessibilityCocoa* root =
3612 GetBrowserAccessibilityManager()-> 3587 manager->GetRoot()->ToBrowserAccessibilityCocoa();
3613 GetRoot()->ToBrowserAccessibilityCocoa();
3614 id obj = [root accessibilityHitTest:localPoint]; 3588 id obj = [root accessibilityHitTest:localPoint];
3615 return obj; 3589 return obj;
3616 } 3590 }
3617 3591
3618 - (BOOL)accessibilityIsIgnored { 3592 - (BOOL)accessibilityIsIgnored {
3619 return !renderWidgetHostView_->GetBrowserAccessibilityManager(); 3593 BrowserAccessibilityManager* manager =
3594 renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
3595 return !manager;
3620 } 3596 }
3621 3597
3622 - (NSUInteger)accessibilityGetIndexOf:(id)child { 3598 - (NSUInteger)accessibilityGetIndexOf:(id)child {
3623 BrowserAccessibilityManager* manager = 3599 BrowserAccessibilityManager* manager =
3624 renderWidgetHostView_->GetBrowserAccessibilityManager(); 3600 renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
3625 // Only child is root. 3601 // Only child is root.
3626 if (manager && 3602 if (manager &&
3627 manager->GetRoot()->ToBrowserAccessibilityCocoa() == child) { 3603 manager->GetRoot()->ToBrowserAccessibilityCocoa() == child) {
3628 return 0; 3604 return 0;
3629 } else { 3605 } else {
3630 return NSNotFound; 3606 return NSNotFound;
3631 } 3607 }
3632 } 3608 }
3633 3609
3634 - (id)accessibilityFocusedUIElement { 3610 - (id)accessibilityFocusedUIElement {
3635 BrowserAccessibilityManager* manager = 3611 BrowserAccessibilityManager* manager =
3636 renderWidgetHostView_->GetBrowserAccessibilityManager(); 3612 renderWidgetHostView_->GetHost()->GetRootBrowserAccessibilityManager();
3637 if (manager) { 3613 if (manager) {
3638 BrowserAccessibility* focused_item = manager->GetFocus(NULL); 3614 BrowserAccessibility* focused_item = manager->GetFocus(NULL);
3639 DCHECK(focused_item); 3615 DCHECK(focused_item);
3640 if (focused_item) { 3616 if (focused_item) {
3641 BrowserAccessibilityCocoa* focused_item_cocoa = 3617 BrowserAccessibilityCocoa* focused_item_cocoa =
3642 focused_item->ToBrowserAccessibilityCocoa(); 3618 focused_item->ToBrowserAccessibilityCocoa();
3643 DCHECK(focused_item_cocoa); 3619 DCHECK(focused_item_cocoa);
3644 if (focused_item_cocoa) 3620 if (focused_item_cocoa)
3645 return focused_item_cocoa; 3621 return focused_item_cocoa;
3646 } 3622 }
(...skipping 738 matching lines...) Expand 10 before | Expand all | Expand 10 after
4385 4361
4386 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 4362 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
4387 // regions that are not draggable. (See ControlRegionView in 4363 // regions that are not draggable. (See ControlRegionView in
4388 // native_app_window_cocoa.mm). This requires the render host view to be 4364 // native_app_window_cocoa.mm). This requires the render host view to be
4389 // draggable by default. 4365 // draggable by default.
4390 - (BOOL)mouseDownCanMoveWindow { 4366 - (BOOL)mouseDownCanMoveWindow {
4391 return YES; 4367 return YES;
4392 } 4368 }
4393 4369
4394 @end 4370 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698