17d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
27d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
37d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// found in the LICENSE file.
47d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#ifndef COMPONENTS_NACL_BROWSER_NACL_HOST_MESSAGE_FILTER_H_
6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#define COMPONENTS_NACL_BROWSER_NACL_HOST_MESSAGE_FILTER_H_
77d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/files/file.h"
9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/files/file_path.h"
107d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "base/memory/weak_ptr.h"
117d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/browser_message_filter.h"
126d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "ppapi/shared_impl/ppapi_permissions.h"
137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class GURL;
157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
167d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace nacl {
177d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)struct NaClLaunchParams;
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct PnaclCacheInfo;
197d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
207d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
217d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)namespace net {
227d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class HostResolver;
237d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class URLRequestContextGetter;
247d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)}
257d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace nacl {
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
287d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// This class filters out incoming Chrome-specific IPC messages for the renderer
297d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)// process on the IPC thread.
307d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)class NaClHostMessageFilter : public content::BrowserMessageFilter {
317d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) public:
327d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  NaClHostMessageFilter(int render_process_id,
33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        bool is_off_the_record,
34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                        const base::FilePath& profile_directory,
357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                        net::URLRequestContextGetter* request_context);
367d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
377d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  // content::BrowserMessageFilter methods:
38cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
39ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  virtual void OnChannelClosing() OVERRIDE;
407d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
417d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int render_process_id() { return render_process_id_; }
427d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool off_the_record() { return off_the_record_; }
43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)  const base::FilePath& profile_directory() const { return profile_directory_; }
447d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  net::HostResolver* GetHostResolver();
457d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
467d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) private:
477d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  friend class content::BrowserThread;
487d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  friend class base::DeleteHelper<NaClHostMessageFilter>;
497d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
507d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  virtual ~NaClHostMessageFilter();
517d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  void OnLaunchNaCl(const NaClLaunchParams& launch_params,
537d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                    IPC::Message* reply_msg);
546d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)  void LaunchNaClContinuation(const nacl::NaClLaunchParams& launch_params,
556d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                              IPC::Message* reply_msg,
566d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)                              ppapi::PpapiPermissions permissions);
577d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void OnGetReadonlyPnaclFd(const std::string& filename,
58116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch                            bool is_executable,
597d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            IPC::Message* reply_msg);
607d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void OnNaClCreateTemporaryFile(IPC::Message* reply_msg);
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  void OnNaClGetNumProcessors(int* num_processors);
62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void OnGetNexeFd(int render_view_id,
63ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                   int pp_instance,
64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)                   const PnaclCacheInfo& cache_info);
65bb1529ce867d8845a77ec7cdf3e3003ef1771a40Ben Murdoch  void OnTranslationFinished(int instance, bool success);
66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void OnMissingArchError(int render_view_id);
677d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  void OnOpenNaClExecutable(int render_view_id,
687d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            const GURL& file_url,
697d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                            IPC::Message* reply_msg);
707dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  void SyncReturnTemporaryFile(IPC::Message* reply_msg,
71a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                               base::File file);
72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  void AsyncReturnTemporaryFile(int pp_instance,
7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)                                const base::File& file,
74ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch                                bool is_hit);
75effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void OnNaClDebugEnabledForURL(const GURL& nmf_url, bool* should_debug);
76effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch
777d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  int render_process_id_;
787d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
79eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // off_the_record_ is copied from the profile partly so that it can be
80eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  // read on the IO thread.
817d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  bool off_the_record_;
82eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  base::FilePath profile_directory_;
837d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  scoped_refptr<net::URLRequestContextGetter> request_context_;
847d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
857d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  base::WeakPtrFactory<NaClHostMessageFilter> weak_ptr_factory_;
867d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
877d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(NaClHostMessageFilter);
887d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)};
897d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)
90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}  // namespace nacl
91f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
92f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif  // COMPONENTS_NACL_BROWSER_NACL_HOST_MESSAGE_FILTER_H_
93