3d13ee8190d39aab3a7f4016bad7ff185bd90067
[platform/framework/web/crosswalk.git] / src / content / browser / accessibility / browser_accessibility_mac.mm
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
3 // found in the LICENSE file.
4
5 #import <Cocoa/Cocoa.h>
6
7 #import "content/browser/accessibility/browser_accessibility_mac.h"
8
9 #import "content/browser/accessibility/browser_accessibility_cocoa.h"
10 #include "content/browser/accessibility/browser_accessibility_manager_mac.h"
11
12 namespace content {
13
14 // Static.
15 BrowserAccessibility* BrowserAccessibility::Create() {
16   return new BrowserAccessibilityMac();
17 }
18
19 BrowserAccessibilityMac::BrowserAccessibilityMac()
20     : browser_accessibility_cocoa_(NULL) {
21 }
22
23 void BrowserAccessibilityMac::OnDataChanged() {
24   BrowserAccessibility::OnDataChanged();
25
26   if (browser_accessibility_cocoa_) {
27     [browser_accessibility_cocoa_ childrenChanged];
28     return;
29   }
30
31   // We take ownership of the cocoa obj here.
32   browser_accessibility_cocoa_ = [[BrowserAccessibilityCocoa alloc]
33       initWithObject:this];
34 }
35
36 void BrowserAccessibilityMac::NativeReleaseReference() {
37   // Detach this object from |browser_accessibility_cocoa_| so it
38   // no longer has a pointer to this object.
39   [browser_accessibility_cocoa_ detach];
40   // Now, release it - but at this point, other processes may have a
41   // reference to the cocoa object.
42   [browser_accessibility_cocoa_ release];
43   // Finally, it's safe to delete this since we've detached.
44   delete this;
45 }
46
47 bool BrowserAccessibilityMac::IsNative() const {
48   return true;
49 }
50
51 BrowserAccessibilityCocoa* BrowserAccessibility::ToBrowserAccessibilityCocoa() {
52   return static_cast<BrowserAccessibilityMac*>(this)->
53       native_view();
54 }
55
56 }  // namespace content