Commit 0ff3a49d authored by mvanouwerkerk's avatar mvanouwerkerk Committed by Commit bot

Push service may be null and must only be used on the UI thread.

TBR=avi@chromium.org for comment-only change in content/public

Review URL: https://codereview.chromium.org/780783004

Cr-Commit-Position: refs/heads/master@{#307037}
parent 09dd7345
...@@ -206,6 +206,11 @@ void PushMessagingMessageFilter::DoPermissionStatusRequest( ...@@ -206,6 +206,11 @@ void PushMessagingMessageFilter::DoPermissionStatusRequest(
int render_frame_id, int render_frame_id,
int callback_id) { int callback_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!service()) {
Send(new PushMessagingMsg_PermissionStatusFailure(render_frame_id,
callback_id));
return;
}
blink::WebPushPermissionStatus permission_value = blink::WebPushPermissionStatus permission_value =
service()->GetPermissionStatus( service()->GetPermissionStatus(
requesting_origin, render_process_id_, render_frame_id); requesting_origin, render_process_id_, render_frame_id);
...@@ -218,6 +223,10 @@ void PushMessagingMessageFilter::GetPermissionStatusOnUI( ...@@ -218,6 +223,10 @@ void PushMessagingMessageFilter::GetPermissionStatusOnUI(
const GURL& requesting_origin, const GURL& requesting_origin,
int request_id) { int request_id) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!service()) {
Send(new PushMessagingMsg_GetPermissionStatusError(request_id));
return;
}
GURL embedding_origin = requesting_origin; GURL embedding_origin = requesting_origin;
blink::WebPushPermissionStatus permission_status = blink::WebPushPermissionStatus permission_status =
service()->GetPermissionStatus(requesting_origin, embedding_origin); service()->GetPermissionStatus(requesting_origin, embedding_origin);
...@@ -264,6 +273,7 @@ void PushMessagingMessageFilter::SendRegisterSuccess( ...@@ -264,6 +273,7 @@ void PushMessagingMessageFilter::SendRegisterSuccess(
} }
PushMessagingService* PushMessagingMessageFilter::service() { PushMessagingService* PushMessagingMessageFilter::service() {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!service_) { if (!service_) {
RenderProcessHost* process_host = RenderProcessHost* process_host =
RenderProcessHost::FromID(render_process_id_); RenderProcessHost::FromID(render_process_id_);
......
...@@ -82,6 +82,9 @@ class PushMessagingMessageFilter : public BrowserMessageFilter { ...@@ -82,6 +82,9 @@ class PushMessagingMessageFilter : public BrowserMessageFilter {
void SendRegisterSuccess(const RegisterData& data, void SendRegisterSuccess(const RegisterData& data,
const std::string& push_registration_id); const std::string& push_registration_id);
// Returns a push messaging service. The embedder owns the service, and is
// responsible for ensuring that it outlives RenderProcessHost. It's valid to
// return NULL. Must be called on the UI thread.
PushMessagingService* service(); PushMessagingService* service();
int render_process_id_; int render_process_id_;
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
namespace content { namespace content {
// A push service-agnostic interface that the Push API uses for talking to // A push service-agnostic interface that the Push API uses for talking to
// push messaging services like GCM. // push messaging services like GCM. Must only be used on the UI thread.
class CONTENT_EXPORT PushMessagingService { class CONTENT_EXPORT PushMessagingService {
public: public:
typedef base::Callback<void(const std::string& /* registration_id */, typedef base::Callback<void(const std::string& /* registration_id */,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment