1/* 2 * Copyright (C) 2009 Google Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31#ifndef WebNotification_h 32#define WebNotification_h 33 34#include "WebCommon.h" 35#include "WebTextDirection.h" 36 37#if WEBKIT_IMPLEMENTATION 38namespace WebCore { class Notification; } 39namespace WTF { template <typename T> class PassRefPtr; } 40#endif 41 42namespace WebKit { 43 44class WebNotificationPrivate; 45class WebURL; 46class WebString; 47 48// Represents access to a desktop notification. 49class WebNotification { 50public: 51 WebNotification() : m_private(0) { } 52 WebNotification(const WebNotification& other) : m_private(0) { assign(other); } 53 54 ~WebNotification() { reset(); } 55 56 WEBKIT_API void reset(); 57 WEBKIT_API void assign(const WebNotification&); 58 59 WebNotification& operator=(const WebNotification& other) 60 { 61 assign(other); 62 return *this; 63 } 64 65 // Operators required to put WebNotification in an ordered map. 66 bool equals(const WebNotification& other) const { return m_private == other.m_private; } 67 WEBKIT_API bool lessThan(const WebNotification& other) const; 68 69 // Is the notification HTML vs. icon-title-text? 70 WEBKIT_API bool isHTML() const; 71 72 // If HTML, the URL which contains the contents of the notification. 73 WEBKIT_API WebURL url() const; 74 75 WEBKIT_API WebURL iconURL() const; 76 WEBKIT_API WebString title() const; 77 WEBKIT_API WebString body() const; 78 WEBKIT_API WebTextDirection direction() const; 79 80 WEBKIT_API WebString replaceId() const; 81 82 // Called if the presenter goes out of scope before the notification does. 83 WEBKIT_API void detachPresenter(); 84 85 // Called to indicate the notification has been displayed. 86 WEBKIT_API void dispatchDisplayEvent(); 87 88 // Called to indicate an error has occurred with this notification. 89 WEBKIT_API void dispatchErrorEvent(const WebString& errorMessage); 90 91 // Called to indicate the notification has been closed. If it was 92 // closed by the user (as opposed to automatically by the system), 93 // the byUser parameter will be true. 94 WEBKIT_API void dispatchCloseEvent(bool byUser); 95 96 // Called to indicate the notification was clicked on. 97 WEBKIT_API void dispatchClickEvent(); 98 99#if WEBKIT_IMPLEMENTATION 100 WebNotification(const WTF::PassRefPtr<WebCore::Notification>&); 101 WebNotification& operator=(const WTF::PassRefPtr<WebCore::Notification>&); 102 operator WTF::PassRefPtr<WebCore::Notification>() const; 103#endif 104 105private: 106 void assign(WebNotificationPrivate*); 107 WebNotificationPrivate* m_private; 108}; 109 110inline bool operator==(const WebNotification& a, const WebNotification& b) 111{ 112 return a.equals(b); 113} 114 115inline bool operator!=(const WebNotification& a, const WebNotification& b) 116{ 117 return !a.equals(b); 118} 119 120inline bool operator<(const WebNotification& a, const WebNotification& b) 121{ 122 return a.lessThan(b); 123} 124 125} // namespace WebKit 126 127#endif 128