summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContents.java12
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwContentsClient.java15
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwSettings.java9
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java32
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/NullContentsClient.java4
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java2
-rw-r--r--android_webview/native/aw_settings.cc4
7 files changed, 65 insertions, 13 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java
index 507f568..f03f50e 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContents.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java
@@ -284,6 +284,8 @@ public class AwContents {
mContentViewCore.getNativeContentViewCore());
mDIPScale = DeviceDisplayInfo.create(containerView.getContext()).getDIPScale();
+ mContentsClient.setDIPScale(mDIPScale);
+ mSettings.setDIPScale(mDIPScale);
ContentVideoView.registerContentVideoViewContextDelegate(
new AwContentVideoViewDelegate(contentsClient, containerView.getContext()));
@@ -671,6 +673,16 @@ public class AwContents {
msg.sendToTarget();
}
+ /**
+ * @see android.webkit.WebView#getScale()
+ *
+ * Please note that the scale returned is the page scale multiplied by
+ * the screen density factor. See CTS WebViewTest.testSetInitialScale.
+ */
+ public float getScale() {
+ return (float)(getContentViewCore().getScale() * mDIPScale);
+ }
+
//--------------------------------------------------------------------------------------------
// View and ViewGroup method implementations
//--------------------------------------------------------------------------------------------
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
index a409f58..f0436ea 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwContentsClient.java
@@ -47,6 +47,8 @@ public abstract class AwContentsClient extends ContentViewClient {
private AwWebContentsObserver mWebContentsObserver;
+ private double mDIPScale;
+
//--------------------------------------------------------------------------------------------
// Adapter for WebContentsDelegate methods.
//--------------------------------------------------------------------------------------------
@@ -201,6 +203,10 @@ public abstract class AwContentsClient extends ContentViewClient {
mWebContentsObserver = new AwWebContentsObserver(contentViewCore);
}
+ void setDIPScale(double dipScale) {
+ mDIPScale = dipScale;
+ }
+
final AwWebContentsDelegate getWebContentsDelegate() {
return mWebContentsDelegateAdapter;
}
@@ -246,6 +252,15 @@ public abstract class AwContentsClient extends ContentViewClient {
public abstract void onGeolocationPermissionsHidePrompt();
+ // TODO(mnaganov): Make final after updating the glue layer.
+ public /*final*/ void onScaleChanged(float oldScale, float newScale) {
+ onScaleChangedScaled((float)(oldScale * mDIPScale), (float)(newScale * mDIPScale));
+ }
+
+ // TODO(mnaganov): Make abstract after updating the glue layer.
+ public /*abstract*/ void onScaleChangedScaled(float oldScale, float newScale) {
+ }
+
protected abstract void handleJsAlert(String url, String message, JsResultReceiver receiver);
protected abstract void handleJsBeforeUnload(String url, String message,
diff --git a/android_webview/java/src/org/chromium/android_webview/AwSettings.java b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
index 8352638..5451611 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -25,6 +25,7 @@ public class AwSettings {
private final Object mAwSettingsLock = new Object();
private final Context mContext;
+ private double mDIPScale;
private boolean mBlockNetworkLoads; // Default depends on permission of embedding APK.
private boolean mAllowContentUrlAccess = true;
private boolean mAllowFileUrlAccess = true;
@@ -50,6 +51,10 @@ public class AwSettings {
mNativeAwSettings = 0;
}
+ void setDIPScale(double dipScale) {
+ mDIPScale = dipScale;
+ }
+
/**
* See {@link android.webkit.WebSettings#setBlockNetworkLoads}.
*/
@@ -161,7 +166,7 @@ public class AwSettings {
/**
* Sets the initial scale for this WebView. The default value
- * is -1. A non-default value overrides initial scale set by
+ * is 0. A non-default value overrides initial scale set by
* the meta viewport tag.
*/
public void setInitialPageScale(final float scaleInPercent) {
@@ -170,7 +175,7 @@ public class AwSettings {
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
- nativeSetInitialPageScale(mNativeAwSettings, scaleInPercent);
+ nativeSetInitialPageScale(mNativeAwSettings, (float)(scaleInPercent / mDIPScale));
}
});
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
index b5e7f20..f4e6cd3 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java
@@ -2428,29 +2428,30 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
final String page = "<html><body>" +
"<p style='height:1000px;width:1000px'>testSetInitialScale</p>" +
"</body></html>";
- final float defaultScale = 1.0f;
+ final float defaultScale =
+ getInstrumentation().getTargetContext().getResources().getDisplayMetrics().density;
- assertEquals(defaultScale, getScaleOnUiThread(awContents));
+ assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f);
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
- assertEquals(defaultScale, getScaleOnUiThread(awContents));
+ assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f);
int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
awSettings.setInitialPageScale(50);
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
- assertEquals(0.5f, getScaleOnUiThread(awContents));
+ assertEquals(0.5f, getPixelScaleOnUiThread(awContents), .01f);
onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
- awSettings.setInitialPageScale(200);
+ awSettings.setInitialPageScale(500);
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
- assertEquals(2.0f, getScaleOnUiThread(awContents));
+ assertEquals(5.0f, getPixelScaleOnUiThread(awContents), .01f);
onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
- awSettings.setInitialPageScale(-1);
+ awSettings.setInitialPageScale(0);
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
- assertEquals(defaultScale, getScaleOnUiThread(awContents));
+ assertEquals(defaultScale, getPixelScaleOnUiThread(awContents), .01f);
}
/**
@@ -2638,6 +2639,9 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
AndroidProtocolHandler.setResourceContextForTesting(null);
}
+ /**
+ * Returns pure page scale.
+ */
private float getScaleOnUiThread(final AwContents awContents) throws Throwable {
return runTestOnUiThreadAndGetResult(new Callable<Float>() {
@Override
@@ -2646,4 +2650,16 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
}
});
}
+
+ /**
+ * Returns page scale multiplied by the screen density.
+ */
+ private float getPixelScaleOnUiThread(final AwContents awContents) throws Throwable {
+ return runTestOnUiThreadAndGetResult(new Callable<Float>() {
+ @Override
+ public Float call() throws Exception {
+ return awContents.getScale();
+ }
+ });
+ }
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/NullContentsClient.java b/android_webview/javatests/src/org/chromium/android_webview/test/NullContentsClient.java
index cc34abf..fc28c95 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/NullContentsClient.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/NullContentsClient.java
@@ -152,4 +152,8 @@ class NullContentsClient extends AwContentsClient {
public void onShowCustomView(View view,
int requestedOrientation, WebChromeClient.CustomViewCallback callback) {
}
+
+ @Override
+ public void onScaleChangedScaled(float oldScale, float newScale) {
+ }
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
index 2f81b57..66b5f62 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/TestAwContentsClient.java
@@ -135,7 +135,7 @@ class TestAwContentsClient extends NullContentsClient {
}
@Override
- public void onScaleChanged(float oldScale, float newScale) {
+ public void onScaleChangedScaled(float oldScale, float newScale) {
mOnScaleChangedHelper.notifyCalled(oldScale, newScale);
}
}
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index 2af6f5e..ef10859 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -14,7 +14,7 @@ namespace android_webview {
AwSettings::AwSettings(JNIEnv* env, jobject obj)
: java_ref_(env, obj),
enable_fixed_layout_(false),
- initial_page_scale_percent_(-1),
+ initial_page_scale_percent_(0),
text_zoom_percent_(100) {
}
@@ -72,7 +72,7 @@ void AwSettings::UpdateEnableFixedLayoutMode() {
void AwSettings::UpdateInitialPageScale() {
AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
if (!rvhe) return;
- if (initial_page_scale_percent_ == -1) {
+ if (initial_page_scale_percent_ == 0) {
rvhe->SetInitialPageScale(-1);
} else {
rvhe->SetInitialPageScale(initial_page_scale_percent_ / 100.0f);