1635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project/* 2dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2009 Google Inc. All rights reserved. 3dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block * Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies) 48f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 5635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * Redistribution and use in source and binary forms, with or without 6635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * modification, are permitted provided that the following conditions are 7635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * met: 88f72e70a9fd78eec56623b3a62e68f16b7b27e28Feng Qian * 9635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions of source code must retain the above copyright 10635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * notice, this list of conditions and the following disclaimer. 11635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Redistributions in binary form must reproduce the above 12635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * copyright notice, this list of conditions and the following disclaimer 13635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * in the documentation and/or other materials provided with the 14635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * distribution. 15635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * * Neither the name of Google Inc. nor the names of its 16635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * contributors may be used to endorse or promote products derived from 17635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * this software without specific prior written permission. 18d0825bca7fe65beaee391d30da42e937db621564Steve Block * 19635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project */ 31635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 325af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#ifndef NotificationPresenterClientQt_h 335af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#define NotificationPresenterClientQt_h 345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 35dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "Notification.h" 36dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include "NotificationPresenter.h" 37545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "QtPlatformPlugin.h" 38545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "Timer.h" 39545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 40545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#include "qwebkitplatformplugin.h" 415e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 425af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#include <QMultiHash> 43dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#include <QSystemTrayIcon> 44635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 450617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass QWebFrame; 460617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenclass QWebPage; 470617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 48635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectnamespace WebCore { 49545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 50dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass Document; 516b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brennerclass Frame; 52e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarkeclass ScriptExecutionContext; 53dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 5406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenclass NotificationWrapper : public QObject, public QWebNotificationData { 55545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch Q_OBJECT 56545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochpublic: 5706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NotificationWrapper(); 5806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen ~NotificationWrapper() {} 59545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 60545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void close(); 6106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void close(Timer<NotificationWrapper>*); 62545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch const QString title() const; 63545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch const QString message() const; 64545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch const QByteArray iconData() const; 6568513a70bcd92384395513322f1b801e7bf9c729Steve Block const QUrl openerPageUrl() const; 66545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 67545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochpublic Q_SLOTS: 68545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void notificationClosed(); 6968513a70bcd92384395513322f1b801e7bf9c729Steve Block void notificationClicked(); 70545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 71545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdochpublic: 725af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#ifndef QT_NO_SYSTEMTRAYICON 73545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch OwnPtr<QSystemTrayIcon> m_notificationIcon; 745af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke#endif 75545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 76545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch OwnPtr<QWebNotificationPresenter> m_presenter; 7706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Timer<NotificationWrapper> m_closeTimer; 785af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke}; 795af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 80545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#if ENABLE(NOTIFICATIONS) 81545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 8206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsentypedef QHash <Notification*, NotificationWrapper*> NotificationsQueue; 83545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 84dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockclass NotificationPresenterClientQt : public NotificationPresenter { 85dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockpublic: 86545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch NotificationPresenterClientQt(); 87545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch ~NotificationPresenterClientQt(); 88dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 89dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block /* WebCore::NotificationPresenter interface */ 90dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual bool show(Notification*); 91dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void cancel(Notification*); 92dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block virtual void notificationObjectDestroyed(Notification*); 93e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>); 94e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke virtual NotificationPresenter::Permission checkPermission(ScriptExecutionContext*); 95e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke virtual void cancelRequestsForPermission(ScriptExecutionContext*); 96dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 9706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen void cancel(NotificationWrapper*); 98545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 996b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner void allowNotificationForFrame(Frame*); 1005af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 1016c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen static bool dumpNotification; 1026c2af9490927c3c5959b5cb07461b646f8b32f6cKristian Monsen 103545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void addClient() { m_clientCount++; } 104545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void removeClient(); 105545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch static NotificationPresenterClientQt* notificationPresenter(); 106545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 10706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen Notification* notificationForWrapper(const NotificationWrapper*) const; 10868513a70bcd92384395513322f1b801e7bf9c729Steve Block void notificationClicked(NotificationWrapper*); 10968513a70bcd92384395513322f1b801e7bf9c729Steve Block void notificationClicked(const QString& title); 110545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 1115af96e2c7b73ebc627c6894727826a7576d31758Leon Clarkeprivate: 1125af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke void sendEvent(Notification*, const AtomicString& eventName); 113545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void displayNotification(Notification*, const QByteArray&); 114545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void removeReplacedNotificationFromQueue(Notification*); 115545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void detachNotification(Notification*); 116545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void dumpReplacedIdText(Notification*); 117545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch void dumpShowText(Notification*); 1180617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen QWebPage* toPage(ScriptExecutionContext*); 1190617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen QWebFrame* toFrame(ScriptExecutionContext*); 120545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 121545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch int m_clientCount; 1220617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen struct CallbacksInfo { 1230617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen QWebFrame* m_frame; 1240617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen QList<RefPtr<VoidCallback> > m_callbacks; 1250617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen }; 1260617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen QHash<ScriptExecutionContext*, CallbacksInfo > m_pendingPermissionRequests; 1276b70adc33054f8aee8c54d0f460458a9df11b8a5Russell Brenner QHash<ScriptExecutionContext*, NotificationPresenter::Permission> m_cachedPermissions; 1280617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsen 129545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch NotificationsQueue m_notifications; 130545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch QtPlatformPlugin m_platformPlugin; 131dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block}; 132635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 1335e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#endif 1345af96e2c7b73ebc627c6894727826a7576d31758Leon Clarke 135545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch} 136545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch 137545e470e52f0ac6a3a072bf559c796b42c6066b6Ben Murdoch#endif 138