Home | History | Annotate | Download | only in notifications
      1 // Copyright (c) 2012 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/notification_object_proxy.h"
      6 
      7 #include "base/guid.h"
      8 #include "base/strings/stringprintf.h"
      9 #include "content/public/browser/desktop_notification_delegate.h"
     10 #include "content/public/browser/render_frame_host.h"
     11 #include "content/public/browser/render_process_host.h"
     12 #include "content/public/browser/web_contents.h"
     13 
     14 NotificationObjectProxy::NotificationObjectProxy(
     15     content::RenderFrameHost* render_frame_host,
     16     scoped_ptr<content::DesktopNotificationDelegate> delegate)
     17     : render_process_id_(render_frame_host->GetProcess()->GetID()),
     18       render_frame_id_(render_frame_host->GetRoutingID()),
     19       delegate_(delegate.Pass()),
     20       displayed_(false),
     21       id_(base::GenerateGUID()) {
     22 }
     23 
     24 NotificationObjectProxy::~NotificationObjectProxy() {}
     25 
     26 void NotificationObjectProxy::Display() {
     27   // This method is called each time the notification is shown to the user
     28   // but we only want to fire the event the first time.
     29   if (displayed_)
     30     return;
     31   displayed_ = true;
     32 
     33   delegate_->NotificationDisplayed();
     34 }
     35 
     36 void NotificationObjectProxy::Error() {
     37   delegate_->NotificationError();
     38 }
     39 
     40 void NotificationObjectProxy::Close(bool by_user) {
     41   delegate_->NotificationClosed(by_user);
     42 }
     43 
     44 void NotificationObjectProxy::Click() {
     45   delegate_->NotificationClick();
     46 }
     47 
     48 std::string NotificationObjectProxy::id() const {
     49   return id_;
     50 }
     51 
     52 content::WebContents* NotificationObjectProxy::GetWebContents() const {
     53   return content::WebContents::FromRenderFrameHost(
     54       content::RenderFrameHost::FromID(render_process_id_, render_frame_id_));
     55 }
     56