1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef CONTENT_CHILD_PUSH_MESSAGING_PUSH_DISPATCHER_H_
6 #define CONTENT_CHILD_PUSH_MESSAGING_PUSH_DISPATCHER_H_
10 #include "base/synchronization/lock.h"
11 #include "content/child/worker_thread_message_filter.h"
15 class PushDispatcher
: public WorkerThreadMessageFilter
{
17 explicit PushDispatcher(ThreadSafeSender
* thread_safe_sender
);
19 // Generates a process-unique new request id. Stores it in a map as key to
20 // |thread_id| and returns it. This method can be called on any thread.
21 // Note that the registration requests from document contexts do not go via
22 // this class and their request ids may overlap with the ones generated here.
23 int GenerateRequestId(int thread_id
);
26 ~PushDispatcher() override
;
29 // WorkerThreadMessageFilter:
30 bool ShouldHandleMessage(const IPC::Message
& msg
) const override
;
31 void OnFilteredMessageReceived(const IPC::Message
& msg
) override
;
32 bool GetWorkerThreadIdForMessage(const IPC::Message
& msg
,
33 int* ipc_thread_id
) override
;
35 base::Lock request_id_map_lock_
;
36 std::map
<int, int> request_id_map_
; // Maps request id to thread id.
39 DISALLOW_COPY_AND_ASSIGN(PushDispatcher
);
42 } // namespace content
44 #endif // CONTENT_CHILD_PUSH_MESSAGING_PUSH_DISPATCHER_H_