1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef CHROME_UTILITY_SHELL_HANDLER_WIN_H_
6#define CHROME_UTILITY_SHELL_HANDLER_WIN_H_
7
8#include <Windows.h>
9
10#include <vector>
11
12#include "base/compiler_specific.h"
13#include "base/macros.h"
14#include "base/strings/string16.h"
15#include "base/tuple.h"
16#include "chrome/utility/utility_message_handler.h"
17
18namespace base {
19class FilePath;
20}  // namespace base
21
22typedef std::vector<Tuple2<base::string16, base::string16> >
23    GetOpenFileNameFilter;
24
25struct ChromeUtilityMsg_GetSaveFileName_Params;
26
27// Handles requests to execute shell operations. Used to protect the browser
28// process from instability due to 3rd-party shell extensions. Must be invoked
29// in a non-sandboxed utility process.
30class ShellHandler : public UtilityMessageHandler {
31 public:
32  ShellHandler();
33  virtual ~ShellHandler();
34
35  // IPC::Listener implementation
36  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
37
38 private:
39  void OnOpenItemViaShell(const base::FilePath& full_path);
40
41  void OnGetOpenFileName(
42    HWND owner,
43    DWORD flags,
44    const GetOpenFileNameFilter& filter,
45    const base::FilePath& initial_directory,
46    const base::FilePath& filename);
47
48  void OnGetSaveFileName(const ChromeUtilityMsg_GetSaveFileName_Params& params);
49
50  DISALLOW_COPY_AND_ASSIGN(ShellHandler);
51};
52
53#endif  // CHROME_UTILITY_SHELL_HANDLER_WIN_H_
54