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 14NotificationObjectProxy::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 24NotificationObjectProxy::~NotificationObjectProxy() {} 25 26void 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 36void NotificationObjectProxy::Error() { 37 delegate_->NotificationError(); 38} 39 40void NotificationObjectProxy::Close(bool by_user) { 41 delegate_->NotificationClosed(by_user); 42} 43 44void NotificationObjectProxy::Click() { 45 delegate_->NotificationClick(); 46} 47 48std::string NotificationObjectProxy::id() const { 49 return id_; 50} 51 52content::WebContents* NotificationObjectProxy::GetWebContents() const { 53 return content::WebContents::FromRenderFrameHost( 54 content::RenderFrameHost::FromID(render_process_id_, render_frame_id_)); 55} 56