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