1231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block/* 2231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Copyright (C) 2009 Apple Inc. All rights reserved. 4231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 5231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * Redistribution and use in source and binary forms, with or without 6231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * modification, are permitted provided that the following conditions are 7231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * met: 8231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 9231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Redistributions of source code must retain the above copyright 10231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * notice, this list of conditions and the following disclaimer. 11231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Redistributions in binary form must reproduce the above 12231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * copyright notice, this list of conditions and the following disclaimer 13231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * in the documentation and/or other materials provided with the 14231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * distribution. 15231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * * Neither the name of Google Inc. nor the names of its 16231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * contributors may be used to endorse or promote products derived from 17231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * this software without specific prior written permission. 18231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * 19231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block */ 31231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 32231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#ifndef Notification_h 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#define Notification_h 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "ActiveDOMObject.h" 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Event.h" 37231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventListener.h" 38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventNames.h" 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventTarget.h" 40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "ExceptionCode.h" 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "KURL.h" 42231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "NotificationPresenter.h" 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "NotificationContents.h" 44231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "RegisteredEventListener.h" 45545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "SharedBuffer.h" 4606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#include "TextDirection.h" 47545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ThreadableLoader.h" 48545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ThreadableLoaderClient.h" 49231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/OwnPtr.h> 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/PassRefPtr.h> 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/RefCounted.h> 52231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include <wtf/RefPtr.h> 53f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/text/AtomicStringHash.h> 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 55231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS) 56231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocknamespace WebCore { 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 58e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block class NotificationCenter; 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block class WorkerContext; 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 61545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch class Notification : public RefCounted<Notification>, public ActiveDOMObject, public ThreadableLoaderClient, public EventTarget { 62ab9e7a118cf1ea2e3a93dce683b2ded3e7291ddbBen Murdoch WTF_MAKE_FAST_ALLOCATED; 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block public: 64e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block static PassRefPtr<Notification> create(const KURL& url, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider); 65e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block static PassRefPtr<Notification> create(const NotificationContents& contents, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider); 66231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual ~Notification(); 68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 69231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void show(); 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block void cancel(); 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool isHTML() { return m_isHTML; } 73231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block KURL url() { return m_notificationURL; } 74dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block KURL iconURL() { return m_contents.icon(); } 75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NotificationContents& contents() { return m_contents; } 76231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 775af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke String dir() const { return m_direction; } 785af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke void setDir(const String& dir) { m_direction = dir; } 795af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke String replaceId() const { return m_replaceId; } 805af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke void setReplaceId(const String& replaceId) { m_replaceId = replaceId; } 815af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 8206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen TextDirection direction() const { return dir() == "rtl" ? RTL : LTR; } 8306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block DEFINE_ATTRIBUTE_EVENT_LISTENER(display); 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block DEFINE_ATTRIBUTE_EVENT_LISTENER(error); 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block DEFINE_ATTRIBUTE_EVENT_LISTENER(close); 875ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen DEFINE_ATTRIBUTE_EVENT_LISTENER(click); 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block using RefCounted<Notification>::ref; 90231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block using RefCounted<Notification>::deref; 91231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 92231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // EventTarget interface 93231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual ScriptExecutionContext* scriptExecutionContext() const { return ActiveDOMObject::scriptExecutionContext(); } 94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual Notification* toNotification() { return this; } 95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 9606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // ActiveDOMObject interface 9706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen virtual void contextDestroyed(); 9806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 99545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void stopLoading(); 100545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 101545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch SharedBuffer* iconData() { return m_iconData.get(); } 102545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void releaseIconData() { m_iconData = 0; } 103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block // Deprecated. Use functions from NotificationCenter. 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block void detachPresenter() { } 106545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 107545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void didReceiveResponse(const ResourceResponse&); 1082daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch virtual void didReceiveData(const char* data, int dataLength); 10981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch virtual void didFinishLoading(unsigned long identifier, double finishTime); 110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void didFail(const ResourceError&); 111545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void didFailRedirectCheck(); 112545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch virtual void didReceiveAuthenticationCancellation(const ResourceResponse&); 113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 114231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block private: 115e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block Notification(const KURL&, ScriptExecutionContext*, ExceptionCode&, PassRefPtr<NotificationCenter>); 116e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block Notification(const NotificationContents&, ScriptExecutionContext*, ExceptionCode&, PassRefPtr<NotificationCenter>); 117231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 118231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // EventTarget interface 119231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual void refEventTarget() { ref(); } 120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual void derefEventTarget() { deref(); } 121231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual EventTargetData* eventTargetData(); 122231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block virtual EventTargetData* ensureEventTargetData(); 123231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 124545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void startLoading(); 125545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void finishLoading(); 126545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block bool m_isHTML; 128231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block KURL m_notificationURL; 129231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block NotificationContents m_contents; 130231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 1315af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke String m_direction; 1325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke String m_replaceId; 133545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 134545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch enum NotificationState { 135545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Idle = 0, 136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Loading = 1, 137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Showing = 2, 138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Cancelled = 3 139545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch }; 140545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 141545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch NotificationState m_state; 142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 143e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block RefPtr<NotificationCenter> m_notificationCenter; 144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block EventTargetData m_eventTargetData; 146545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 147545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch RefPtr<ThreadableLoader> m_loader; 148545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch RefPtr<SharedBuffer> m_iconData; 149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block }; 150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} // namespace WebCore 152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(NOTIFICATIONS) 154231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 155231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // Notifications_h 156