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 |