This source file includes following definitions.
- FetchScreenInfoOnUIThread
- Init
- RetrieveScreenInfo
- GetDevicePixelRatioHeader
- UpdateScreenInfo
#include "chrome/browser/net/client_hints.h"
#include <locale>
#include "base/bind.h"
#include "base/strings/stringprintf.h"
#include "base/task_runner_util.h"
#include "content/public/browser/browser_thread.h"
#include "ui/gfx/screen.h"
namespace {
float FetchScreenInfoOnUIThread() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
gfx::Display display = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay();
return display.device_scale_factor();
}
}
const char ClientHints::kDevicePixelRatioHeader[] = "CH-DPR";
ClientHints::ClientHints()
: weak_ptr_factory_(this) {
}
ClientHints::~ClientHints() {
}
void ClientHints::Init() {
RetrieveScreenInfo();
}
bool ClientHints::RetrieveScreenInfo() {
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
return content::BrowserThread::PostTaskAndReplyWithResult(
content::BrowserThread::UI,
FROM_HERE,
base::Bind(&FetchScreenInfoOnUIThread),
base::Bind(
&ClientHints::UpdateScreenInfo, weak_ptr_factory_.GetWeakPtr()));
}
const std::string& ClientHints::GetDevicePixelRatioHeader() const {
return screen_hints_;
}
void ClientHints::UpdateScreenInfo(float device_pixel_ratio_value) {
if (device_pixel_ratio_value <= 0.0)
return;
std::string device_pixel_ratio = base::StringPrintf("%.2f",
device_pixel_ratio_value);
std::locale locale;
for (std::string::iterator it = device_pixel_ratio.begin();
it != device_pixel_ratio.end(); ++it) {
if (!std::isdigit(*it, locale))
*it = '.';
}
screen_hints_ = device_pixel_ratio;
}