1e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown// Use of this source code is governed by a BSD-style license that can be
3e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown// found in the LICENSE file.
4e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
5e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#ifndef CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FLASH_FILE_MESSAGE_FILTER_H_
6e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#define CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FLASH_FILE_MESSAGE_FILTER_H_
7e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
8e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "base/callback_forward.h"
9e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "base/compiler_specific.h"
10e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "base/files/file_path.h"
11e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "base/memory/ref_counted.h"
12e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "base/process/process.h"
13e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "ppapi/c/pp_instance.h"
14e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "ppapi/host/resource_host.h"
15e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown#include "ppapi/host/resource_message_filter.h"
16e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
17e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownnamespace content {
18e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownclass BrowserPpapiHost;
19e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown}
20e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
21e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownnamespace ppapi {
22e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownclass PepperFilePath;
23e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown}
24e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
25e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownnamespace ppapi {
26e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownnamespace host {
27e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownstruct HostMessageContext;
28e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown}
29e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown}
30e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
31e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownnamespace content {
32e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
33e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownclass BrowserPpapiHost;
34e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
35e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown// All file messages are handled by BrowserThread's blocking pool.
36e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brownclass PepperFlashFileMessageFilter : public ppapi::host::ResourceMessageFilter {
37e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown public:
38e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  PepperFlashFileMessageFilter(PP_Instance instance, BrowserPpapiHost* host);
39e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
40e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  static base::FilePath GetDataDirName(const base::FilePath& profile_path);
41e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
42e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown private:
43e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  typedef base::Callback<bool(int, const base::FilePath&)>
44e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      CheckPermissionsCallback;
45e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
46e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  virtual ~PepperFlashFileMessageFilter();
47e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
48e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  // ppapi::host::ResourceMessageFilter overrides.
49e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  virtual scoped_refptr<base::TaskRunner> OverrideTaskRunnerForMessage(
50e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      const IPC::Message& msg) OVERRIDE;
51e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  virtual int32_t OnResourceMessageReceived(
52e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      const IPC::Message& msg,
53e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      ppapi::host::HostMessageContext* context) OVERRIDE;
54e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
55e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int32_t OnOpenFile(ppapi::host::HostMessageContext* context,
56e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                     const ppapi::PepperFilePath& path,
57e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                     int pp_open_flags);
58e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int32_t OnRenameFile(ppapi::host::HostMessageContext* context,
59e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                       const ppapi::PepperFilePath& from_path,
60559d0645ac8f80491671fa5d3c63e8f296f2909eJeff Brown                       const ppapi::PepperFilePath& to_path);
61559d0645ac8f80491671fa5d3c63e8f296f2909eJeff Brown  int32_t OnDeleteFileOrDir(ppapi::host::HostMessageContext* context,
62559d0645ac8f80491671fa5d3c63e8f296f2909eJeff Brown                            const ppapi::PepperFilePath& path,
63559d0645ac8f80491671fa5d3c63e8f296f2909eJeff Brown                            bool recursive);
64559d0645ac8f80491671fa5d3c63e8f296f2909eJeff Brown  int32_t OnCreateDir(ppapi::host::HostMessageContext* context,
65e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                      const ppapi::PepperFilePath& path);
66e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int32_t OnQueryFile(ppapi::host::HostMessageContext* context,
67e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                      const ppapi::PepperFilePath& path);
68e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int32_t OnGetDirContents(ppapi::host::HostMessageContext* context,
69e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown                           const ppapi::PepperFilePath& path);
70e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int32_t OnCreateTemporaryFile(ppapi::host::HostMessageContext* context);
71e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
72e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  base::FilePath ValidateAndConvertPepperFilePath(
73e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      const ppapi::PepperFilePath& pepper_path,
74e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown      const CheckPermissionsCallback& check_permissions_callback) const;
75e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
76e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  base::FilePath plugin_data_directory_;
77e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  int render_process_id_;
78e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown  base::ProcessHandle plugin_process_handle_;
79e5360fbf3efe85427f7e7f59afe7bbeddb4949acJeff Brown
8096496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown  DISALLOW_COPY_AND_ASSIGN(PepperFlashFileMessageFilter);
8196496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown};
8296496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown
8396496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown}  // namespace content
8496496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown
8596496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown#endif  // CONTENT_BROWSER_RENDERER_HOST_PEPPER_PEPPER_FLASH_FILE_MESSAGE_FILTER_H_
8696496adb611ced49ed1c2c778c616d1f8a5d0e6bJeff Brown