OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 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/browser/aw_contents.h" | 5 #include "android_webview/browser/aw_contents.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 #include <utility> | 8 #include <utility> |
9 | 9 |
10 #include "android_webview/browser/aw_autofill_client.h" | 10 #include "android_webview/browser/aw_autofill_client.h" |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
45 #include "base/callback.h" | 45 #include "base/callback.h" |
46 #include "base/command_line.h" | 46 #include "base/command_line.h" |
47 #include "base/location.h" | 47 #include "base/location.h" |
48 #include "base/memory/memory_pressure_listener.h" | 48 #include "base/memory/memory_pressure_listener.h" |
49 #include "base/memory/ptr_util.h" | 49 #include "base/memory/ptr_util.h" |
50 #include "base/pickle.h" | 50 #include "base/pickle.h" |
51 #include "base/single_thread_task_runner.h" | 51 #include "base/single_thread_task_runner.h" |
52 #include "base/strings/string16.h" | 52 #include "base/strings/string16.h" |
53 #include "base/supports_user_data.h" | 53 #include "base/supports_user_data.h" |
54 #include "base/threading/thread_task_runner_handle.h" | 54 #include "base/threading/thread_task_runner_handle.h" |
| 55 #include "components/autofill/android/autofill_provider_android.h" |
55 #include "components/autofill/content/browser/content_autofill_driver_factory.h" | 56 #include "components/autofill/content/browser/content_autofill_driver_factory.h" |
56 #include "components/autofill/core/browser/autofill_manager.h" | 57 #include "components/autofill/core/browser/autofill_manager.h" |
57 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" | 58 #include "components/autofill/core/browser/webdata/autofill_webdata_service.h" |
58 #include "components/navigation_interception/intercept_navigation_delegate.h" | 59 #include "components/navigation_interception/intercept_navigation_delegate.h" |
59 #include "content/public/browser/android/content_view_core.h" | 60 #include "content/public/browser/android/content_view_core.h" |
60 #include "content/public/browser/android/synchronous_compositor.h" | 61 #include "content/public/browser/android/synchronous_compositor.h" |
61 #include "content/public/browser/browser_thread.h" | 62 #include "content/public/browser/browser_thread.h" |
62 #include "content/public/browser/child_process_security_policy.h" | 63 #include "content/public/browser/child_process_security_policy.h" |
63 #include "content/public/browser/favicon_status.h" | 64 #include "content/public/browser/favicon_status.h" |
64 #include "content/public/browser/interstitial_page.h" | 65 #include "content/public/browser/interstitial_page.h" |
(...skipping 177 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
242 AwContentsLifecycleNotifier::OnWebViewCreated(); | 243 AwContentsLifecycleNotifier::OnWebViewCreated(); |
243 } | 244 } |
244 | 245 |
245 void AwContents::SetJavaPeers( | 246 void AwContents::SetJavaPeers( |
246 JNIEnv* env, | 247 JNIEnv* env, |
247 const JavaParamRef<jobject>& obj, | 248 const JavaParamRef<jobject>& obj, |
248 const JavaParamRef<jobject>& aw_contents, | 249 const JavaParamRef<jobject>& aw_contents, |
249 const JavaParamRef<jobject>& web_contents_delegate, | 250 const JavaParamRef<jobject>& web_contents_delegate, |
250 const JavaParamRef<jobject>& contents_client_bridge, | 251 const JavaParamRef<jobject>& contents_client_bridge, |
251 const JavaParamRef<jobject>& io_thread_client, | 252 const JavaParamRef<jobject>& io_thread_client, |
252 const JavaParamRef<jobject>& intercept_navigation_delegate) { | 253 const JavaParamRef<jobject>& intercept_navigation_delegate, |
| 254 const JavaParamRef<jobject>& autofill_provider) { |
253 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 255 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
254 // The |aw_content| param is technically spurious as it duplicates |obj| but | 256 // The |aw_content| param is technically spurious as it duplicates |obj| but |
255 // is passed over anyway to make the binding more explicit. | 257 // is passed over anyway to make the binding more explicit. |
256 java_ref_ = JavaObjectWeakGlobalRef(env, aw_contents); | 258 java_ref_ = JavaObjectWeakGlobalRef(env, aw_contents); |
257 | 259 |
258 web_contents_delegate_.reset( | 260 web_contents_delegate_.reset( |
259 new AwWebContentsDelegate(env, web_contents_delegate)); | 261 new AwWebContentsDelegate(env, web_contents_delegate)); |
260 web_contents_->SetDelegate(web_contents_delegate_.get()); | 262 web_contents_->SetDelegate(web_contents_delegate_.get()); |
261 | 263 |
262 contents_client_bridge_.reset( | 264 contents_client_bridge_.reset( |
263 new AwContentsClientBridge(env, contents_client_bridge)); | 265 new AwContentsClientBridge(env, contents_client_bridge)); |
264 AwContentsClientBridge::Associate(web_contents_.get(), | 266 AwContentsClientBridge::Associate(web_contents_.get(), |
265 contents_client_bridge_.get()); | 267 contents_client_bridge_.get()); |
266 | 268 |
267 AwContentsIoThreadClientImpl::Associate(web_contents_.get(), | 269 AwContentsIoThreadClientImpl::Associate(web_contents_.get(), |
268 io_thread_client); | 270 io_thread_client); |
269 | 271 |
270 InterceptNavigationDelegate::Associate( | 272 InterceptNavigationDelegate::Associate( |
271 web_contents_.get(), base::MakeUnique<InterceptNavigationDelegate>( | 273 web_contents_.get(), base::MakeUnique<InterceptNavigationDelegate>( |
272 env, intercept_navigation_delegate)); | 274 env, intercept_navigation_delegate)); |
273 | 275 |
| 276 if (!autofill_provider.is_null()) { |
| 277 autofill_provider_ = base::MakeUnique<autofill::AutofillProviderAndroid>( |
| 278 autofill_provider, web_contents_.get()); |
| 279 } |
| 280 |
274 // Finally, having setup the associations, release any deferred requests | 281 // Finally, having setup the associations, release any deferred requests |
275 for (content::RenderFrameHost* rfh : web_contents_->GetAllFrames()) { | 282 for (content::RenderFrameHost* rfh : web_contents_->GetAllFrames()) { |
276 int render_process_id = rfh->GetProcess()->GetID(); | 283 int render_process_id = rfh->GetProcess()->GetID(); |
277 int render_frame_id = rfh->GetRoutingID(); | 284 int render_frame_id = rfh->GetRoutingID(); |
278 AwResourceDispatcherHostDelegate::OnIoThreadClientReady(render_process_id, | 285 AwResourceDispatcherHostDelegate::OnIoThreadClientReady(render_process_id, |
279 render_frame_id); | 286 render_frame_id); |
280 } | 287 } |
281 } | 288 } |
282 | 289 |
283 void AwContents::SetSaveFormData(bool enabled) { | 290 void AwContents::SetSaveFormData(bool enabled) { |
284 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 291 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
285 InitAutofillIfNecessary(enabled); | 292 InitAutofillIfNecessary(enabled); |
286 // We need to check for the existence, since autofill_manager_delegate | 293 // We need to check for the existence, since autofill_manager_delegate |
287 // may not be created when the setting is false. | 294 // may not be created when the setting is false. |
288 if (AwAutofillClient::FromWebContents(web_contents_.get())) { | 295 if (AwAutofillClient::FromWebContents(web_contents_.get())) { |
289 AwAutofillClient::FromWebContents(web_contents_.get()) | 296 AwAutofillClient::FromWebContents(web_contents_.get()) |
290 ->SetSaveFormData(enabled); | 297 ->SetSaveFormData(enabled); |
291 } | 298 } |
292 } | 299 } |
293 | 300 |
294 void AwContents::InitAutofillIfNecessary(bool enabled) { | 301 void AwContents::InitAutofillIfNecessary(bool autocomplete_enabled) { |
295 // Do not initialize if the feature is not enabled. | |
296 if (!enabled) | |
297 return; | |
298 // Check if the autofill driver factory already exists. | 302 // Check if the autofill driver factory already exists. |
299 content::WebContents* web_contents = web_contents_.get(); | 303 content::WebContents* web_contents = web_contents_.get(); |
300 if (ContentAutofillDriverFactory::FromWebContents(web_contents)) | 304 if (ContentAutofillDriverFactory::FromWebContents(web_contents)) |
301 return; | 305 return; |
302 | 306 |
| 307 // Check if AutofillProvider is available. |
| 308 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 309 JNIEnv* env = AttachCurrentThread(); |
| 310 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
| 311 if (obj.is_null()) |
| 312 return; |
| 313 |
| 314 // Just return, if the app neither runs on O sdk nor enables autocomplete. |
| 315 if (!autofill_provider_ && !autocomplete_enabled) |
| 316 return; |
| 317 |
303 AwAutofillClient::CreateForWebContents(web_contents); | 318 AwAutofillClient::CreateForWebContents(web_contents); |
304 ContentAutofillDriverFactory::CreateForWebContentsAndDelegate( | 319 ContentAutofillDriverFactory::CreateForWebContentsAndDelegate( |
305 web_contents, AwAutofillClient::FromWebContents(web_contents), | 320 web_contents, AwAutofillClient::FromWebContents(web_contents), |
306 base::android::GetDefaultLocaleString(), | 321 base::android::GetDefaultLocaleString(), |
307 AutofillManager::DISABLE_AUTOFILL_DOWNLOAD_MANAGER); | 322 AutofillManager::DISABLE_AUTOFILL_DOWNLOAD_MANAGER, |
| 323 autofill_provider_.get()); |
308 } | 324 } |
309 | 325 |
310 void AwContents::SetAwAutofillClient(const JavaRef<jobject>& client) { | 326 void AwContents::SetAwAutofillClient(const JavaRef<jobject>& client) { |
311 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 327 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
312 JNIEnv* env = AttachCurrentThread(); | 328 JNIEnv* env = AttachCurrentThread(); |
313 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); | 329 ScopedJavaLocalRef<jobject> obj = java_ref_.get(env); |
314 if (obj.is_null()) | 330 if (obj.is_null()) |
315 return; | 331 return; |
316 Java_AwContents_setAwAutofillClient(env, obj, client); | 332 Java_AwContents_setAwAutofillClient(env, obj, client); |
317 } | 333 } |
(...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1354 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( | 1370 content::ChildProcessSecurityPolicy::GetInstance()->GrantScheme( |
1355 web_contents_->GetRenderProcessHost()->GetID(), url::kFileScheme); | 1371 web_contents_->GetRenderProcessHost()->GetID(), url::kFileScheme); |
1356 } | 1372 } |
1357 | 1373 |
1358 void AwContents::ResumeLoadingCreatedPopupWebContents( | 1374 void AwContents::ResumeLoadingCreatedPopupWebContents( |
1359 JNIEnv* env, | 1375 JNIEnv* env, |
1360 const JavaParamRef<jobject>& obj) { | 1376 const JavaParamRef<jobject>& obj) { |
1361 web_contents_->ResumeLoadingCreatedWebContents(); | 1377 web_contents_->ResumeLoadingCreatedWebContents(); |
1362 } | 1378 } |
1363 | 1379 |
| 1380 jlong AwContents::GetAutofillProvider( |
| 1381 JNIEnv* env, |
| 1382 const base::android::JavaParamRef<jobject>& obj) { |
| 1383 return reinterpret_cast<jlong>(autofill_provider_.get()); |
| 1384 } |
| 1385 |
1364 void SetShouldDownloadFavicons(JNIEnv* env, | 1386 void SetShouldDownloadFavicons(JNIEnv* env, |
1365 const JavaParamRef<jclass>& jclazz) { | 1387 const JavaParamRef<jclass>& jclazz) { |
1366 g_should_download_favicons = true; | 1388 g_should_download_favicons = true; |
1367 } | 1389 } |
1368 | 1390 |
1369 void AwContents::RenderViewHostChanged(content::RenderViewHost* old_host, | 1391 void AwContents::RenderViewHostChanged(content::RenderViewHost* old_host, |
1370 content::RenderViewHost* new_host) { | 1392 content::RenderViewHost* new_host) { |
1371 DCHECK(new_host); | 1393 DCHECK(new_host); |
1372 | 1394 |
1373 int process_id = new_host->GetProcess()->GetID(); | 1395 int process_id = new_host->GetProcess()->GetID(); |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1445 | 1467 |
1446 return Java_AwContents_onRenderProcessGoneDetail(env, obj, child_process_id, | 1468 return Java_AwContents_onRenderProcessGoneDetail(env, obj, child_process_id, |
1447 crashed); | 1469 crashed); |
1448 } | 1470 } |
1449 | 1471 |
1450 void AwContents::RenderProcessReady(content::RenderProcessHost* host) { | 1472 void AwContents::RenderProcessReady(content::RenderProcessHost* host) { |
1451 UpdateRendererPriority(); | 1473 UpdateRendererPriority(); |
1452 } | 1474 } |
1453 | 1475 |
1454 } // namespace android_webview | 1476 } // namespace android_webview |
OLD | NEW |