All except `GetAsDictionary()`. Please use new shiny methods instead.
https://chromium.googlesource.com/chromium/src/+/master/base/values.h
atom/browser/net/atom_network_delegate.cc
uint64_t id,
    T out,
    std::unique_ptr<base::DictionaryValue> response) {
  
  if (!base::ContainsKey(callbacks_, id))
    return;
  ReadFromResponseObject(*response, out);
  bool cancel = false;
  response->GetBoolean("cancel", &cancel);
  callbacks_[id].Run(cancel ? net::ERR_BLOCKED_BY_CLIENT : net::OK);
}
template <typename T>
void AtomNetworkDelegate::OnListenerResultInUI(
    uint64_t id,
    T out,
    const base::DictionaryValue& response) {
  std::unique_ptr<base::DictionaryValue> copy = response.CreateDeepCopy();
  BrowserThread::PostTask(
      BrowserThread::IO, FROM_HERE,
      base::BindOnce(&AtomNetworkDelegate::OnListenerResultInIO<T>,
                     base::Unretained(this), id, out, std::move(copy)));
}
}