summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authormnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-04 13:43:12 +0000
committermnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-04 13:43:12 +0000
commit8cea7fe46ffe7012a509906de98fe05e66609c6a (patch)
tree6c7ab435aabd5e675619801e8a2731cf2570fde2 /android_webview
parentcc84098dc1a9b4cddd6752f40d824aefae3aae8a (diff)
downloadchromium_src-8cea7fe46ffe7012a509906de98fe05e66609c6a.zip
chromium_src-8cea7fe46ffe7012a509906de98fe05e66609c6a.tar.gz
chromium_src-8cea7fe46ffe7012a509906de98fe05e66609c6a.tar.bz2
[Android WebView] Make page scale dependent of the screen density
Legacy WebView returns page scale multiplied by the screen density from WebView.getScale and WebViewClient.onScaleChanged. Symmetrically, it expects the scale passed to WebView.setInitialScale also to be multiplied by the screen density value. Review URL: https://chromiumcodereview.appspot.com/12386049 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@185889 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-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);