Home | History | Annotate | Download | only in notifications
      1 /*
      2  * Copyright (C) 2009 Google Inc. All rights reserved.
      3  * Copyright (C) 2011, 2012 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 #ifndef NotificationClient_h
     33 #define NotificationClient_h
     34 
     35 #include "core/html/VoidCallback.h"
     36 #include "modules/notifications/NotificationPermissionCallback.h"
     37 #include "wtf/PassRefPtr.h"
     38 
     39 namespace WebCore {
     40 
     41 class Document;
     42 class KURL;
     43 class Notification;
     44 class Page;
     45 class ScriptExecutionContext;
     46 
     47 class NotificationClient {
     48 
     49 public:
     50     enum Permission {
     51         PermissionAllowed, // User has allowed notifications
     52         PermissionNotAllowed, // User has not yet allowed
     53         PermissionDenied // User has explicitly denied permission
     54     };
     55 
     56     // Requests that a notification be shown.
     57     virtual bool show(Notification*) = 0;
     58 
     59     // Requests that a notification that has already been shown be canceled.
     60     virtual void cancel(Notification*) = 0;
     61 
     62     // When the user closes a page, or quits the client application, all of the page's
     63     // associated notifications are cleared.
     64     virtual void clearNotifications(ScriptExecutionContext*) { }
     65 
     66     // Informs the presenter that a Notification object has been destroyed
     67     // (such as by a page transition). The presenter may continue showing
     68     // the notification, but must not attempt to call the event handlers.
     69     virtual void notificationObjectDestroyed(Notification*) = 0;
     70 
     71     // Informs the presenter the controller attached to the page has been destroyed.
     72     virtual void notificationControllerDestroyed() = 0;
     73 
     74 #if ENABLE(LEGACY_NOTIFICATIONS)
     75     // Requests user permission to show desktop notifications from a particular
     76     // script context. The callback parameter should be run when the user has
     77     // made a decision.
     78     virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<VoidCallback>) = 0;
     79 #endif
     80 #if ENABLE(NOTIFICATIONS)
     81     virtual void requestPermission(ScriptExecutionContext*, PassRefPtr<NotificationPermissionCallback>) = 0;
     82 #endif
     83 
     84     // Cancel all outstanding requests for the ScriptExecutionContext
     85     virtual void cancelRequestsForPermission(ScriptExecutionContext*) = 0;
     86 
     87     // Checks the current level of permission.
     88     virtual Permission checkPermission(ScriptExecutionContext*) = 0;
     89 
     90 protected:
     91     virtual ~NotificationClient() { }
     92 };
     93 
     94 void provideNotification(Page*, NotificationClient*);
     95 
     96 } // namespace WebCore
     97 
     98 #endif // NotificationClient_h
     99