| Index: content/browser/renderer_host/render_widget_host_view_mac.mm
|
| diff --git a/content/browser/renderer_host/render_widget_host_view_mac.mm b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| index 34ff9bff0c4c67ba9027a346fffa47bac8f3e303..2ce4f9c2a1d059e9e4865c613aaf7efaf40c39e3 100644
|
| --- a/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| +++ b/content/browser/renderer_host/render_widget_host_view_mac.mm
|
| @@ -151,6 +151,7 @@ static BOOL SupportsBackingPropertiesChangedNotification() {
|
| - (void)updateScreenProperties;
|
| - (void)setResponderDelegate:
|
| (NSObject<RenderWidgetHostViewMacDelegate>*)delegate;
|
| +- (void)speakText:(NSString*)text;
|
| @end
|
|
|
| // A window subclass that allows the fullscreen window to become main and gain
|
| @@ -654,6 +655,8 @@ bool RenderWidgetHostViewMac::OnMessageReceived(const IPC::Message& message) {
|
| IPC_BEGIN_MESSAGE_MAP(RenderWidgetHostViewMac, message)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_PluginFocusChanged, OnPluginFocusChanged)
|
| IPC_MESSAGE_HANDLER(ViewHostMsg_StartPluginIme, OnStartPluginIme)
|
| + IPC_MESSAGE_HANDLER(ViewMsg_GetRenderedTextCompleted,
|
| + OnGetRenderedTextCompleted)
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -1080,8 +1083,19 @@ bool RenderWidgetHostViewMac::SupportsSpeech() const {
|
| }
|
|
|
| void RenderWidgetHostViewMac::SpeakSelection() {
|
| - if ([NSApp respondsToSelector:@selector(speakString:)])
|
| - [NSApp speakString:base::SysUTF8ToNSString(selected_text_)];
|
| + if (![NSApp respondsToSelector:@selector(speakString:)])
|
| + return;
|
| +
|
| + if (selected_text_.empty() && render_widget_host_) {
|
| + // If there's no selection, speak all text. Send an asynchronous IPC
|
| + // request for all the text in the webcontents.
|
| + // ViewMsg_GetRenderedTextCompleted is sent back to IPC Message receiver.
|
| + render_widget_host_->Send(new ViewMsg_GetRenderedText(
|
| + render_widget_host_->GetRoutingID()));
|
| + return;
|
| + }
|
| +
|
| + [cocoa_view_ speakText:base::SysUTF8ToNSString(selected_text_)];
|
| }
|
|
|
| bool RenderWidgetHostViewMac::IsSpeaking() const {
|
| @@ -2101,6 +2115,15 @@ void RenderWidgetHostViewMac::OnStartPluginIme() {
|
| [cocoa_view_ setPluginImeActive:YES];
|
| }
|
|
|
| +void RenderWidgetHostViewMac::OnGetRenderedTextCompleted(
|
| + const std::string& text) {
|
| + // Let TTS speak the text returned from call back
|
| + if (text.empty())
|
| + return;
|
| +
|
| + [cocoa_view_ speakText:base::SysUTF8ToNSString(text)];
|
| +}
|
| +
|
| gfx::Rect RenderWidgetHostViewMac::GetScaledOpenGLPixelRect(
|
| const gfx::Rect& rect) {
|
| gfx::Rect src_gl_subrect = rect;
|
| @@ -2942,6 +2965,10 @@ void RenderWidgetHostViewMac::AcceleratedLayerDidDrawFrame(bool succeeded) {
|
| }
|
| }
|
|
|
| +- (void)speakText:(NSString *) text {
|
| + [NSApp speakString:text];
|
| +}
|
| +
|
| - (void)viewWillMoveToWindow:(NSWindow*)newWindow {
|
| NSWindow* oldWindow = [self window];
|
|
|
|
|