// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_
#define WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_
#include <windows.h>
#include <atldef.h>
#include "base/basictypes.h"
#include "base/files/file_path.h"
#include "base/strings/string16.h"
namespace base {
class CommandLine;
}
namespace delegate_execute {
// Parses a portion of the DelegateExecute handler's command line to determine
// the desired operation. The operation type is decided by looking at the
// command line. The operations are:
// DELEGATE_EXECUTE:
// When the delegate_execute.exe is invoked by windows when a chrome
// activation via the shell, possibly using ShellExecute. Control must
// be given to ATLs WinMain.
// RELAUNCH_CHROME:
// When the delegate_execute.exe is launched by chrome, when chrome needs
// to re-launch itself. The required command line parameters are:
// --relaunch-shortcut=<PathToShortcut>
// --wait-for-mutex=<MutexNamePid>
// The PathToShortcut must be the fully qualified file name to the chrome
// shortcut that has the appId and other 'metro ready' parameters.
// The MutexNamePid is a mutex name that also encodes the process id and
// must follow the format <A>.<B>.<pid> where A and B are arbitray strings
// (usually chrome.relaunch) and pid is the process id of chrome.
class DelegateExecuteOperation {
public:
enum OperationType {
DELEGATE_EXECUTE,
RELAUNCH_CHROME,
};
DelegateExecuteOperation();
~DelegateExecuteOperation();
bool Init(const base::CommandLine* cmd_line);
OperationType operation_type() const {
return operation_type_;
}
const base::string16& relaunch_flags() const {
return relaunch_flags_;
}
const base::string16& mutex() const {
return mutex_;
}
// Returns the process id of the parent or 0 on failure.
DWORD GetParentPid() const;
const base::FilePath& shortcut() const {
return relaunch_shortcut_;
}
private:
OperationType operation_type_;
base::string16 relaunch_flags_;
base::FilePath relaunch_shortcut_;
base::string16 mutex_;
DISALLOW_COPY_AND_ASSIGN(DelegateExecuteOperation);
};
} // namespace delegate_execute
#endif // WIN8_DELEGATE_EXECUTE_DELEGATE_EXECUTE_OPERATION_H_