| // Copyright (c) 2009 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/notifications/balloon.h" |
| |
| #include "base/logging.h" |
| #include "chrome/browser/notifications/balloon_collection.h" |
| #include "chrome/browser/notifications/notification.h" |
| #include "content/browser/site_instance.h" |
| #include "ui/gfx/rect.h" |
| #include "ui/gfx/size.h" |
| |
| Balloon::Balloon(const Notification& notification, Profile* profile, |
| BalloonCollection* collection) |
| : profile_(profile), |
| notification_(new Notification(notification)), |
| collection_(collection) { |
| } |
| |
| Balloon::~Balloon() { |
| } |
| |
| void Balloon::SetPosition(const gfx::Point& upper_left, bool reposition) { |
| position_ = upper_left; |
| if (reposition && balloon_view_.get()) |
| balloon_view_->RepositionToBalloon(); |
| } |
| |
| void Balloon::SetContentPreferredSize(const gfx::Size& size) { |
| collection_->ResizeBalloon(this, size); |
| } |
| |
| void Balloon::set_view(BalloonView* balloon_view) { |
| balloon_view_.reset(balloon_view); |
| } |
| |
| void Balloon::Show() { |
| notification_->Display(); |
| if (balloon_view_.get()) { |
| balloon_view_->Show(this); |
| balloon_view_->RepositionToBalloon(); |
| } |
| } |
| |
| void Balloon::Update(const Notification& notification) { |
| notification_->Close(false); |
| notification_.reset(new Notification(notification)); |
| notification_->Display(); |
| if (balloon_view_.get()) { |
| balloon_view_->Update(); |
| } |
| } |
| |
| void Balloon::OnClick() { |
| notification_->Click(); |
| } |
| |
| void Balloon::OnClose(bool by_user) { |
| notification_->Close(by_user); |
| collection_->OnBalloonClosed(this); |
| } |
| |
| void Balloon::CloseByScript() { |
| // A user-initiated close begins with the view and then closes this object; |
| // we simulate that with a script-initiated close but pass |by_user|=false. |
| DCHECK(balloon_view_.get()); |
| balloon_view_->Close(false); |
| } |