summaryrefslogtreecommitdiffstats
path: root/ash/root_window_controller.cc
diff options
context:
space:
mode:
authorsadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-23 04:30:50 +0000
committersadrul@chromium.org <sadrul@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-07-23 04:30:50 +0000
commit6344f4206c189f03f90eb434cf2b28ba46c03f95 (patch)
tree131a0674b049df8045a48cb0ce4543e9a7ca3b77 /ash/root_window_controller.cc
parent4ac270015d7a4cd169b55cba12188e4e8f9be290 (diff)
downloadchromium_src-6344f4206c189f03f90eb434cf2b28ba46c03f95.zip
chromium_src-6344f4206c189f03f90eb434cf2b28ba46c03f95.tar.gz
chromium_src-6344f4206c189f03f90eb434cf2b28ba46c03f95.tar.bz2
Revert 284819 because it introduces leaks in TestingBoundaries and
EnterSlideGestureState tests in TouchExplorationTest: Direct leak of 24 byte(s) in 1 object(s) allocated from: #0 0x448b2b in operator new(unsigned long) /usr/local/google/work/chromium/src/third_party/llvm/projects/compiler-rt/lib/asan/asan_new_delete.cc:55 #1 0x14703f7 in ui::GestureProviderAura::GetAndResetPendingGestures() ui/events/gestures/gesture_provider_aura.cc:112 #2 0x9f4986 in ui::TouchExplorationController::InSlideGesture(ui::TouchEvent const&, scoped_ptr\u003Cui::Event, base::DefaultDeleter\u003Cui::Event> >*) ui/chromeos/touch_exploration_controller.cc:578 ... etc. > Added side slide gestures to touch exploration controller. > > The user can control settings that might be normally changed using sliders by sliding along the edge of the screen when ChromeVox is on. For example, the user can slide along the right edge of the screen and adjust the volume. > > If the user enters this mode and leaves the boundaries without releasing their touch, they will stop adjusting the setting, however, they will not enter touch exploration. If they return to the given boundaries, they will be able to modify the setting again. If the user does not touch a "hot edge" of the screen, they will not enter this state if they move to the an of the screen. > > BUG=393326 > > Review URL: https://codereview.chromium.org/385073009 TBR=lisayin@chromium.org Review URL: https://codereview.chromium.org/407073008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284849 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ash/root_window_controller.cc')
-rw-r--r--ash/root_window_controller.cc56
1 files changed, 52 insertions, 4 deletions
diff --git a/ash/root_window_controller.cc b/ash/root_window_controller.cc
index 0e07dbe..26b925c0 100644
--- a/ash/root_window_controller.cc
+++ b/ash/root_window_controller.cc
@@ -76,7 +76,7 @@
#include "ui/wm/public/window_types.h"
#if defined(OS_CHROMEOS)
-#include "ash/ash_touch_exploration_manager_chromeos.h"
+#include "ash/system/tray_accessibility.h"
#include "ash/wm/boot_splash_screen_chromeos.h"
#include "ui/chromeos/touch_exploration_controller.h"
#endif
@@ -261,6 +261,54 @@ class EmptyWindowDelegate : public aura::WindowDelegate {
DISALLOW_COPY_AND_ASSIGN(EmptyWindowDelegate);
};
+#if defined(OS_CHROMEOS)
+// Responsible for initializing TouchExplorationController when spoken
+// feedback is on.
+class CrosAccessibilityObserver : public AccessibilityObserver {
+ public:
+ explicit CrosAccessibilityObserver(
+ RootWindowController* root_window_controller)
+ : root_window_controller_(root_window_controller) {
+ Shell::GetInstance()->system_tray_notifier()->
+ AddAccessibilityObserver(this);
+ UpdateTouchExplorationState();
+ }
+
+ virtual ~CrosAccessibilityObserver() {
+ SystemTrayNotifier* system_tray_notifier =
+ Shell::GetInstance()->system_tray_notifier();
+ if (system_tray_notifier)
+ system_tray_notifier->RemoveAccessibilityObserver(this);
+ }
+
+ private:
+ void UpdateTouchExplorationState() {
+ AccessibilityDelegate* delegate =
+ Shell::GetInstance()->accessibility_delegate();
+ bool enabled = delegate->IsSpokenFeedbackEnabled();
+
+ if (enabled && !touch_exploration_controller_.get()) {
+ touch_exploration_controller_.reset(
+ new ui::TouchExplorationController(
+ root_window_controller_->GetRootWindow()));
+ } else if (!enabled) {
+ touch_exploration_controller_.reset();
+ }
+ }
+
+ // Overridden from AccessibilityObserver.
+ virtual void OnAccessibilityModeChanged(
+ AccessibilityNotificationVisibility notify) OVERRIDE {
+ UpdateTouchExplorationState();
+ }
+
+ scoped_ptr<ui::TouchExplorationController> touch_exploration_controller_;
+ RootWindowController* root_window_controller_;
+
+ DISALLOW_COPY_AND_ASSIGN(CrosAccessibilityObserver);
+};
+#endif // OS_CHROMEOS
+
} // namespace
void RootWindowController::CreateForPrimaryDisplay(AshWindowTreeHost* host) {
@@ -348,8 +396,8 @@ void RootWindowController::Shutdown() {
shell->RemoveShellObserver(this);
#if defined(OS_CHROMEOS)
- if (touch_exploration_manager_) {
- touch_exploration_manager_.reset();
+ if (cros_accessibility_observer_) {
+ cros_accessibility_observer_.reset();
}
#endif
@@ -759,7 +807,7 @@ void RootWindowController::Init(RootWindowType root_window_type,
#if defined(OS_CHROMEOS)
if (!CommandLine::ForCurrentProcess()->HasSwitch(
switches::kAshDisableTouchExplorationMode)) {
- touch_exploration_manager_.reset(new AshTouchExplorationManager(this));
+ cros_accessibility_observer_.reset(new CrosAccessibilityObserver(this));
}
#endif
}