summaryrefslogtreecommitdiffstats
path: root/chrome/browser/accessibility
diff options
context:
space:
mode:
authorcaitkp@chromium.org <caitkp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-17 13:52:20 +0000
committercaitkp@chromium.org <caitkp@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-17 13:52:20 +0000
commitdef2730480a49c306729a5e932cc12d292157fe1 (patch)
treec0dbee2557227f4d50638dc040c0175dfc2196d2 /chrome/browser/accessibility
parent6b7ff7d13d0064f2154aca2f4172c811ac93efd4 (diff)
downloadchromium_src-def2730480a49c306729a5e932cc12d292157fe1.zip
chromium_src-def2730480a49c306729a5e932cc12d292157fe1.tar.gz
chromium_src-def2730480a49c306729a5e932cc12d292157fe1.tar.bz2
Remove notifications from Accessibility API
TBR=darin@chromium.org BUG=268984 TEST= no change Review URL: https://chromiumcodereview.appspot.com/22922003 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218171 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/accessibility')
-rw-r--r--chrome/browser/accessibility/accessibility_events.cc36
-rw-r--r--chrome/browser/accessibility/accessibility_events.h24
-rw-r--r--chrome/browser/accessibility/accessibility_extension_api.cc120
-rw-r--r--chrome/browser/accessibility/accessibility_extension_api.h37
4 files changed, 128 insertions, 89 deletions
diff --git a/chrome/browser/accessibility/accessibility_events.cc b/chrome/browser/accessibility/accessibility_events.cc
index 53c8c8d..0b31906 100644
--- a/chrome/browser/accessibility/accessibility_events.cc
+++ b/chrome/browser/accessibility/accessibility_events.cc
@@ -5,7 +5,7 @@
#include "chrome/browser/accessibility/accessibility_events.h"
#include "base/values.h"
-
+#include "chrome/browser/accessibility/accessibility_extension_api.h"
#include "chrome/browser/accessibility/accessibility_extension_api_constants.h"
#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/profiles/profile.h"
@@ -15,16 +15,40 @@
namespace keys = extension_accessibility_api_constants;
-void SendAccessibilityNotification(int type, AccessibilityEventInfo* info) {
+void SendControlAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityControlInfo* info) {
+ Profile *profile = info->profile();
+ if (profile->ShouldSendAccessibilityEvents()) {
+ ExtensionAccessibilityEventRouter::GetInstance()->HandleControlEvent(
+ event,
+ info);
+ }
+}
+
+void SendMenuAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityMenuInfo* info) {
Profile *profile = info->profile();
if (profile->ShouldSendAccessibilityEvents()) {
- content::NotificationService::current()->Notify(
- type,
- content::Source<Profile>(profile),
- content::Details<AccessibilityEventInfo>(info));
+ ExtensionAccessibilityEventRouter::GetInstance()->HandleMenuEvent(
+ event,
+ info);
}
}
+void SendWindowAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityWindowInfo* info) {
+ Profile *profile = info->profile();
+ if (profile->ShouldSendAccessibilityEvents()) {
+ ExtensionAccessibilityEventRouter::GetInstance()->HandleWindowEvent(
+ event,
+ info);
+ }
+}
+
+
AccessibilityControlInfo::AccessibilityControlInfo(
Profile* profile, const std::string& name)
: AccessibilityEventInfo(profile),
diff --git a/chrome/browser/accessibility/accessibility_events.h b/chrome/browser/accessibility/accessibility_events.h
index 6c5cf86..d028c7d 100644
--- a/chrome/browser/accessibility/accessibility_events.h
+++ b/chrome/browser/accessibility/accessibility_events.h
@@ -7,19 +7,31 @@
#include <string>
#include "base/compiler_specific.h"
+#include "ui/base/accessibility/accessibility_types.h"
-class AccessibilityEventInfo;
+class AccessibilityControlInfo;
+class AccessibilityMenuInfo;
+class AccessibilityWindowInfo;
class Profile;
namespace base {
class DictionaryValue;
}
-// Use the NotificationService to post the given accessibility
-// notification type with AccessibilityEventInfo details to any
-// listeners. Will not send if the profile's pause level is nonzero
-// (using profile->PauseAccessibilityEvents).
-void SendAccessibilityNotification(int type, AccessibilityEventInfo* info);
+// Notify the ExtensionAccessibilityEventRouter of the given accessibility
+// event and AccessibilityEventInfo details. Will not send if the profile's
+// pause level is nonzero (using profile->PauseAccessibilityEvents).
+void SendControlAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityControlInfo* info);
+
+void SendMenuAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityMenuInfo* info);
+
+void SendWindowAccessibilityNotification(
+ ui::AccessibilityTypes::Event event,
+ AccessibilityWindowInfo* info);
// Abstract parent class for accessibility event information passed to event
// listeners.
diff --git a/chrome/browser/accessibility/accessibility_extension_api.cc b/chrome/browser/accessibility/accessibility_extension_api.cc
index 033a843..80f0bd52 100644
--- a/chrome/browser/accessibility/accessibility_extension_api.cc
+++ b/chrome/browser/accessibility/accessibility_extension_api.cc
@@ -8,7 +8,6 @@
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
#include "chrome/browser/accessibility/accessibility_extension_api_constants.h"
-#include "chrome/browser/chrome_notification_types.h"
#include "chrome/browser/extensions/api/tabs/tabs_constants.h"
#include "chrome/browser/extensions/event_router.h"
#include "chrome/browser/extensions/extension_system.h"
@@ -18,7 +17,6 @@
#include "chrome/browser/infobars/infobar_service.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/browser_accessibility_state.h"
-#include "content/public/browser/notification_service.h"
#include "extensions/common/error_utils.h"
namespace keys = extension_accessibility_api_constants;
@@ -43,76 +41,74 @@ ExtensionAccessibilityEventRouter*
ExtensionAccessibilityEventRouter::ExtensionAccessibilityEventRouter()
: enabled_(false) {
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_WINDOW_OPENED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_WINDOW_CLOSED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_CONTROL_FOCUSED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_CONTROL_ACTION,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_TEXT_CHANGED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_MENU_OPENED,
- content::NotificationService::AllSources());
- registrar_.Add(this,
- chrome::NOTIFICATION_ACCESSIBILITY_MENU_CLOSED,
- content::NotificationService::AllSources());
}
ExtensionAccessibilityEventRouter::~ExtensionAccessibilityEventRouter() {
+ control_event_callback_.Reset();
}
-void ExtensionAccessibilityEventRouter::Observe(
- int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) {
- switch (type) {
- case chrome::NOTIFICATION_ACCESSIBILITY_WINDOW_OPENED:
- OnWindowOpened(
- content::Details<const AccessibilityWindowInfo>(details).ptr());
- break;
- case chrome::NOTIFICATION_ACCESSIBILITY_WINDOW_CLOSED:
- OnWindowClosed(
- content::Details<const AccessibilityWindowInfo>(details).ptr());
- break;
- case chrome::NOTIFICATION_ACCESSIBILITY_CONTROL_FOCUSED:
- OnControlFocused(
- content::Details<const AccessibilityControlInfo>(details).ptr());
- break;
- case chrome::NOTIFICATION_ACCESSIBILITY_CONTROL_ACTION:
- OnControlAction(
- content::Details<const AccessibilityControlInfo>(details).ptr());
- break;
- case chrome::NOTIFICATION_ACCESSIBILITY_TEXT_CHANGED:
- OnTextChanged(
- content::Details<const AccessibilityControlInfo>(details).ptr());
- break;
- case chrome::NOTIFICATION_ACCESSIBILITY_MENU_OPENED:
- OnMenuOpened(
- content::Details<const AccessibilityMenuInfo>(details).ptr());
+void ExtensionAccessibilityEventRouter::SetAccessibilityEnabled(bool enabled) {
+ enabled_ = enabled;
+}
+
+bool ExtensionAccessibilityEventRouter::IsAccessibilityEnabled() const {
+ return enabled_;
+}
+
+void ExtensionAccessibilityEventRouter::SetControlEventCallbackForTesting(
+ ControlEventCallback control_event_callback) {
+ DCHECK(control_event_callback_.is_null());
+ control_event_callback_ = control_event_callback;
+}
+
+void ExtensionAccessibilityEventRouter::ClearControlEventCallback() {
+ control_event_callback_.Reset();
+}
+
+void ExtensionAccessibilityEventRouter::HandleWindowEvent(
+ ui::AccessibilityTypes::Event event,
+ const AccessibilityWindowInfo* info) {
+ if (event == ui::AccessibilityTypes::EVENT_ALERT)
+ OnWindowOpened(info);
+}
+
+void ExtensionAccessibilityEventRouter::HandleMenuEvent(
+ ui::AccessibilityTypes::Event event,
+ const AccessibilityMenuInfo* info) {
+ switch (event) {
+ case ui::AccessibilityTypes::EVENT_MENUSTART:
+ case ui::AccessibilityTypes::EVENT_MENUPOPUPSTART:
+ OnMenuOpened(info);
break;
- case chrome::NOTIFICATION_ACCESSIBILITY_MENU_CLOSED:
- OnMenuClosed(
- content::Details<const AccessibilityMenuInfo>(details).ptr());
+ case ui::AccessibilityTypes::EVENT_MENUEND:
+ case ui::AccessibilityTypes::EVENT_MENUPOPUPEND:
+ OnMenuClosed(info);
break;
default:
NOTREACHED();
}
}
-void ExtensionAccessibilityEventRouter::SetAccessibilityEnabled(bool enabled) {
- enabled_ = enabled;
-}
+void ExtensionAccessibilityEventRouter::HandleControlEvent(
+ ui::AccessibilityTypes::Event event,
+ const AccessibilityControlInfo* info) {
+ if (!control_event_callback_.is_null())
+ control_event_callback_.Run(event, info);
-bool ExtensionAccessibilityEventRouter::IsAccessibilityEnabled() const {
- return enabled_;
+ switch (event) {
+ case ui::AccessibilityTypes::EVENT_TEXT_CHANGED:
+ case ui::AccessibilityTypes::EVENT_SELECTION_CHANGED:
+ OnTextChanged(info);
+ break;
+ case ui::AccessibilityTypes::EVENT_VALUE_CHANGED:
+ OnControlAction(info);
+ break;
+ case ui::AccessibilityTypes::EVENT_FOCUS:
+ OnControlFocused(info);
+ break;
+ default:
+ NOTREACHED();
+ }
}
void ExtensionAccessibilityEventRouter::OnWindowOpened(
@@ -121,12 +117,6 @@ void ExtensionAccessibilityEventRouter::OnWindowOpened(
DispatchEvent(info->profile(), keys::kOnWindowOpened, args.Pass());
}
-void ExtensionAccessibilityEventRouter::OnWindowClosed(
- const AccessibilityWindowInfo* info) {
- scoped_ptr<ListValue> args(ControlInfoToEventArguments(info));
- DispatchEvent(info->profile(), keys::kOnWindowClosed, args.Pass());
-}
-
void ExtensionAccessibilityEventRouter::OnControlFocused(
const AccessibilityControlInfo* info) {
last_focused_control_dict_.Clear();
diff --git a/chrome/browser/accessibility/accessibility_extension_api.h b/chrome/browser/accessibility/accessibility_extension_api.h
index d1132c0..61c3930 100644
--- a/chrome/browser/accessibility/accessibility_extension_api.h
+++ b/chrome/browser/accessibility/accessibility_extension_api.h
@@ -12,13 +12,15 @@
#include "base/values.h"
#include "chrome/browser/accessibility/accessibility_events.h"
#include "chrome/browser/extensions/extension_function.h"
-#include "content/public/browser/notification_observer.h"
-#include "content/public/browser/notification_registrar.h"
+#include "ui/base/accessibility/accessibility_types.h"
// Observes the profile and routes accessibility notifications as events
// to the extension system.
-class ExtensionAccessibilityEventRouter : public content::NotificationObserver {
+class ExtensionAccessibilityEventRouter {
public:
+ typedef base::Callback<void(ui::AccessibilityTypes::Event,
+ const AccessibilityControlInfo*)>
+ ControlEventCallback;
// Single instance of the event router.
static ExtensionAccessibilityEventRouter* GetInstance();
@@ -35,19 +37,30 @@ class ExtensionAccessibilityEventRouter : public content::NotificationObserver {
void SetAccessibilityEnabled(bool enabled);
bool IsAccessibilityEnabled() const;
+ // Set and remove callbacks (used for testing, to confirm that events are
+ // getting through).
+ void SetControlEventCallbackForTesting(ControlEventCallback callback);
+ void ClearControlEventCallback();
+
+ // Route a window-related accessibility event.
+ void HandleWindowEvent(ui::AccessibilityTypes::Event event,
+ const AccessibilityWindowInfo* info);
+
+ // Route a menu-related accessibility event.
+ void HandleMenuEvent(ui::AccessibilityTypes::Event event,
+ const AccessibilityMenuInfo* info);
+
+ // Route a control-related accessibility event.
+ void HandleControlEvent(ui::AccessibilityTypes::Event event,
+ const AccessibilityControlInfo* info);
+
private:
friend struct DefaultSingletonTraits<ExtensionAccessibilityEventRouter>;
ExtensionAccessibilityEventRouter();
virtual ~ExtensionAccessibilityEventRouter();
- // content::NotificationObserver::Observe.
- virtual void Observe(int type,
- const content::NotificationSource& source,
- const content::NotificationDetails& details) OVERRIDE;
-
void OnWindowOpened(const AccessibilityWindowInfo* details);
- void OnWindowClosed(const AccessibilityWindowInfo* details);
void OnControlFocused(const AccessibilityControlInfo* details);
void OnControlAction(const AccessibilityControlInfo* details);
void OnTextChanged(const AccessibilityControlInfo* details);
@@ -58,13 +71,13 @@ class ExtensionAccessibilityEventRouter : public content::NotificationObserver {
const char* event_name,
scoped_ptr<base::ListValue> event_args);
- // Used for tracking registrations to history service notifications.
- content::NotificationRegistrar registrar_;
-
DictionaryValue last_focused_control_dict_;
bool enabled_;
+ // For testing.
+ ControlEventCallback control_event_callback_;
+
DISALLOW_COPY_AND_ASSIGN(ExtensionAccessibilityEventRouter);
};