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 #include "win8/delegate_execute/delegate_execute_operation.h"
      6 
      7 #include "base/command_line.h"
      8 #include "base/strings/string_number_conversions.h"
      9 #include "base/strings/string_split.h"
     10 #include "base/win/windows_version.h"
     11 #include "chrome/common/chrome_switches.h"
     12 #include "win8/delegate_execute/delegate_execute_util.h"
     13 
     14 namespace delegate_execute {
     15 
     16 DelegateExecuteOperation::DelegateExecuteOperation()
     17     : operation_type_(DELEGATE_EXECUTE) {
     18 }
     19 
     20 DelegateExecuteOperation::~DelegateExecuteOperation() {
     21 }
     22 
     23 bool DelegateExecuteOperation::Init(const CommandLine* cmd_line) {
     24   if (base::win::GetVersion() >= base::win::VERSION_WIN7) {
     25     base::FilePath shortcut(
     26         cmd_line->GetSwitchValuePath(switches::kRelaunchShortcut));
     27     // On Windows 7 the command line coming in may not have a path to the
     28     // shortcut to launch Chrome. We ignore the shortcut and just do a regular
     29     // ShellExecute of chrome.exe in this case.
     30     if (shortcut.empty() &&
     31         base::win::GetVersion() >= base::win::VERSION_WIN8) {
     32       operation_type_ = DELEGATE_EXECUTE;
     33       return true;
     34     }
     35     relaunch_shortcut_ = shortcut;
     36   }
     37   mutex_ = cmd_line->GetSwitchValueNative(switches::kWaitForMutex);
     38   if (mutex_.empty())
     39     return false;
     40   // Add the mode forcing flags, if any.
     41   const char* the_switch = NULL;
     42 
     43   if (cmd_line->HasSwitch(switches::kForceDesktop))
     44     the_switch = switches::kForceDesktop;
     45   else if (cmd_line->HasSwitch(switches::kForceImmersive))
     46     the_switch = switches::kForceImmersive;
     47 
     48   relaunch_flags_ = ParametersFromSwitch(the_switch);
     49 
     50   operation_type_ = RELAUNCH_CHROME;
     51   return true;
     52 }
     53 
     54 DWORD DelegateExecuteOperation::GetParentPid() const {
     55   std::vector<base::string16> parts;
     56   base::SplitString(mutex_, L'.', &parts);
     57   if (parts.size() != 3)
     58     return 0;
     59   DWORD pid;
     60   if (!base::StringToUint(parts[2], reinterpret_cast<uint32*>(&pid)))
     61     return 0;
     62   return pid;
     63 }
     64 
     65 }  // namespace delegate_execute
     66