1// Copyright 2013 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 "cloud_print/service/win/service_utils.h"
6#include "google_apis/gaia/gaia_switches.h"
7
8#include <windows.h>
9#include <security.h>  // NOLINT
10
11#include "base/command_line.h"
12#include "base/strings/string_util.h"
13#include "chrome/common/chrome_switches.h"
14#include "components/cloud_devices/common/cloud_devices_switches.h"
15
16base::string16 GetLocalComputerName() {
17  DWORD size = 0;
18  base::string16 result;
19  ::GetComputerName(NULL, &size);
20  result.resize(size);
21  if (result.empty())
22    return result;
23  if (!::GetComputerName(&result[0], &size))
24    return base::string16();
25  result.resize(size);
26  return result;
27}
28
29base::string16 ReplaceLocalHostInName(const base::string16& user_name) {
30  static const wchar_t kLocalDomain[] = L".\\";
31  if (StartsWith(user_name, kLocalDomain, true)) {
32    return GetLocalComputerName() +
33           user_name.substr(arraysize(kLocalDomain) - 2);
34  }
35  return user_name;
36}
37
38base::string16 GetCurrentUserName() {
39  ULONG size = 0;
40  base::string16 result;
41  ::GetUserNameEx(::NameSamCompatible, NULL, &size);
42  result.resize(size);
43  if (result.empty())
44    return result;
45  if (!::GetUserNameEx(::NameSamCompatible, &result[0], &size))
46    return base::string16();
47  result.resize(size);
48  return result;
49}
50
51void CopyChromeSwitchesFromCurrentProcess(CommandLine* destination) {
52  static const char* const kSwitchesToCopy[] = {
53    switches::kCloudPrintURL,
54    switches::kCloudPrintXmppEndpoint,
55    switches::kEnableCloudPrintXps,
56    switches::kEnableLogging,
57    switches::kIgnoreUrlFetcherCertRequests,
58    switches::kLsoUrl,
59    switches::kV,
60  };
61  destination->CopySwitchesFrom(*CommandLine::ForCurrentProcess(),
62                                kSwitchesToCopy,
63                                arraysize(kSwitchesToCopy));
64}
65
66