| // Copyright 2021 The Cobalt Authors. All Rights Reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| |
| #include "cobalt/web/navigator_ua_data.h" |
| |
| #include "base/strings/stringprintf.h" |
| |
| namespace cobalt { |
| namespace web { |
| |
| NavigatorUAData::NavigatorUAData( |
| const UserAgentPlatformInfo* platform_info, |
| script::ScriptValueFactory* script_value_factory) |
| : script_value_factory_(script_value_factory) { |
| if (platform_info == nullptr) { |
| SB_DLOG(WARNING) |
| << "No UserAgentPlatformInfo object passed to NavigatorUAData"; |
| return; |
| } |
| NavigatorUABrandVersion cobalt_brand; |
| cobalt_brand.set_brand("Cobalt"); |
| cobalt_brand.set_version(platform_info->cobalt_version()); |
| brands_.push_back(cobalt_brand); |
| |
| mobile_ = false; |
| platform_ = platform_info->os_name_and_version(); |
| |
| all_high_entropy_values_.set_brands(brands_); |
| all_high_entropy_values_.set_mobile(mobile_); |
| all_high_entropy_values_.set_platform(platform_); |
| all_high_entropy_values_.set_architecture(SB_SABI_TARGET_ARCH); |
| all_high_entropy_values_.set_bitness(SB_SABI_WORD_SIZE); |
| all_high_entropy_values_.set_model(platform_info->model().value_or("")); |
| all_high_entropy_values_.set_platform_version( |
| platform_info->firmware_version().value_or("")); |
| all_high_entropy_values_.set_ua_full_version( |
| base::StringPrintf("%s.%s-%s", platform_info->cobalt_version().c_str(), |
| platform_info->cobalt_build_version_number().c_str(), |
| platform_info->build_configuration().c_str())); |
| all_high_entropy_values_.set_cobalt_build_number( |
| platform_info->cobalt_build_version_number()); |
| all_high_entropy_values_.set_cobalt_build_configuration( |
| platform_info->build_configuration()); |
| all_high_entropy_values_.set_js_engine_version( |
| platform_info->javascript_engine_version()); |
| all_high_entropy_values_.set_rasterizer(platform_info->rasterizer_type()); |
| all_high_entropy_values_.set_evergreen_type(platform_info->evergreen_type()); |
| all_high_entropy_values_.set_evergreen_file_type( |
| platform_info->evergreen_file_type()); |
| all_high_entropy_values_.set_evergreen_version( |
| platform_info->evergreen_version()); |
| all_high_entropy_values_.set_android_build_fingerprint( |
| platform_info->android_build_fingerprint()); |
| all_high_entropy_values_.set_android_os_experience( |
| platform_info->android_os_experience()); |
| all_high_entropy_values_.set_starboard_version( |
| platform_info->starboard_version()); |
| all_high_entropy_values_.set_original_design_manufacturer( |
| platform_info->original_design_manufacturer().value_or("")); |
| all_high_entropy_values_.set_device_type(platform_info->device_type_string()); |
| all_high_entropy_values_.set_chipset( |
| platform_info->chipset_model_number().value_or("")); |
| all_high_entropy_values_.set_model_year( |
| platform_info->model_year().value_or("")); |
| all_high_entropy_values_.set_device_brand( |
| platform_info->brand().value_or("")); |
| all_high_entropy_values_.set_aux(platform_info->aux_field()); |
| |
| low_entropy_json_.set_brands(brands_); |
| low_entropy_json_.set_mobile(mobile_); |
| low_entropy_json_.set_platform(platform_); |
| } |
| |
| script::Handle<NavigatorUAData::InterfacePromise> |
| NavigatorUAData::GetHighEntropyValues(script::Sequence<std::string> hints) { |
| // https://wicg.github.io/ua-client-hints/#getHighEntropyValues |
| CobaltUADataValues select_high_entropy_values_; |
| |
| // Set brands, mobile, and platform |
| select_high_entropy_values_.set_brands(all_high_entropy_values_.brands()); |
| select_high_entropy_values_.set_mobile(all_high_entropy_values_.mobile()); |
| select_high_entropy_values_.set_platform(all_high_entropy_values_.platform()); |
| |
| // Set other hints if specified |
| for (script::Sequence<std::string>::iterator it = hints.begin(); |
| it != hints.end(); ++it) { |
| if ((*it).compare("architecture") == 0) { |
| select_high_entropy_values_.set_architecture( |
| all_high_entropy_values_.architecture()); |
| } else if ((*it).compare("bitness") == 0) { |
| select_high_entropy_values_.set_bitness( |
| all_high_entropy_values_.bitness()); |
| } else if ((*it).compare("model") == 0) { |
| select_high_entropy_values_.set_model(all_high_entropy_values_.model()); |
| } else if ((*it).compare("platformVersion") == 0) { |
| select_high_entropy_values_.set_platform_version( |
| all_high_entropy_values_.platform_version()); |
| } else if ((*it).compare("uaFullVersion") == 0) { |
| select_high_entropy_values_.set_ua_full_version( |
| all_high_entropy_values_.ua_full_version()); |
| } else if ((*it).compare("cobaltBuildNumber") == 0) { |
| select_high_entropy_values_.set_cobalt_build_number( |
| all_high_entropy_values_.cobalt_build_number()); |
| } else if ((*it).compare("cobaltBuildConfiguration") == 0) { |
| select_high_entropy_values_.set_cobalt_build_configuration( |
| all_high_entropy_values_.cobalt_build_configuration()); |
| } else if ((*it).compare("jsEngineVersion") == 0) { |
| select_high_entropy_values_.set_js_engine_version( |
| all_high_entropy_values_.js_engine_version()); |
| } else if ((*it).compare("rasterizer") == 0) { |
| select_high_entropy_values_.set_rasterizer( |
| all_high_entropy_values_.rasterizer()); |
| } else if ((*it).compare("evergreenType") == 0) { |
| select_high_entropy_values_.set_evergreen_type( |
| all_high_entropy_values_.evergreen_type()); |
| } else if ((*it).compare("evergreenVersion") == 0) { |
| select_high_entropy_values_.set_evergreen_version( |
| all_high_entropy_values_.evergreen_version()); |
| } else if ((*it).compare("starboardVersion") == 0) { |
| select_high_entropy_values_.set_starboard_version( |
| all_high_entropy_values_.starboard_version()); |
| } else if ((*it).compare("originalDesignManufacturer") == 0) { |
| select_high_entropy_values_.set_original_design_manufacturer( |
| all_high_entropy_values_.original_design_manufacturer()); |
| } else if ((*it).compare("deviceType") == 0) { |
| select_high_entropy_values_.set_device_type( |
| all_high_entropy_values_.device_type()); |
| } else if ((*it).compare("chipset") == 0) { |
| select_high_entropy_values_.set_chipset( |
| all_high_entropy_values_.chipset()); |
| } else if ((*it).compare("modelYear") == 0) { |
| select_high_entropy_values_.set_model_year( |
| all_high_entropy_values_.model_year()); |
| } else if ((*it).compare("deviceBrand") == 0) { |
| select_high_entropy_values_.set_device_brand( |
| all_high_entropy_values_.device_brand()); |
| } else if ((*it).compare("aux") == 0) { |
| select_high_entropy_values_.set_aux(all_high_entropy_values_.aux()); |
| } |
| } |
| |
| script::Handle<InterfacePromise> promise = |
| script_value_factory_->CreateInterfacePromise< |
| scoped_refptr<CobaltUADataValuesInterface>>(); |
| scoped_refptr<CobaltUADataValuesInterface> promise_result( |
| new CobaltUADataValuesInterface(select_high_entropy_values_)); |
| promise->Resolve(promise_result); |
| return promise; |
| } |
| |
| } // namespace web |
| } // namespace cobalt |