Home | History | Annotate | Download | only in notifications
      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 
     14 Balloon::Balloon(const Notification& notification, Profile* profile,
     15                  BalloonCollection* collection)
     16     : profile_(profile),
     17       notification_(new Notification(notification)),
     18       collection_(collection) {
     19 }
     20 
     21 Balloon::~Balloon() {
     22 }
     23 
     24 void 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 
     30 void Balloon::SetContentPreferredSize(const gfx::Size& size) {
     31   collection_->ResizeBalloon(this, size);
     32 }
     33 
     34 void Balloon::set_view(BalloonView* balloon_view) {
     35   balloon_view_.reset(balloon_view);
     36 }
     37 
     38 void Balloon::Show() {
     39   notification_->Display();
     40   if (balloon_view_.get()) {
     41     balloon_view_->Show(this);
     42     balloon_view_->RepositionToBalloon();
     43   }
     44 }
     45 
     46 void 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 
     55 void Balloon::OnClick() {
     56   notification_->Click();
     57 }
     58 
     59 void Balloon::OnClose(bool by_user) {
     60   notification_->Close(by_user);
     61   collection_->OnBalloonClosed(this);
     62 }
     63 
     64 void 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