OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" | 5 #include "chrome/browser/renderer_host/render_widget_host_view_win.h" |
6 | 6 |
7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
8 #include "app/l10n_util_win.h" | 8 #include "app/l10n_util_win.h" |
9 #include "app/resource_bundle.h" | 9 #include "app/resource_bundle.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
245 backing_store_dc, | 245 backing_store_dc, |
246 paint_rect.x(), | 246 paint_rect.x(), |
247 paint_rect.y(), | 247 paint_rect.y(), |
248 SRCCOPY); | 248 SRCCOPY); |
249 canvas.endPlatformPaint(); | 249 canvas.endPlatformPaint(); |
250 // 178 is 70% grey. | 250 // 178 is 70% grey. |
251 canvas.FillRectInt(SkColorSetARGB(178, 0, 0, 0), 0, 0, | 251 canvas.FillRectInt(SkColorSetARGB(178, 0, 0, 0), 0, 0, |
252 paint_rect.width(), paint_rect.height()); | 252 paint_rect.width(), paint_rect.height()); |
253 canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(), | 253 canvas.getTopPlatformDevice().drawToHDC(paint_dc, paint_rect.x(), |
254 paint_rect.y(), NULL); | 254 paint_rect.y(), NULL); |
255 | |
256 } | 255 } |
257 | 256 |
258 } // namespace | 257 } // namespace |
259 | 258 |
260 // RenderWidgetHostView -------------------------------------------------------- | 259 // RenderWidgetHostView -------------------------------------------------------- |
261 | 260 |
262 // static | 261 // static |
263 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( | 262 RenderWidgetHostView* RenderWidgetHostView::CreateViewForWidget( |
264 RenderWidgetHost* widget) { | 263 RenderWidgetHost* widget) { |
265 return new RenderWidgetHostViewWin(widget); | 264 return new RenderWidgetHostViewWin(widget); |
(...skipping 11 matching lines...) Expand all Loading... |
277 about_to_validate_and_paint_(false), | 276 about_to_validate_and_paint_(false), |
278 close_on_deactivate_(false), | 277 close_on_deactivate_(false), |
279 being_destroyed_(false), | 278 being_destroyed_(false), |
280 tooltip_hwnd_(NULL), | 279 tooltip_hwnd_(NULL), |
281 tooltip_showing_(false), | 280 tooltip_showing_(false), |
282 shutdown_factory_(this), | 281 shutdown_factory_(this), |
283 parent_hwnd_(NULL), | 282 parent_hwnd_(NULL), |
284 is_loading_(false), | 283 is_loading_(false), |
285 visually_deemphasized_(false) { | 284 visually_deemphasized_(false) { |
286 render_widget_host_->set_view(this); | 285 render_widget_host_->set_view(this); |
287 renderer_accessible_ = | |
288 CommandLine::ForCurrentProcess()->HasSwitch( | |
289 switches::kEnableRendererAccessibility); | |
290 registrar_.Add(this, | 286 registrar_.Add(this, |
291 NotificationType::RENDERER_PROCESS_TERMINATED, | 287 NotificationType::RENDERER_PROCESS_TERMINATED, |
292 NotificationService::AllSources()); | 288 NotificationService::AllSources()); |
| 289 |
| 290 BOOL screenreader_running = FALSE; |
| 291 if (SystemParametersInfo(SPI_GETSCREENREADER, 0, &screenreader_running, 0) && |
| 292 screenreader_running) { |
| 293 render_widget_host_->EnableRendererAccessibility(); |
| 294 } |
293 } | 295 } |
294 | 296 |
295 RenderWidgetHostViewWin::~RenderWidgetHostViewWin() { | 297 RenderWidgetHostViewWin::~RenderWidgetHostViewWin() { |
296 ResetTooltip(); | 298 ResetTooltip(); |
297 } | 299 } |
298 | 300 |
299 void RenderWidgetHostViewWin::CreateWnd(HWND parent) { | 301 void RenderWidgetHostViewWin::CreateWnd(HWND parent) { |
300 Create(parent); // ATL function to create the window. | 302 Create(parent); // ATL function to create the window. |
301 | 303 |
302 // Add a property indicating that a particular renderer is associated with | 304 // Add a property indicating that a particular renderer is associated with |
(...skipping 1173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 } | 1478 } |
1477 } | 1479 } |
1478 handled = FALSE; | 1480 handled = FALSE; |
1479 return MA_ACTIVATE; | 1481 return MA_ACTIVATE; |
1480 } | 1482 } |
1481 | 1483 |
1482 void RenderWidgetHostViewWin::UpdateAccessibilityTree( | 1484 void RenderWidgetHostViewWin::UpdateAccessibilityTree( |
1483 const webkit_glue::WebAccessibility& tree) { | 1485 const webkit_glue::WebAccessibility& tree) { |
1484 browser_accessibility_manager_.reset( | 1486 browser_accessibility_manager_.reset( |
1485 new BrowserAccessibilityManager(m_hWnd, tree, this)); | 1487 new BrowserAccessibilityManager(m_hWnd, tree, this)); |
| 1488 |
| 1489 ::NotifyWinEvent( |
| 1490 IA2_EVENT_DOCUMENT_LOAD_COMPLETE, m_hWnd, OBJID_CLIENT, CHILDID_SELF); |
1486 } | 1491 } |
1487 | 1492 |
1488 void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) { | 1493 void RenderWidgetHostViewWin::OnAccessibilityFocusChange(int acc_obj_id) { |
1489 if (browser_accessibility_manager_.get()) { | 1494 if (browser_accessibility_manager_.get()) { |
1490 browser_accessibility_manager_->OnAccessibilityFocusChange(acc_obj_id); | 1495 browser_accessibility_manager_->OnAccessibilityFocusChange(acc_obj_id); |
1491 } | 1496 } |
1492 } | 1497 } |
1493 | 1498 |
1494 void RenderWidgetHostViewWin::OnAccessibilityObjectStateChange(int acc_obj_id) { | 1499 void RenderWidgetHostViewWin::OnAccessibilityObjectStateChange(int acc_obj_id) { |
1495 if (browser_accessibility_manager_.get()) { | 1500 if (browser_accessibility_manager_.get()) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1535 !render_widget_host_->process() || | 1540 !render_widget_host_->process() || |
1536 !render_widget_host_->process()->HasConnection()) { | 1541 !render_widget_host_->process()->HasConnection()) { |
1537 return; | 1542 return; |
1538 } | 1543 } |
1539 | 1544 |
1540 render_widget_host_->AccessibilityDoDefaultAction(acc_obj_id); | 1545 render_widget_host_->AccessibilityDoDefaultAction(acc_obj_id); |
1541 } | 1546 } |
1542 | 1547 |
1543 LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam, | 1548 LRESULT RenderWidgetHostViewWin::OnGetObject(UINT message, WPARAM wparam, |
1544 LPARAM lparam, BOOL& handled) { | 1549 LPARAM lparam, BOOL& handled) { |
1545 // TODO(dmazzoni): http://crbug.com/25564 Disabling accessibility in the | 1550 if (lparam != OBJID_CLIENT) { |
1546 // renderer is a temporary work-around until that bug is fixed. | |
1547 if (!renderer_accessible_) { | |
1548 handled = false; | 1551 handled = false; |
1549 return static_cast<LRESULT>(0L); | 1552 return static_cast<LRESULT>(0L); |
1550 } | 1553 } |
1551 | 1554 |
1552 if (lparam == OBJID_CLIENT && browser_accessibility_manager_.get()) { | 1555 if (!browser_accessibility_manager_.get()) { |
| 1556 render_widget_host_->EnableRendererAccessibility(); |
| 1557 |
| 1558 if (!loading_accessible_.get()) { |
| 1559 // Create IAccessible to return while waiting for the accessibility tree |
| 1560 // from the renderer. |
| 1561 HRESULT hr = ::CreateStdAccessibleObject( |
| 1562 m_hWnd, OBJID_CLIENT, IID_IAccessible, |
| 1563 reinterpret_cast<void **>(&loading_accessible_)); |
| 1564 |
| 1565 // Annotate with STATE_SYSTEM_BUSY to indicate that the page is loading. |
| 1566 // We annotate the HWND, not the loading_accessible IAccessible, but the |
| 1567 // IAccessible will reflect the state annotation. |
| 1568 ScopedComPtr<IAccPropServices> pAccPropServices; |
| 1569 hr = CoCreateInstance(CLSID_AccPropServices, NULL, CLSCTX_SERVER, |
| 1570 IID_IAccPropServices, reinterpret_cast<void**>(&pAccPropServices)); |
| 1571 if (SUCCEEDED(hr)) { |
| 1572 VARIANT var; |
| 1573 var.vt = VT_I4; |
| 1574 var.lVal = STATE_SYSTEM_BUSY; |
| 1575 pAccPropServices->SetHwndProp(m_hWnd, OBJID_CLIENT, |
| 1576 CHILDID_SELF, PROPID_ACC_STATE, var); |
| 1577 } |
| 1578 } |
| 1579 |
| 1580 if (loading_accessible_.get()) { |
| 1581 return LresultFromObject( |
| 1582 IID_IAccessible, wparam, |
| 1583 static_cast<IAccessible*>(loading_accessible_)); |
| 1584 } |
| 1585 } else { |
1553 BrowserAccessibility* root = browser_accessibility_manager_->GetRoot(); | 1586 BrowserAccessibility* root = browser_accessibility_manager_->GetRoot(); |
1554 if (root) { | 1587 if (root) { |
1555 return LresultFromObject(IID_IAccessible, wparam, | 1588 return LresultFromObject(IID_IAccessible, wparam, |
1556 static_cast<IAccessible*>(root->NewReference())); | 1589 static_cast<IAccessible*>(root->NewReference())); |
1557 } | 1590 } |
1558 } | 1591 } |
1559 | 1592 |
1560 handled = false; | 1593 handled = false; |
1561 return static_cast<LRESULT>(0L); | 1594 return static_cast<LRESULT>(0L); |
1562 } | 1595 } |
1563 | 1596 |
1564 void RenderWidgetHostViewWin::OnFinalMessage(HWND window) { | 1597 void RenderWidgetHostViewWin::OnFinalMessage(HWND window) { |
1565 // When the render widget host is being destroyed, it ends up calling | 1598 // When the render widget host is being destroyed, it ends up calling |
1566 // WillDestroyRenderWidget (through the RENDER_WIDGET_HOST_DESTROYED | 1599 // WillDestroyRenderWidget (through the RENDER_WIDGET_HOST_DESTROYED |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1681 RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView( | 1714 RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView( |
1682 gfx::NativeView native_view) { | 1715 gfx::NativeView native_view) { |
1683 if (::IsWindow(native_view)) { | 1716 if (::IsWindow(native_view)) { |
1684 HANDLE raw_render_host_view = ::GetProp(native_view, | 1717 HANDLE raw_render_host_view = ::GetProp(native_view, |
1685 kRenderWidgetHostViewKey); | 1718 kRenderWidgetHostViewKey); |
1686 if (raw_render_host_view) | 1719 if (raw_render_host_view) |
1687 return reinterpret_cast<RenderWidgetHostView*>(raw_render_host_view); | 1720 return reinterpret_cast<RenderWidgetHostView*>(raw_render_host_view); |
1688 } | 1721 } |
1689 return NULL; | 1722 return NULL; |
1690 } | 1723 } |
OLD | NEW |