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