1// Copyright (c) 2012 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 WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_
6#define WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_
7
8#include <windows.h>
9#include <atldef.h>
10
11#include "base/basictypes.h"
12#include "base/files/file_path.h"
13#include "base/strings/string16.h"
14
15namespace base {
16class CommandLine;
17}
18
19namespace delegate_execute {
20
21// Parses a portion of the DelegateExecute handler's command line to determine
22// the desired operation. The operation type is decided by looking at the
23// command line. The operations are:
24// DELEGATE_EXECUTE:
25//   When the delegate_execute.exe is invoked by windows when a chrome
26//   activation via the shell, possibly using ShellExecute. Control must
27//   be given to ATLs WinMain.
28// RELAUNCH_CHROME:
29//   When the delegate_execute.exe is launched by chrome, when chrome needs
30//   to re-launch itself. The required command line parameters are:
31//     --relaunch-shortcut=<PathToShortcut>
32//     --wait-for-mutex=<MutexNamePid>
33//   The PathToShortcut must be the fully qualified file name to the chrome
34//   shortcut that has the appId and other 'metro ready' parameters.
35//   The MutexNamePid is a mutex name that also encodes the process id and
36//   must follow the format <A>.<B>.<pid> where A and B are arbitray strings
37//   (usually chrome.relaunch) and pid is the process id of chrome.
38class DelegateExecuteOperation {
39 public:
40  enum OperationType {
41    DELEGATE_EXECUTE,
42    RELAUNCH_CHROME,
43  };
44
45  DelegateExecuteOperation();
46  ~DelegateExecuteOperation();
47
48  bool Init(const base::CommandLine* cmd_line);
49
50  OperationType operation_type() const {
51    return operation_type_;
52  }
53
54  const base::string16& relaunch_flags() const {
55    return relaunch_flags_;
56  }
57
58  const base::string16& mutex() const {
59    return mutex_;
60  }
61
62  // Returns the process id of the parent or 0 on failure.
63  DWORD GetParentPid() const;
64
65  const base::FilePath& shortcut() const {
66    return relaunch_shortcut_;
67  }
68
69 private:
70  OperationType operation_type_;
71  base::string16 relaunch_flags_;
72  base::FilePath relaunch_shortcut_;
73  base::string16 mutex_;
74
75  DISALLOW_COPY_AND_ASSIGN(DelegateExecuteOperation);
76};
77
78}  // namespace delegate_execute
79
80#endif  // WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_
81