11e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
21e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
31e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)// found in the LICENSE file.
41e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
51e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#ifndef CONTENT_CHILD_SERVICE_WORKER_SERVICE_WORKER_MESSAGE_FILTER_H_
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#define CONTENT_CHILD_SERVICE_WORKER_SERVICE_WORKER_MESSAGE_FILTER_H_
71e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
8f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "content/child/child_message_filter.h"
91e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "content/common/content_export.h"
10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace base {
12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class MessageLoopProxy;
13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}
141e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)namespace content {
161e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
171e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class ThreadSafeSender;
186e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct ServiceWorkerObjectInfo;
1903b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)struct ServiceWorkerRegistrationObjectInfo;
206e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)struct ServiceWorkerVersionAttributes;
211e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
221e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)class CONTENT_EXPORT ServiceWorkerMessageFilter
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    : public NON_EXPORTED_BASE(ChildMessageFilter) {
241e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) public:
251e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  explicit ServiceWorkerMessageFilter(ThreadSafeSender* thread_safe_sender);
261e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
271e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) protected:
281e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  virtual ~ServiceWorkerMessageFilter();
291e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
301e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles) private:
31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  // ChildMessageFilter implementation:
32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual base::TaskRunner* OverrideTaskRunnerForMessage(
33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      const IPC::Message& msg) OVERRIDE;
34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual void OnStaleMessageReceived(const IPC::Message& msg) OVERRIDE;
36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Message handlers for stale messages.
386e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnStaleRegistered(
396e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int thread_id,
406e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int request_id,
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServiceWorkerRegistrationObjectInfo& info,
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServiceWorkerVersionAttributes& attrs);
436e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnStaleSetVersionAttributes(
446e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int thread_id,
456e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int provider_id,
466e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int registration_handle_id,
476e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int changed_mask,
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ServiceWorkerVersionAttributes& attrs);
496e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)  void OnStaleSetControllerServiceWorker(
506e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int thread_id,
516e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      int provider_id,
526e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)      const ServiceWorkerObjectInfo& info);
531e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
541e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  scoped_refptr<base::MessageLoopProxy> main_thread_loop_proxy_;
551e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  scoped_refptr<ThreadSafeSender> thread_safe_sender_;
561e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
571e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(ServiceWorkerMessageFilter);
581e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)};
591e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
601e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)}  // namespace content
611e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)
621e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#endif  // CONTENT_CHILD_SERVICE_WORKER_SERVICE_WORKER_MESSAGE_FILTER_H_
63