Index: Source/core/inspector/InspectorPageAgent.cpp |
diff --git a/Source/core/inspector/InspectorPageAgent.cpp b/Source/core/inspector/InspectorPageAgent.cpp |
index 507490d2c0ebcbcf20e0ea3372e1c2ae1f99b4cb..4c003cafe9beb6547f91ecc691bbf4f27a8de389 100644 |
--- a/Source/core/inspector/InspectorPageAgent.cpp |
+++ b/Source/core/inspector/InspectorPageAgent.cpp |
@@ -96,9 +96,7 @@ static const char pageAgentFitWindow[] = "pageAgentFitWindow"; |
static const char deviceScale[] = "deviceScale"; |
static const char deviceOffsetX[] = "deviceOffsetX"; |
static const char deviceOffsetY[] = "deviceOffsetY"; |
-static const char fontScaleFactor[] = "fontScaleFactor"; |
static const char pageAgentShowFPSCounter[] = "pageAgentShowFPSCounter"; |
-static const char pageAgentTextAutosizingOverride[] = "pageAgentTextAutosizingOverride"; |
static const char pageAgentContinuousPaintingEnabled[] = "pageAgentContinuousPaintingEnabled"; |
static const char pageAgentShowPaintRects[] = "pageAgentShowPaintRects"; |
static const char pageAgentShowDebugBorders[] = "pageAgentShowDebugBorders"; |
@@ -118,6 +116,31 @@ KURL urlWithoutFragment(const KURL& url) |
return result; |
} |
+static float calculateFontScaleFactor(int width, int height, float deviceScaleFactor) |
+{ |
+ // Chromium on Android uses a device scale adjustment for fonts used in text autosizing for |
+ // improved legibility. This function computes this adjusted value for text autosizing. |
+ // For a description of the Android device scale adjustment algorithm, see: |
+ // chrome/browser/chrome_content_browser_client.cc, GetDeviceScaleAdjustment(...) |
+ if (!width || !height || !deviceScaleFactor) |
+ return 1; |
+ |
+ static const float kMinFSM = 1.05f; |
+ static const int kWidthForMinFSM = 320; |
+ static const float kMaxFSM = 1.3f; |
+ static const int kWidthForMaxFSM = 800; |
+ |
+ float minWidth = std::min(width, height) / deviceScaleFactor; |
+ if (minWidth <= kWidthForMinFSM) |
+ return kMinFSM; |
+ if (minWidth >= kWidthForMaxFSM) |
+ return kMaxFSM; |
+ |
+ // The font scale multiplier varies linearly between kMinFSM and kMaxFSM. |
+ float ratio = static_cast<float>(minWidth - kWidthForMinFSM) / (kWidthForMaxFSM - kWidthForMinFSM); |
+ return ratio * (kMaxFSM - kMinFSM) + kMinFSM; |
+} |
+ |
} |
class InspectorPageAgent::GetResourceContentLoadListener FINAL : public VoidCallback { |
@@ -391,14 +414,16 @@ InspectorPageAgent::InspectorPageAgent(Page* page, InjectedScriptManager* inject |
void InspectorPageAgent::setTextAutosizingEnabled(bool enabled) |
{ |
m_embedderTextAutosizingEnabled = enabled; |
- if (!m_deviceMetricsOverridden) |
+ bool emulateViewportEnabled = m_enabled && m_deviceMetricsOverridden && m_emulateViewportEnabled; |
+ if (!emulateViewportEnabled) |
m_page->settings().setTextAutosizingEnabled(enabled); |
} |
void InspectorPageAgent::setDeviceScaleAdjustment(float deviceScaleAdjustment) |
{ |
m_embedderFontScaleFactor = deviceScaleAdjustment; |
- if (!m_deviceMetricsOverridden) |
+ bool emulateViewportEnabled = m_enabled && m_deviceMetricsOverridden && m_emulateViewportEnabled; |
+ if (!emulateViewportEnabled) |
m_page->settings().setDeviceScaleAdjustment(deviceScaleAdjustment); |
} |
@@ -471,11 +496,11 @@ void InspectorPageAgent::disable(ErrorString*) |
m_state->setBoolean(PageAgentState::touchEventEmulationEnabled, false); |
} |
- if (!deviceMetricsChanged(false, 0, 0, 0, false, false, 1, 0, 0, 1, false)) |
+ if (!deviceMetricsChanged(false, 0, 0, 0, false, false, 1, 0, 0)) |
return; |
// When disabling the agent, reset the override values if necessary. |
- updateViewMetrics(false, 0, 0, 0, false, false, 1, 0, 0, m_embedderFontScaleFactor, m_embedderTextAutosizingEnabled); |
+ updateViewMetrics(false, 0, 0, 0, false, false, 1, 0, 0); |
m_state->setLong(PageAgentState::pageAgentScreenWidthOverride, 0); |
m_state->setLong(PageAgentState::pageAgentScreenHeightOverride, 0); |
m_state->setDouble(PageAgentState::pageAgentDeviceScaleFactorOverride, 0); |
@@ -484,8 +509,6 @@ void InspectorPageAgent::disable(ErrorString*) |
m_state->setDouble(PageAgentState::deviceScale, 1); |
m_state->setDouble(PageAgentState::deviceOffsetX, 0); |
m_state->setDouble(PageAgentState::deviceOffsetY, 0); |
- m_state->setDouble(PageAgentState::fontScaleFactor, 1); |
- m_state->setBoolean(PageAgentState::pageAgentTextAutosizingOverride, false); |
} |
void InspectorPageAgent::addScriptToEvaluateOnLoad(ErrorString*, const String& source, String* identifier) |
@@ -750,7 +773,7 @@ void InspectorPageAgent::setDocumentContent(ErrorString* errorString, const Stri |
DOMPatchSupport::patchDocument(*document, html); |
} |
-void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, const double* optionalScale, const double* optionalOffsetX, const double* optionalOffsetY, const bool* optionalTextAutosizing, const double* optionalFontScaleFactor) |
+void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, const double* optionalScale, const double* optionalOffsetX, const double* optionalOffsetY) |
{ |
const static long maxDimension = 10000000; |
const static double maxScale = 10; |
@@ -758,8 +781,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
double scale = optionalScale ? *optionalScale : 1; |
double offsetX = optionalOffsetX ? *optionalOffsetX : 0; |
double offsetY = optionalOffsetY ? *optionalOffsetY : 0; |
- bool textAutosizing = optionalTextAutosizing ? *optionalTextAutosizing : false; |
- double fontScaleFactor = optionalFontScaleFactor ? *optionalFontScaleFactor : 1; |
if (width < 0 || height < 0 || width > maxDimension || height > maxDimension) { |
*errorString = "Width and height values must be positive, not greater than " + String::number(maxDimension); |
@@ -776,11 +797,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
return; |
} |
- if (fontScaleFactor <= 0) { |
- *errorString = "fontScaleFactor must be positive"; |
- return; |
- } |
- |
Settings& settings = m_page->settings(); |
if (!settings.acceleratedCompositingEnabled()) { |
if (errorString) |
@@ -788,7 +804,7 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
return; |
} |
- if (!deviceMetricsChanged(true, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY, fontScaleFactor, textAutosizing)) |
+ if (!deviceMetricsChanged(true, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY)) |
return; |
m_state->setBoolean(PageAgentState::deviceMetricsOverrideEnabled, true); |
@@ -800,8 +816,6 @@ void InspectorPageAgent::setDeviceMetricsOverride(ErrorString* errorString, int |
m_state->setDouble(PageAgentState::deviceScale, scale); |
m_state->setDouble(PageAgentState::deviceOffsetX, offsetX); |
m_state->setDouble(PageAgentState::deviceOffsetY, offsetY); |
- m_state->setDouble(PageAgentState::fontScaleFactor, fontScaleFactor); |
- m_state->setBoolean(PageAgentState::pageAgentTextAutosizingOverride, textAutosizing); |
updateViewMetricsFromState(); |
} |
@@ -813,7 +827,7 @@ void InspectorPageAgent::clearDeviceMetricsOverride(ErrorString*) |
} |
} |
-bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY, double fontScaleFactor, bool textAutosizing) |
+bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY) |
{ |
bool currentEnabled = m_state->getBoolean(PageAgentState::deviceMetricsOverrideEnabled); |
// These two always fit an int. |
@@ -825,8 +839,6 @@ bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int heigh |
double currentScale = m_state->getDouble(PageAgentState::deviceScale, 1); |
double currentOffsetX = m_state->getDouble(PageAgentState::deviceOffsetX, 0); |
double currentOffsetY = m_state->getDouble(PageAgentState::deviceOffsetY, 0); |
- double currentFontScaleFactor = m_state->getDouble(PageAgentState::fontScaleFactor, 1); |
- bool currentTextAutosizing = m_state->getBoolean(PageAgentState::pageAgentTextAutosizingOverride); |
return enabled != currentEnabled |
|| width != currentWidth |
@@ -836,9 +848,7 @@ bool InspectorPageAgent::deviceMetricsChanged(bool enabled, int width, int heigh |
|| fitWindow != currentFitWindow |
|| scale != currentScale |
|| offsetX != currentOffsetX |
- || offsetY != currentOffsetY |
- || fontScaleFactor != currentFontScaleFactor |
- || textAutosizing != currentTextAutosizing; |
+ || offsetY != currentOffsetY; |
} |
void InspectorPageAgent::setShowPaintRects(ErrorString*, bool show) |
@@ -1250,12 +1260,10 @@ void InspectorPageAgent::updateViewMetricsFromState() |
double scale = m_state->getDouble(PageAgentState::deviceScale, 1); |
double offsetX = m_state->getDouble(PageAgentState::deviceOffsetX, 0); |
double offsetY = m_state->getDouble(PageAgentState::deviceOffsetY, 0); |
- double fontScaleFactor = m_state->getDouble(PageAgentState::fontScaleFactor); |
- bool textAutosizingEnabled = m_state->getBoolean(PageAgentState::pageAgentTextAutosizingOverride); |
- updateViewMetrics(enabled, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY, fontScaleFactor, textAutosizingEnabled); |
+ updateViewMetrics(enabled, width, height, deviceScaleFactor, emulateViewport, fitWindow, scale, offsetX, offsetY); |
} |
-void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY, double fontScaleFactor, bool textAutosizingEnabled) |
+void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, double deviceScaleFactor, bool emulateViewport, bool fitWindow, double scale, double offsetX, double offsetY) |
{ |
if (enabled && !m_page->settings().acceleratedCompositingEnabled()) |
return; |
@@ -1275,8 +1283,8 @@ void InspectorPageAgent::updateViewMetrics(bool enabled, int width, int height, |
InspectorInstrumentation::mediaQueryResultChanged(document); |
if (m_deviceMetricsOverridden) { |
- m_page->settings().setTextAutosizingEnabled(textAutosizingEnabled); |
- m_page->settings().setDeviceScaleAdjustment(fontScaleFactor); |
+ m_page->settings().setTextAutosizingEnabled(emulateViewport); |
+ m_page->settings().setDeviceScaleAdjustment(calculateFontScaleFactor(width, height, static_cast<float>(deviceScaleFactor))); |
} else { |
m_page->settings().setTextAutosizingEnabled(m_embedderTextAutosizingEnabled); |
m_page->settings().setDeviceScaleAdjustment(m_embedderFontScaleFactor); |