Commit 0977aa52 authored by waffles@chromium.org's avatar waffles@chromium.org

Revert 284177 "Make NativeViewHostAura clipping window non-focus..."

Reason for revert: use-after-free with #3 0x897b331 in
views::NativeViewHostAura::ClippingWindowDelegate::CanFocus()
ui/views/controls/native/native_view_host_aura.cc:43 in the stack trace.
http://build.chromium.org/p/chromium.memory/builders/Linux%20ASan%20LSan%20Tests%20%283%29/builds/5437

> Make NativeViewHostAura clipping window non-focusable.
> 
> This CL fixes an issue where the clipping window would get a focus event
> when the SadTab was displayed causing the focus to be set to nothing,
> disabling all keyboard shortcuts.
> 
> This is fixed by making the clipping window nonfocusable.
> 
> BUG=393119
> 
> Review URL: https://codereview.chromium.org/397493005

TBR=calamity@chromium.org

Review URL: https://codereview.chromium.org/403853002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@284196 0039d316-1c4b-4281-b951-d872f2087c98
parent d008566b
...@@ -8,58 +8,16 @@ ...@@ -8,58 +8,16 @@
#include "ui/aura/client/aura_constants.h" #include "ui/aura/client/aura_constants.h"
#include "ui/aura/client/focus_client.h" #include "ui/aura/client/focus_client.h"
#include "ui/aura/window.h" #include "ui/aura/window.h"
#include "ui/aura/window_delegate.h"
#include "ui/base/cursor/cursor.h" #include "ui/base/cursor/cursor.h"
#include "ui/base/hit_test.h"
#include "ui/views/controls/native/native_view_host.h" #include "ui/views/controls/native/native_view_host.h"
#include "ui/views/view_constants_aura.h" #include "ui/views/view_constants_aura.h"
#include "ui/views/widget/widget.h" #include "ui/views/widget/widget.h"
namespace views { namespace views {
class NativeViewHostAura::ClippingWindowDelegate : public aura::WindowDelegate {
public:
explicit ClippingWindowDelegate(const NativeViewHost* host) : host_(host) {}
virtual ~ClippingWindowDelegate() {}
virtual gfx::Size GetMinimumSize() const OVERRIDE { return gfx::Size(); }
virtual gfx::Size GetMaximumSize() const OVERRIDE { return gfx::Size(); }
virtual void OnBoundsChanged(const gfx::Rect& old_bounds,
const gfx::Rect& new_bounds) OVERRIDE {}
virtual gfx::NativeCursor GetCursor(const gfx::Point& point) OVERRIDE {
return gfx::kNullCursor;
}
virtual int GetNonClientComponent(const gfx::Point& point) const OVERRIDE {
return HTCLIENT;
}
virtual bool ShouldDescendIntoChildForEventHandling(
aura::Window* child,
const gfx::Point& location) OVERRIDE { return true; }
virtual bool CanFocus() OVERRIDE {
// Ask the hosted native view's delegate because directly calling
// aura::Window::CanFocus() will call back into this when checking whether
// parents can focus.
return host_->native_view() && host_->native_view()->delegate()
? host_->native_view()->delegate()->CanFocus()
: true;
}
virtual void OnCaptureLost() OVERRIDE {}
virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE {}
virtual void OnDeviceScaleFactorChanged(float device_scale_factor) OVERRIDE {}
virtual void OnWindowDestroying(aura::Window* window) OVERRIDE {}
virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE {}
virtual void OnWindowTargetVisibilityChanged(bool visible) OVERRIDE {}
virtual bool HasHitTestMask() const OVERRIDE { return false; }
virtual void GetHitTestMask(gfx::Path* mask) const OVERRIDE {}
private:
const NativeViewHost* host_;
};
NativeViewHostAura::NativeViewHostAura(NativeViewHost* host) NativeViewHostAura::NativeViewHostAura(NativeViewHost* host)
: host_(host), : host_(host),
clipping_window_delegate_(new ClippingWindowDelegate(host)), clipping_window_(NULL) {
clipping_window_(clipping_window_delegate_.get()) {
clipping_window_.Init(aura::WINDOW_LAYER_NOT_DRAWN); clipping_window_.Init(aura::WINDOW_LAYER_NOT_DRAWN);
clipping_window_.set_owned_by_parent(false); clipping_window_.set_owned_by_parent(false);
clipping_window_.SetName("NativeViewHostAuraClip"); clipping_window_.SetName("NativeViewHostAuraClip");
......
...@@ -40,8 +40,6 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper, ...@@ -40,8 +40,6 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper,
private: private:
friend class NativeViewHostAuraTest; friend class NativeViewHostAuraTest;
class ClippingWindowDelegate;
// Overridden from aura::WindowObserver: // Overridden from aura::WindowObserver:
virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE; virtual void OnWindowDestroyed(aura::Window* window) OVERRIDE;
...@@ -56,8 +54,6 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper, ...@@ -56,8 +54,6 @@ class VIEWS_EXPORT NativeViewHostAura : public NativeViewHostWrapper,
// Our associated NativeViewHost. // Our associated NativeViewHost.
NativeViewHost* host_; NativeViewHost* host_;
scoped_ptr<ClippingWindowDelegate> clipping_window_delegate_;
// Window that exists between the native view and the parent that allows for // Window that exists between the native view and the parent that allows for
// clipping to occur. This is positioned in the coordinate space of // clipping to occur. This is positioned in the coordinate space of
// host_->GetWidget(). // host_->GetWidget().
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment