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/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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |