Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(997)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_aura.cc

Issue 329053004: Fix race in BrowserAccessibilityManagerWin creation. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Simpler fix Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/browser/accessibility/browser_accessibility_win.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "content/browser/renderer_host/render_widget_host_view_aura.h" 5 #include "content/browser/renderer_host/render_widget_host_view_aura.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/basictypes.h" 8 #include "base/basictypes.h"
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback_helpers.h" 10 #include "base/callback_helpers.h"
(...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after
1012 // NPNVnetscapeWindow property corresponds to the bounds of the webpage. 1012 // NPNVnetscapeWindow property corresponds to the bounds of the webpage.
1013 // This is not true in Aura where we have only HWND which is the main Aura 1013 // This is not true in Aura where we have only HWND which is the main Aura
1014 // window. If we return this window to plugins like Flash then it causes the 1014 // window. If we return this window to plugins like Flash then it causes the
1015 // coordinate translations done by these plugins to break. 1015 // coordinate translations done by these plugins to break.
1016 // Additonally the legacy dummy window is needed for accessibility and for 1016 // Additonally the legacy dummy window is needed for accessibility and for
1017 // scrolling to work in legacy drivers for trackpoints/trackpads, etc. 1017 // scrolling to work in legacy drivers for trackpoints/trackpads, etc.
1018 if (GetNativeViewId()) { 1018 if (GetNativeViewId()) {
1019 if (!legacy_render_widget_host_HWND_) { 1019 if (!legacy_render_widget_host_HWND_) {
1020 legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create( 1020 legacy_render_widget_host_HWND_ = LegacyRenderWidgetHostHWND::Create(
1021 reinterpret_cast<HWND>(GetNativeViewId())); 1021 reinterpret_cast<HWND>(GetNativeViewId()));
1022 BrowserAccessibilityManagerWin* manager =
1023 static_cast<BrowserAccessibilityManagerWin*>(
1024 GetBrowserAccessibilityManager());
1025 if (manager)
1026 manager->SetAccessibleHWND(legacy_render_widget_host_HWND_.get());
1022 } 1027 }
1023 if (legacy_render_widget_host_HWND_) { 1028 if (legacy_render_widget_host_HWND_) {
1024 legacy_render_widget_host_HWND_->SetBounds( 1029 legacy_render_widget_host_HWND_->SetBounds(
1025 window_->GetBoundsInRootWindow()); 1030 window_->GetBoundsInRootWindow());
1026 } 1031 }
1027 } 1032 }
1028 1033
1029 if (mouse_locked_) 1034 if (mouse_locked_)
1030 UpdateMouseLockRegion(); 1035 UpdateMouseLockRegion();
1031 #endif 1036 #endif
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after
1244 1249
1245 if (overscroll_controller_) 1250 if (overscroll_controller_)
1246 consumed |= overscroll_controller_->WillHandleEvent(input_event); 1251 consumed |= overscroll_controller_->WillHandleEvent(input_event);
1247 1252
1248 return consumed && !WebTouchEvent::isTouchEventType(input_event.type) 1253 return consumed && !WebTouchEvent::isTouchEventType(input_event.type)
1249 ? INPUT_EVENT_ACK_STATE_CONSUMED 1254 ? INPUT_EVENT_ACK_STATE_CONSUMED
1250 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED; 1255 : INPUT_EVENT_ACK_STATE_NOT_CONSUMED;
1251 } 1256 }
1252 1257
1253 void RenderWidgetHostViewAura::CreateBrowserAccessibilityManagerIfNeeded() { 1258 void RenderWidgetHostViewAura::CreateBrowserAccessibilityManagerIfNeeded() {
1254 if (GetBrowserAccessibilityManager())
1255 return;
1256
1257 BrowserAccessibilityManager* manager = NULL;
1258 #if defined(OS_WIN) 1259 #if defined(OS_WIN)
1259 aura::WindowTreeHost* host = window_->GetHost(); 1260 if (!GetBrowserAccessibilityManager()) {
1260 if (!host) 1261 gfx::NativeViewAccessible accessible_parent =
1261 return; 1262 host_->GetParentNativeViewAccessible();
1262 HWND hwnd = host->GetAcceleratedWidget(); 1263 LegacyRenderWidgetHostHWND* parent_hwnd =
ananta 2014/06/12 22:17:45 We should be allocating the BrowserAccessibilityMa
dmazzoni 2014/06/12 23:23:27 No, this is intentional. We want to create the BAM
1263 1264 legacy_render_widget_host_HWND_.get();
1264 // The accessible_parent may be NULL at this point. The WebContents will pass 1265 SetBrowserAccessibilityManager(new BrowserAccessibilityManagerWin(
1265 // it down to this instance (by way of the RenderViewHost and
1266 // RenderWidgetHost) when it is known. This instance will then set it on its
1267 // BrowserAccessibilityManager.
1268 gfx::NativeViewAccessible accessible_parent =
1269 host_->GetParentNativeViewAccessible();
1270
1271 if (legacy_render_widget_host_HWND_) {
1272 manager = new BrowserAccessibilityManagerWin(
1273 legacy_render_widget_host_HWND_.get(), accessible_parent, 1266 legacy_render_widget_host_HWND_.get(), accessible_parent,
1274 BrowserAccessibilityManagerWin::GetEmptyDocument(), host_); 1267 BrowserAccessibilityManagerWin::GetEmptyDocument(), host_));
1275 } 1268 }
1276 #else 1269 #else
1277 manager = BrowserAccessibilityManager::Create( 1270 if (!GetBrowserAccessibilityManager()) {
1278 BrowserAccessibilityManager::GetEmptyDocument(), host_); 1271 SetBrowserAccessibilityManager(
1272 BrowserAccessibilityManager::Create(
1273 BrowserAccessibilityManager::GetEmptyDocument(), host_));
1274 }
1279 #endif 1275 #endif
1280 SetBrowserAccessibilityManager(manager);
1281 } 1276 }
1282 1277
1283 gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() { 1278 gfx::GLSurfaceHandle RenderWidgetHostViewAura::GetCompositingSurface() {
1284 return ImageTransportFactory::GetInstance()->GetSharedSurfaceHandle(); 1279 return ImageTransportFactory::GetInstance()->GetSharedSurfaceHandle();
1285 } 1280 }
1286 1281
1287 bool RenderWidgetHostViewAura::LockMouse() { 1282 bool RenderWidgetHostViewAura::LockMouse() {
1288 aura::Window* root_window = window_->GetRootWindow(); 1283 aura::Window* root_window = window_->GetRootWindow();
1289 if (!root_window) 1284 if (!root_window)
1290 return false; 1285 return false;
(...skipping 1170 matching lines...) Expand 10 before | Expand all | Expand 10 after
2461 2456
2462 //////////////////////////////////////////////////////////////////////////////// 2457 ////////////////////////////////////////////////////////////////////////////////
2463 // RenderWidgetHostViewBase, public: 2458 // RenderWidgetHostViewBase, public:
2464 2459
2465 // static 2460 // static
2466 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) { 2461 void RenderWidgetHostViewBase::GetDefaultScreenInfo(WebScreenInfo* results) {
2467 GetScreenInfoForWindow(results, NULL); 2462 GetScreenInfoForWindow(results, NULL);
2468 } 2463 }
2469 2464
2470 } // namespace content 2465 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/accessibility/browser_accessibility_win.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698