diff options
author | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 12:02:54 +0000 |
---|---|---|
committer | mnaganov@chromium.org <mnaganov@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-17 12:02:54 +0000 |
commit | 35a258e4bbdd37512c75a3695fe25a3129bbf504 (patch) | |
tree | 9a7e0ae60fab2b241b91ff928a9ad20a895906f2 | |
parent | 6effee11459345a7e1e396fdb5990aded79cba99 (diff) | |
download | chromium_src-35a258e4bbdd37512c75a3695fe25a3129bbf504.zip chromium_src-35a258e4bbdd37512c75a3695fe25a3129bbf504.tar.gz chromium_src-35a258e4bbdd37512c75a3695fe25a3129bbf504.tar.bz2 |
[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
17 files changed, 13 insertions, 115 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 ee1d65e..0955308 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,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)); 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 e8f56f2..df7d1fe 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,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); diff --git a/android_webview/common/render_view_messages.h b/android_webview/common/render_view_messages.h index 2f6db4f..f3c60db 100644 --- a/android_webview/common/render_view_messages.h +++ b/android_webview/common/render_view_messages.h @@ -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, 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 5451611..76b36f6 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwSettings.java +++ b/android_webview/java/src/org/chromium/android_webview/AwSettings.java @@ -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); 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 905c456..eb3a22b 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,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(); 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 4487bbb..871f6ec2 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 @@ -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); @@ -2432,39 +2427,6 @@ public class AwSettingsTest extends AwTestBase { @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 { final TestAwContentsClient contentClient = new TestAwContentsClient(); final AwTestContainerView testContainerView = diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/AwTargetDensityDpiTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/AwTargetDensityDpiTest.java index 4bc3a07..5b9a56d 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/AwTargetDensityDpiTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/AwTargetDensityDpiTest.java @@ -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()); 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 ccfefbb..7b0e769 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,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); diff --git a/android_webview/javatests/src/org/chromium/android_webview/test/WebKitHitTestTest.java b/android_webview/javatests/src/org/chromium/android_webview/test/WebKitHitTestTest.java index 52d2ec0..fc05f64 100644 --- a/android_webview/javatests/src/org/chromium/android_webview/test/WebKitHitTestTest.java +++ b/android_webview/javatests/src/org/chromium/android_webview/test/WebKitHitTestTest.java @@ -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>", diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc index ef10859..8ab91dd 100644 --- a/android_webview/native/aw_settings.cc +++ b/android_webview/native/aw_settings.cc @@ -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(); } diff --git a/android_webview/native/aw_settings.h b/android_webview/native/aw_settings.h index de21024..cc0af1d 100644 --- a/android_webview/native/aw_settings.h +++ b/android_webview/native/aw_settings.h @@ -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_; }; diff --git a/android_webview/renderer/aw_render_view_ext.cc b/android_webview/renderer/aw_render_view_ext.cc index fdcfbee..df24c77 100644 --- a/android_webview/renderer/aw_render_view_ext.cc +++ b/android_webview/renderer/aw_render_view_ext.cc @@ -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; diff --git a/android_webview/renderer/aw_render_view_ext.h b/android_webview/renderer/aw_render_view_ext.h index 26daff8..e94bee6 100644 --- a/android_webview/renderer/aw_render_view_ext.h +++ b/android_webview/renderer/aw_render_view_ext.h @@ -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(); diff --git a/content/browser/android/content_settings.cc b/content/browser/android/content_settings.cc index 3216ce6..fb53d24 100644 --- a/content/browser/android/content_settings.cc +++ b/content/browser/android/content_settings.cc @@ -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); diff --git a/content/public/common/common_param_traits_macros.h b/content/public/common/common_param_traits_macros.h index 85438c4..bf7e9ad 100644 --- a/content/public/common/common_param_traits_macros.h +++ b/content/public/common/common_param_traits_macros.h @@ -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() diff --git a/webkit/glue/webpreferences.cc b/webkit/glue/webpreferences.cc index b07dd0d..30e41d4 100644 --- a/webkit/glue/webpreferences.cc +++ b/webkit/glue/webpreferences.cc @@ -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); diff --git a/webkit/glue/webpreferences.h b/webkit/glue/webpreferences.h index 5811f83..082545f 100644 --- a/webkit/glue/webpreferences.h +++ b/webkit/glue/webpreferences.h @@ -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 |