chromium - get value from base:Value
阿新 • • 發佈:2018-12-20
前言
chromium工程中,base::Value是一個數據的容器, 可以裝double, string型別資料,資料的存取為key-value。
在chromium工程中, 對base:Value設定值,是原有框架的事情。介面上經常有base::Value的值作為入參。
為了解送進介面的base::Value資料是啥內容(一般會記錄日誌),對base::Value取值是要做的。
實驗
找了一段現有的chromium程式碼,入參有base::Value, 嘗試讀取base::Value入參的內容。
Z:\chromium\src\chrome\browser\ui\webui\download_internals\download_internals_ui_message_handler.cc
bool DownloadInternalsUIMessageHandler::get_double_value_by_key_from_value(const base::Value& value, const char* psz_key, double& f_value) { bool b_rc = false; const base::Value* p_bv_find_key = NULL; do { f_value = 0.0f; if (NULL == psz_key) { break; } p_bv_find_key = value.FindKey(psz_key); if (NULL == p_bv_find_key) { break; } if (!p_bv_find_key->is_double()) { break; } f_value = p_bv_find_key->GetDouble(); b_rc = true; } while (0); return b_rc; } bool DownloadInternalsUIMessageHandler::get_string_value_by_key_from_value(const base::Value& value, const char* psz_key, std::string& str_value) { bool b_rc = false; const base::Value* p_bv_find_key = NULL; do { str_value = ""; if (NULL == psz_key) { break; } p_bv_find_key = value.FindKey(psz_key); if (NULL == p_bv_find_key) { break; } if (!p_bv_find_key->is_string()) { break; } str_value = p_bv_find_key->GetString(); b_rc = true; } while (0); return b_rc; } void DownloadInternalsUIMessageHandler::OnServiceDownloadChanged( const base::Value& service_download) { double f_bytes_downloaded = 0.0f; std::string str_client = ""; std::string str_state = ""; std::string str_file_path = ""; std::string str_guid = ""; std::string str_url = ""; if (!IsJavascriptAllowed()) return; FireWebUIListener("service-download-changed", service_download); /* + [0] ("bytes_downloaded", unique_ptr DOUBLE 0.00000000000000000) std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > + [1] ("client", unique_ptr STRING "Debugging") std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > + [2] ("file_path", unique_ptr STRING "C:\\Users\\LostSpeed\\AppData\\Local\\Chromium\\User Data\\Default\\Download Service\\Files\\205d0b7a-b28e-4594-943c-ec8e5180eda6") std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > + [3] ("guid", unique_ptr STRING "205d0b7a-b28e-4594-943c-ec8e5180eda6") std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > + [4] ("state", unique_ptr STRING "ACTIVE") std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > + [5] ("url", unique_ptr STRING "https://download.csdn.net/download/lostspeed/10834374") std::pair<std::basic_string<char,std::char_traits<char>,std::allocator<char> >,std::unique_ptr<base::Value,std::default_delete<base::Value> > > */ do { if (!get_double_value_by_key_from_value(service_download, "bytes_downloaded", f_bytes_downloaded)) { break; } if (!get_string_value_by_key_from_value(service_download, "client", str_client)) { break; } if (!get_string_value_by_key_from_value(service_download, "file_path", str_file_path)) { break; } if (!get_string_value_by_key_from_value(service_download, "guid", str_guid)) { break; } if (!get_string_value_by_key_from_value(service_download, "state", str_state)) { break; } if (!get_string_value_by_key_from_value(service_download, "url", str_url)) { break; } // COMPLETE DLOG(INFO) << "service_download info :" << "bytes_downloaded = " << f_bytes_downloaded << ", client = " << str_client << ", file_path = " << str_file_path << ", guid = " << str_guid << ", down_state = " << str_state << ", url = " << str_url; } while (0); }
記錄的日誌效果
[223200:240192:1218/130225.050:INFO:download_internals_ui_message_handler.cc(172)] service_download info :bytes_downloaded = 0, client = Debugging, file_path = C:\Users\LostSpeed\AppData\Local\Chromium\User Data\Default\Download Service\Files\b345452c-992c-47db-83ad-43606b7632ac, guid = b345452c-992c-47db-83ad-43606b7632ac, down_state = ACTIVE, url = https://download.csdn.net/download/lostspeed/10834374