Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(417)

Side by Side Diff: android_webview/browser/aw_settings.cc

Issue 2863233002: [WebView] Move files from native to browser (Closed)
Patch Set: Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/browser/aw_settings.h"
6 6
7 #include "android_webview/browser/aw_content_browser_client.h" 7 #include "android_webview/browser/aw_content_browser_client.h"
8 #include "android_webview/browser/aw_contents.h"
8 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h" 9 #include "android_webview/browser/renderer_host/aw_render_view_host_ext.h"
9 #include "android_webview/common/aw_content_client.h" 10 #include "android_webview/common/aw_content_client.h"
10 #include "android_webview/native/aw_contents.h"
11 #include "base/android/jni_android.h" 11 #include "base/android/jni_android.h"
12 #include "base/android/jni_string.h" 12 #include "base/android/jni_string.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/memory/ptr_util.h" 14 #include "base/memory/ptr_util.h"
15 #include "base/supports_user_data.h" 15 #include "base/supports_user_data.h"
16 #include "content/public/browser/navigation_controller.h" 16 #include "content/public/browser/navigation_controller.h"
17 #include "content/public/browser/navigation_entry.h" 17 #include "content/public/browser/navigation_entry.h"
18 #include "content/public/browser/render_view_host.h" 18 #include "content/public/browser/render_view_host.h"
19 #include "content/public/browser/web_contents.h" 19 #include "content/public/browser/web_contents.h"
20 #include "content/public/common/renderer_preferences.h" 20 #include "content/public/common/renderer_preferences.h"
(...skipping 10 matching lines...) Expand all
31 31
32 namespace android_webview { 32 namespace android_webview {
33 33
34 namespace { 34 namespace {
35 35
36 void PopulateFixedRendererPreferences(RendererPreferences* prefs) { 36 void PopulateFixedRendererPreferences(RendererPreferences* prefs) {
37 prefs->tap_multiple_targets_strategy = 37 prefs->tap_multiple_targets_strategy =
38 content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE; 38 content::TAP_MULTIPLE_TARGETS_STRATEGY_NONE;
39 39
40 // TODO(boliu): Deduplicate with chrome/ code. 40 // TODO(boliu): Deduplicate with chrome/ code.
41 CR_DEFINE_STATIC_LOCAL(const gfx::FontRenderParams, params, 41 CR_DEFINE_STATIC_LOCAL(
42 const gfx::FontRenderParams, params,
42 (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), NULL))); 43 (gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), NULL)));
43 prefs->should_antialias_text = params.antialiasing; 44 prefs->should_antialias_text = params.antialiasing;
44 prefs->use_subpixel_positioning = params.subpixel_positioning; 45 prefs->use_subpixel_positioning = params.subpixel_positioning;
45 prefs->hinting = params.hinting; 46 prefs->hinting = params.hinting;
46 prefs->use_autohinter = params.autohinter; 47 prefs->use_autohinter = params.autohinter;
47 prefs->use_bitmaps = params.use_bitmaps; 48 prefs->use_bitmaps = params.use_bitmaps;
48 prefs->subpixel_rendering = params.subpixel_rendering; 49 prefs->subpixel_rendering = params.subpixel_rendering;
49 } 50 }
50 51
51 void PopulateFixedWebPreferences(WebPreferences* web_prefs) { 52 void PopulateFixedWebPreferences(WebPreferences* web_prefs) {
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 100
100 void AwSettings::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) { 101 void AwSettings::Destroy(JNIEnv* env, const JavaParamRef<jobject>& obj) {
101 delete this; 102 delete this;
102 } 103 }
103 104
104 AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) { 105 AwSettings* AwSettings::FromWebContents(content::WebContents* web_contents) {
105 return AwSettingsUserData::GetSettings(web_contents); 106 return AwSettingsUserData::GetSettings(web_contents);
106 } 107 }
107 108
108 AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() { 109 AwRenderViewHostExt* AwSettings::GetAwRenderViewHostExt() {
109 if (!web_contents()) return NULL; 110 if (!web_contents())
111 return NULL;
110 AwContents* contents = AwContents::FromWebContents(web_contents()); 112 AwContents* contents = AwContents::FromWebContents(web_contents());
111 if (!contents) return NULL; 113 if (!contents)
114 return NULL;
112 return contents->render_view_host_ext(); 115 return contents->render_view_host_ext();
113 } 116 }
114 117
115 void AwSettings::ResetScrollAndScaleState(JNIEnv* env, 118 void AwSettings::ResetScrollAndScaleState(JNIEnv* env,
116 const JavaParamRef<jobject>& obj) { 119 const JavaParamRef<jobject>& obj) {
117 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 120 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
118 if (!rvhe) return; 121 if (!rvhe)
122 return;
119 rvhe->ResetScrollAndScaleState(); 123 rvhe->ResetScrollAndScaleState();
120 } 124 }
121 125
122 void AwSettings::UpdateEverything() { 126 void AwSettings::UpdateEverything() {
123 JNIEnv* env = base::android::AttachCurrentThread(); 127 JNIEnv* env = base::android::AttachCurrentThread();
124 CHECK(env); 128 CHECK(env);
125 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env); 129 ScopedJavaLocalRef<jobject> scoped_obj = aw_settings_.get(env);
126 if (scoped_obj.is_null()) 130 if (scoped_obj.is_null())
127 return; 131 return;
128 // Grab the lock and call UpdateEverythingLocked. 132 // Grab the lock and call UpdateEverythingLocked.
129 Java_AwSettings_updateEverything(env, scoped_obj); 133 Java_AwSettings_updateEverything(env, scoped_obj);
130 } 134 }
131 135
132 void AwSettings::UpdateEverythingLocked(JNIEnv* env, 136 void AwSettings::UpdateEverythingLocked(JNIEnv* env,
133 const JavaParamRef<jobject>& obj) { 137 const JavaParamRef<jobject>& obj) {
134 UpdateInitialPageScaleLocked(env, obj); 138 UpdateInitialPageScaleLocked(env, obj);
135 UpdateWebkitPreferencesLocked(env, obj); 139 UpdateWebkitPreferencesLocked(env, obj);
136 UpdateUserAgentLocked(env, obj); 140 UpdateUserAgentLocked(env, obj);
137 ResetScrollAndScaleState(env, obj); 141 ResetScrollAndScaleState(env, obj);
138 UpdateFormDataPreferencesLocked(env, obj); 142 UpdateFormDataPreferencesLocked(env, obj);
139 UpdateRendererPreferencesLocked(env, obj); 143 UpdateRendererPreferencesLocked(env, obj);
140 UpdateOffscreenPreRasterLocked(env, obj); 144 UpdateOffscreenPreRasterLocked(env, obj);
141 } 145 }
142 146
143 void AwSettings::UpdateUserAgentLocked(JNIEnv* env, 147 void AwSettings::UpdateUserAgentLocked(JNIEnv* env,
144 const JavaParamRef<jobject>& obj) { 148 const JavaParamRef<jobject>& obj) {
145 if (!web_contents()) return; 149 if (!web_contents())
150 return;
146 151
147 ScopedJavaLocalRef<jstring> str = 152 ScopedJavaLocalRef<jstring> str =
148 Java_AwSettings_getUserAgentLocked(env, obj); 153 Java_AwSettings_getUserAgentLocked(env, obj);
149 bool ua_overidden = str.obj() != NULL; 154 bool ua_overidden = str.obj() != NULL;
150 155
151 if (ua_overidden) { 156 if (ua_overidden) {
152 std::string override = base::android::ConvertJavaStringToUTF8(str); 157 std::string override = base::android::ConvertJavaStringToUTF8(str);
153 web_contents()->SetUserAgentOverride(override); 158 web_contents()->SetUserAgentOverride(override);
154 } 159 }
155 160
156 const content::NavigationController& controller = 161 const content::NavigationController& controller =
157 web_contents()->GetController(); 162 web_contents()->GetController();
158 for (int i = 0; i < controller.GetEntryCount(); ++i) 163 for (int i = 0; i < controller.GetEntryCount(); ++i)
159 controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden); 164 controller.GetEntryAtIndex(i)->SetIsOverridingUserAgent(ua_overidden);
160 } 165 }
161 166
162 void AwSettings::UpdateWebkitPreferencesLocked( 167 void AwSettings::UpdateWebkitPreferencesLocked(
163 JNIEnv* env, 168 JNIEnv* env,
164 const JavaParamRef<jobject>& obj) { 169 const JavaParamRef<jobject>& obj) {
165 if (!web_contents()) return; 170 if (!web_contents())
171 return;
166 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 172 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt();
167 if (!render_view_host_ext) return; 173 if (!render_view_host_ext)
174 return;
168 175
169 content::RenderViewHost* render_view_host = 176 content::RenderViewHost* render_view_host =
170 web_contents()->GetRenderViewHost(); 177 web_contents()->GetRenderViewHost();
171 if (!render_view_host) return; 178 if (!render_view_host)
179 return;
172 render_view_host->OnWebkitPreferencesChanged(); 180 render_view_host->OnWebkitPreferencesChanged();
173 } 181 }
174 182
175 void AwSettings::UpdateInitialPageScaleLocked( 183 void AwSettings::UpdateInitialPageScaleLocked(
176 JNIEnv* env, 184 JNIEnv* env,
177 const JavaParamRef<jobject>& obj) { 185 const JavaParamRef<jobject>& obj) {
178 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt(); 186 AwRenderViewHostExt* rvhe = GetAwRenderViewHostExt();
179 if (!rvhe) return; 187 if (!rvhe)
188 return;
180 189
181 float initial_page_scale_percent = 190 float initial_page_scale_percent =
182 Java_AwSettings_getInitialPageScalePercentLocked(env, obj); 191 Java_AwSettings_getInitialPageScalePercentLocked(env, obj);
183 if (initial_page_scale_percent == 0) { 192 if (initial_page_scale_percent == 0) {
184 rvhe->SetInitialPageScale(-1); 193 rvhe->SetInitialPageScale(-1);
185 } else { 194 } else {
186 float dip_scale = static_cast<float>( 195 float dip_scale =
187 Java_AwSettings_getDIPScaleLocked(env, obj)); 196 static_cast<float>(Java_AwSettings_getDIPScaleLocked(env, obj));
188 rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f); 197 rvhe->SetInitialPageScale(initial_page_scale_percent / dip_scale / 100.0f);
189 } 198 }
190 } 199 }
191 200
192 void AwSettings::UpdateFormDataPreferencesLocked( 201 void AwSettings::UpdateFormDataPreferencesLocked(
193 JNIEnv* env, 202 JNIEnv* env,
194 const JavaParamRef<jobject>& obj) { 203 const JavaParamRef<jobject>& obj) {
195 if (!web_contents()) return; 204 if (!web_contents())
205 return;
196 AwContents* contents = AwContents::FromWebContents(web_contents()); 206 AwContents* contents = AwContents::FromWebContents(web_contents());
197 if (!contents) return; 207 if (!contents)
208 return;
198 209
199 contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj)); 210 contents->SetSaveFormData(Java_AwSettings_getSaveFormDataLocked(env, obj));
200 } 211 }
201 212
202 void AwSettings::UpdateRendererPreferencesLocked( 213 void AwSettings::UpdateRendererPreferencesLocked(
203 JNIEnv* env, 214 JNIEnv* env,
204 const JavaParamRef<jobject>& obj) { 215 const JavaParamRef<jobject>& obj) {
205 if (!web_contents()) return; 216 if (!web_contents())
217 return;
206 218
207 bool update_prefs = false; 219 bool update_prefs = false;
208 RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs(); 220 RendererPreferences* prefs = web_contents()->GetMutableRendererPrefs();
209 221
210 if (!renderer_prefs_initialized_) { 222 if (!renderer_prefs_initialized_) {
211 PopulateFixedRendererPreferences(prefs); 223 PopulateFixedRendererPreferences(prefs);
212 renderer_prefs_initialized_ = true; 224 renderer_prefs_initialized_ = true;
213 update_prefs = true; 225 update_prefs = true;
214 } 226 }
215 227
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 return; 265 return;
254 // Grab the lock and call PopulateWebPreferencesLocked. 266 // Grab the lock and call PopulateWebPreferencesLocked.
255 Java_AwSettings_populateWebPreferences(env, scoped_obj, 267 Java_AwSettings_populateWebPreferences(env, scoped_obj,
256 reinterpret_cast<jlong>(web_prefs)); 268 reinterpret_cast<jlong>(web_prefs));
257 } 269 }
258 270
259 void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env, 271 void AwSettings::PopulateWebPreferencesLocked(JNIEnv* env,
260 const JavaParamRef<jobject>& obj, 272 const JavaParamRef<jobject>& obj,
261 jlong web_prefs_ptr) { 273 jlong web_prefs_ptr) {
262 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt(); 274 AwRenderViewHostExt* render_view_host_ext = GetAwRenderViewHostExt();
263 if (!render_view_host_ext) return; 275 if (!render_view_host_ext)
276 return;
264 277
265 WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr); 278 WebPreferences* web_prefs = reinterpret_cast<WebPreferences*>(web_prefs_ptr);
266 PopulateFixedWebPreferences(web_prefs); 279 PopulateFixedWebPreferences(web_prefs);
267 280
268 web_prefs->text_autosizing_enabled = 281 web_prefs->text_autosizing_enabled =
269 Java_AwSettings_getTextAutosizingEnabledLocked(env, obj); 282 Java_AwSettings_getTextAutosizingEnabledLocked(env, obj);
270 283
271 int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj); 284 int text_size_percent = Java_AwSettings_getTextSizePercentLocked(env, obj);
272 if (web_prefs->text_autosizing_enabled) { 285 if (web_prefs->text_autosizing_enabled) {
273 web_prefs->font_scale_factor = text_size_percent / 100.0f; 286 web_prefs->font_scale_factor = text_size_percent / 100.0f;
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
369 Java_AwSettings_supportsDoubleTapZoomLocked(env, obj); 382 Java_AwSettings_supportsDoubleTapZoomLocked(env, obj);
370 383
371 web_prefs->initialize_at_minimum_page_scale = 384 web_prefs->initialize_at_minimum_page_scale =
372 Java_AwSettings_getLoadWithOverviewModeLocked(env, obj); 385 Java_AwSettings_getLoadWithOverviewModeLocked(env, obj);
373 386
374 web_prefs->user_gesture_required_for_media_playback = 387 web_prefs->user_gesture_required_for_media_playback =
375 Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj); 388 Java_AwSettings_getMediaPlaybackRequiresUserGestureLocked(env, obj);
376 389
377 ScopedJavaLocalRef<jstring> url = 390 ScopedJavaLocalRef<jstring> url =
378 Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj); 391 Java_AwSettings_getDefaultVideoPosterURLLocked(env, obj);
379 web_prefs->default_video_poster_url = url.obj() ? 392 web_prefs->default_video_poster_url =
380 GURL(ConvertJavaStringToUTF8(url)) : GURL(); 393 url.obj() ? GURL(ConvertJavaStringToUTF8(url)) : GURL();
381 394
382 bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj); 395 bool support_quirks = Java_AwSettings_getSupportLegacyQuirksLocked(env, obj);
383 // Please see the corresponding Blink settings for bug references. 396 // Please see the corresponding Blink settings for bug references.
384 web_prefs->support_deprecated_target_density_dpi = support_quirks; 397 web_prefs->support_deprecated_target_density_dpi = support_quirks;
385 web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks; 398 web_prefs->use_legacy_background_size_shorthand_behavior = support_quirks;
386 web_prefs->viewport_meta_layout_size_quirk = support_quirks; 399 web_prefs->viewport_meta_layout_size_quirk = support_quirks;
387 web_prefs->viewport_meta_merge_content_quirk = support_quirks; 400 web_prefs->viewport_meta_merge_content_quirk = support_quirks;
388 web_prefs->viewport_meta_non_user_scalable_quirk = support_quirks; 401 web_prefs->viewport_meta_non_user_scalable_quirk = support_quirks;
389 web_prefs->viewport_meta_zero_values_quirk = support_quirks; 402 web_prefs->viewport_meta_zero_values_quirk = support_quirks;
390 web_prefs->clobber_user_agent_initial_scale_quirk = support_quirks; 403 web_prefs->clobber_user_agent_initial_scale_quirk = support_quirks;
391 web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks; 404 web_prefs->ignore_main_frame_overflow_hidden_quirk = support_quirks;
392 web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks; 405 web_prefs->report_screen_size_in_physical_pixels_quirk = support_quirks;
393 406
394 web_prefs->resue_global_for_unowned_main_frame = 407 web_prefs->resue_global_for_unowned_main_frame =
395 Java_AwSettings_getAllowEmptyDocumentPersistenceLocked(env, obj); 408 Java_AwSettings_getAllowEmptyDocumentPersistenceLocked(env, obj);
396 409
397 web_prefs->password_echo_enabled = 410 web_prefs->password_echo_enabled =
398 Java_AwSettings_getPasswordEchoEnabledLocked(env, obj); 411 Java_AwSettings_getPasswordEchoEnabledLocked(env, obj);
399 web_prefs->spatial_navigation_enabled = 412 web_prefs->spatial_navigation_enabled =
400 Java_AwSettings_getSpatialNavigationLocked(env, obj); 413 Java_AwSettings_getSpatialNavigationLocked(env, obj);
401 414
402 bool enable_supported_hardware_accelerated_features = 415 bool enable_supported_hardware_accelerated_features =
403 Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked( 416 Java_AwSettings_getEnableSupportedHardwareAcceleratedFeaturesLocked(env,
404 env, obj); 417 obj);
405 418
406 bool accelerated_2d_canvas_enabled_by_switch = 419 bool accelerated_2d_canvas_enabled_by_switch =
407 web_prefs->accelerated_2d_canvas_enabled; 420 web_prefs->accelerated_2d_canvas_enabled;
408 web_prefs->accelerated_2d_canvas_enabled = true; 421 web_prefs->accelerated_2d_canvas_enabled = true;
409 if (!accelerated_2d_canvas_enabled_by_switch || 422 if (!accelerated_2d_canvas_enabled_by_switch ||
410 !enable_supported_hardware_accelerated_features) { 423 !enable_supported_hardware_accelerated_features) {
411 // Any canvas smaller than this will fallback to software. Abusing this 424 // Any canvas smaller than this will fallback to software. Abusing this
412 // slightly to turn canvas off without changing 425 // slightly to turn canvas off without changing
413 // accelerated_2d_canvas_enabled, which also affects compositing mode. 426 // accelerated_2d_canvas_enabled, which also affects compositing mode.
414 // Using 100M instead of max int to avoid overflows. 427 // Using 100M instead of max int to avoid overflows.
(...skipping 27 matching lines...) Expand all
442 455
443 // Keep spellcheck disabled on html elements unless the spellcheck="true" 456 // Keep spellcheck disabled on html elements unless the spellcheck="true"
444 // attribute is explicitly specified. This "opt-in" behavior is for backward 457 // attribute is explicitly specified. This "opt-in" behavior is for backward
445 // consistency in apps that use WebView (see crbug.com/652314). 458 // consistency in apps that use WebView (see crbug.com/652314).
446 web_prefs->spellcheck_enabled_by_default = false; 459 web_prefs->spellcheck_enabled_by_default = false;
447 } 460 }
448 461
449 static jlong Init(JNIEnv* env, 462 static jlong Init(JNIEnv* env,
450 const JavaParamRef<jobject>& obj, 463 const JavaParamRef<jobject>& obj,
451 const JavaParamRef<jobject>& web_contents) { 464 const JavaParamRef<jobject>& web_contents) {
452 content::WebContents* contents = content::WebContents::FromJavaWebContents( 465 content::WebContents* contents =
453 web_contents); 466 content::WebContents::FromJavaWebContents(web_contents);
454 AwSettings* settings = new AwSettings(env, obj, contents); 467 AwSettings* settings = new AwSettings(env, obj, contents);
455 return reinterpret_cast<intptr_t>(settings); 468 return reinterpret_cast<intptr_t>(settings);
456 } 469 }
457 470
458 static ScopedJavaLocalRef<jstring> GetDefaultUserAgent( 471 static ScopedJavaLocalRef<jstring> GetDefaultUserAgent(
459 JNIEnv* env, 472 JNIEnv* env,
460 const JavaParamRef<jclass>& clazz) { 473 const JavaParamRef<jclass>& clazz) {
461 return base::android::ConvertUTF8ToJavaString(env, GetUserAgent()); 474 return base::android::ConvertUTF8ToJavaString(env, GetUserAgent());
462 } 475 }
463 476
464 bool RegisterAwSettings(JNIEnv* env) { 477 bool RegisterAwSettings(JNIEnv* env) {
465 return RegisterNativesImpl(env); 478 return RegisterNativesImpl(env);
466 } 479 }
467 480
468 } // namespace android_webview 481 } // namespace android_webview
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698