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