Home | History | Annotate | Download | only in delegate_execute
      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 namespace base {
     16 class CommandLine;
     17 }
     18 
     19 namespace 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.
     38 class 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