1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved.
2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file.
4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#ifndef CONTENT_BROWSER_PUSH_MESSAGING_MESSAGE_FILTER_H_
6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#define CONTENT_BROWSER_PUSH_MESSAGING_MESSAGE_FILTER_H_
7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include <string>
9c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/ref_counted.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "base/memory/weak_ptr.h"
12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "content/public/browser/browser_message_filter.h"
13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "content/public/common/push_messaging_status.h"
14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "url/gurl.h"
15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace content {
17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class PushMessagingService;
19116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ServiceWorkerContextWrapper;
20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass PushMessagingMessageFilter : public BrowserMessageFilter {
22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
23116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PushMessagingMessageFilter(
24116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      int render_process_id,
25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      ServiceWorkerContextWrapper* service_worker_context);
26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private:
28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~PushMessagingMessageFilter();
29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // BrowserMessageFilter implementation.
31cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnRegister(int render_frame_id,
34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                  int callbacks_id,
35116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  const std::string& sender_id,
36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  bool user_gesture,
37116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  int service_worker_provider_id);
38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
39116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DoRegister(int render_frame_id,
40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                  int callbacks_id,
41116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  const std::string& sender_id,
42116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  bool user_gesture,
43116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  const GURL& origin,
44116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                  int64 service_worker_registration_id);
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
46116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void DidRegister(int render_frame_id,
47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch                   int callbacks_id,
48116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   const GURL& push_endpoint,
49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   const std::string& push_registration_id,
50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                   PushMessagingStatus status);
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  PushMessagingService* service();
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  int render_process_id_;
55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch
57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  // Owned by the content embedder's browsing context.
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  PushMessagingService* service_;
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  base::WeakPtrFactory<PushMessagingMessageFilter> weak_factory_;
61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  DISALLOW_COPY_AND_ASSIGN(PushMessagingMessageFilter);
63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch};
64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}  // namespace content
66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#endif  // CONTENT_BROWSER_PUSH_MESSAGING_MESSAGE_FILTER_H_
68