Chromium Code Reviews| Index: mojo/views/native_widget_view_manager.cc |
| diff --git a/mojo/views/native_widget_view_manager.cc b/mojo/views/native_widget_view_manager.cc |
| index 36a65786e101b21da096aa89b764d0144be3855a..2e37e170494693a9724f0220d936860ee40a64b6 100644 |
| --- a/mojo/views/native_widget_view_manager.cc |
| +++ b/mojo/views/native_widget_view_manager.cc |
| @@ -92,7 +92,8 @@ NativeWidgetViewManager::NativeWidgetViewManager( |
| : NativeWidgetAura(delegate), |
| node_(node) { |
| node_->AddObserver(this); |
| - node_->active_view()->AddObserver(this); |
| + view_ = node_->active_view(); |
|
sky
2014/07/15 21:45:38
move this to member initializer.
|
| + view_->AddObserver(this); |
|
sky
2014/07/15 21:45:38
view_ may be NULL here.
|
| window_tree_host_.reset(new WindowTreeHostMojo(node_, this)); |
| window_tree_host_->InitHost(); |
| @@ -113,9 +114,10 @@ NativeWidgetViewManager::NativeWidgetViewManager( |
| } |
| NativeWidgetViewManager::~NativeWidgetViewManager() { |
| - if (node_->active_view()) |
| - node_->active_view()->RemoveObserver(this); |
| - node_->RemoveObserver(this); |
| + if (view_) |
| + view_->RemoveObserver(this); |
| + if (node_) |
| + node_->RemoveObserver(this); |
| } |
| void NativeWidgetViewManager::InitNativeWidget( |
| @@ -129,13 +131,23 @@ void NativeWidgetViewManager::InitNativeWidget( |
| void NativeWidgetViewManager::CompositorContentsChanged( |
| const SkBitmap& bitmap) { |
| - node_->active_view()->SetContents(bitmap); |
| + if (view_) |
| + view_->SetContents(bitmap); |
| } |
| void NativeWidgetViewManager::OnNodeDestroyed(view_manager::Node* node) { |
| + DCHECK_EQ(node, node_); |
| + node->RemoveObserver(this); |
| + node_ = NULL; |
| window_tree_host_.reset(); |
| } |
| +void NativeWidgetViewManager::OnNodeBoundsChanged(view_manager::Node* node, |
| + const gfx::Rect& old_bounds, |
| + const gfx::Rect& new_bounds) { |
| + GetWidget()->SetBounds(gfx::Rect(node->bounds().size())); |
| +} |
| + |
| void NativeWidgetViewManager::OnNodeActiveViewChanged( |
| view_manager::Node* node, |
| view_manager::View* old_view, |
| @@ -144,6 +156,7 @@ void NativeWidgetViewManager::OnNodeActiveViewChanged( |
| old_view->RemoveObserver(this); |
| if (new_view) |
| new_view->AddObserver(this); |
| + view_ = new_view; |
| } |
| void NativeWidgetViewManager::OnViewInputEvent(view_manager::View* view, |
| @@ -153,4 +166,10 @@ void NativeWidgetViewManager::OnViewInputEvent(view_manager::View* view, |
| window_tree_host_->SendEventToProcessor(ui_event.get()); |
| } |
| +void NativeWidgetViewManager::OnViewDestroyed(view_manager::View* view) { |
| + DCHECK_EQ(view, view_); |
| + view->RemoveObserver(this); |
| + view_ = NULL; |
| +} |
| + |
| } // namespace mojo |