15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/get_session_name.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/bind_helpers.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/callback.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/location.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string_util.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/sys_info.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/task_runner.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
151e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#if defined(OS_LINUX)
16b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "sync/util/get_session_name_linux.h"
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_IOS)
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "sync/util/get_session_name_ios.h"
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/get_session_name_mac.h"
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "sync/util/get_session_name_win.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/android/build_info.h"
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace syncer {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetSessionNameSynchronously() {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string session_name;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#if defined(OS_CHROMEOS)
341e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)  std::string board = base::SysInfo::GetLsbReleaseBoard();
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Currently, only "stumpy" type of board is considered Chromebox, and
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // anything else is Chromebook.  On these devices, session_name should look
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // like "stumpy-signed-mp-v2keys" etc. The information can be checked on
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // "CHROMEOS_RELEASE_BOARD" line in chrome://system.
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  session_name = board.substr(0, 6) == "stumpy" ? "Chromebox" : "Chromebook";
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_LINUX)
41b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)  session_name = internal::GetHostname();
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_IOS)
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  session_name = internal::GetComputerName();
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_MACOSX)
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  session_name = internal::GetHardwareModelName();
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_WIN)
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  session_name = internal::GetComputerName();
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#elif defined(OS_ANDROID)
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  base::android::BuildInfo* android_build_info =
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      base::android::BuildInfo::GetInstance();
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  session_name = android_build_info->model();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (session_name == "Unknown" || session_name.empty())
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    session_name = base::SysInfo::OperatingSystemName();
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DCHECK(base::IsStringUTF8(session_name));
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return session_name;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void FillSessionName(std::string* session_name) {
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  *session_name = GetSessionNameSynchronously();
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OnSessionNameFilled(
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Callback<void(const std::string&)>& done_callback,
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    std::string* session_name) {
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  done_callback.Run(*session_name);
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetSessionName(
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const scoped_refptr<base::TaskRunner>& task_runner,
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const base::Callback<void(const std::string&)>& done_callback) {
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::string* session_name = new std::string();
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  task_runner->PostTaskAndReply(
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      FROM_HERE,
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&FillSessionName,
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Unretained(session_name)),
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      base::Bind(&OnSessionNameFilled,
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 done_callback,
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                 base::Owned(session_name)));
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)std::string GetSessionNameSynchronouslyForTesting() {
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return GetSessionNameSynchronously();
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace syncer
91