Index: chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc |
diff --git a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc |
index 687f78e61ede2236e153314cc131cd6514429670..3bab89395ddebc9f9b78837b39e46ab534911200 100644 |
--- a/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc |
+++ b/chrome/browser/guest_view/web_view/chrome_web_view_guest_delegate.cc |
@@ -35,6 +35,7 @@ namespace extensions { |
ChromeWebViewGuestDelegate::ChromeWebViewGuestDelegate( |
WebViewGuest* web_view_guest) |
: pending_context_menu_request_id_(0), |
+ chromevox_injected_(false), |
web_view_guest_(web_view_guest), |
weak_ptr_factory_(this) { |
} |
@@ -87,6 +88,17 @@ void ChromeWebViewGuestDelegate::OnAttachWebViewHelpers( |
new ChromePDFWebContentsHelperClient())); |
} |
+void ChromeWebViewGuestDelegate::OnDidInitialize() { |
+#if defined(OS_CHROMEOS) |
+ chromeos::AccessibilityManager* accessibility_manager = |
+ chromeos::AccessibilityManager::Get(); |
+ CHECK(accessibility_manager); |
+ accessibility_subscription_ = accessibility_manager->RegisterCallback( |
+ base::Bind(&ChromeWebViewGuestDelegate::OnAccessibilityStatusChanged, |
+ weak_ptr_factory_.GetWeakPtr())); |
+#endif |
+} |
+ |
void ChromeWebViewGuestDelegate::OnGuestDestroyed() { |
// Clean up custom context menu items for this guest. |
MenuManager* menu_manager = MenuManager::Get( |
@@ -130,4 +142,33 @@ void ChromeWebViewGuestDelegate::OnShowContextMenu( |
menu_delegate->ShowMenu(pending_menu_.Pass()); |
} |
+void ChromeWebViewGuestDelegate::InjectChromeVoxIfNeeded( |
+ content::RenderViewHost* render_view_host) { |
+#if defined(OS_CHROMEOS) |
+ if (!chromevox_injected_) { |
+ chromeos::AccessibilityManager* manager = |
+ chromeos::AccessibilityManager::Get(); |
+ if (manager && manager->IsSpokenFeedbackEnabled()) { |
+ manager->InjectChromeVox(render_view_host); |
+ chromevox_injected_ = true; |
+ } |
+ } |
+#endif |
+} |
+ |
+#if defined(OS_CHROMEOS) |
+void ChromeWebViewGuestDelegate::OnAccessibilityStatusChanged( |
+ const chromeos::AccessibilityStatusEventDetails& details) { |
+ if (details.notification_type == chromeos::ACCESSIBILITY_MANAGER_SHUTDOWN) { |
+ accessibility_subscription_.reset(); |
+ } else if (details.notification_type == |
+ chromeos::ACCESSIBILITY_TOGGLE_SPOKEN_FEEDBACK) { |
+ if (details.enabled) |
+ InjectChromeVoxIfNeeded(guest_web_contents()->GetRenderViewHost()); |
+ else |
+ chromevox_injected_ = false; |
+ } |
+} |
+#endif |
+ |
} // namespace extensions |