Commit 95db8a50 authored by Jimmy Xu's avatar Jimmy Xu Committed by Commit Bot

Read sys info from json file if provided for virtual chromecast devices.

Virtual devices will have meaningful sys info.

Bug: b/157480110
Change-Id: I440922cb551b8b4342e1781d43fe18bfef5392a7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2231904Reviewed-by: default avatarLuke Halliwell (slow) <halliwell@chromium.org>
Commit-Queue: Jimmy Xu <jimmyxu@google.com>
Cr-Commit-Position: refs/heads/master@{#776824}
parent b910c2fc
...@@ -244,7 +244,10 @@ if (is_android) { ...@@ -244,7 +244,10 @@ if (is_android) {
deps = [ deps = [
":cast_sys_info_util", ":cast_sys_info_util",
":chromecast_switches",
":dummy_cast_sys_info", ":dummy_cast_sys_info",
":init_shlib",
"//base",
"//chromecast/public", "//chromecast/public",
] ]
} }
......
...@@ -4,8 +4,39 @@ ...@@ -4,8 +4,39 @@
#include "chromecast/base/cast_sys_info_dummy.h" #include "chromecast/base/cast_sys_info_dummy.h"
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/json/json_reader.h"
#include "base/logging.h"
namespace chromecast { namespace chromecast {
namespace {
const char kJsonKeyProductName[] = "product_name";
const char kJsonKeySerialNumber[] = "serial_number";
const char kJsonKeyDeviceModel[] = "device_model";
const char kJsonKeyManufacture[] = "manufacturer";
const char kDefaultProductName[] = "cast_shell";
const char kDefaultSerialNumber[] = "dummy.serial.number";
const char kDefaultDeviceModel[] = "dummy model";
const char kDefaultManufacturer[] = "google";
std::string GetStringValue(const base::Value& sys_info_file,
const std::string& key,
const std::string& default_val) {
DCHECK(sys_info_file.is_dict());
const base::Value* val =
sys_info_file.FindKeyOfType(key, base::Value::Type::STRING);
if (!val) {
LOG(WARNING) << "Json key not found: " << key;
return default_val;
}
return val->GetString();
}
} // namespace
CastSysInfoDummy::CastSysInfoDummy() CastSysInfoDummy::CastSysInfoDummy()
: build_type_(BUILD_ENG), : build_type_(BUILD_ENG),
serial_number_("dummy.serial.number"), serial_number_("dummy.serial.number"),
...@@ -15,11 +46,34 @@ CastSysInfoDummy::CastSysInfoDummy() ...@@ -15,11 +46,34 @@ CastSysInfoDummy::CastSysInfoDummy()
manufacturer_("google"), manufacturer_("google"),
system_build_number_(__DATE__ " - " __TIME__), system_build_number_(__DATE__ " - " __TIME__),
factory_country_("US"), factory_country_("US"),
factory_locale_list_({"en-US"}) { factory_locale_list_({"en-US"}) {}
}
CastSysInfoDummy::CastSysInfoDummy(const std::string& sys_info_file)
CastSysInfoDummy::~CastSysInfoDummy() { : CastSysInfoDummy() {
} std::string content;
if (!base::ReadFileToString(base::FilePath(sys_info_file), &content)) {
LOG(ERROR) << "Failed to read sys info file: " << sys_info_file;
return;
}
auto value = base::JSONReader::Read(content);
if (!value || !value->is_dict()) {
LOG(ERROR)
<< "Invaild sys info json file, using the default values instead.";
return;
}
product_name_ =
GetStringValue(*value, kJsonKeyProductName, kDefaultProductName);
serial_number_ =
GetStringValue(*value, kJsonKeySerialNumber, kDefaultSerialNumber);
device_model_ =
GetStringValue(*value, kJsonKeyDeviceModel, kDefaultDeviceModel);
manufacturer_ =
GetStringValue(*value, kJsonKeyManufacture, kDefaultManufacturer);
}
CastSysInfoDummy::~CastSysInfoDummy() {}
CastSysInfo::BuildType CastSysInfoDummy::GetBuildType() { CastSysInfo::BuildType CastSysInfoDummy::GetBuildType() {
return build_type_; return build_type_;
......
...@@ -18,6 +18,7 @@ namespace chromecast { ...@@ -18,6 +18,7 @@ namespace chromecast {
class CastSysInfoDummy : public CastSysInfo { class CastSysInfoDummy : public CastSysInfo {
public: public:
CastSysInfoDummy(); CastSysInfoDummy();
CastSysInfoDummy(const std::string& sys_info_file);
~CastSysInfoDummy() override; ~CastSysInfoDummy() override;
// CastSysInfo implementation: // CastSysInfo implementation:
...@@ -46,7 +47,8 @@ class CastSysInfoDummy : public CastSysInfo { ...@@ -46,7 +47,8 @@ class CastSysInfoDummy : public CastSysInfo {
void SetManufacturerForTesting(const std::string& manufacturer); void SetManufacturerForTesting(const std::string& manufacturer);
void SetSystemBuildNumberForTesting(const std::string& system_build_number); void SetSystemBuildNumberForTesting(const std::string& system_build_number);
void SetFactoryCountryForTesting(const std::string& factory_country); void SetFactoryCountryForTesting(const std::string& factory_country);
void SetFactoryLocaleListForTesting(const std::vector<std::string>& factory_locale_list); void SetFactoryLocaleListForTesting(
const std::vector<std::string>& factory_locale_list);
void SetWifiInterfaceForTesting(const std::string& wifi_interface); void SetWifiInterfaceForTesting(const std::string& wifi_interface);
void SetApInterfaceForTesting(const std::string& ap_interface); void SetApInterfaceForTesting(const std::string& ap_interface);
......
...@@ -4,12 +4,23 @@ ...@@ -4,12 +4,23 @@
#include "chromecast/public/cast_sys_info_shlib.h" #include "chromecast/public/cast_sys_info_shlib.h"
#include "base/command_line.h"
#include "chromecast/base/cast_sys_info_dummy.h" #include "chromecast/base/cast_sys_info_dummy.h"
#include "chromecast/base/chromecast_switches.h"
#include "chromecast/base/init_command_line_shlib.h"
namespace chromecast { namespace chromecast {
// static // static
CastSysInfo* CastSysInfoShlib::Create(const std::vector<std::string>& argv) { CastSysInfo* CastSysInfoShlib::Create(const std::vector<std::string>& argv) {
InitCommandLineShlib(argv);
auto* cmd_line = base::CommandLine::ForCurrentProcess();
if (cmd_line->HasSwitch(switches::kSysInfoFilePath)) {
return new CastSysInfoDummy(
cmd_line->GetSwitchValueASCII(switches::kSysInfoFilePath));
}
return new CastSysInfoDummy(); return new CastSysInfoDummy();
} }
......
...@@ -203,6 +203,10 @@ extern const char kCastMemoryPressureModerateFraction[] = ...@@ -203,6 +203,10 @@ extern const char kCastMemoryPressureModerateFraction[] =
// of the media service. // of the media service.
const char kDisableMojoRenderer[] = "disable-mojo-renderer"; const char kDisableMojoRenderer[] = "disable-mojo-renderer";
// System info file path. Default is an empty string, which
// means that dummy info will be used.
const char kSysInfoFilePath[] = "sys-info-file-path";
} // namespace switches } // namespace switches
namespace chromecast { namespace chromecast {
......
...@@ -96,6 +96,8 @@ extern const char kCastMemoryPressureModerateFraction[]; ...@@ -96,6 +96,8 @@ extern const char kCastMemoryPressureModerateFraction[];
extern const char kDisableMojoRenderer[]; extern const char kDisableMojoRenderer[];
extern const char kSysInfoFilePath[];
} // namespace switches } // namespace switches
namespace chromecast { namespace chromecast {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment