Home | History | Annotate | Download | only in notifications
      1 /*
      2  * Copyright (C) 2013 Google Inc. All rights reserved.
      3  *
      4  * Redistribution and use in source and binary forms, with or without
      5  * modification, are permitted provided that the following conditions are
      6  * met:
      7  *
      8  *     * Redistributions of source code must retain the above copyright
      9  * notice, this list of conditions and the following disclaimer.
     10  *     * Redistributions in binary form must reproduce the above
     11  * copyright notice, this list of conditions and the following disclaimer
     12  * in the documentation and/or other materials provided with the
     13  * distribution.
     14  *     * Neither the name of Google Inc. nor the names of its
     15  * contributors may be used to endorse or promote products derived from
     16  * this software without specific prior written permission.
     17  *
     18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     19  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     20  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
     21  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     22  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
     23  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
     24  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     25  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     26  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     29  */
     30 
     31 #ifndef NotificationBase_h
     32 #define NotificationBase_h
     33 
     34 #include "bindings/v8/ScriptWrappable.h"
     35 #include "core/dom/ActiveDOMObject.h"
     36 #include "core/events/EventTarget.h"
     37 #include "modules/notifications/NotificationClient.h"
     38 #include "platform/text/TextDirection.h"
     39 #include "platform/weborigin/KURL.h"
     40 
     41 namespace WebCore {
     42 
     43 class ExecutionContext;
     44 class NotificationClient;
     45 
     46 class NotificationBase : public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData {
     47 public:
     48     virtual ~NotificationBase();
     49 
     50     // Calling show() may start asynchronous operation. If this object has
     51     // a V8 wrapper, hasPendingActivity() prevents the wrapper from being
     52     // collected while m_state is Showing, and so this instance stays alive
     53     // until the operation completes. Otherwise, you need to hold a ref on this
     54     // instance until the operation completes.
     55     void show();
     56 
     57     void close();
     58 
     59     DEFINE_ATTRIBUTE_EVENT_LISTENER(click);
     60     DEFINE_ATTRIBUTE_EVENT_LISTENER(show);
     61     DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
     62     DEFINE_ATTRIBUTE_EVENT_LISTENER(close);
     63 
     64     void dispatchShowEvent();
     65     void dispatchClickEvent();
     66     void dispatchErrorEvent();
     67     void dispatchCloseEvent();
     68 
     69     String title() const { return m_title; }
     70     String dir() const { return m_dir; }
     71     String lang() const { return m_lang; }
     72     String body() const { return m_body; }
     73     String tag() const { return m_tag; }
     74     String icon() const { return m_iconUrl; }
     75 
     76     TextDirection direction() const;
     77     KURL iconURL() const { return m_iconUrl; }
     78 
     79     // FIXME: This should be made protected once legacy notifications have been removed.
     80     void setDir(const String& dir) { m_dir = dir; }
     81 
     82     static const String& permissionString(NotificationClient::Permission);
     83 
     84     // EventTarget interface
     85     virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveDOMObject::executionContext(); }
     86     virtual bool dispatchEvent(PassRefPtr<Event>) OVERRIDE;
     87 
     88     // ActiveDOMObject interface
     89     virtual void stop() OVERRIDE;
     90     virtual bool hasPendingActivity() const OVERRIDE;
     91 
     92 protected:
     93     NotificationBase(const String& title, ExecutionContext*, NotificationClient*);
     94 
     95     void setLang(const String& lang) { m_lang = lang; }
     96     void setBody(const String& body) { m_body = body; }
     97     void setIconUrl(KURL iconUrl) { m_iconUrl = iconUrl; }
     98     void setTag(const String& tag) { m_tag = tag; }
     99 
    100 private:
    101     String m_title;
    102     String m_dir;
    103     String m_lang;
    104     String m_body;
    105     String m_tag;
    106 
    107     KURL m_iconUrl;
    108 
    109     enum NotificationState {
    110         Idle = 0,
    111         Showing = 1,
    112         Closed = 2,
    113     };
    114 
    115     NotificationState m_state;
    116 
    117     NotificationClient* m_client;
    118 };
    119 
    120 } // namespace WebCore
    121 
    122 #endif // NotificationBase_h
    123