summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/accessibility/browser_accessibility.h20
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.h (renamed from chrome/browser/cocoa/browser_accessibility.h)26
-rw-r--r--chrome/browser/accessibility/browser_accessibility_cocoa.mm (renamed from chrome/browser/cocoa/browser_accessibility.mm)80
-rw-r--r--chrome/browser/accessibility/browser_accessibility_delegate_mac.h (renamed from chrome/browser/cocoa/browser_accessibility_delegate.h)6
-rw-r--r--chrome/browser/accessibility/browser_accessibility_mac.h25
-rw-r--r--chrome/browser/accessibility/browser_accessibility_mac.mm35
-rw-r--r--chrome/browser/accessibility/browser_accessibility_mac_unittest.mm (renamed from chrome/browser/cocoa/browser_accessibility_unittest.mm)49
-rw-r--r--chrome/browser/accessibility/browser_accessibility_manager_mac.mm39
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.h8
-rw-r--r--chrome/browser/renderer_host/render_widget_host_view_mac.mm57
-rw-r--r--chrome/chrome_browser.gypi14
-rw-r--r--chrome/chrome_tests.gypi2
12 files changed, 152 insertions, 209 deletions
diff --git a/chrome/browser/accessibility/browser_accessibility.h b/chrome/browser/accessibility/browser_accessibility.h
index 62cffb5..6e6b8fb 100644
--- a/chrome/browser/accessibility/browser_accessibility.h
+++ b/chrome/browser/accessibility/browser_accessibility.h
@@ -15,8 +15,8 @@
#include "webkit/glue/webaccessibility.h"
class BrowserAccessibilityManager;
-#if defined(OS_MACOSX)
-class BrowserAccessibilityMac;
+#if defined(OS_MACOSX) && __OBJC__
+@class BrowserAccessibilityCocoa;
#elif defined(OS_WIN)
class BrowserAccessibilityWin;
#endif
@@ -91,16 +91,26 @@ class BrowserAccessibility {
BrowserAccessibility* new_acc);
// Accessors
+ const std::map<int32, string16>& attributes() const { return attributes_; }
int32 child_id() const { return child_id_; }
const std::vector<BrowserAccessibility*>& children() const {
return children_;
}
- int32 renderer_id() const { return renderer_id_; }
+ const std::vector<std::pair<string16, string16> >& html_attributes() const {
+ return html_attributes_;
+ }
int32 index_in_parent() const { return index_in_parent_; }
WebKit::WebRect location() const { return location_; }
+ BrowserAccessibilityManager* manager() const { return manager_; }
+ const string16& name() const { return name_; }
+ int32 renderer_id() const { return renderer_id_; }
+ int32 role() const { return role_; }
+ const string16& role_name() const { return role_name_; }
+ int32 state() const { return state_; }
+ const string16& value() const { return value_; }
-#if defined(OS_MACOSX)
- BrowserAccessibilityMac* toBrowserAccessibilityMac();
+#if defined(OS_MACOSX) && __OBJC__
+ BrowserAccessibilityCocoa* toBrowserAccessibilityCocoa();
#elif defined(OS_WIN)
BrowserAccessibilityWin* toBrowserAccessibilityWin();
#endif
diff --git a/chrome/browser/cocoa/browser_accessibility.h b/chrome/browser/accessibility/browser_accessibility_cocoa.h
index 7a6fdb4..170c713 100644
--- a/chrome/browser/cocoa/browser_accessibility.h
+++ b/chrome/browser/accessibility/browser_accessibility_cocoa.h
@@ -2,15 +2,15 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_H_
-#define CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_H_
+#ifndef CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COCOA_H_
+#define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COCOA_H_
#pragma once
#import <Cocoa/Cocoa.h>
#import "base/scoped_nsobject.h"
-#include "chrome/browser/accessibility/browser_accessibility_mac.h"
-#import "chrome/browser/cocoa/browser_accessibility_delegate.h"
+#import "chrome/browser/accessibility/browser_accessibility_delegate_mac.h"
+#include "chrome/browser/accessibility/browser_accessibility.h"
// BrowserAccessibilityCocoa is a cocoa wrapper around the BrowserAccessibility
// object. The renderer converts webkit's accessibility tree into a
@@ -20,10 +20,6 @@
@private
BrowserAccessibility* browserAccessibility_;
id<BrowserAccessibilityDelegateCocoa> delegate_;
- scoped_nsobject<NSMutableArray> children_;
- // The parent of the accessibility object. This can be another
- // BrowserAccessibilityCocoa or a RenderWidgetHostViewCocoa.
- id parent_; // weak
}
// This creates a cocoa browser accessibility object around
@@ -31,16 +27,10 @@
// used to communicate with the host renderer. None of these
// parameters can be null.
- (id)initWithObject:(BrowserAccessibility*)accessibility
- delegate:(id<BrowserAccessibilityDelegateCocoa>)delegate
- parent:(id)parent;
-
-// Updates children from backing BrowserAccessibility.
-- (NSArray*)updateChildren;
-// Updates all descendants from the backing BrowserAccessibility.
-- (void)updateDescendants;
-
-@property(nonatomic, readonly) BrowserAccessibility* browserAccessibility;
+ delegate:(id<BrowserAccessibilityDelegateCocoa>)delegate;
+// Backing source of accessibility info.
+@property(nonatomic, assign) BrowserAccessibility* browserAccessibility;
// Children is an array of BrowserAccessibility objects, representing
// the accessibility children of this object.
@property(nonatomic, readonly) NSArray* children;
@@ -59,4 +49,4 @@
@end
-#endif // CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_H_
+#endif // CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_COCOA_H_
diff --git a/chrome/browser/cocoa/browser_accessibility.mm b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
index abef731..0a52a05 100644
--- a/chrome/browser/cocoa/browser_accessibility.mm
+++ b/chrome/browser/accessibility/browser_accessibility_cocoa.mm
@@ -4,7 +4,7 @@
#include <execinfo.h>
-#import "chrome/browser/cocoa/browser_accessibility.h"
+#import "chrome/browser/accessibility/browser_accessibility_cocoa.h"
#include "app/l10n_util_mac.h"
#include "base/string16.h"
@@ -58,72 +58,52 @@ static const RoleEntry roles[] = {
// GetState checks the bitmask used in webaccessibility.h to check
// if the given state was set on the accessibility object.
bool GetState(BrowserAccessibility* accessibility, int state) {
- // TODO(dtseng): add accesser.
- return ((accessibility->toBrowserAccessibilityMac()->state() >>
- state) & 1);
+ return ((accessibility->state() >> state) & 1);
}
} // namespace
@implementation BrowserAccessibilityCocoa
+@synthesize browserAccessibility = browserAccessibility_;
+
- (id)initWithObject:(BrowserAccessibility*)accessibility
- delegate:(id<BrowserAccessibilityDelegateCocoa>)delegate
- parent:(id)parent {
+ delegate:(id<BrowserAccessibilityDelegateCocoa>)delegate {
if ((self = [super init])) {
browserAccessibility_ = accessibility;
- parent_ = parent;
delegate_ = delegate;
- // Set the proper native view for the new object?
- browserAccessibility_->toBrowserAccessibilityMac()->native_view(self);
}
return self;
}
-- (BrowserAccessibility*)browserAccessibility {
- return browserAccessibility_;
+// Deletes our associated BrowserAccessibilityMac.
+- (void)dealloc {
+ if (browserAccessibility_) {
+ delete browserAccessibility_;
+ browserAccessibility_ = NULL;
+ }
+
+ [super dealloc];
}
// Returns an array of BrowserAccessibilityCocoa objects, representing the
// accessibility children of this object.
- (NSArray*)children {
- if (!children_.get()) {
- return [self updateChildren];
- } else {
- return children_.get();
- }
-}
-
-- (NSArray*)updateChildren {
- children_.reset(
- [[NSMutableArray alloc]
- initWithCapacity:browserAccessibility_->GetChildCount()]);
+ NSMutableArray* ret = [[[NSMutableArray alloc]
+ initWithCapacity:browserAccessibility_->GetChildCount()] autorelease];
for (uint32 index = 0;
index < browserAccessibility_->GetChildCount();
++index) {
- scoped_nsobject<BrowserAccessibilityCocoa> child(
- [[BrowserAccessibilityCocoa alloc]
- initWithObject:browserAccessibility_->GetChild(index)
- delegate:delegate_
- parent:self]);
- [children_ addObject:child];
+ [ret addObject:
+ browserAccessibility_->GetChild(index)->toBrowserAccessibilityCocoa()];
}
- return children_;
-}
-
-- (void)updateDescendants {
- NSArray* newChildren = [self updateChildren];
- for (uint32 i = 0; i < [newChildren count]; ++i) {
- [(BrowserAccessibilityCocoa*)[newChildren objectAtIndex:i]
- updateDescendants];
- }
+ return ret;
}
// Returns whether or not this node should be ignored in the
// accessibility tree.
- (BOOL)isIgnored {
- return browserAccessibility_->toBrowserAccessibilityMac()->role() ==
- WebAccessibility::ROLE_IGNORED;
+ return browserAccessibility_->role() == WebAccessibility::ROLE_IGNORED;
}
// The origin of this accessibility object in the page's document.
@@ -138,8 +118,7 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
- (NSString*)role {
NSString* role = NSAccessibilityUnknownRole;
WebAccessibility::Role value =
- static_cast<WebAccessibility::Role>( browserAccessibility_->
- toBrowserAccessibilityMac()->role());
+ static_cast<WebAccessibility::Role>( browserAccessibility_->role());
const size_t numRoles = sizeof(roles) / sizeof(roles[0]);
for (size_t i = 0; i < numRoles; ++i) {
if (roles[i].value == value) {
@@ -174,14 +153,12 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
// Returns the accessibility value for the given attribute. If the value isn't
// supported this will return nil.
- (id)accessibilityAttributeValue:(NSString*)attribute {
- BrowserAccessibilityMac* browserAccessibilityMac = browserAccessibility_->
- toBrowserAccessibilityMac();
if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
return [self role];
}
if ([attribute isEqualToString:NSAccessibilityDescriptionAttribute]) {
return NSStringForWebAccessibilityAttribute(
- browserAccessibilityMac->attributes(),
+ browserAccessibility_->attributes(),
WebAccessibility::ATTR_DESCRIPTION);
}
if ([attribute isEqualToString:NSAccessibilityPositionAttribute]) {
@@ -198,20 +175,25 @@ bool GetState(BrowserAccessibility* accessibility, int state) {
return [self children];
}
if ([attribute isEqualToString:NSAccessibilityParentAttribute]) {
- if (parent_) {
- return NSAccessibilityUnignoredAncestor(parent_);
+ // A nil parent means we're the root.
+ if (browserAccessibility_->GetParent()) {
+ return NSAccessibilityUnignoredAncestor(
+ browserAccessibility_->GetParent()->toBrowserAccessibilityCocoa());
+ } else {
+ // Hook back up to RenderWidgetHostViewCocoa.
+ return browserAccessibility_->manager()->GetParentView();
}
}
if ([attribute isEqualToString:NSAccessibilityTitleAttribute]) {
- return base::SysUTF16ToNSString(browserAccessibilityMac->name());
+ return base::SysUTF16ToNSString(browserAccessibility_->name());
}
if ([attribute isEqualToString:NSAccessibilityHelpAttribute]) {
return NSStringForWebAccessibilityAttribute(
- browserAccessibilityMac->attributes(),
+ browserAccessibility_->attributes(),
WebAccessibility::ATTR_HELP);
}
if ([attribute isEqualToString:NSAccessibilityValueAttribute]) {
- return base::SysUTF16ToNSString(browserAccessibilityMac->value());
+ return base::SysUTF16ToNSString(browserAccessibility_->value());
}
if ([attribute isEqualToString:NSAccessibilityRoleDescriptionAttribute]) {
return [self roleDescription];
diff --git a/chrome/browser/cocoa/browser_accessibility_delegate.h b/chrome/browser/accessibility/browser_accessibility_delegate_mac.h
index 3ee821c..18eb49b 100644
--- a/chrome/browser/cocoa/browser_accessibility_delegate.h
+++ b/chrome/browser/accessibility/browser_accessibility_delegate_mac.h
@@ -2,8 +2,8 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_DELEGATE_H_
-#define CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_DELEGATE_H_
+#ifndef CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_DELEGATE_MAC_H_
+#define CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_DELEGATE_MAC_H_
#pragma once
@class BrowserAccessibilityCocoa;
@@ -20,4 +20,4 @@
- (NSWindow*)window;
@end
-#endif // CHROME_BROWSER_COCOA_BROWSER_ACCESSIBILITY_DELEGATE_H_
+#endif // CHROME_BROWSER_ACCESSIBILITY_BROWSER_ACCESSIBILITY_DELEGATE_MAC_H_
diff --git a/chrome/browser/accessibility/browser_accessibility_mac.h b/chrome/browser/accessibility/browser_accessibility_mac.h
index 136be99..1e83fd8 100644
--- a/chrome/browser/accessibility/browser_accessibility_mac.h
+++ b/chrome/browser/accessibility/browser_accessibility_mac.h
@@ -10,6 +10,7 @@
#include <utility>
#include <vector>
+#include "base/scoped_nsobject.h"
#include "chrome/browser/accessibility/browser_accessibility.h"
@class BrowserAccessibilityCocoa;
@@ -20,29 +21,11 @@ class BrowserAccessibilityMac : public BrowserAccessibility {
virtual void Initialize();
virtual void ReleaseReference();
- // Accessers that allow the cocoa wrapper to read these values.
- const string16& name() const { return name_; }
- const string16& value() const { return value_; }
- const std::map<int32, string16>& attributes() const { return attributes_; }
-
- const std::vector<std::pair<string16, string16> >& html_attributes() const {
- return html_attributes_;
- }
-
- int32 role() const { return role_; }
- int32 state() const { return state_; }
- const string16& role_name() const { return role_name_; }
-
- // Accesser and setter for
- // the BrowserAccessibilityCocoa associated with us.
+ // The BrowserAccessibilityCocoa associated with us.
BrowserAccessibilityCocoa* native_view() const {
return browser_accessibility_cocoa_;
}
- void native_view(BrowserAccessibilityCocoa* v) {
- browser_accessibility_cocoa_ = v;
- }
-
private:
// This gives BrowserAccessibility::Create access to the class constructor.
friend class BrowserAccessibility;
@@ -50,8 +33,8 @@ class BrowserAccessibilityMac : public BrowserAccessibility {
BrowserAccessibilityMac();
// Allows access to the BrowserAccessibilityCocoa which wraps this.
- // BrowserAccessibility. We only initialize this member if the accessibility
- // API requests this object.
+ // BrowserAccessibility.
+ // We own this object.
BrowserAccessibilityCocoa* browser_accessibility_cocoa_;
DISALLOW_COPY_AND_ASSIGN(BrowserAccessibilityMac);
};
diff --git a/chrome/browser/accessibility/browser_accessibility_mac.mm b/chrome/browser/accessibility/browser_accessibility_mac.mm
index 1a6c1d4..4df23c6 100644
--- a/chrome/browser/accessibility/browser_accessibility_mac.mm
+++ b/chrome/browser/accessibility/browser_accessibility_mac.mm
@@ -2,26 +2,47 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#import <Cocoa/Cocoa.h>
+
#import "chrome/browser/accessibility/browser_accessibility_mac.h"
+#import "chrome/browser/accessibility/browser_accessibility_cocoa.h"
+#import "chrome/browser/accessibility/browser_accessibility_delegate_mac.h"
+#include "chrome/browser/accessibility/browser_accessibility_manager.h"
+#import "chrome/browser/renderer_host/render_widget_host_view_mac.h"
+
+
// Static.
BrowserAccessibility* BrowserAccessibility::Create() {
return new BrowserAccessibilityMac();
}
-BrowserAccessibilityMac::BrowserAccessibilityMac() {
+BrowserAccessibilityMac::BrowserAccessibilityMac()
+ : browser_accessibility_cocoa_(NULL) {
}
-// TODO(dtseng): ensure we create BrowserAccessibilityCocoa here
-// (RenderWidgetHostViewCocoa to BrowserAccessibilityManagerMac refactoring).
void BrowserAccessibilityMac::Initialize() {
+ if (browser_accessibility_cocoa_)
+ return;
+
+ // We take ownership of the cocoa obj here.
+ browser_accessibility_cocoa_ = [[BrowserAccessibilityCocoa alloc]
+ initWithObject:this
+ delegate:(RenderWidgetHostViewCocoa*)manager_->GetParentView()];
}
-// TODO(dtseng): ensure we cleanup BrowserAccessibilityCocoa and this class.
-// (RenderWidgetHostViewCocoa to BrowserAccessibilityManagerMac refactoring).
void BrowserAccessibilityMac::ReleaseReference() {
+ if (browser_accessibility_cocoa_) {
+ // Relinquish ownership of the cocoa obj.
+ [browser_accessibility_cocoa_ release];
+ browser_accessibility_cocoa_ = nil;
+ // At this point, other processes may have a reference to
+ // browser_accessibility_cocoa_. When the retain count hits zero, it will
+ // destroy us in dealloc.
+ }
}
-BrowserAccessibilityMac* BrowserAccessibility::toBrowserAccessibilityMac() {
- return static_cast<BrowserAccessibilityMac*>(this);
+BrowserAccessibilityCocoa* BrowserAccessibility::toBrowserAccessibilityCocoa() {
+ return static_cast<BrowserAccessibilityMac*>(this)->
+ native_view();
}
diff --git a/chrome/browser/cocoa/browser_accessibility_unittest.mm b/chrome/browser/accessibility/browser_accessibility_mac_unittest.mm
index 27bee1a..266182f 100644
--- a/chrome/browser/cocoa/browser_accessibility_unittest.mm
+++ b/chrome/browser/accessibility/browser_accessibility_mac_unittest.mm
@@ -4,16 +4,17 @@
#import <Cocoa/Cocoa.h>
+#include "base/scoped_ptr.h";
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
-#include "chrome/browser/accessibility/browser_accessibility_mac.h"
-#include "chrome/browser/cocoa/browser_accessibility.h"
+#include "chrome/browser/accessibility/browser_accessibility_cocoa.h"
+#include "chrome/browser/accessibility/browser_accessibility_manager.h"
#include "chrome/browser/cocoa/cocoa_test_helper.h"
#include "testing/gtest/include/gtest/gtest.h"
#import "testing/gtest_mac.h"
@interface MockAccessibilityDelegate :
- NSObject<BrowserAccessibilityDelegateCocoa>
+ NSView<BrowserAccessibilityDelegateCocoa>
- (NSPoint)accessibilityPointInScreen:(BrowserAccessibilityCocoa*)accessibility;
- (void)doDefaultAction:(int32)accessibilityObjectId;
@@ -65,45 +66,21 @@ class BrowserAccessibilityTest : public CocoaTest {
child2.location.width = 250;
child2.location.height = 100;
- // TODO(dtseng): use BrowserAccessibilityManagerMac once it manages
- // these objects.
- BrowserAccessibility* rootBrowserAccessibility =
- BrowserAccessibility::Create();
- BrowserAccessibility* child1BrowserAccessibility =
- BrowserAccessibility::Create();
- BrowserAccessibility* child2BrowserAccessibility =
- BrowserAccessibility::Create();
-
- rootBrowserAccessibility->Initialize(NULL,
- NULL,
- 0,
- 0,
- root);
- child1BrowserAccessibility->Initialize(NULL,
- NULL,
- 0,
- 0,
- child1);
- child2BrowserAccessibility->Initialize(NULL,
- NULL,
- 0,
- 0,
- child2);
-
- rootBrowserAccessibility->AddChild(child1BrowserAccessibility);
- rootBrowserAccessibility->AddChild(child2BrowserAccessibility);
+ root.children.push_back(child1);
+ root.children.push_back(child2);
delegate_.reset([[MockAccessibilityDelegate alloc] init]);
- accessibility_.reset(
- [[BrowserAccessibilityCocoa alloc]
- initWithObject:rootBrowserAccessibility
- delegate:delegate_
- parent:delegate_]);
+ manager_.reset(
+ BrowserAccessibilityManager::Create(delegate_, root, NULL));
+ // The manager still owns this object.
+ accessibility_ = manager_->GetRoot()->toBrowserAccessibilityCocoa();
}
protected:
scoped_nsobject<MockAccessibilityDelegate> delegate_;
- scoped_nsobject<BrowserAccessibilityCocoa> accessibility_;
+ // We do not own this object.
+ BrowserAccessibilityCocoa* accessibility_;
+ scoped_ptr<BrowserAccessibilityManager> manager_;
};
// Standard hit test.
diff --git a/chrome/browser/accessibility/browser_accessibility_manager_mac.mm b/chrome/browser/accessibility/browser_accessibility_manager_mac.mm
index 8aadf8b..6e39cd1f 100644
--- a/chrome/browser/accessibility/browser_accessibility_manager_mac.mm
+++ b/chrome/browser/accessibility/browser_accessibility_manager_mac.mm
@@ -4,10 +4,7 @@
#include "chrome/browser/accessibility/browser_accessibility_manager_mac.h"
-#include "chrome/browser/accessibility/browser_accessibility_mac.h"
-#import "chrome/browser/cocoa/browser_accessibility.h"
-// TODO(dtseng): move to delegate?
-#import "chrome/browser/renderer_host/render_widget_host_view_mac.h"
+#import "chrome/browser/accessibility/browser_accessibility_cocoa.h"
// static
BrowserAccessibilityManager* BrowserAccessibilityManager::Create(
@@ -27,54 +24,42 @@ BrowserAccessibilityManagerMac::BrowserAccessibilityManagerMac(
gfx::NativeView parent_window,
const webkit_glue::WebAccessibility& src,
BrowserAccessibilityDelegate* delegate,
- BrowserAccessibilityFactory* factory)
+ BrowserAccessibilityFactory* factory)
: BrowserAccessibilityManager(parent_window, src, delegate, factory) {
}
void BrowserAccessibilityManagerMac::NotifyAccessibilityEvent(
ViewHostMsg_AccessibilityNotification_Params::NotificationType n,
BrowserAccessibility* node) {
- // TODO(dtseng): support all notifications.
+ // Refer to AXObjectCache.mm (webkit).
NSString* event_id = @"";
switch (n) {
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_CHECK_STATE_CHANGED:
+ // Does not exist on Mac.
return;
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_CHILDREN_CHANGED:
- event_id = NSAccessibilityValueChangedNotification;
- if (GetRoot() == node)
- [((RenderWidgetHostViewCocoa*)GetParentView())
- setAccessibilityTreeRoot:GetRoot()];
- else
- [node->GetParent()->toBrowserAccessibilityMac()->native_view()
- updateDescendants];
- break;
+ // TODO(dtseng): no clear equivalent on Mac.
+ return;
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_FOCUS_CHANGED:
event_id = NSAccessibilityFocusedUIElementChangedNotification;
- if (GetRoot() == node)
- [((RenderWidgetHostViewCocoa*)GetParentView())
- setAccessibilityTreeRoot:GetRoot()];
- else
- [node->GetParent()->toBrowserAccessibilityMac()->native_view()
- updateDescendants];
break;
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_LOAD_COMPLETE:
- [((RenderWidgetHostViewCocoa*)GetParentView())
- setAccessibilityTreeRoot:GetRoot()];
- return;
+ event_id = @"AXLoadComplete";
+ break;
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_VALUE_CHANGED:
event_id = NSAccessibilityValueChangedNotification;
break;
case ViewHostMsg_AccessibilityNotification_Params::
NOTIFICATION_TYPE_SELECTED_TEXT_CHANGED:
- return;
+ event_id = NSAccessibilitySelectedTextChangedNotification;
+ break;
}
- BrowserAccessibilityCocoa* native_node = node->toBrowserAccessibilityMac()->
- native_view();
+ BrowserAccessibilityCocoa* native_node = node->toBrowserAccessibilityCocoa();
DCHECK(native_node);
- NSAccessibilityPostNotification(native_node, event_id);
+ NSAccessibilityPostNotification(native_node, event_id);
}
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.h b/chrome/browser/renderer_host/render_widget_host_view_mac.h
index b9e41f9..45af5c0 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.h
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.h
@@ -13,10 +13,9 @@
#include "base/scoped_ptr.h"
#include "base/task.h"
#include "base/time.h"
+#include "chrome/browser/accessibility/browser_accessibility_delegate_mac.h"
#include "chrome/browser/accessibility/browser_accessibility_manager.h"
#include "chrome/browser/cocoa/base_view.h"
-#include "chrome/browser/cocoa/browser_accessibility.h"
-#include "chrome/browser/cocoa/browser_accessibility_delegate.h"
#include "chrome/browser/renderer_host/accelerated_surface_container_manager_mac.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/common/edit_command.h"
@@ -50,9 +49,6 @@ class RWHVMEditCommandHelper;
BOOL closeOnDeactivate_;
scoped_ptr<RWHVMEditCommandHelper> editCommand_helper_;
- // TODO(dtseng): refactor to BrowserAccessibilityManagerMac.
- scoped_nsobject<NSArray> accessibilityChildren_;
-
// These are part of the magic tooltip code from WebKit's WebHTMLView:
id trackingRectOwner_; // (not retained)
void *trackingRectUserData_;
@@ -144,8 +140,6 @@ class RWHVMEditCommandHelper;
- (void)renderWidgetHostWasResized;
// Cancel ongoing composition (abandon the marked text).
- (void)cancelComposition;
-// Set the new accessibility tree.
-- (void)setAccessibilityTreeRoot:(BrowserAccessibility*) treeRoot;
// Confirm ongoing composition.
- (void)confirmComposition;
// Enables or disables plugin IME for the given plugin.
diff --git a/chrome/browser/renderer_host/render_widget_host_view_mac.mm b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
index 3281a0e..ffc4a92 100644
--- a/chrome/browser/renderer_host/render_widget_host_view_mac.mm
+++ b/chrome/browser/renderer_host/render_widget_host_view_mac.mm
@@ -18,6 +18,8 @@
#include "base/string_util.h"
#include "base/sys_info.h"
#include "base/sys_string_conversions.h"
+#import "chrome/browser/accessibility/browser_accessibility_cocoa.h"
+#include "chrome/browser/accessibility/browser_accessibility_state.h"
#include "chrome/browser/browser_thread.h"
#include "chrome/browser/browser_trial.h"
#import "chrome/browser/cocoa/rwhvm_editcommand_helper.h"
@@ -447,8 +449,10 @@ RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
render_widget_host_->set_view(this);
// Turn on accessibility only if VoiceOver is running.
- if (IsVoiceOverRunning())
+ if (IsVoiceOverRunning()) {
+ Singleton<BrowserAccessibilityState>()->OnScreenReaderDetected();
render_widget_host_->EnableRendererAccessibility();
+ }
}
RenderWidgetHostViewMac::~RenderWidgetHostViewMac() {
@@ -1186,9 +1190,6 @@ void RenderWidgetHostViewMac::OnAccessibilityNotifications(
empty_document.state = 0;
browser_accessibility_manager_.reset(
BrowserAccessibilityManager::Create(cocoa_view_, empty_document, NULL));
- // TODO(dtseng): refactor to BrowserAccessibilityManagerMac.
- [cocoa_view_
- setAccessibilityTreeRoot:browser_accessibility_manager_->GetRoot()];
}
browser_accessibility_manager_->OnAccessibilityNotifications(params);
}
@@ -1802,19 +1803,6 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
return ([event type] == NSKeyDown) ? YES : NO;
}
-// Create the BrowserAccessibility tree from the WebAccessibility tree passed
-// from the renderer.
-// TODO(dtseng): refactor to BrowserAccessibilityManagerMac.
-- (void)setAccessibilityTreeRoot:(BrowserAccessibility*) treeRoot {
- BrowserAccessibilityCocoa* root =
- [[BrowserAccessibilityCocoa alloc] initWithObject:treeRoot
- delegate:self
- parent:self];
- [root autorelease];
- accessibilityChildren_.reset([[NSArray alloc] initWithObjects:root, nil]);
- [root updateDescendants];
-}
-
- (NSArray *)accessibilityArrayAttributeValues:(NSString *)attribute
index:(NSUInteger)index
maxCount:(NSUInteger)maxCount {
@@ -1832,23 +1820,28 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
}
- (id)accessibilityAttributeValue:(NSString *)attribute {
- if ([attribute isEqualToString:NSAccessibilityChildrenAttribute]) {
- // TODO(dtseng): refactor to BrowserAccessibilityManagerMac.
- return accessibilityChildren_.get();
- } else if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
- return NSAccessibilityScrollAreaRole;
- }
+ BrowserAccessibilityManager* manager =
+ renderWidgetHostView_->browser_accessibility_manager_.get();
+ if ([attribute isEqualToString:NSAccessibilityChildrenAttribute] &&
+ manager) {
+ return [NSArray arrayWithObjects:manager->
+ GetRoot()->toBrowserAccessibilityCocoa(), nil];
+ } else if ([attribute isEqualToString:NSAccessibilityRoleAttribute]) {
+ return NSAccessibilityScrollAreaRole;
+ }
id ret = [super accessibilityAttributeValue:attribute];
return ret;
}
- (id)accessibilityHitTest:(NSPoint)point {
+ if (!renderWidgetHostView_->browser_accessibility_manager_.get())
+ return self;
NSPoint pointInWindow = [[self window] convertScreenToBase:point];
NSPoint localPoint = [self convertPoint:pointInWindow fromView:nil];
localPoint.y = NSHeight([self bounds]) - localPoint.y;
- if ([accessibilityChildren_ count] == 0)
- return self;
- BrowserAccessibilityCocoa* root = [accessibilityChildren_ objectAtIndex:0];
+ BrowserAccessibilityCocoa* root = renderWidgetHostView_->
+ browser_accessibility_manager_->
+ GetRoot()->toBrowserAccessibilityCocoa();
id obj = [root accessibilityHitTest:localPoint];
return obj;
}
@@ -1858,7 +1851,15 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
}
- (NSUInteger)accessibilityIndexOfChild:(id)child {
- return [accessibilityChildren_ indexOfObject:child];
+ BrowserAccessibilityManager* manager =
+ renderWidgetHostView_->browser_accessibility_manager_.get();
+ // Only child is root.
+ if (manager &&
+ manager->GetRoot()->toBrowserAccessibilityCocoa() == child) {
+ return 0;
+ } else {
+ return NSNotFound;
+ }
}
- (id)accessibilityFocusedUIElement {
@@ -1869,7 +1870,7 @@ void RenderWidgetHostViewMac::SetTextInputActive(bool active) {
DCHECK(focused_item);
if (focused_item) {
BrowserAccessibilityCocoa* focused_item_cocoa =
- focused_item->toBrowserAccessibilityMac()->native_view();
+ focused_item->toBrowserAccessibilityCocoa();
DCHECK(focused_item_cocoa);
if (focused_item_cocoa)
return focused_item_cocoa;
diff --git a/chrome/chrome_browser.gypi b/chrome/chrome_browser.gypi
index fe756da..811059f 100644
--- a/chrome/chrome_browser.gypi
+++ b/chrome/chrome_browser.gypi
@@ -63,16 +63,19 @@
'browser/about_flags.h',
'browser/accessibility/browser_accessibility.cc',
'browser/accessibility/browser_accessibility.h',
- 'browser/accessibility/browser_accessibility_state.cc',
- 'browser/accessibility/browser_accessibility_state.h',
+ 'browser/accessibility/browser_accessibility_cocoa.h',
+ 'browser/accessibility/browser_accessibility_cocoa.mm',
+ 'browser/accessibility/browser_accessibility_delegate_mac.h',
+ 'browser/accessibility/browser_accessibility_mac.h',
+ 'browser/accessibility/browser_accessibility_mac.mm',
'browser/accessibility/browser_accessibility_manager.cc',
'browser/accessibility/browser_accessibility_manager.h',
'browser/accessibility/browser_accessibility_manager_mac.h',
'browser/accessibility/browser_accessibility_manager_mac.mm',
- 'browser/accessibility/browser_accessibility_mac.h',
- 'browser/accessibility/browser_accessibility_mac.mm',
'browser/accessibility/browser_accessibility_manager_win.cc',
'browser/accessibility/browser_accessibility_manager_win.h',
+ 'browser/accessibility/browser_accessibility_state.cc',
+ 'browser/accessibility/browser_accessibility_state.h',
'browser/accessibility/browser_accessibility_win.cc',
'browser/accessibility/browser_accessibility_win.h',
'browser/accessibility_events.h',
@@ -809,9 +812,6 @@
'browser/cocoa/base_bubble_controller.mm',
'browser/cocoa/base_view.h',
'browser/cocoa/base_view.mm',
- 'browser/cocoa/browser_accessibility.h',
- 'browser/cocoa/browser_accessibility.mm',
- 'browser/cocoa/browser_accessibility_delegate.h',
'browser/cocoa/browser_window_factory.mm',
'browser/cocoa/bookmarks/bookmark_all_tabs_controller.h',
'browser/cocoa/bookmarks/bookmark_all_tabs_controller.mm',
diff --git a/chrome/chrome_tests.gypi b/chrome/chrome_tests.gypi
index a3c77f8..8b660da 100644
--- a/chrome/chrome_tests.gypi
+++ b/chrome/chrome_tests.gypi
@@ -975,6 +975,7 @@
'app/chrome_dll.rc',
# All unittests in browser, common, renderer and service.
'browser/about_flags_unittest.cc',
+ 'browser/accessibility/browser_accessibility_mac_unittest.mm',
'browser/accessibility/browser_accessibility_win_unittest.cc',
'browser/app_controller_mac_unittest.mm',
'browser/autocomplete_history_manager_unittest.cc',
@@ -1113,7 +1114,6 @@
'browser/cocoa/bookmarks/bookmark_model_observer_for_cocoa_unittest.mm',
'browser/cocoa/bookmarks/bookmark_name_folder_controller_unittest.mm',
'browser/cocoa/bookmarks/bookmark_tree_browser_cell_unittest.mm',
- 'browser/cocoa/browser_accessibility_unittest.mm',
'browser/cocoa/browser_frame_view_unittest.mm',
'browser/cocoa/browser_window_cocoa_unittest.mm',
'browser/cocoa/browser_window_controller_unittest.mm',