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 "chrome/common/chrome_switches.h"
     11 #include "win8/delegate_execute/delegate_execute_util.h"
     12 
     13 namespace delegate_execute {
     14 
     15 DelegateExecuteOperation::DelegateExecuteOperation()
     16     : operation_type_(DELEGATE_EXECUTE) {
     17 }
     18 
     19 DelegateExecuteOperation::~DelegateExecuteOperation() {
     20 }
     21 
     22 bool DelegateExecuteOperation::Init(const CommandLine* cmd_line) {
     23   base::FilePath shortcut(
     24       cmd_line->GetSwitchValuePath(switches::kRelaunchShortcut));
     25   if (shortcut.empty()) {
     26     operation_type_ = DELEGATE_EXECUTE;
     27     return true;
     28   }
     29   relaunch_shortcut_ = shortcut;
     30   mutex_ = cmd_line->GetSwitchValueNative(switches::kWaitForMutex);
     31   if (mutex_.empty())
     32     return false;
     33   // Add the mode forcing flags, if any.
     34   const char* the_switch = NULL;
     35 
     36   if (cmd_line->HasSwitch(switches::kForceDesktop))
     37     the_switch = switches::kForceDesktop;
     38   else if (cmd_line->HasSwitch(switches::kForceImmersive))
     39     the_switch = switches::kForceImmersive;
     40 
     41   relaunch_flags_ = ParametersFromSwitch(the_switch);
     42 
     43   operation_type_ = RELAUNCH_CHROME;
     44   return true;
     45 }
     46 
     47 DWORD DelegateExecuteOperation::GetParentPid() const {
     48   std::vector<string16> parts;
     49   base::SplitString(mutex_, L'.', &parts);
     50   if (parts.size() != 3)
     51     return 0;
     52   DWORD pid;
     53   if (!base::StringToUint(parts[2], reinterpret_cast<uint32*>(&pid)))
     54     return 0;
     55   return pid;
     56 }
     57 
     58 }  // namespace delegate_execute
     59