| // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/browser/ui/views/notifications/balloon_view_host.h" |
| |
| #include "chrome/browser/notifications/balloon.h" |
| #include "content/public/browser/content_browser_client.h" |
| #include "content/public/browser/render_view_host.h" |
| #include "content/public/browser/render_widget_host_view.h" |
| #include "content/public/browser/web_contents.h" |
| #include "ui/views/widget/widget.h" |
| |
| class BalloonViewHostView : public views::NativeViewHost { |
| public: |
| explicit BalloonViewHostView(BalloonViewHost* host) |
| : host_(host), |
| initialized_(false) { |
| } |
| |
| virtual void ViewHierarchyChanged( |
| const ViewHierarchyChangedDetails& details) OVERRIDE { |
| NativeViewHost::ViewHierarchyChanged(details); |
| if (details.is_add && GetWidget() && !initialized_) { |
| initialized_ = true; |
| host_->Init(GetWidget()->GetNativeView()); |
| } |
| } |
| |
| private: |
| // The host owns this object. |
| BalloonViewHost* host_; |
| |
| bool initialized_; |
| }; |
| |
| BalloonViewHost::BalloonViewHost(Balloon* balloon) |
| : BalloonHost(balloon) { |
| native_host_ = new BalloonViewHostView(this); |
| } |
| |
| BalloonViewHost::~BalloonViewHost() { |
| Shutdown(); |
| } |
| |
| void BalloonViewHost::Init(gfx::NativeView parent_native_view) { |
| parent_native_view_ = parent_native_view; |
| BalloonHost::Init(); |
| |
| content::RenderWidgetHostView* render_widget_host_view = |
| web_contents_->GetRenderViewHost()->GetView(); |
| |
| native_host_->Attach(render_widget_host_view->GetNativeView()); |
| } |