void DocumentHost::GetCookies(std::map<std::string, std::string>* cookies) { LOG(TRACE) << "Entering DocumentHost::GetCookies"; CComPtr<IHTMLDocument2> doc; this->GetDocument(&doc); if (!doc) { LOG(WARN) << "Unable to get document"; return; } CComBSTR cookie_bstr; HRESULT hr = doc->get_cookie(&cookie_bstr); if (!cookie_bstr) { LOG(WARN) << "Unable to get cookie str, call to IHTMLDocument2::get_cookie failed"; cookie_bstr = L""; } std::wstring cookie_string = cookie_bstr; while (cookie_string.size() > 0) { size_t cookie_delimiter_pos = cookie_string.find(L"; "); std::wstring cookie = cookie_string.substr(0, cookie_delimiter_pos); if (cookie_delimiter_pos == std::wstring::npos) { cookie_string = L""; } else { cookie_string = cookie_string.substr(cookie_delimiter_pos + 2); } size_t cookie_separator_pos(cookie.find_first_of(L"=")); std::string cookie_name(CW2A(cookie.substr(0, cookie_separator_pos).c_str(), CP_UTF8)); std::string cookie_value(CW2A(cookie.substr(cookie_separator_pos + 1).c_str(), CP_UTF8)); cookies->insert(std::pair<std::string, std::string>(cookie_name, cookie_value)); } }
void CookieManager::ParseCookieString(const std::wstring& cookie_string, std::map<std::string, std::string>* cookies) { LOG(TRACE) << "Entering CookieManager::ParseCookieString"; std::wstring cookie_string_copy = cookie_string; while (cookie_string_copy.size() > 0) { size_t cookie_delimiter_pos = cookie_string_copy.find(L"; "); std::wstring cookie = cookie_string_copy.substr(0, cookie_delimiter_pos); if (cookie_delimiter_pos == std::wstring::npos) { cookie_string_copy = L""; } else { cookie_string_copy = cookie_string_copy.substr(cookie_delimiter_pos + 2); } size_t cookie_separator_pos(cookie.find_first_of(L"=")); std::string cookie_name(StringUtilities::ToString(cookie.substr(0, cookie_separator_pos))); std::string cookie_value(StringUtilities::ToString(cookie.substr(cookie_separator_pos + 1))); cookies->insert(std::pair<std::string, std::string>(cookie_name, cookie_value)); } }