15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#ifndef CONTENT_BROWSER_SHARED_WORKER_SHARED_WORKER_MESSAGE_FILTER_H_
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#define CONTENT_BROWSER_SHARED_WORKER_SHARED_WORKER_MESSAGE_FILTER_H_
75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
85f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "content/browser/shared_worker/worker_storage_partition.h"
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "content/common/content_export.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h"
115d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class GURL;
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)struct ViewHostMsg_CreateWorker_Params;
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace content {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class MessagePortMessageFilter;
175d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)class ResourceContext;
185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// If "enable-embedded-shared-worker" is set this class will be used instead of
205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// WorkerMessageFilter.
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class CONTENT_EXPORT SharedWorkerMessageFilter : public BrowserMessageFilter {
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) public:
235d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  SharedWorkerMessageFilter(int render_process_id,
245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            ResourceContext* resource_context,
255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            const WorkerStoragePartition& partition,
265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                            MessagePortMessageFilter* message_port_filter);
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // BrowserMessageFilter implementation.
295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual void OnChannelClosing() OVERRIDE;
30cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
315d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int GetNextRoutingID();
335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  int render_process_id() const { return render_process_id_; }
345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MessagePortMessageFilter* message_port_message_filter() const {
365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)    return message_port_message_filter_;
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  }
385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) protected:
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  // This is protected, so we can define sub classes for testing.
415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  virtual ~SharedWorkerMessageFilter();
425d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
43a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
445d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // Message handlers.
455d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnCreateWorker(const ViewHostMsg_CreateWorker_Params& params,
465d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                      int* route_id);
475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnForwardToWorker(const IPC::Message& message);
485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnDocumentDetached(unsigned long long document_id);
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnWorkerContextClosed(int worker_route_id);
505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnWorkerContextDestroyed(int worker_route_id);
5103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)
5203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)  void OnWorkerReadyForInspection(int worker_route_id);
535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnWorkerScriptLoaded(int worker_route_id);
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnWorkerScriptLoadFailed(int worker_route_id);
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnWorkerConnected(int message_port_id, int worker_route_id);
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAllowDatabase(int worker_route_id,
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       const GURL& url,
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       const base::string16& name,
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       const base::string16& display_name,
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       unsigned long estimated_size,
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                       bool* result);
62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch  void OnRequestFileSystemAccess(int worker_route_id,
63116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                 const GURL& url,
64116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                                 IPC::Message* reply_msg);
655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnAllowIndexedDB(int worker_route_id,
665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const GURL& url,
675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        const base::string16& name,
685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                        bool* result);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const int render_process_id_;
715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  ResourceContext* const resource_context_;
725d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  const WorkerStoragePartition partition_;
735d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  MessagePortMessageFilter* const message_port_message_filter_;
745d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DISALLOW_IMPLICIT_CONSTRUCTORS(SharedWorkerMessageFilter);
765d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)};
775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace content
795d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
805d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#endif  // CONTENT_BROWSER_SHARED_WORKER_SHARED_WORKER_MESSAGE_FILTER_H_
81