| Index: android_webview/native/aw_settings.cc
|
| diff --git a/android_webview/native/aw_settings.cc b/android_webview/native/aw_settings.cc
|
| index 8ab91dd12d6b454c93676997d5fabe40ecb78cb5..81ff07414d6e52172e10e820a6dbf981b28c6451 100644
|
| --- a/android_webview/native/aw_settings.cc
|
| +++ b/android_webview/native/aw_settings.cc
|
| @@ -6,6 +6,8 @@
|
|
|
| #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h"
|
| #include "android_webview/native/aw_contents.h"
|
| +#include "content/public/browser/render_view_host.h"
|
| +#include "content/public/browser/web_contents.h"
|
| #include "jni/AwSettings_jni.h"
|
| #include "webkit/glue/webkit_glue.h"
|
|
|
| @@ -50,8 +52,15 @@ void AwSettings::SetTextZoom(JNIEnv* env, jobject obj, jint text_zoom_percent) {
|
| UpdateTextZoom();
|
| }
|
|
|
| -void AwSettings::SetWebContents(JNIEnv* env, jobject obj, jint web_contents) {
|
| - Observe(reinterpret_cast<content::WebContents*>(web_contents));
|
| +void AwSettings::SetWebContents(JNIEnv* env, jobject obj, jint jweb_contents) {
|
| + content::WebContents* web_contents =
|
| + reinterpret_cast<content::WebContents*>(jweb_contents);
|
| + Observe(web_contents);
|
| +
|
| + UpdateRenderViewHostExtSettings();
|
| + if (web_contents->GetRenderViewHost()) {
|
| + UpdateRenderViewHostSettings(web_contents->GetRenderViewHost());
|
| + }
|
| }
|
|
|
| void AwSettings::UpdateInitialPageScale() {
|
| @@ -76,11 +85,37 @@ void AwSettings::UpdateTextZoom() {
|
| }
|
| }
|
|
|
| -void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) {
|
| +void AwSettings::UpdatePreferredSizeMode(
|
| + content::RenderViewHost* render_view_host) {
|
| + render_view_host->EnablePreferredSizeMode();
|
| +}
|
| +
|
| +void AwSettings::UpdateRenderViewHostExtSettings() {
|
| UpdateInitialPageScale();
|
| UpdateTextZoom();
|
| }
|
|
|
| +void AwSettings::UpdateRenderViewHostSettings(
|
| + content::RenderViewHost* render_view_host) {
|
| + UpdatePreferredSizeMode(render_view_host);
|
| +}
|
| +
|
| +void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) {
|
| + // A single WebContents can normally have 0, 1 or 2 RenderViewHost instances
|
| + // associated with it.
|
| + // This is important since there is only one RenderViewHostExt instance per
|
| + // WebContents (and not one RVHExt per RVH, as you might expect) and updating
|
| + // settings via RVHExt only ever updates the 'current' RVH.
|
| + // In android_webview we don't swap out the RVH on cross-site navigations, so
|
| + // we shouldn't have to deal with the multiple RVH per WebContents case. That
|
| + // in turn means that the newly created RVH is always the 'current' RVH
|
| + // (since we only ever go from 0 to 1 RVH instances) and hence the DCHECK.
|
| + DCHECK(web_contents()->GetRenderViewHost() == render_view_host);
|
| +
|
| + UpdateRenderViewHostExtSettings();
|
| + UpdateRenderViewHostSettings(render_view_host);
|
| +}
|
| +
|
| static jint Init(JNIEnv* env,
|
| jobject obj,
|
| jint web_contents) {
|
|
|