Home | History | Annotate | Download | only in accessibility
      1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #import <Cocoa/Cocoa.h>
      6 
      7 #import "chrome/browser/accessibility/browser_accessibility_mac.h"
      8 
      9 #import "chrome/browser/accessibility/browser_accessibility_cocoa.h"
     10 #import "chrome/browser/accessibility/browser_accessibility_delegate_mac.h"
     11 #include "chrome/browser/accessibility/browser_accessibility_manager.h"
     12 #import "chrome/browser/renderer_host/render_widget_host_view_mac.h"
     13 
     14 
     15 // Static.
     16 BrowserAccessibility* BrowserAccessibility::Create() {
     17   return new BrowserAccessibilityMac();
     18 }
     19 
     20 BrowserAccessibilityMac::BrowserAccessibilityMac()
     21     : browser_accessibility_cocoa_(NULL) {
     22 }
     23 
     24 void BrowserAccessibilityMac::Initialize() {
     25   BrowserAccessibility::Initialize();
     26 
     27   if (browser_accessibility_cocoa_)
     28     return;
     29 
     30   // We take ownership of the cocoa obj here.
     31   browser_accessibility_cocoa_ = [[BrowserAccessibilityCocoa alloc]
     32       initWithObject:this
     33       delegate:(RenderWidgetHostViewCocoa*)manager_->GetParentView()];
     34 }
     35 
     36 void BrowserAccessibilityMac::NativeReleaseReference() {
     37   if (browser_accessibility_cocoa_) {
     38     BrowserAccessibilityCocoa* temp = browser_accessibility_cocoa_;
     39     browser_accessibility_cocoa_ = nil;
     40     // Relinquish ownership of the cocoa obj.
     41     [temp release];
     42     // At this point, other processes may have a reference to
     43     // the cocoa object. When the retain count hits zero, it will
     44     // destroy us in dealloc.
     45     // For that reason, do *not* make any more calls here after
     46     // as we might have been deleted.
     47   }
     48 }
     49 
     50 void BrowserAccessibilityMac::ReplaceChild(
     51       BrowserAccessibility* old_acc,
     52       BrowserAccessibility* new_acc) {
     53   BrowserAccessibility::ReplaceChild(old_acc, new_acc);
     54   [browser_accessibility_cocoa_ childrenChanged];
     55 }
     56 
     57 BrowserAccessibilityCocoa* BrowserAccessibility::toBrowserAccessibilityCocoa() {
     58   return static_cast<BrowserAccessibilityMac*>(this)->
     59       native_view();
     60 }
     61