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