Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: Source/modules/notifications/Notification.h

Issue 73993003: Make Notification override hasPendingActivity() to prolong its lifetime while async op is running (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Call stop() Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | Source/modules/notifications/Notification.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2009 Google Inc. All rights reserved. 2 * Copyright (C) 2009 Google Inc. All rights reserved.
3 * Copyright (C) 2009, 2011, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2009, 2011, 2012 Apple Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are 6 * modification, are permitted provided that the following conditions are
7 * met: 7 * met:
8 * 8 *
9 * * Redistributions of source code must retain the above copyright 9 * * Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 REFCOUNTED_EVENT_TARGET(Notification); 64 REFCOUNTED_EVENT_TARGET(Notification);
65 public: 65 public:
66 Notification(); 66 Notification();
67 #if ENABLE(LEGACY_NOTIFICATIONS) 67 #if ENABLE(LEGACY_NOTIFICATIONS)
68 static PassRefPtr<Notification> create(const String& title, const String& bo dy, const String& iconURI, ExecutionContext*, ExceptionState&, PassRefPtr<Notifi cationCenter> provider); 68 static PassRefPtr<Notification> create(const String& title, const String& bo dy, const String& iconURI, ExecutionContext*, ExceptionState&, PassRefPtr<Notifi cationCenter> provider);
69 #endif 69 #endif
70 static PassRefPtr<Notification> create(ExecutionContext*, const String& titl e, const Dictionary& options); 70 static PassRefPtr<Notification> create(ExecutionContext*, const String& titl e, const Dictionary& options);
71 71
72 virtual ~Notification(); 72 virtual ~Notification();
73 73
74 // Calling show() may start asynchronous operation. If this object has
75 // a V8 wrapper, hasPendingActivity() prevents the wrapper from being
76 // collected while m_state is Showing, and so this instance stays alive
77 // until the operation completes. Otherwise, you need to hold a ref on this
78 // instance until the operation completes.
74 void show(); 79 void show();
75 #if ENABLE(LEGACY_NOTIFICATIONS) 80 #if ENABLE(LEGACY_NOTIFICATIONS)
76 void cancel() { close(); } 81 void cancel() { close(); }
77 #endif 82 #endif
78 void close(); 83 void close();
79 84
80 String title() const { return m_title; } 85 String title() const { return m_title; }
81 String dir() const { return m_direction; } 86 String dir() const { return m_direction; }
82 String lang() const { return m_lang; } 87 String lang() const { return m_lang; }
83 String body() const { return m_body; } 88 String body() const { return m_body; }
(...skipping 25 matching lines...) Expand all
109 void dispatchShowEvent(); 114 void dispatchShowEvent();
110 void dispatchErrorEvent(); 115 void dispatchErrorEvent();
111 void dispatchCloseEvent(); 116 void dispatchCloseEvent();
112 117
113 // EventTarget interface 118 // EventTarget interface
114 virtual const AtomicString& interfaceName() const OVERRIDE; 119 virtual const AtomicString& interfaceName() const OVERRIDE;
115 virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveD OMObject::executionContext(); } 120 virtual ExecutionContext* executionContext() const OVERRIDE { return ActiveD OMObject::executionContext(); }
116 virtual bool dispatchEvent(PassRefPtr<Event>) OVERRIDE; 121 virtual bool dispatchEvent(PassRefPtr<Event>) OVERRIDE;
117 122
118 // ActiveDOMObject interface 123 // ActiveDOMObject interface
124 // Override to prevent this from being collected when in Showing state.
125 virtual bool hasPendingActivity() const OVERRIDE;
119 virtual void stop() OVERRIDE; 126 virtual void stop() OVERRIDE;
120 127
121 static const String& permission(ExecutionContext*); 128 static const String& permission(ExecutionContext*);
122 static const String& permissionString(NotificationClient::Permission); 129 static const String& permissionString(NotificationClient::Permission);
123 static void requestPermission(ExecutionContext*, PassRefPtr<NotificationPerm issionCallback> = 0); 130 static void requestPermission(ExecutionContext*, PassRefPtr<NotificationPerm issionCallback> = 0);
124 131
125 private: 132 private:
126 #if ENABLE(LEGACY_NOTIFICATIONS) 133 #if ENABLE(LEGACY_NOTIFICATIONS)
127 Notification(const String& title, const String& body, const String& iconURI, ExecutionContext*, ExceptionState&, PassRefPtr<NotificationCenter>); 134 Notification(const String& title, const String& body, const String& iconURI, ExecutionContext*, ExceptionState&, PassRefPtr<NotificationCenter>);
128 #endif 135 #endif
129 Notification(ExecutionContext*, const String& title); 136 Notification(ExecutionContext*, const String& title);
130 137
131 void finalize();
132
133 void setLang(const String& lang) { m_lang = lang; } 138 void setLang(const String& lang) { m_lang = lang; }
134 void setBody(const String& body) { m_body = body; } 139 void setBody(const String& body) { m_body = body; }
135 void setIcon(const KURL& url) { m_icon = url; } 140 void setIcon(const KURL& url) { m_icon = url; }
136 141
137 void showSoon(); 142 void showSoon();
138 143
139 // Text notifications. 144 // Text notifications.
140 KURL m_icon; 145 KURL m_icon;
141 String m_title; 146 String m_title;
142 String m_body; 147 String m_body;
(...skipping 11 matching lines...) Expand all
154 NotificationState m_state; 159 NotificationState m_state;
155 160
156 NotificationClient* m_notificationClient; 161 NotificationClient* m_notificationClient;
157 162
158 OwnPtr<AsyncMethodRunner<Notification> > m_asyncRunner; 163 OwnPtr<AsyncMethodRunner<Notification> > m_asyncRunner;
159 }; 164 };
160 165
161 } // namespace WebCore 166 } // namespace WebCore
162 167
163 #endif // Notifications_h 168 #endif // Notifications_h
OLDNEW
« no previous file with comments | « no previous file | Source/modules/notifications/Notification.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698