summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-27 20:21:45 +0000
committermnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-02-27 20:21:45 +0000
commit3f93980d6f500aef8e587445db50934e85244774 (patch)
tree3c8e4e7adc1b594bc8aba166da1d702ea2588b85
parentbfb88ec71c6cd955694024e2e57c9dca04ef6cba (diff)
downloadchromium_src-3f93980d6f500aef8e587445db50934e85244774.zip
chromium_src-3f93980d6f500aef8e587445db50934e85244774.tar.gz
chromium_src-3f93980d6f500aef8e587445db50934e85244774.tar.bz2
[Android WebView] Update WebView.EnableFixedLayoutMode in sync with ViewportEnabled
After WebKit http://trac.webkit.org/changeset/143735, WebView.EnableFixedLayoutMode must be updated together with WebSettings.ViewportEnabled. This is a temporary state of affairs, one of these settings will be removed in future. Only Android WebView needs to switch thid mode dynamically, thus the change is implemented in the android_webview layer. BUG=177684 Review URL: https://chromiumcodereview.appspot.com/12317071 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@185016 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.cc6
-rw-r--r--android_webview/browser/renderer_host/aw_render_view_host_ext.h6
-rw-r--r--android_webview/common/render_view_messages.h6
-rw-r--r--android_webview/java/src/org/chromium/android_webview/AwSettings.java17
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java1
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/AwSettingsTest.java16
-rw-r--r--android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java5
-rw-r--r--android_webview/native/aw_settings.cc27
-rw-r--r--android_webview/native/aw_settings.h6
-rw-r--r--android_webview/renderer/aw_render_view_ext.cc8
-rw-r--r--android_webview/renderer/aw_render_view_ext.h2
11 files changed, 88 insertions, 12 deletions
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
index bbb2351..1874a41 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.cc
@@ -63,6 +63,12 @@ const AwHitTestData& AwRenderViewHostExt::GetLastHitTestData() const {
return last_hit_test_data_;
}
+void AwRenderViewHostExt::SetEnableFixedLayoutMode(bool enable) {
+ DCHECK(CalledOnValidThread());
+ Send(new AwViewMsg_SetEnableFixedLayoutMode(web_contents()->GetRoutingID(),
+ enable));
+}
+
void AwRenderViewHostExt::SetTextZoomLevel(double level) {
DCHECK(CalledOnValidThread());
Send(new AwViewMsg_SetTextZoomLevel(web_contents()->GetRoutingID(), level));
diff --git a/android_webview/browser/renderer_host/aw_render_view_host_ext.h b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
index eb4ab1c..ac99d1c 100644
--- a/android_webview/browser/renderer_host/aw_render_view_host_ext.h
+++ b/android_webview/browser/renderer_host/aw_render_view_host_ext.h
@@ -50,6 +50,12 @@ class AwRenderViewHostExt : public content::WebContentsObserver,
// the corresponding public WebView API is as well.
const AwHitTestData& GetLastHitTestData() const;
+ // Set whether fixed layout mode is enabled. Must be updated together
+ // with WebSettings.viewport_enabled.
+ // TODO(mnaganov): Leave only one setting. See the comments on
+ // https://bugs.webkit.org/show_bug.cgi?id=109946
+ void SetEnableFixedLayoutMode(bool enable);
+
// Sets the zoom level for text only. Used in layout modes other than
// Text Autosizing.
void SetTextZoomLevel(double level);
diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h
index f3680e40..dfc48bc 100644
--- a/android_webview/common/render_view_messages.h
+++ b/android_webview/common/render_view_messages.h
@@ -69,6 +69,12 @@ IPC_MESSAGE_ROUTED1(AwViewMsg_SetTextZoomLevel,
// recalculated by WebKit.
IPC_MESSAGE_ROUTED0(AwViewMsg_ResetScrollAndScaleState)
+// Set whether fixed layout mode is enabled. Must be updated together
+// with WebSettings.viewport_enabled. Only WebView switches this mode
+// dynamically, thus there is no support for this in the common code.
+IPC_MESSAGE_ROUTED1(AwViewMsg_SetEnableFixedLayoutMode,
+ bool /* enabled */)
+
//-----------------------------------------------------------------------------
// RenderView messages
// These are messages sent from the renderer to the browser process.
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 426cf13..3ff16e2 100644
--- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java
+++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java
@@ -145,6 +145,21 @@ public class AwSettings {
}
/**
+ * Set whether fixed layout mode is enabled. Must be updated together
+ * with ContentSettings.UseWideViewport, which maps on WebSettings.viewport_enabled.
+ */
+ public void setEnableFixedLayoutMode(final boolean enable) {
+ // There is no need to lock, because the native code doesn't
+ // read anything from the Java side.
+ ThreadUtils.runOnUiThreadBlocking(new Runnable() {
+ @Override
+ public void run() {
+ nativeSetEnableFixedLayoutMode(mNativeAwSettings, enable);
+ }
+ });
+ }
+
+ /**
* Sets the text zoom of the page in percent. This kind of zooming is
* only applicable when Text Autosizing is turned off. Passing -1 will
* reset the zoom to the default value.
@@ -199,5 +214,7 @@ public class AwSettings {
private native void nativeSetWebContents(int nativeAwSettings, int nativeWebContents);
+ private native void nativeSetEnableFixedLayoutMode(int nativeAwSettings, boolean enable);
+
private native void nativeSetTextZoom(int nativeAwSettings, int textZoom);
}
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java
index d3e6c6f..353193b 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwContentsClientOnScaleChangedTest.java
@@ -42,6 +42,7 @@ public class AwContentsClientOnScaleChangedTest extends AndroidWebViewTestBase {
@DisabledTest
public void testScaleUp() throws Throwable {
getContentSettingsOnUiThread(mAwContents).setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
CommonResources.ABOUT_HTML, "text/html", false);
ContentViewCore core = mAwContents.getContentViewCore();
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 3997723..d35509e 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
@@ -896,6 +896,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
super(awContents, contentViewClient);
// Font autosizing doesn't step in for narrow layout widths.
mContentSettings.setUseWideViewPort(true);
+ mAwSettings.setEnableFixedLayoutMode(true);
}
@Override
@@ -1152,7 +1153,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
// "viewport" tag is ignored, and the layout width is set to device width in DIP pixels.
// We specify a very high width value to make sure that it doesn't intersect with
// device screen widths (in DIP pixels).
- class AwSettingsUseWideViewportTestHelper extends AwSettingsTestHelper<Boolean> {
+ class AwSettingsUseWideViewportTestHelper extends AwSettingsWithSettingsTestHelper<Boolean> {
static private final String VIEWPORT_TAG_LAYOUT_WIDTH = "3000";
AwSettingsUseWideViewportTestHelper(
@@ -1179,6 +1180,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
@Override
protected void setCurrentValue(Boolean value) {
mContentSettings.setUseWideViewPort(value);
+ mAwSettings.setEnableFixedLayoutMode(value);
}
@Override
@@ -1210,6 +1212,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
super(awContents, contentViewClient, true);
mWithViewPortTag = withViewPortTag;
mContentSettings.setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
}
@Override
@@ -2284,13 +2287,8 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
}
}
- /*
- * @SmallTest
- * @Feature({"AndroidWebView", "Preferences"})
- * This test is temporary disabled to prevent bot redness after WK patch lands
- * BUG=177684
- */
- @DisabledTest
+ @SmallTest
+ @Feature({"AndroidWebView", "Preferences"})
public void testUseWideViewportWithTwoViews() throws Throwable {
ViewPair views = createViews();
runPerViewSettingsTest(
@@ -2344,6 +2342,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
Math.abs(displayWidth - actualWidth) <= 1);
settings.setUseWideViewPort(true);
+ awContents.getSettings().setEnableFixedLayoutMode(true);
// When UseWideViewPort is on, "meta viewport" tag is used.
// If there is no viewport tag, or width isn't specified,
// then layout width is set to max(980, <device-width-in-DIP-pixels>)
@@ -2405,6 +2404,7 @@ public class AwSettingsTest extends AndroidWebViewTestBase {
assertEquals(1.0f, getScaleOnUiThread(awContents));
settings.setUseWideViewPort(true);
+ awContents.getSettings().setEnableFixedLayoutMode(true);
settings.setLoadWithOverviewMode(true);
awContents.resetScrollAndScaleState();
int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
index 13bbae8..19eb319 100644
--- a/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
+++ b/android_webview/javatests/src/org/chromium/android_webview/test/ContentViewZoomTest.java
@@ -194,6 +194,7 @@ public class ContentViewZoomTest extends AndroidWebViewTestBase {
private void runMagnificationTest(boolean supportZoom) throws Throwable {
getContentSettingsOnUiThread(mAwContents).setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
// It takes some time for scaling to settle down.
@@ -240,6 +241,7 @@ public class ContentViewZoomTest extends AndroidWebViewTestBase {
public void testZoomUsingMultiTouch() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
@@ -263,6 +265,7 @@ public class ContentViewZoomTest extends AndroidWebViewTestBase {
public void testZoomControls() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
@@ -288,6 +291,7 @@ public class ContentViewZoomTest extends AndroidWebViewTestBase {
public void testZoomControlsOnNonZoomableContent() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getNonZoomableHtml(), "text/html", false);
@@ -312,6 +316,7 @@ public class ContentViewZoomTest extends AndroidWebViewTestBase {
public void testZoomControlsOnOrientationChange() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
+ mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
index e3716d8..5e3caeb 100644
--- a/android_webview/native/aw_settings.cc
+++ b/android_webview/native/aw_settings.cc
@@ -13,6 +13,7 @@ namespace android_webview {
AwSettings::AwSettings(JNIEnv* env, jobject obj)
: java_ref_(env, obj),
+ enable_fixed_layout_(false),
text_zoom_percent_(100) {
}
@@ -23,6 +24,20 @@ void AwSettings::Destroy(JNIEnv* env, jobject obj) {
delete this;
}
+AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() {
+ if (!web_contents()) return NULL;
+ AwContents* contents = AwContents::FromWebContents(web_contents());
+ if (!contents) return NULL;
+ return contents->render_view_host_ext();
+}
+
+void AwSettings::SetEnableFixedLayoutMode(
+ JNIEnv* env, jobject obj, jboolean enabled) {
+ if (enable_fixed_layout_ == enabled) return;
+ enable_fixed_layout_ = enabled;
+ UpdateEnableFixedLayoutMode();
+}
+
void AwSettings::SetTextZoom(JNIEnv* env, jobject obj, jint text_zoom_percent) {
if (text_zoom_percent_ == text_zoom_percent) return;
text_zoom_percent_ = text_zoom_percent;
@@ -33,11 +48,14 @@ void AwSettings::SetWebContents(JNIEnv* env, jobject obj, jint web_contents) {
Observe(reinterpret_cast<content::WebContents*>(web_contents));
}
+void AwSettings::UpdateEnableFixedLayoutMode() {
+ AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
+ if (!rvhe) return;
+ rvhe->SetEnableFixedLayoutMode(enable_fixed_layout_);
+}
+
void AwSettings::UpdateTextZoom() {
- if (!web_contents()) return;
- AwContents* contents = AwContents::FromWebContents(web_contents());
- if (!contents) return;
- AwRenderViewHostExt* rvhe = contents->render_view_host_ext();
+ AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
if (!rvhe) return;
if (text_zoom_percent_ > 0) {
rvhe->SetTextZoomLevel(webkit_glue::ZoomFactorToZoomLevel(
@@ -49,6 +67,7 @@ void AwSettings::UpdateTextZoom() {
}
void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) {
+ UpdateEnableFixedLayoutMode();
UpdateTextZoom();
}
diff --git a/android_webview/native/aw_settings.h b/android_webview/native/aw_settings.h
index a0b7730..4f7ec97 100644
--- a/android_webview/native/aw_settings.h
+++ b/android_webview/native/aw_settings.h
@@ -13,6 +13,8 @@
namespace android_webview {
+class AwRenderViewHostExt;
+
class AwSettings : public content::WebContentsObserver {
public:
AwSettings(JNIEnv* env, jobject obj);
@@ -20,10 +22,13 @@ class AwSettings : public content::WebContentsObserver {
// Called from Java.
void Destroy(JNIEnv* env, jobject obj);
+ void SetEnableFixedLayoutMode(JNIEnv* env, jobject obj, jboolean enabled);
void SetTextZoom(JNIEnv* env, jobject obj, jint text_zoom_percent);
void SetWebContents(JNIEnv* env, jobject obj, jint web_contents);
private:
+ AwRenderViewHostExt* GetAwRenderViewHostExt();
+ void UpdateEnableFixedLayoutMode();
void UpdateTextZoom();
// WebContentsObserver overrides:
@@ -31,6 +36,7 @@ class AwSettings : public content::WebContentsObserver {
content::RenderViewHost* render_view_host) OVERRIDE;
JavaObjectWeakGlobalRef java_ref_;
+ bool enable_fixed_layout_;
int text_zoom_percent_;
};
diff --git a/android_webview/renderer/aw_render_view_ext.cc b/android_webview/renderer/aw_render_view_ext.cc
index bcc2c20..b9b82dc 100644
--- a/android_webview/renderer/aw_render_view_ext.cc
+++ b/android_webview/renderer/aw_render_view_ext.cc
@@ -144,6 +144,8 @@ bool AwRenderViewExt::OnMessageReceived(const IPC::Message& message) {
IPC_BEGIN_MESSAGE_MAP(AwRenderViewExt, message)
IPC_MESSAGE_HANDLER(AwViewMsg_DocumentHasImages, OnDocumentHasImagesRequest)
IPC_MESSAGE_HANDLER(AwViewMsg_DoHitTest, OnDoHitTest)
+ IPC_MESSAGE_HANDLER(AwViewMsg_SetEnableFixedLayoutMode,
+ OnSetEnableFixedLayoutMode)
IPC_MESSAGE_HANDLER(AwViewMsg_SetTextZoomLevel, OnSetTextZoomLevel)
IPC_MESSAGE_HANDLER(AwViewMsg_ResetScrollAndScaleState,
OnResetScrollAndScaleState)
@@ -241,6 +243,12 @@ void AwRenderViewExt::OnDoHitTest(int view_x, int view_y) {
Send(new AwViewHostMsg_UpdateHitTestData(routing_id(), data));
}
+void AwRenderViewExt::OnSetEnableFixedLayoutMode(bool enabled) {
+ if (!render_view() || !render_view()->GetWebView())
+ return;
+ render_view()->GetWebView()->enableFixedLayoutMode(enabled);
+}
+
void AwRenderViewExt::OnSetTextZoomLevel(double zoom_level) {
if (!render_view() || !render_view()->GetWebView())
return;
diff --git a/android_webview/renderer/aw_render_view_ext.h b/android_webview/renderer/aw_render_view_ext.h
index 88f9338..3583ac5 100644
--- a/android_webview/renderer/aw_render_view_ext.h
+++ b/android_webview/renderer/aw_render_view_ext.h
@@ -41,6 +41,8 @@ class AwRenderViewExt : public content::RenderViewObserver,
void OnDoHitTest(int view_x, int view_y);
+ void OnSetEnableFixedLayoutMode(bool enabled);
+
void OnSetTextZoomLevel(double zoom_level);
void OnResetScrollAndScaleState();