Commit 35a258e4 authored by mnaganov@chromium.org's avatar mnaganov@chromium.org

[Android WebView] Never turn off viewport and fixed layout

This is to avoid skipping "meta viewport" tag processing.

For controlling wide viewport-related behavior, a corresponding
WebSetting has been added into Blink.

Review URL: https://codereview.chromium.org/14234002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@194576 0039d316-1c4b-4281-b951-d872f2087c98
parent 6effee11
......@@ -63,12 +63,6 @@ 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));
......
......@@ -50,12 +50,6 @@ 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);
......
......@@ -69,12 +69,6 @@ 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 */)
// Sets the initial page scale. This overrides initial scale set by
// the meta viewport tag.
IPC_MESSAGE_ROUTED1(AwViewMsg_SetInitialPageScale,
......
......@@ -149,19 +149,9 @@ public class AwSettings {
}
}
/**
* Set whether fixed layout mode is enabled. Must be updated together
* with ContentSettings.UseWideViewport, which maps on WebSettings.viewport_enabled.
*/
@Deprecated
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);
}
});
// No-op. Will be removed.
}
/**
......@@ -246,8 +236,6 @@ public class AwSettings {
private native void nativeSetWebContents(int nativeAwSettings, int nativeWebContents);
private native void nativeSetEnableFixedLayoutMode(int nativeAwSettings, boolean enable);
private native void nativeSetInitialPageScale(int nativeAwSettings, float scaleInPercent);
private native void nativeSetTextZoom(int nativeAwSettings, int textZoom);
......
......@@ -42,7 +42,6 @@ public class AwContentsClientOnScaleChangedTest extends AwTestBase {
@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();
......
......@@ -938,7 +938,6 @@ public class AwSettingsTest extends AwTestBase {
super(awContents, contentViewClient);
// Font autosizing doesn't step in for narrow layout widths.
mContentSettings.setUseWideViewPort(true);
mAwSettings.setEnableFixedLayoutMode(true);
}
@Override
......@@ -1225,7 +1224,6 @@ public class AwSettingsTest extends AwTestBase {
@Override
protected void setCurrentValue(Boolean value) {
mContentSettings.setUseWideViewPort(value);
mAwSettings.setEnableFixedLayoutMode(value);
}
@Override
......@@ -1257,7 +1255,6 @@ public class AwSettingsTest extends AwTestBase {
super(awContents, contentViewClient, true);
mWithViewPortTag = withViewPortTag;
mContentSettings.setUseWideViewPort(true);
mAwContents.getSettings().setEnableFixedLayoutMode(true);
}
@Override
......@@ -2344,8 +2341,8 @@ public class AwSettingsTest extends AwTestBase {
settings.setJavaScriptEnabled(true);
assertFalse(settings.getUseWideViewPort());
// When UseWideViewPort is off, "meta viewport" tags are ignored,
// and the layout width is set to device width in CSS pixels.
// When UseWideViewPort is off, "width" setting of "meta viewport"
// tags is ignored, and the layout width is set to device width in CSS pixels.
// Thus, all 3 pages will have the same body width.
loadDataSync(awContents, onPageFinishedHelper, pageNoViewport, "text/html", false);
int actualWidth = Integer.parseInt(getTitleOnUiThread(awContents));
......@@ -2363,7 +2360,6 @@ public class AwSettingsTest extends AwTestBase {
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>)
......@@ -2398,7 +2394,6 @@ public class AwSettingsTest extends AwTestBase {
assertEquals(initialScale, getScaleOnUiThread(awContents));
settings.setUseWideViewPort(true);
awContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
simulateDoubleTapCenterOfWebViewOnUiThread(testContainerView);
......@@ -2430,39 +2425,6 @@ public class AwSettingsTest extends AwTestBase {
views.getContents1(), views.getClient1(), true));
}
@SmallTest
@Feature({"AndroidWebView", "Preferences"})
// Verify that LoadViewOverviewMode doesn't affect pages with initial scale
// set in the viewport tag.
public void testLoadWithOverviewModeViewportScale() throws Throwable {
final TestAwContentsClient contentClient = new TestAwContentsClient();
final AwTestContainerView testContainerView =
createAwTestContainerViewOnMainSync(contentClient);
final AwContents awContents = testContainerView.getAwContents();
ContentSettings settings = getContentSettingsOnUiThread(awContents);
CallbackHelper onPageFinishedHelper = contentClient.getOnPageFinishedHelper();
final int pageScale = 2;
final String page = "<html><head>" +
"<meta name='viewport' content='width=3000, initial-scale=" + pageScale +
"' /></head>" +
"<body></body></html>";
assertFalse(settings.getUseWideViewPort());
assertFalse(settings.getLoadWithOverviewMode());
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
assertEquals(1.0f, getScaleOnUiThread(awContents));
settings.setUseWideViewPort(true);
awContents.getSettings().setEnableFixedLayoutMode(true);
settings.setLoadWithOverviewMode(true);
awContents.getSettings().resetScrollAndScaleState();
int onScaleChangedCallCount = contentClient.getOnScaleChangedHelper().getCallCount();
loadDataSync(awContents, onPageFinishedHelper, page, "text/html", false);
contentClient.getOnScaleChangedHelper().waitForCallback(onScaleChangedCallCount);
assertEquals((float)pageScale, getScaleOnUiThread(awContents));
}
@SmallTest
@Feature({"AndroidWebView", "Preferences"})
public void testSetInitialScale() throws Throwable {
......
......@@ -31,9 +31,6 @@ public class AwTargetDensityDpiTest extends AwTestBase {
final String pageDpi100 = String.format(pageTemplate, "100");
settings.setJavaScriptEnabled(true);
// TODO(mnaganov): Should not be needed. See b/8487489.
settings.setUseWideViewPort(true);
awContents.getSettings().setEnableFixedLayoutMode(true);
DeviceDisplayInfo deviceInfo =
DeviceDisplayInfo.create(getInstrumentation().getTargetContext());
......
......@@ -194,7 +194,6 @@ public class ContentViewZoomTest extends AwTestBase {
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.
......@@ -241,7 +240,6 @@ public class ContentViewZoomTest extends AwTestBase {
public void testZoomUsingMultiTouch() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
......@@ -265,7 +263,6 @@ public class ContentViewZoomTest extends AwTestBase {
public void testZoomControls() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
......@@ -291,7 +288,6 @@ public class ContentViewZoomTest extends AwTestBase {
public void testZoomControlsOnNonZoomableContent() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getNonZoomableHtml(), "text/html", false);
......@@ -316,7 +312,6 @@ public class ContentViewZoomTest extends AwTestBase {
public void testZoomControlsOnOrientationChange() throws Throwable {
ContentSettings webSettings = getContentSettingsOnUiThread(mAwContents);
webSettings.setUseWideViewPort(true);
mAwContents.getSettings().setEnableFixedLayoutMode(true);
loadDataSync(mAwContents, mContentsClient.getOnPageFinishedHelper(),
getZoomableHtml(), "text/html", false);
......
......@@ -376,6 +376,7 @@ public class WebKitHitTestTest extends AwTestBase {
String relImageSrc = "/nonexistent3.jpg";
String fullImageSrc = mWebServer.getResponseUrl(relImageSrc);
String html = CommonResources.makeHtmlPageFrom(
"<meta name=\"viewport\" content=\"width=device-width,height=device-height\" />" +
"<style type=\"text/css\">" +
".full_width { width:100%; position:absolute; }" +
"</style>",
......
......@@ -13,7 +13,6 @@ namespace android_webview {
AwSettings::AwSettings(JNIEnv* env, jobject obj)
: java_ref_(env, obj),
enable_fixed_layout_(false),
initial_page_scale_percent_(0),
text_zoom_percent_(100) {
}
......@@ -38,13 +37,6 @@ void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) {
rvhe->ResetScrollAndScaleState();
}
void AwSettings::SetEnableFixedLayoutMode(
JNIEnv* env, jobject obj, jboolean enabled) {
if (enable_fixed_layout_ == enabled) return;
enable_fixed_layout_ = enabled;
UpdateEnableFixedLayoutMode();
}
void AwSettings::SetInitialPageScale(
JNIEnv* env, jobject obj, jfloat page_scale_percent) {
if (initial_page_scale_percent_ == page_scale_percent) return;
......@@ -62,13 +54,6 @@ 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::UpdateInitialPageScale() {
AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
if (!rvhe) return;
......@@ -92,7 +77,6 @@ void AwSettings::UpdateTextZoom() {
}
void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) {
UpdateEnableFixedLayoutMode();
UpdateInitialPageScale();
UpdateTextZoom();
}
......
......@@ -23,14 +23,12 @@ class AwSettings : public content::WebContentsObserver {
// Called from Java.
void Destroy(JNIEnv* env, jobject obj);
void ResetScrollAndScaleState(JNIEnv* env, jobject obj);
void SetEnableFixedLayoutMode(JNIEnv* env, jobject obj, jboolean enabled);
void SetInitialPageScale(JNIEnv* env, jobject obj, jfloat page_scale_percent);
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 UpdateInitialPageScale();
void UpdateTextZoom();
......@@ -39,7 +37,6 @@ class AwSettings : public content::WebContentsObserver {
content::RenderViewHost* render_view_host) OVERRIDE;
JavaObjectWeakGlobalRef java_ref_;
bool enable_fixed_layout_;
float initial_page_scale_percent_;
int text_zoom_percent_;
};
......
......@@ -144,8 +144,6 @@ 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)
......@@ -244,12 +242,6 @@ 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;
......
......@@ -41,8 +41,6 @@ class AwRenderViewExt : public content::RenderViewObserver,
void OnDoHitTest(int view_x, int view_y);
void OnSetEnableFixedLayoutMode(bool enabled);
void OnSetTextZoomLevel(double zoom_level);
void OnResetScrollAndScaleState();
......
......@@ -285,7 +285,7 @@ void ContentSettings::SyncFromNativeImpl() {
env->SetBooleanField(
obj,
field_ids_->use_wide_viewport,
prefs.viewport_enabled);
prefs.use_wide_viewport);
CheckException(env);
env->SetBooleanField(
......@@ -415,9 +415,8 @@ void ContentSettings::SyncToNativeImpl() {
prefs.databases_enabled = env->GetBooleanField(
obj, field_ids_->database_enabled);
prefs.viewport_enabled = env->GetBooleanField(
obj, field_ids_->use_wide_viewport);
prefs.double_tap_to_zoom_enabled = prefs.viewport_enabled;
prefs.double_tap_to_zoom_enabled = prefs.use_wide_viewport =
env->GetBooleanField(obj, field_ids_->use_wide_viewport);
prefs.initialize_at_minimum_page_scale = env->GetBooleanField(
obj, field_ids_->load_with_overview_mode);
......
......@@ -203,6 +203,7 @@ IPC_STRUCT_TRAITS_BEGIN(webkit_glue::WebPreferences)
IPC_STRUCT_TRAITS_MEMBER(user_gesture_required_for_media_playback)
IPC_STRUCT_TRAITS_MEMBER(default_video_poster_url)
IPC_STRUCT_TRAITS_MEMBER(support_deprecated_target_density_dpi)
IPC_STRUCT_TRAITS_MEMBER(use_wide_viewport)
#endif
IPC_STRUCT_TRAITS_END()
......
......@@ -146,7 +146,8 @@ WebPreferences::WebPreferences()
force_enable_zoom(false),
double_tap_to_zoom_enabled(true),
user_gesture_required_for_media_playback(true),
support_deprecated_target_density_dpi(false)
support_deprecated_target_density_dpi(false),
use_wide_viewport(true)
#endif
{
standard_font_family_map[kCommonScript] =
......@@ -473,6 +474,7 @@ void WebPreferences::Apply(WebView* web_view) const {
ASCIIToUTF16(default_video_poster_url.spec()));
settings->setSupportDeprecatedTargetDensityDPI(
support_deprecated_target_density_dpi);
settings->setUseWideViewport(use_wide_viewport);
#endif
WebNetworkStateNotifier::setOnLine(is_online);
......
......@@ -164,6 +164,7 @@ struct WEBKIT_GLUE_EXPORT WebPreferences {
bool user_gesture_required_for_media_playback;
GURL default_video_poster_url;
bool support_deprecated_target_density_dpi;
bool use_wide_viewport;
#endif
// We try to keep the default values the same as the default values in
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment