| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "android_webview/native/aw_settings.h" | 5 #include "android_webview/native/aw_settings.h" |
| 6 | 6 |
| 7 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" | 7 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" |
| 8 #include "android_webview/common/aw_content_client.h" | 8 #include "android_webview/common/aw_content_client.h" |
| 9 #include "android_webview/native/aw_contents.h" | 9 #include "android_webview/native/aw_contents.h" |
| 10 #include "base/android/jni_android.h" | 10 #include "base/android/jni_android.h" |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 } | 86 } |
| 87 | 87 |
| 88 JNIEnv* env = base::android::AttachCurrentThread(); | 88 JNIEnv* env = base::android::AttachCurrentThread(); |
| 89 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); | 89 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
| 90 jobject obj = scoped_obj.obj(); | 90 jobject obj = scoped_obj.obj(); |
| 91 if (!obj) return; | 91 if (!obj) return; |
| 92 Java_AwSettings_nativeAwSettingsGone(env, obj, | 92 Java_AwSettings_nativeAwSettingsGone(env, obj, |
| 93 reinterpret_cast<intptr_t>(this)); | 93 reinterpret_cast<intptr_t>(this)); |
| 94 } | 94 } |
| 95 | 95 |
| 96 void AwSettings::Destroy(JNIEnv* env, jobject obj) { | 96 void AwSettings::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { |
| 97 delete this; | 97 delete this; |
| 98 } | 98 } |
| 99 | 99 |
| 100 AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { | 100 AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { |
| 101 return AwSettingsUserData::GetSettings(web_contents); | 101 return AwSettingsUserData::GetSettings(web_contents); |
| 102 } | 102 } |
| 103 | 103 |
| 104 AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { | 104 AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { |
| 105 if (!web_contents()) return NULL; | 105 if (!web_contents()) return NULL; |
| 106 AwContents* contents = AwContents::FromWebContents(web_contents()); | 106 AwContents* contents = AwContents::FromWebContents(web_contents()); |
| 107 if (!contents) return NULL; | 107 if (!contents) return NULL; |
| 108 return contents->render_view_host_ext(); | 108 return contents->render_view_host_ext(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 void AwSettings::ResetScrollAndScaleState(JNIEnv* env, jobject obj) { | 111 void AwSettings::ResetScrollAndScaleState(JNIEnv* env, |
| 112 const JavaParamRef<jobject>& obj) { |
| 112 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); | 113 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); |
| 113 if (!rvhe) return; | 114 if (!rvhe) return; |
| 114 rvhe->ResetScrollAndScaleState(); | 115 rvhe->ResetScrollAndScaleState(); |
| 115 } | 116 } |
| 116 | 117 |
| 117 void AwSettings::UpdateEverything() { | 118 void AwSettings::UpdateEverything() { |
| 118 JNIEnv* env = base::android::AttachCurrentThread(); | 119 JNIEnv* env = base::android::AttachCurrentThread(); |
| 119 CHECK(env); | 120 CHECK(env); |
| 120 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); | 121 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
| 121 jobject obj = scoped_obj.obj(); | 122 jobject obj = scoped_obj.obj(); |
| 122 if (!obj) return; | 123 if (!obj) return; |
| 123 // Grab the lock and call UpdateEverythingLocked. | 124 // Grab the lock and call UpdateEverythingLocked. |
| 124 Java_AwSettings_updateEverything(env, obj); | 125 Java_AwSettings_updateEverything(env, obj); |
| 125 } | 126 } |
| 126 | 127 |
| 127 void AwSettings::UpdateEverythingLocked(JNIEnv* env, jobject obj) { | 128 void AwSettings::UpdateEverythingLocked(JNIEnv* env, |
| 129 const JavaParamRef<jobject>& obj) { |
| 128 UpdateInitialPageScaleLocked(env, obj); | 130 UpdateInitialPageScaleLocked(env, obj); |
| 129 UpdateWebkitPreferencesLocked(env, obj); | 131 UpdateWebkitPreferencesLocked(env, obj); |
| 130 UpdateUserAgentLocked(env, obj); | 132 UpdateUserAgentLocked(env, obj); |
| 131 ResetScrollAndScaleState(env, obj); | 133 ResetScrollAndScaleState(env, obj); |
| 132 UpdateFormDataPreferencesLocked(env, obj); | 134 UpdateFormDataPreferencesLocked(env, obj); |
| 133 UpdateRendererPreferencesLocked(env, obj); | 135 UpdateRendererPreferencesLocked(env, obj); |
| 134 UpdateOffscreenPreRasterLocked(env, obj); | 136 UpdateOffscreenPreRasterLocked(env, obj); |
| 135 } | 137 } |
| 136 | 138 |
| 137 void AwSettings::UpdateUserAgentLocked(JNIEnv* env, jobject obj) { | 139 void AwSettings::UpdateUserAgentLocked(JNIEnv* env, |
| 140 const JavaParamRef<jobject>& obj) { |
| 138 if (!web_contents()) return; | 141 if (!web_contents()) return; |
| 139 | 142 |
| 140 ScopedJavaLocalRef<jstring> str = | 143 ScopedJavaLocalRef<jstring> str = |
| 141 Java_AwSettings_getUserAgentLocked(env, obj); | 144 Java_AwSettings_getUserAgentLocked(env, obj); |
| 142 bool ua_overidden = str.obj() != NULL; | 145 bool ua_overidden = str.obj() != NULL; |
| 143 | 146 |
| 144 if (ua_overidden) { | 147 if (ua_overidden) { |
| 145 std::string override = base::android::ConvertJavaStringToUTF8(str); | 148 std::string override = base::android::ConvertJavaStringToUTF8(str); |
| 146 web_contents()->SetUserAgentOverride(override); | 149 web_contents()->SetUserAgentOverride(override); |
| 147 } | 150 } |
| 148 | 151 |
| 149 const content::NavigationController& controller = | 152 const content::NavigationController& controller = |
| 150 web_contents()->GetController(); | 153 web_contents()->GetController(); |
| 151 for (int i = 0; i < controller.GetEntryCount(); ++i) | 154 for (int i = 0; i < controller.GetEntryCount(); ++i) |
| 152 controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); | 155 controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); |
| 153 } | 156 } |
| 154 | 157 |
| 155 void AwSettings::UpdateWebkitPreferencesLocked(JNIEnv* env, jobject obj) { | 158 void AwSettings::UpdateWebkitPreferencesLocked( |
| 159 JNIEnv* env, |
| 160 const JavaParamRef<jobject>& obj) { |
| 156 if (!web_contents()) return; | 161 if (!web_contents()) return; |
| 157 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); | 162 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); |
| 158 if (!render_view_host_ext) return; | 163 if (!render_view_host_ext) return; |
| 159 | 164 |
| 160 content::RenderViewHost* render_view_host = | 165 content::RenderViewHost* render_view_host = |
| 161 web_contents()->GetRenderViewHost(); | 166 web_contents()->GetRenderViewHost(); |
| 162 if (!render_view_host) return; | 167 if (!render_view_host) return; |
| 163 render_view_host->OnWebkitPreferencesChanged(); | 168 render_view_host->OnWebkitPreferencesChanged(); |
| 164 } | 169 } |
| 165 | 170 |
| 166 void AwSettings::UpdateInitialPageScaleLocked(JNIEnv* env, jobject obj) { | 171 void AwSettings::UpdateInitialPageScaleLocked( |
| 172 JNIEnv* env, |
| 173 const JavaParamRef<jobject>& obj) { |
| 167 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); | 174 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); |
| 168 if (!rvhe) return; | 175 if (!rvhe) return; |
| 169 | 176 |
| 170 float initial_page_scale_percent = | 177 float initial_page_scale_percent = |
| 171 Java_AwSettings_getInitialPageScalePercentLocked(env, obj); | 178 Java_AwSettings_getInitialPageScalePercentLocked(env, obj); |
| 172 if (initial_page_scale_percent == 0) { | 179 if (initial_page_scale_percent == 0) { |
| 173 rvhe->SetInitialPageScale(-1); | 180 rvhe->SetInitialPageScale(-1); |
| 174 } else { | 181 } else { |
| 175 float dip_scale = static_cast<float>( | 182 float dip_scale = static_cast<float>( |
| 176 Java_AwSettings_getDIPScaleLocked(env, obj)); | 183 Java_AwSettings_getDIPScaleLocked(env, obj)); |
| 177 rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); | 184 rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); |
| 178 } | 185 } |
| 179 } | 186 } |
| 180 | 187 |
| 181 void AwSettings::UpdateFormDataPreferencesLocked(JNIEnv* env, jobject obj) { | 188 void AwSettings::UpdateFormDataPreferencesLocked( |
| 189 JNIEnv* env, |
| 190 const JavaParamRef<jobject>& obj) { |
| 182 if (!web_contents()) return; | 191 if (!web_contents()) return; |
| 183 AwContents* contents = AwContents::FromWebContents(web_contents()); | 192 AwContents* contents = AwContents::FromWebContents(web_contents()); |
| 184 if (!contents) return; | 193 if (!contents) return; |
| 185 | 194 |
| 186 contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); | 195 contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); |
| 187 } | 196 } |
| 188 | 197 |
| 189 void AwSettings::UpdateRendererPreferencesLocked(JNIEnv* env, jobject obj) { | 198 void AwSettings::UpdateRendererPreferencesLocked( |
| 199 JNIEnv* env, |
| 200 const JavaParamRef<jobject>& obj) { |
| 190 if (!web_contents()) return; | 201 if (!web_contents()) return; |
| 191 | 202 |
| 192 bool update_prefs = false; | 203 bool update_prefs = false; |
| 193 RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); | 204 RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); |
| 194 | 205 |
| 195 if (!renderer_prefs_initialized_) { | 206 if (!renderer_prefs_initialized_) { |
| 196 PopulateFixedRendererPreferences(prefs); | 207 PopulateFixedRendererPreferences(prefs); |
| 197 renderer_prefs_initialized_ = true; | 208 renderer_prefs_initialized_ = true; |
| 198 update_prefs = true; | 209 update_prefs = true; |
| 199 } | 210 } |
| 200 | 211 |
| 201 bool video_overlay = | 212 bool video_overlay = |
| 202 Java_AwSettings_getVideoOverlayForEmbeddedVideoEnabledLocked(env, obj); | 213 Java_AwSettings_getVideoOverlayForEmbeddedVideoEnabledLocked(env, obj); |
| 203 bool force_video_overlay = | 214 bool force_video_overlay = |
| 204 Java_AwSettings_getForceVideoOverlayForTests(env, obj); | 215 Java_AwSettings_getForceVideoOverlayForTests(env, obj); |
| 205 if (video_overlay != | 216 if (video_overlay != |
| 206 prefs->use_video_overlay_for_embedded_encrypted_video || | 217 prefs->use_video_overlay_for_embedded_encrypted_video || |
| 207 force_video_overlay != prefs->use_view_overlay_for_all_video) { | 218 force_video_overlay != prefs->use_view_overlay_for_all_video) { |
| 208 prefs->use_video_overlay_for_embedded_encrypted_video = video_overlay; | 219 prefs->use_video_overlay_for_embedded_encrypted_video = video_overlay; |
| 209 prefs->use_view_overlay_for_all_video = force_video_overlay; | 220 prefs->use_view_overlay_for_all_video = force_video_overlay; |
| 210 update_prefs = true; | 221 update_prefs = true; |
| 211 } | 222 } |
| 212 | 223 |
| 213 content::RenderViewHost* host = web_contents()->GetRenderViewHost(); | 224 content::RenderViewHost* host = web_contents()->GetRenderViewHost(); |
| 214 if (update_prefs && host) | 225 if (update_prefs && host) |
| 215 host->SyncRendererPrefs(); | 226 host->SyncRendererPrefs(); |
| 216 } | 227 } |
| 217 | 228 |
| 218 void AwSettings::UpdateOffscreenPreRasterLocked(JNIEnv* env, jobject obj) { | 229 void AwSettings::UpdateOffscreenPreRasterLocked( |
| 230 JNIEnv* env, |
| 231 const JavaParamRef<jobject>& obj) { |
| 219 AwContents* contents = AwContents::FromWebContents(web_contents()); | 232 AwContents* contents = AwContents::FromWebContents(web_contents()); |
| 220 if (contents) { | 233 if (contents) { |
| 221 contents->SetOffscreenPreRaster( | 234 contents->SetOffscreenPreRaster( |
| 222 Java_AwSettings_getOffscreenPreRasterLocked(env, obj)); | 235 Java_AwSettings_getOffscreenPreRasterLocked(env, obj)); |
| 223 } | 236 } |
| 224 } | 237 } |
| 225 | 238 |
| 226 void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { | 239 void AwSettings::RenderViewCreated(content::RenderViewHost* render_view_host) { |
| 227 // A single WebContents can normally have 0 to many RenderViewHost instances | 240 // A single WebContents can normally have 0 to many RenderViewHost instances |
| 228 // associated with it. | 241 // associated with it. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 246 JNIEnv* env = base::android::AttachCurrentThread(); | 259 JNIEnv* env = base::android::AttachCurrentThread(); |
| 247 CHECK(env); | 260 CHECK(env); |
| 248 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); | 261 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); |
| 249 jobject obj = scoped_obj.obj(); | 262 jobject obj = scoped_obj.obj(); |
| 250 if (!obj) return; | 263 if (!obj) return; |
| 251 // Grab the lock and call PopulateWebPreferencesLocked. | 264 // Grab the lock and call PopulateWebPreferencesLocked. |
| 252 Java_AwSettings_populateWebPreferences( | 265 Java_AwSettings_populateWebPreferences( |
| 253 env, obj, reinterpret_cast<jlong>(web_prefs)); | 266 env, obj, reinterpret_cast<jlong>(web_prefs)); |
| 254 } | 267 } |
| 255 | 268 |
| 256 void AwSettings::PopulateWebPreferencesLocked( | 269 void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env, |
| 257 JNIEnv* env, jobject obj, jlong web_prefs_ptr) { | 270 const JavaParamRef<jobject>& obj, |
| 271 jlong web_prefs_ptr) { |
| 258 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); | 272 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); |
| 259 if (!render_view_host_ext) return; | 273 if (!render_view_host_ext) return; |
| 260 | 274 |
| 261 WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); | 275 WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); |
| 262 PopulateFixedWebPreferences(web_prefs); | 276 PopulateFixedWebPreferences(web_prefs); |
| 263 | 277 |
| 264 web_prefs->text_autosizing_enabled = | 278 web_prefs->text_autosizing_enabled = |
| 265 Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); | 279 Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); |
| 266 | 280 |
| 267 int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); | 281 int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); |
| (...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 JNIEnv* env, | 449 JNIEnv* env, |
| 436 const JavaParamRef<jclass>& clazz) { | 450 const JavaParamRef<jclass>& clazz) { |
| 437 return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()); | 451 return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()); |
| 438 } | 452 } |
| 439 | 453 |
| 440 bool RegisterAwSettings(JNIEnv* env) { | 454 bool RegisterAwSettings(JNIEnv* env) { |
| 441 return RegisterNativesImpl(env); | 455 return RegisterNativesImpl(env); |
| 442 } | 456 } |
| 443 | 457 |
| 444 } // namespace android_webview | 458 } // namespace android_webview |
| OLD | NEW |