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 #include "config.h" 32 #include "WebNotification.h" 33 34 #if ENABLE(NOTIFICATIONS) 35 36 #include "Notification.h" 37 38 #include "WebString.h" 39 #include "WebURL.h" 40 41 #include <wtf/PassRefPtr.h> 42 43 using namespace WebCore; 44 45 namespace WebKit { 46 47 class WebNotificationPrivate : public Notification { 48 }; 49 50 void WebNotification::reset() 51 { 52 assign(0); 53 } 54 55 void WebNotification::assign(const WebNotification& other) 56 { 57 WebNotificationPrivate* p = const_cast<WebNotificationPrivate*>(other.m_private); 58 if (p) 59 p->ref(); 60 assign(p); 61 } 62 63 bool WebNotification::lessThan(const WebNotification& other) const 64 { 65 return reinterpret_cast<uintptr_t>(m_private) < reinterpret_cast<uintptr_t>(other.m_private); 66 } 67 68 bool WebNotification::isHTML() const 69 { 70 return m_private->isHTML(); 71 } 72 73 WebURL WebNotification::url() const 74 { 75 ASSERT(isHTML()); 76 return m_private->url(); 77 } 78 79 WebString WebNotification::icon() const 80 { 81 ASSERT(!isHTML()); 82 return m_private->contents().icon(); 83 } 84 85 WebString WebNotification::title() const 86 { 87 ASSERT(!isHTML()); 88 return m_private->contents().title(); 89 } 90 91 WebString WebNotification::body() const 92 { 93 ASSERT(!isHTML()); 94 return m_private->contents().body(); 95 } 96 97 void WebNotification::dispatchDisplayEvent() 98 { 99 RefPtr<Event> event = Event::create("display", false, true); 100 m_private->dispatchEvent(event.release()); 101 } 102 103 void WebNotification::dispatchErrorEvent(const WebKit::WebString& /* errorMessage */) 104 { 105 // FIXME: errorMessage not supported by WebCore yet 106 RefPtr<Event> event = Event::create(eventNames().errorEvent, false, true); 107 m_private->dispatchEvent(event.release()); 108 } 109 110 void WebNotification::dispatchCloseEvent(bool /* byUser */) 111 { 112 // FIXME: byUser flag not supported by WebCore yet 113 RefPtr<Event> event = Event::create(eventNames().closeEvent, false, true); 114 m_private->dispatchEvent(event.release()); 115 } 116 117 WebNotification::WebNotification(const WTF::PassRefPtr<Notification>& notification) 118 : m_private(static_cast<WebNotificationPrivate*>(notification.releaseRef())) 119 { 120 } 121 122 WebNotification& WebNotification::operator=(const WTF::PassRefPtr<Notification>& notification) 123 { 124 assign(static_cast<WebNotificationPrivate*>(notification.releaseRef())); 125 return *this; 126 } 127 128 WebNotification::operator WTF::PassRefPtr<Notification>() const 129 { 130 return WTF::PassRefPtr<Notification>(const_cast<WebNotificationPrivate*>(m_private)); 131 } 132 133 void WebNotification::assign(WebNotificationPrivate* p) 134 { 135 // p is already ref'd for us by the caller 136 if (m_private) 137 m_private->deref(); 138 m_private = p; 139 } 140 141 } // namespace WebKit 142 143 #endif // ENABLE(NOTIFICATIONS) 144