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#include "config.h" 33231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 34231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#if ENABLE(NOTIFICATIONS) 35231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 36231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Notification.h" 37e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block#include "NotificationCenter.h" 38231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "NotificationContents.h" 39231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 40231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "Document.h" 41231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#include "EventNames.h" 42545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ResourceRequest.h" 43545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ResourceResponse.h" 44545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "ThreadableLoader.h" 45d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "WorkerContext.h" 46231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 47231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blocknamespace WebCore { 48231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 49e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockNotification::Notification(const KURL& url, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 50231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block : ActiveDOMObject(context, this) 51231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_isHTML(true) 52545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch , m_state(Idle) 53e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_notificationCenter(provider) 54231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 55e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT(m_notificationCenter->presenter()); 56e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter()->checkPermission(context) != NotificationPresenter::PermissionAllowed) { 57231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ec = SECURITY_ERR; 58231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 59231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 60231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 61dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (url.isEmpty() || !url.isValid()) { 62231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ec = SYNTAX_ERR; 63231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 64231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 65dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 66dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block m_notificationURL = url; 67231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 68231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 69e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockNotification::Notification(const NotificationContents& contents, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 70231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block : ActiveDOMObject(context, this) 71231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_isHTML(false) 72231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block , m_contents(contents) 73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch , m_state(Idle) 74e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block , m_notificationCenter(provider) 75231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 76e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block ASSERT(m_notificationCenter->presenter()); 77e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter()->checkPermission(context) != NotificationPresenter::PermissionAllowed) { 78231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ec = SECURITY_ERR; 79231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 80231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 81dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 82dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (!contents.icon().isEmpty() && !contents.icon().isValid()) { 83231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block ec = SYNTAX_ERR; 84231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return; 85231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block } 86231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 87231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 88231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockNotification::~Notification() 89231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 90545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_state == Loading) { 91545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ASSERT_NOT_REACHED(); 92545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch cancel(); 93545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 94231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 95231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 96e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockPassRefPtr<Notification> Notification::create(const KURL& url, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 97e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 98e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return adoptRef(new Notification(url, context, ec, provider)); 99e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 100e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 101e8b154fd68f9b33be40a3590e58347f353835f5cSteve BlockPassRefPtr<Notification> Notification::create(const NotificationContents& contents, ScriptExecutionContext* context, ExceptionCode& ec, PassRefPtr<NotificationCenter> provider) 102e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block{ 103e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block return adoptRef(new Notification(contents, context, ec, provider)); 104e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block} 105e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block 106231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Notification::show() 107231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 108545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if PLATFORM(QT) 109545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (iconURL().isEmpty()) { 110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // Set the state before actually showing, because 111545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch // handling of ondisplay may rely on that. 112545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_state == Idle) { 113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_state = Showing; 114e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter()) 115e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_notificationCenter->presenter()->show(this); 116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } else 118545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch startLoading(); 119545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#else 120231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block // prevent double-showing 121e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_state == Idle && m_notificationCenter->presenter() && m_notificationCenter->presenter()->show(this)) 122545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_state = Showing; 123545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif 124231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 125231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 126231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid Notification::cancel() 127231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 128545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch switch (m_state) { 129545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch case Idle: 130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch break; 131545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch case Loading: 132545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_state = Cancelled; 133545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch stopLoading(); 134545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch break; 135545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch case Showing: 136e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter()) 137e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_notificationCenter->presenter()->cancel(this); 138545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch break; 139545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch case Cancelled: 140545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch break; 141545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 142231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 143231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 144231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockEventTargetData* Notification::eventTargetData() 145231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 146231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return &m_eventTargetData; 147231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 148231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 149231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve BlockEventTargetData* Notification::ensureEventTargetData() 150231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 151231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block return &m_eventTargetData; 152231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 153231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 15406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid Notification::contextDestroyed() 15506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 15606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen ActiveDOMObject::contextDestroyed(); 157e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter()) 158e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block m_notificationCenter->presenter()->notificationObjectDestroyed(this); 15906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 160545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 161545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::startLoading() 162545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 163545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_state != Idle) 164545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return; 165545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch setPendingActivity(this); 166545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_state = Loading; 167545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ThreadableLoaderOptions options; 168545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch options.sendLoadCallbacks = false; 169545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch options.sniffContent = false; 170545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch options.forcePreflight = false; 171545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch options.allowCredentials = AllowStoredCredentials; 172545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch options.crossOriginRequestPolicy = AllowCrossOriginRequests; 173545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_loader = ThreadableLoader::create(scriptExecutionContext(), this, ResourceRequest(iconURL()), options); 174545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 175545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 176545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::stopLoading() 177545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 178545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_iconData = 0; 179545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch RefPtr<ThreadableLoader> protect(m_loader); 180545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_loader->cancel(); 181545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 182545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 183545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::didReceiveResponse(const ResourceResponse& response) 184545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 185545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int status = response.httpStatusCode(); 186545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (status && (status < 200 || status > 299)) { 187545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch stopLoading(); 188545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch return; 189545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 190545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_iconData = SharedBuffer::create(); 191545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 192545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 1932daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdochvoid Notification::didReceiveData(const char* data, int dataLength) 194545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 1952daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch m_iconData->append(data, dataLength); 196545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 197545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 19881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid Notification::didFinishLoading(unsigned long, double) 199545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 200545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch finishLoading(); 201545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 202545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 203545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::didFail(const ResourceError&) 204545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 205545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch finishLoading(); 206545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 207545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 208545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::didFailRedirectCheck() 209545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 210545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch finishLoading(); 211545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 212545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 213545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::didReceiveAuthenticationCancellation(const ResourceResponse&) 214545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 215545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch finishLoading(); 216545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 217545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 218545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochvoid Notification::finishLoading() 219545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch{ 220545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch if (m_state == Loading) { 221e8b154fd68f9b33be40a3590e58347f353835f5cSteve Block if (m_notificationCenter->presenter() && m_notificationCenter->presenter()->show(this)) 222545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch m_state = Showing; 223545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch } 224545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch unsetPendingActivity(this); 225545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 226545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 227231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} // namespace WebCore 228231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 229231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block#endif // ENABLE(NOTIFICATIONS) 230