1 /* 2 * Copyright (C) 2009 Google Inc. All rights reserved. 3 * Copyright (C) 2009 Apple Inc. All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: 8 * 9 * * Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * * Redistributions in binary form must reproduce the above 12 * copyright notice, this list of conditions and the following disclaimer 13 * in the documentation and/or other materials provided with the 14 * distribution. 15 * * Neither the name of Google Inc. nor the names of its 16 * contributors may be used to endorse or promote products derived from 17 * this software without specific prior written permission. 18 * 19 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 */ 31 32 #include "config.h" 33 34 #if ENABLE(NOTIFICATIONS) 35 36 #include "Notification.h" 37 #include "NotificationContents.h" 38 39 #include "Document.h" 40 #include "EventNames.h" 41 #include "WorkerContext.h" 42 43 namespace WebCore { 44 45 Notification::Notification(const String& url, ScriptExecutionContext* context, ExceptionCode& ec, NotificationPresenter* provider) 46 : ActiveDOMObject(context, this) 47 , m_isHTML(true) 48 , m_isShowing(false) 49 , m_presenter(provider) 50 { 51 ASSERT(m_presenter); 52 Document* document = context->isDocument() ? static_cast<Document*>(context) : 0; 53 if (m_presenter->checkPermission(context->url(), document) != NotificationPresenter::PermissionAllowed) { 54 ec = SECURITY_ERR; 55 return; 56 } 57 58 m_notificationURL = context->completeURL(url); 59 if (url.isEmpty() || !m_notificationURL.isValid()) { 60 ec = SYNTAX_ERR; 61 return; 62 } 63 } 64 65 Notification::Notification(const NotificationContents& contents, ScriptExecutionContext* context, ExceptionCode& ec, NotificationPresenter* provider) 66 : ActiveDOMObject(context, this) 67 , m_isHTML(false) 68 , m_contents(contents) 69 , m_isShowing(false) 70 , m_presenter(provider) 71 { 72 ASSERT(m_presenter); 73 Document* document = context->isDocument() ? static_cast<Document*>(context) : 0; 74 if (m_presenter->checkPermission(context->url(), document) != NotificationPresenter::PermissionAllowed) { 75 ec = SECURITY_ERR; 76 return; 77 } 78 79 KURL icon = context->completeURL(contents.icon()); 80 if (!icon.isEmpty() && !icon.isValid()) { 81 ec = SYNTAX_ERR; 82 return; 83 } 84 } 85 86 Notification::~Notification() 87 { 88 m_presenter->notificationObjectDestroyed(this); 89 } 90 91 void Notification::show() 92 { 93 // prevent double-showing 94 if (!m_isShowing) 95 m_isShowing = m_presenter->show(this); 96 } 97 98 void Notification::cancel() 99 { 100 if (m_isShowing) 101 m_presenter->cancel(this); 102 } 103 104 EventTargetData* Notification::eventTargetData() 105 { 106 return &m_eventTargetData; 107 } 108 109 EventTargetData* Notification::ensureEventTargetData() 110 { 111 return &m_eventTargetData; 112 } 113 114 } // namespace WebCore 115 116 #endif // ENABLE(NOTIFICATIONS) 117