1// Copyright (c) 2009 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/notifications/balloon.h"
6
7#include "base/logging.h"
8#include "chrome/browser/notifications/balloon_collection.h"
9#include "chrome/browser/notifications/notification.h"
10#include "content/browser/site_instance.h"
11#include "ui/gfx/rect.h"
12#include "ui/gfx/size.h"
13
14Balloon::Balloon(const Notification& notification, Profile* profile,
15                 BalloonCollection* collection)
16    : profile_(profile),
17      notification_(new Notification(notification)),
18      collection_(collection) {
19}
20
21Balloon::~Balloon() {
22}
23
24void Balloon::SetPosition(const gfx::Point& upper_left, bool reposition) {
25  position_ = upper_left;
26  if (reposition && balloon_view_.get())
27    balloon_view_->RepositionToBalloon();
28}
29
30void Balloon::SetContentPreferredSize(const gfx::Size& size) {
31  collection_->ResizeBalloon(this, size);
32}
33
34void Balloon::set_view(BalloonView* balloon_view) {
35  balloon_view_.reset(balloon_view);
36}
37
38void Balloon::Show() {
39  notification_->Display();
40  if (balloon_view_.get()) {
41    balloon_view_->Show(this);
42    balloon_view_->RepositionToBalloon();
43  }
44}
45
46void Balloon::Update(const Notification& notification) {
47  notification_->Close(false);
48  notification_.reset(new Notification(notification));
49  notification_->Display();
50  if (balloon_view_.get()) {
51    balloon_view_->Update();
52  }
53}
54
55void Balloon::OnClick() {
56  notification_->Click();
57}
58
59void Balloon::OnClose(bool by_user) {
60  notification_->Close(by_user);
61  collection_->OnBalloonClosed(this);
62}
63
64void Balloon::CloseByScript() {
65  // A user-initiated close begins with the view and then closes this object;
66  // we simulate that with a script-initiated close but pass |by_user|=false.
67  DCHECK(balloon_view_.get());
68  balloon_view_->Close(false);
69}
70